一 logstash安装

1.1下载包

[root@node1 ~]# cd /usr/local/src/

[root@node1 src]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.tar.gz

[root@node1 src]# tar -xf logstash-7.4.2.tar.gz

[root@node1 src]# mv logstash-7.4.2 /usr/local/logstash

[root@node1 src]# cd /usr/local/logstash

1.2 查看Java环境

[root@node1 logstash]# java -version

openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK -Bit Server VM (build 25.232-b09, mixed mode)

1.3 启动简单测试

简单的logstash案例

[root@node1 logstash]# ./bin/logstash -e 'input {stdin {} } output { stdout {}}'

启动相对比较慢

启动后,可以在控制台输入,就可以在控制台输出,没有filter的过滤功能

hello
{
"@timestamp" => --30T06::.431Z,
"@version" => "",
"host" => "node1",
"message" => "hello"
}
nihao
{
"@timestamp" => --30T06::.965Z,
"@version" => "",
"host" => "node1",
"message" => "nihao"
}
logstash test
{
"@timestamp" => --30T06::.067Z,
"@version" => "",
"host" => "node1",
"message" => "logstash test"
}

二 logstash的配置

2.1 logstash的配置文件结构

Logstash配置文件针对要添加到事件处理管道中的每种插件类型都有一个单独的部分

# This is a comment. You should use comments to describe
# parts of your configuration.
input { #输入
stdin {...} 标准输入
} filter { #过滤,对数据进行分析,截取等处理
...
} output { #输出
stdout {...} #标准输出
}

每个部分都包含一个或多个插件的配置选项。如果指定多个过滤器,则会按照它们在配置文件中出现的顺序进行应用。

2.2 插件配置

插件的配置包括插件名称,后跟该插件的一组设置。例如,此输入部分配置两个文件输入:

input {
file {
path => "/var/log/messages"
type => "syslog"
} file {
path => "/var/log/apache/access.log"
type => "apache"
}
}

编解码器是用于表示数据的Logstash编解码器的名称。编解码器可用于输入和输出。

输入编解码器提供了一种在数据输入之前解码数据的便捷方法。输出编解码器提供了一种方便的方式,可以在数据离开输出之前对其进行编码。使用输入或输出编解码器,无需在Logstash管道中使用单独的过滤器。

  codec => "json"

2.3 官方的一个配置示例

以下示例说明了如何配置Logstash来过滤事件,处理Apache日志和syslog消息,以及使用条件控制过滤器或输出处理哪些事件

配置过滤器

筛选器是一种在线处理机制,可灵活地对数据进行切片和切块以适应您的需求。让我们看一下一些实际使用的过滤器。以下配置文件设置grokdate过滤器

[root@node1 logstash]# vi logstash-filter.conf

input { stdin { } }

filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
} output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}

运行

[root@node1 logstash]# bin/logstash -f logstash-filter.conf

将以下行粘贴到您的终端中,然后按Enter键,它将由stdin输入处理:

127.0.0.1 - - [/Dec/::: -] "GET /xampp/status.php HTTP/1.1"   "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"

应该看到返回到stdout的内容,如下所示:

127.0.0.1 - - [/Dec/::: -] "GET /xampp/status.php HTTP/1.1"   "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"
{
"clientip" => "127.0.0.1",
"auth" => "-",
"verb" => "GET",
"request" => "/xampp/status.php",
"bytes" => "",
"host" => "node1",
"@timestamp" => --11T08::.000Z,
"message" => "127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] \"GET /xampp/status.php HTTP/1.1\" 200 3891 \"http://cadenza/xampp/navi.php\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"",
"@version" => "",
"response" => "",
"ident" => "-",
"httpversion" => "1.1",
"referrer" => "\"http://cadenza/xampp/navi.php\"",
"agent" => "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0\"",
"timestamp" => "11/Dec/2013:00:01:45 -0800"
}

如上所见,Logstash(在grok过滤器的帮助下)能够解析日志行(碰巧是Apache“组合日志”格式),并将其分解为许多不同的信息位。一旦开始查询和分析我们的日志数据,这将非常有用。例如,将能够轻松地运行有关HTTP响应代码,IP地址,引荐来源网址等的报告。Logstash包含许多现成的grok模式,因此如果您需要解析一种通用的日志格式,很可能有人已经完成了工作。

2.4 处理Apache日志

创建一个logstash-apache.conf文件
[root@node1 logstash]# vi logstash-apache.conf
input {
file {
path => "/tmp/access_log"
start_position => "beginning"
}
} filter {
if [path] =~ "access" {
mutate { replace => { "type" => "apache_access" } }
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
} output {
elasticsearch {
hosts => ["localhost:9200"]
}
stdout { codec => rubydebug }
}

运行

[root@node1 logstash]# bin/logstash -f logstash-apache.conf

[--30T02::,][INFO ][filewatch.observingtail  ][main] START, creating Discoverer, Watch with file and sincedb collections
[--30T02::,][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>}

然后,使用以下日志条目(或使用您自己的Web服务器中的某些日志)输入

71.141.244.242 - kurt [/May/::: -] "GET /admin HTTP/1.1"   "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
134.39.72.245 - - [/May/::: -] "GET /favicon.ico HTTP/1.1" "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)"
98.83.179.51 - - [/May/::: -] "GET /css/main.css HTTP/1.1" "http://www.safesand.com/information.htm" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"

输入

[root@node1 ~]# echo '71.141.244.242 - kurt [18/May/2011:01:48:10 -0700] "GET /admin HTTP/1.1" 301 566 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"'  >> /tmp/access_log

[root@node1 ~]# echo '134.39.72.245 - - [18/May/2011:12:40:18 -0700] "GET /favicon.ico HTTP/1.1" 200 1189 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)"' >> /tmp/access_log

[root@node1 ~]# echo '98.83.179.51 - - [18/May/2011:19:35:08 -0700] "GET /css/main.css HTTP/1.1" 200 1837 "http://www.safesand.com/information.htm" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"' /tmp/access_log
98.83.179.51 - - [18/May/2011:19:35:08 -0700] "GET /css/main.css HTTP/1.1" 200 1837 "http://www.safesand.com/information.htm" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1" /tmp/access_log

查看

查看刚刚的数据

查看原数据

{
"_index": "logstash",
"_type": "_doc",
"_id": "WK08u24BcnOPLK2r2Wfj",
"_version": ,
"_score": ,
"_source": {
"request": "/favicon.ico",
"agent": ""Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.; .NET CLR 3.0.4506.2152; .NET CLR 3.5.; InfoPath.; .NET4.0C; .NET4.0E)"",
"ident": "-",
"clientip": "134.39.72.245",
"verb": "GET",
"type": "apache_access",
"path": "/tmp/access_log",
"@version": "",
"message": "134.39.72.245 - - [18/May/2011:12:40:18 -0700] "GET /favicon.ico HTTP/1.1" 200 1189 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.; .NET CLR 3.0.4506.2152; .NET CLR 3.5.; InfoPath.; .NET4.0C; .NET4.0E)"",
"timestamp": "18/May/2011:12:40:18 -0700",
"bytes": "",
"referrer": ""-"",
"auth": "-",
"httpversion": "1.1",
"response": "",
"host": "node1",
"@timestamp": "2011-05-18T19:40:18.000Z"
}
}

对于官方的示例还有很多,后面在慢慢实验

三 读取自定义结构的日志

前面我们通过 Filebeat读取了 nginx的日志,如果是自定义结构的日志,就需要读取处理后才能使用,所以,这个时候就需要使用 Logstash了,因为 Logstash有着强大的处理能力,可以应对各种各样的场景。

3.1 日志结构

--15 21:: ERROR|读取数据出错|参数:id=

可以看到,日志中的内容是使用”进行分割的,使用,我们在处理的时候,也需要对数据做分割处理。

3.2 编写配置文件切割日志

[root@node1 logstash]# vi  pipeline.conf

input {
file {
path => "/tmp/access_log"
start_position => "beginning"
}
} filter {
mutate {
split => {"message" => "|"}
}
} output {
stdout { codec => rubydebug }
}

启动测试

[root@node1 logstash]# bin/logstash -f pipeline.conf

[--30T03::,][INFO ][filewatch.observingtail  ][main] START, creating Discoverer, Watch with file and sincedb collections
[--30T03::,][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>}
/usr/local/logstash/vendor/bundle/jruby/2.5./gems/awesome_print-1.7./lib/awesome_print/formatters/base_formatter.rb:: warning: constant ::Fixnum is deprecated

输入日志

[root@node1 ~]# echo "2019-03-15 21:21:21 ERROR|读取数据出错|参数:id=1002"  >>/tmp/access_log

输出显示

{
"message" => [
[] "2019-03-15 21:21:21 ERROR",
[] "读取数据出错",
[] "参数:id=1002"
],
"@version" => "",
"host" => "node1",
"@timestamp" => --30T08::.666Z,
"path" => "/tmp/access_log"
}

3.3 在把分割的日志做一个标记

[root@node1 logstash]# vi pipeline.conf

input {
file {
path => "/tmp/access_log"
start_position => "beginning"
}
} filter {
mutate {
split => {"message" => "|"}
}
mutate {
add_field =>{
"Time" => "%{message[0]}"
"result" => "%{message[1]}"
"userID" => "%{message[2]}"
}
}
} output {
stdout { codec => rubydebug }
}

[root@node1 logstash]# bin/logstash -f pipeline.conf

这种个配置会出现错误,而且不能出现添加的filed

[--30T04::,][WARN ][logstash.filters.mutate  ][main] Exception caught while applying mutate filter {:exception=>"Invalid FieldReference: `message[0]`"}

修改pipelie.conf如下

input {
file {
path => "/tmp/access_log"
start_position => "beginning"
}
} filter {
mutate {
split => {"message" => "|"}
}
mutate {
add_field => {
"Date" => "%{[message][0]}"
"Leverl" => "%{[message][1]}"
"result" => "%{[message][2]}"
"userID" => "%{[message][3]}"
}
}
} output {
stdout { codec => rubydebug }
}

运行

[root@node1 logstash]# bin/logstash -f pipeline.conf

输入日志

[root@node1 ~]# echo "2019-03-15 21:21:21| ERROR|读取数据出错|参数:id=1002"  >>/tmp/access_log

输出台结果

{
"path" => "/tmp/access_log",
"@version" => "",
"Date" => "2019-03-15 21:21:21",
"host" => "node1",
"message" => [
[] "2019-03-15 21:21:21",
[] " ERROR",
[] "读取数据出错",
[] "参数:id=1002"
],
"@timestamp" => --30T09::.569Z,
"Leverl" => " ERROR",
"result" => "读取数据出错",
"userID" => "参数:id=1002"
}

logstash的实验先做到这里,后面在综合做一个实验

ELK学习实验012:Logstash的安装和使用的更多相关文章

  1. ELK学习笔记(一)安装Elasticsearch、Kibana、Logstash和X-Pack

    最近在学习ELK的时候踩了不少的坑,特此写个笔记记录下学习过程. 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因 ...

  2. ELK学习笔记之logstash安装logstash-filter-multiline(在线离线安装)

    0x00 概述 ELK-logstash在搬运日志的时候会出现多行日志,普通的搬运会造成保存到ES中单条单条,很丑,而且不方便读取,logstash-filter-multiline可以解决该问题 g ...

  3. ELK学习笔记之Logstash详解

    0x00 Logstash概述 官方介绍:Logstash is an open source data collection engine with real-time pipelining cap ...

  4. ELK学习实验014:Nginx日志JSON格式收集

    1 Kibana的显示配置 https://demo.elastic.co/app/kibana#/dashboard/welcome_dashboard 环境先处理干净 安装nginx和httpd- ...

  5. ELK学习实验002:Elasticsearch介绍及单机安装

    一 简介 ElasticSearch是一个基于Luncene的搜索服务器.它提供了一个分布式多用户能力全文搜索引擎,基于RESTful web接口,ElsticSearch使用Java开发的,并作为A ...

  6. ELK 学习笔记之 Logstash安装

    Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...

  7. ELK学习实验011:Logstash工作原理

    Logstash事件处理管道包括三个阶段:输入→过滤器→输出.输入会生成事件,过滤器会对其进行修改,输出会将它们发送到其他地方.输入和输出支持编解码器,使您可以在数据进入或退出管道时对其进行编码或解码 ...

  8. ELK学习实验003:Elasticsearch 集群安装

    前面已经介绍了Elasticsearch这个工具,并对单机安装做了简单介绍,现在使用三台机器做一个elasticsearch集群 一 环境准备 1.1 机器准备 1.2 同步时间 [root@node ...

  9. ELK学习实验010:Logstash简介

    Logstash是具有实时流水线功能的开源数据收集引擎.Logstash可以动态统一来自不同来源的数据,并将数据规范化为您选择的目标.清除所有数据并使其民主化,以用于各种高级下游分析和可视化用例. 虽 ...

随机推荐

  1. ros自定义消息

    ros自定义消息可以根据自身项目需求定义和封装想要的数据类型和数据结构.具体可以参考维基百科关于ros自定义消息部分 这里我只是记录自定义消息的要点部分: 1.首先要在工作空间下功能包中创建一个msg ...

  2. 从 Spark 到 Kubernetes — MaxCompute 的云原生开源生态实践之路

    2019年5月14日,喜提浙江省科学技术进步一等奖的 MaxCompute 是阿里巴巴自研的 EB 级大数据计算平台.该平台依托阿里云飞天基础架构,是阿里巴巴在10年前做飞天系统的三大件之分布式计算部 ...

  3. HZOJ 砍树

    考试时打了个暴力T40,正解是整除分块???完全没听过……而且这题居然还有人A了…… 整除分块 暴力就不说了,直接上正解: 将d除过去,右边向下取整(显然不能向上取整啊,会超k的)这个不用处理,整除就 ...

  4. H3C 命令行历史记录功能

  5. 弹性FLEX布局

    页面布局一直都是web应用样式设计的重点 我们传统的布局方式都是基于盒模型的 利用display.position.float来布局有一定局限性 比如说实现自适应垂直居中 随着响应式布局的流行,CSS ...

  6. ubuntu netstat 查看端口占用情况

    netstat 用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships ...

  7. phpstorm 里能做git的命令行操作吗?

    在VCS菜单下面有 GIT -> Branches 然后会弹出branch菜单,后面怎么操作应该不需要解释吧,所有的branch都列出来自己选 在Tools菜单下面有Open Terminal. ...

  8. 精选Pycharm里6大神器插件

    http://www.sohu.com/a/306693644_752099 上次写了一篇关于Sublime的精品插件推荐,有小伙伴提议再来一篇Pycharm的主题.相比Sublime,Pycharm ...

  9. Python--day66--模板语言之fitler回顾

  10. H3C OSPF基本配置命令