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