filebeat+logstash+elasticsearch+kibana多来源日志收集平台
ELK使用 - 多个日志源filebeat配置详解
Logstash依赖于JVM,在启动的时候大家也很容易就能发现它的启动速度很慢很慢,但logstash的好处是支持很多类型的插件,支持对数据做预处理。而filebeat很轻量,前身叫logstash-forward,是使用Golang开发的,所以不需要有java依赖,也很轻量,占用资源很小,但功能也很少,不支持对数据做预处理。因此一般都是将filebeat+logstash组合使用,在每个节点部署filbeat,然后将监控的日志推送到数据缓冲层或直接推送到logstash集群内,配合redis或kafka做数据缓冲层来使用。
本篇就介绍如何将filebeat和logstash同时使用,并且介绍如何同时监控多个文件,将多个文件导出至不同的索引内。
filebeat安装配置和logstash配置
1、下载安装包,确保和logstash/elasticsearch使用统一版本
下载地址:https://www.elastic.co/cn/downloads/past-releases#filebeat
本文下载的为:filebeat-7.12.0-linux-x86_64.tar.gz
将该压缩包上传至nginx虚拟机内,然后解压
[root@localhost filebeat]# pwd /usr/local/filebeat [root@localhost filebeat]# ll -rw-r--r-- 1 root root 32831398 Jun 2 11:32 filebeat-7.12.0-linux-x86_64.tar.gz
[root@localhost filebeat]# tar -xvf filebeat-7.12.0-linux-x86_64.tar.gz [root@localhost filebeat]# ll total 32064 drwxr-xr-x 7 root root 333 Jun 2 18:12 filebeat-7.12.0-linux-x86_64 -rw-r--r-- 1 root root 32831398 Jun 2 11:32 filebeat-7.12.0-linux-x86_64.tar.gz [root@localhost filebeat]#
2、配置filebeat
使用filebeat采集多个文件并通过logstash写入es内,为什么要使用一个配置文件监控多个文件? 因为filebeat 只能起一个进程。
同时监控nginx的access日志和error日志,并且分别新增一个字段'log_source'(自定义的)来做区分,输出到logstash的5044端口,由logstash消费:
[root@localhost filebeat]# cd filebeat-7.12.0-linux-x86_64/ [root@localhost filebeat-7.12.0-linux-x86_64]# cat filebeat_test.yml filebeat.inputs: - type: log paths: - /server/nginx/logs/access.log fields: log_source: nginx-access - type: log paths: - /server/nginx/logs/error.log fields: log_source: nginx-error output.logstash: enabled: true hosts: ["10.10.10.1:5044"] [root@localhost filebeat-7.12.0-linux-x86_64]#
3、logstash配置
修改logstash配置,input的部分要与filbeat中的端口一致,filter的部分针对不同的日志内容做不同的预处理或解析(本文未处理),output中对不同的日志输出到不同的es的索引中。这里的log_source就是在上面的filebeat中新增的自定义字段:
[root@skywalking logstash-7.12.0]# cat config/test.conf input{ tcp { mode => "server" host => "0.0.0.0" port => 9061 codec => json_lines } } input{ beats { host => "0.0.0.0" port => 5044 client_inactivity_timeout => 36000 } } output{ if "nginx-access" in [fields][log_source] { elasticsearch{ hosts=>["10.10.10.1:9200"] index => "nginx-access-88--%{+YYYY.MM.dd}" } } if "nginx-error" in [fields][log_source] { elasticsearch{ hosts=>["10.10.10.1:9200"] index => "nginx-error-88--%{+YYYY.MM.dd}" } } else { elasticsearch{ hosts=>["10.10.10.1:9200"] index => "springboot-%{project}-%{+YYYY.MM.dd}" } stdout{codec => rubydebug} } } [root@skywalking logstash-7.12.0]#
4、启动Filebeat和Logstash
先启动logstash,不然的话filebeat会找不到logstash的5044端口:
[root@skywalking logstash-7.12.0]# cat start.sh #!/bin/bash nohup /usr/local/skywalking/logstash-7.12.0/bin/logstash -f /usr/local/skywalking/logstash-7.12.0/config/test.conf &>/dev/null & [root@skywalking logstash-7.12.0]#
[root@localhost filebeat-7.12.0-linux-x86_64]# cat startfilebeat.sh nohup /usr/local/filebeat/filebeat-7.12.0-linux-x86_64/filebeat -e -c /usr/local/filebeat/filebeat-7.12.0-linux-x86_64/filebeat_test.yml >> /usr/local/filebeat/filebeat-7.12.0-linux-x86_64/logs/startServer.log 2>&1 & [root@localhost filebeat-7.12.0-linux-x86_64]#
如果想快速启动可以直接使用命令:
启动logstash: bin/logstash -f config/test.conf 启动filebeat: ./filebeat -e -c filebeat_test.yml
5、验证数据
在Kibana中可以看到两个索引已经建出来了并同时写入了不同的日志内容:
补充:
自动重载配置文件
为了可以自动检测配置文件的变动和自动重新加载配置文件,需要在启动的时候使用以下命令:
./bin/lagstash -f configfile.conf --config.reload.automatic
默认,检测配置文件的间隔时间是3秒,可以通过以下命令改变
--config.reload.interval <second>
如果已经运行了没有提供自动重启的logstash,可以发送一个挂起命令给logstash重新加载配置文件:
kill -1 <pid>
配置文件自动重载工作原理
检测到配置文件变化
通过停止所有输入停止当前pipline
用新的配置创建一个新的管道
检查配置文件语法是否正确
检查所有的输入和输出是否可以初始化
检查成功使用新的pipeline替换当前的pipeline,
检查失败,使用旧的继续工作.
在重载过程中,jvm没有重启.
注意事项
stdin输入插件不支持自动重启.
syslog作为输入源,当重载配置文件时,会崩溃.请看: https://github.com/logstash-plugins/logstash-input-syslog/issues/40