Logstash 是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用。

此篇博客是在前一篇博客搭好集群和安装好head 插件的基础上做的

具体请看Elasticsearch单机存储和多节点分布式存储配置

一、数据采集

[root@server1 ~]# cd elk/
[root@server1 elk]# rpm -ivh logstash-2.3.3-1.noarch.rpm 

终端录入,终端输出

$ cd /opt/logstash/bin
[root@server1 bin]# /opt/logstash/bin/logstash -e 'input { stdin {}} output { stdout {} }'

这里写图片描述
conc格式转换,控制输出:在终端上输出

[root@server1 bin]# /opt/logstash/bin/logstash -e 'input { stdin {}} output { stdout { codec => rubydebug } }'

这里写图片描述

二、数据采集的两种方式

1、直接在终端操作输出
指定主机索引,在终端上输出

[root@server1 bin]# /opt/logstash/bin/logstash -e 'input { stdin {}} output { elasticsearch { hosts => ["172.25.10.1"] index => "logstash-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } }'  

这里写图片描述
浏览器访问172.25.10.1:9200/_plugin/head/
这里写图片描述
2、 将操作内容编辑进文件,通过文件来输出

编辑es.conf文件
[root@server1 bin]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# vim es.conf
input {
        stdin {}
}

output {            ##调用2个模块,2个地方输出
        elasticsearch {
                hosts => ["172.25.10.1"]
                index => "logstash-%{+YYYY.MM.dd}"
        }

        stdout {
                codec => rubydebug
        }
}
执行
[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

这里写图片描述
这里写图片描述

三、file模块

1、根据上一个实验,我们调用增加一个file模块,使3个地方输出

编辑es.conf文件
[root@server1 bin]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# vim es.conf
input {
        stdin {}
}

output {                ##调用3个模块,3个地方输出
        elasticsearch {
                hosts => ["172.25.10.1"]
                index => "logstash-%{+YYYY.MM.dd}"
        }

        stdout {
                codec => rubydebug
        }

        file {
                path => "/tmp/testfile"
                codec => line { format => "custom format: %{message}"}
        }
}
执行
[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 
到指定文件中查看
[root@server1 conf.d]# cd /tmp/
[root@server1 tmp]# cat testfile 

这里写图片描述
文件中查看
这里写图片描述
网页中查看
这里写图片描述
2、日志权限

查看elasticsearch权限
[root@server1 tmp]# cat /etc/passwd
elasticsearch:x:498:499:elasticsearch user:/home/elasticsearch:/sbin/nologin
logstash:x:497:498:logstash:/opt/logstash:/sbin/nologin
查看日志权限
[root@server1 tmp]# ll -d /var/log/
drwxr-xr-x. 6 root root 4096 Aug 25 11:21 /var/log/
[root@server1 tmp]# ll -d /var/log/messages 
-rw------- 1 root root 64632 Aug 25 11:21 /var/log/messages

3、sincedb

编辑message.conf文件
[root@server1 tmp]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# cp es.conf message.conf
[root@server1 conf.d]# vim message.conf 
input {
        file {
                path => "/var/log/messages"
                start_position => "beginning"    ##从文件的开头开始
        }
}

output {
        elasticsearch {
                hosts => ["172.25.10.1"]
                index => "logstash-%{+YYYY.MM.dd}"
        }

        stdout {
                codec => rubydebug
        }
}
执行
[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

这里写图片描述
打开另一个Shell连接server1添加字符
这里写图片描述
在网页中查看
这里写图片描述
server1

shell1:
执行
[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf
shell2:
[root@server1 ~]# logger V1
在shell1中查看

shell1执行命令后在shell2输入字符
这里写图片描述
shell执行的命令中自动出现以下内容
这里写图片描述
查看隐藏文件sincedb,前面是文件inode id,与/var/log/messages的inode id相同。当再次添加字符后文件变更:后面的数字改变。这是避免文件的重复加载
这里写图片描述
再次执行命令

shell1:
[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf

shell2中添加字符
这里写图片描述
Shell1中自动出现:
这里写图片描述
再次查看隐藏文件:后面的数字改变
这里写图片描述

四、syslog模块

日志传送
server1(master端)为日志收集服务器,通过配置server1和server2开启514端口 ,将server2和日志信息往server1终端输出
server1
shell1:

编辑message.conf文件
[root@server1 ~]# vim /etc/logstash/conf.d/message.conf 
input {
        syslog {
                port => 514   ##开启514端口
        }
}

output {
        elasticsearch {
                hosts => ["172.25.10.1"]
                index => "logstash-%{+YYYY.MM.dd}"
        }

        stdout {
                codec => rubydebug
        }
}
运行
[root@server1 ~]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

shell2:

[root@server1 ~]# netstat -antlp |grep :514
tcp        0      0 :::514                      :::*                        LISTEN      1482/java

server2中修改日志设置
把日志通过514端口往server1终端输出

[root@server2 ~]# vim /etc/rsyslog.conf     
*.*     @@172.25.10.1:514
[root@server2 ~]# /etc/init.d/rsyslog restart

server1:
shell1中接收到server2的日志
这里写图片描述

五、匹配日志

通过filter进行过滤,符合类型才做多行处理

查看想要过滤的日志
[root@server1 conf.d]# cd /var/log/elasticsearch/
[root@server1 elasticsearch]# cat my-es.log 

这里写图片描述

编辑文件
[root@server1 elasticsearch]# vim /etc/logstash/conf.d/message.conf 
input {
        file {
                path => "/var/log/elasticsearch/my-es.log"
                start_position => "beginning"
        }
}

filter {
  multiline {
#    type => "type"
    pattern => "^\["
    negate => true 
    what => "previous"   ##向上匹配
  } 
}

output {
        elasticsearch {
                hosts => ["172.25.10.1"]
                index => "es-%{+YYYY.MM.dd}"
        }

        stdout {
                codec => rubydebug
        }
}
执行
[root@server1 elasticsearch]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

这里写图片描述

六、对APACHE数据的分析和展示

安装Httpd,打开服务

[root@server1 ~]# yum install -y httpd
[root@server1 ~]# /etc/init.d/httpd start

APACHE的日志

[root@server1 ~]# cd /var/log/httpd/
[root@server1 httpd]# ll
total 8
-rw-r--r-- 1 root root 464 Aug 25 14:25 access_log
-rw-r--r-- 1 root root 665 Aug 25 14:25 error_log

编辑test.conf文件

[root@server1 ~]# cd /etc/logstash/conf.d
[root@server1 conf.d]# vim test.conf
input {
        stdin {}
}
filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

output {
        stdout {
                codec => rubydebug
        }
}
执行
[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 
执行后粘贴以下内容至终端查看
55.3.244.1 GET /index.html 15824 0.043

这里写图片描述

查看日志格式

[root@server1 ~]# vim /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns   ##过滤APACHE
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf  ##过滤access_log

这里写图片描述
这里写图片描述
查看上面的日志格式信息编辑message.conf文件

[root@server1 conf.d]# vim message.conf 
input {
        file {
                path => ["/var/log/httpd/access_log","/var/log/httpd/error_log"]
                start_position => "beginning"
        }
}

filter {

        grok {
            match => { "message" => "%{COMBINEDAPACHELOG}" }
        }
}

output {
        elasticsearch {
                hosts => ["172.25.10.1"]
                index => "apache-%{+YYYY.MM.dd}"
        }

        stdout {
                codec => rubydebug
        }
}
执行
[root@server1 ~]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

日志按格式输出
这里写图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐