• Filebeat+Logstash采集多个日志文件写入不同的ES索引


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

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

    Filebeat配置
    vim /app/filebeat/filebeat.yml

    同时监控nginx的日志以及es和ruoyi 服务得java类型日志,并且分别新增一个字段'log_type'(自定义的)来做区分,输出到localhost的5044端口,由logstash消费:

    filebeat.inputs:
    
    - type: log
      paths:
        - /var/log/nginx/*.log
      fields:
        log_type: "nginx"
    
      json.key_under_root: true
      json.overwite_keys: true
    
    - type: log
      enabled: true
      paths:
        - /var/log/elasticsearch/elasticsearch.log
      fields:
        log_type: "es"
    
      multiline.pattern: '^s'
      multiline.negate: true
      multiline.match: after
    
    - type: log
      enabled: true
      paths:
        - /data/ruoyi/*.log
      fields:
        log_type: "ruoyi"
    
      multiline.pattern: '^s'
      multiline.negate: true
      multiline.match: after
    
    output.logstash:
      enabled: true
      hosts: ["localhost:5044"]

    Logstash配置
    vim /app/logstash/config/beat_es.conf

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

    input {
       #从filebeat取数据,端口与filebeat配置文件一致
       beats {
         port => 5044
       }
    }
    filter {
        #只对nginx的json日志做json解析,系统message为其他格式,无需处理
        if [fields][log_type] == "nginx"{
          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 [fields][log_type] == "es" {
             elasticsearch {
                hosts => ["node1:9200","node2:9200"]
                index => "es-%{+YYYY.MM}"
            }
           } 
           if [fields][log_type] == "ruoyi" {
             elasticsearch {
                hosts => ["node1:9200","node2:9200"]
                index => "ruoyi-%{+YYYY.MM.dd}"
            }
           }
           if [fields][log_type] == "nginx" {
             elasticsearch {
                hosts => ["node1:9200","node2:9200"]
                index => "nginx-%{+YYYY.MM}"
            }       
           }
    }

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

    bin/logstash -f config/beat_es.conf

    ./filebeat -e -c filebeat.yml

  • 相关阅读:
    Fiddler 简介
    jQuery 属性操作
    Win7的虚拟Wi-Fi
    接口与内部类
    继承(二)
    J2EE框架(Struts&Hibernate&Spring)的理解
    继承(一)
    对象与类
    控制流程
    数据类型
  • 原文地址:https://www.cnblogs.com/goujinyang/p/14972593.html
Copyright © 2020-2023  润新知