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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM