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

 

參考:https://www.cnblogs.com/fawaikuangtu123/p/10360187.html

參考:https://blog.csdn.net/wsdc0521/article/details/106308441


免責聲明!

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



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