ELK系列(七)、Filebeat+Logstash采集多个日志文件并写入不同的ES索引中

Logstash依赖于JVM,在启动的时候大家也很容易就能发现它的启动速度很慢很慢,但logstash的好处是支持很多类型的插件,支持对数据做预处理。而filebeat很轻量,前身叫logstash-forward,是使用Golang开发的,所以不需要有java依赖,也很轻量,占用资源很小,但功能也很少,不支持对数据做预处理。因此一般都是将filebeat+logstash组合使用,在每个节点部署filbeat,然后将监控的日志推送到数据缓冲层或直接推送到logstash集群内,配合redis或kafka做数据缓冲层来使用。

本篇就介绍如何将filebeat和logstash同时使用,并且介绍如何同时监控多个文件,将多个文件导出至不同的索引内。

ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0

ELK系列(二)、在Kibana中使用RESTful操作ES库

ELK系列(三)、安装Logstash插件及打包离线安装包

ELK系列(四)、Logstash读取nginx日志写入ES中

ELK系列(五)、Logstash修改@timestamp时间为日志的产生时间

ELK系列(六)、修改Nginx日志为Json格式并使用Logstash导入至ES

-------------------------------------使用filebeat采集多个文件并通过logstash写入es内--------------------

为什么要使用一个配置文件监控多个文件? 因为filebeat 只能起一个进程。

Filebeat配置

vim /opt/app/filebeat-7.7.0-linux-x86_64/filebeat_csdn.yml

同时监控nginx的access日志以及系统的messages日志,并且分别新增一个字段'filetype'(自定义的)来做区分,输出到localhost的5044端口,由logstash消费:

filebeat.inputs:
- type: log
  enabled: true
  backoff: "1s"
  tail_files: false
  paths:
    - /usr/local/nginx/logs/access-json.log
  fields:
    filetype: log_nginxjson
  fields_under_root: true
- type: log
  enabled: true
  backoff: "1s"
  tail_files: false
  paths:
    - /var/log/messages
  fields:
    filetype: log_system
  fields_under_root: true
output.logstash:
  enabled: true
  hosts: ["wykd:5044"]

Logstash配置

vim /opt/app/logstash-7.7.0/config/logstash_filebeat2es.conf

修改logstash配置,input的部分要与filbeat中的端口一致,filter的部分针对不同的日志内容做不同的预处理或解析,output中对不同的日志输出到不同的es的索引中。这里的filetype就是在上面的filebeat中新增的自定义字段:

input {
   #从filebeat取数据,端口与filebeat配置文件一致
   beats {
     host => "0.0.0.0"
     port => 5044
   }
}
filter {
    #只对nginx的json日志做json解析,系统message为其他格式,无需处理
    if [filetype] == "log_nginxjson"{
      json {
         source => "message"
         remove_field => ["beat","offset","tags","prospector"] #移除字段,不需要采集
      }
      date {
        match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"] #匹配timestamp字段
        target => "@timestamp"  #将匹配到的数据写到@timestamp字段中
      }
  }
}

output {
       # 输出es,这的filetype就是在filebeat那边新增的自定义字段名
       if [filetype] == "log_nginxjson" {
         elasticsearch {
            hosts => ["wykd:9200"]
            index => "nginx-%{+YYYY.MM.dd}"
        }
       } else if [filetype] == "log_system" {
         elasticsearch {
            hosts => ["wykd:9200"]
            index => "msg-%{+YYYY.MM.dd}"
        }
       }

}

启动Filebeat和Logstash

先启动logstash,不然的话filebeat会找不到logstash的5044端口:

bin/logstash -f config/logstash_filebeat2es.conf

./filebeat -e -c filebeat_csdn.yml

验证数据

在Kibana中可以看到两个索引已经建出来了并同时写入了不同的日志内容:

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

猜你喜欢

转载自blog.csdn.net/wsdc0521/article/details/106308441