Elasticsearch与Logstash的日志采集(应用模块、按格式输出)
Logstash 是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用。此篇博客是在前一篇博客搭好集群和安装好head 插件的基础上做的具体请看Elasticsearch单机存储和多节点分布式存储配置一、数据采集[root@server1 ~]# cd elk/[root@server1 elk]# rpm -ivh logstash-2.3.3-1.n...
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
日志按格式输出
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)