Filebeat實現日志轉發的核心流程
Filebeat作為輕量級日志收集器,通過輸入配置定義日志來源、輸出配置指定轉發目標,將日志數據從源服務器轉發至Elasticsearch、Logstash等目的地。以下是具體實現步驟及關鍵配置:
根據操作系統選擇安裝方式(以CentOS、Debian為例):
sudo yum install epel-release -y
echo "[elasticsearch-7.x]name=Elasticsearch repository for 7.x packagesbaseurl=https://artifacts.elastic.co/packages/7.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md" | sudo tee -a /etc/yum.repos.d/elasticsearch.repo
sudo yum install filebeat -y
sudo apt update
sudo apt install filebeat -y
安裝完成后,Filebeat配置文件默認位于/etc/filebeat/filebeat.yml
。
編輯filebeat.yml
,通過filebeat.inputs
模塊定義要收集的日志文件路徑。常用配置項包括:
type
: 輸入類型(如log
表示收集文本日志);enabled
: 是否啟用該輸入(設為true
);paths
: 日志文件路徑(支持通配符,如/var/log/*.log
表示收集/var/log
下所有.log
文件)。示例配置:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/syslog # 收集系統日志
- /var/log/nginx/*.log # 收集Nginx日志目錄下所有.log文件
Filebeat支持多種輸出目標,常見場景及配置如下:
若無需復雜數據處理(如日志解析、過濾),可直接將日志發送至Elasticsearch。配置項包括:
hosts
: Elasticsearch服務器地址(支持多節點,如["es-node1:9200", "es-node2:9200"]
);index
: 索引名稱模板(可使用占位符,如filebeat-%{[agent.version]}-%{+yyyy.MM.dd}
表示按Filebeat版本和日期生成索引)。示例配置:
output.elasticsearch:
hosts: ["localhost:9200"]
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
若Elasticsearch啟用了安全認證(如X-Pack),需添加認證信息:
output.elasticsearch:
hosts: ["localhost:9200"]
username: "elastic" # 替換為你的用戶名
password: "your_password" # 替換為你的密碼
若需要對日志進行解析、過濾(如提取字段、格式化時間),可將日志發送至Logstash。配置項包括:
hosts
: Logstash服務器地址(監聽beats
輸入插件的端口,默認5044
);ssl.certificate_authorities
: SSL證書路徑(若Logstash啟用了SSL加密)。示例配置:
output.logstash:
hosts: ["localhost:5044"]
ssl.certificate_authorities: ["/etc/filebeat/certs/ca.crt"] # 若啟用SSL
此時需在Logstash中配置對應的輸入、過濾和輸出插件(如beats
輸入、grok
過濾器、elasticsearch
輸出)。
sudo systemctl start filebeat # 啟動服務
sudo systemctl enable filebeat # 設置開機自啟
sudo systemctl status filebeat # 查看是否運行正常
sudo journalctl -u filebeat -f # 實時查看日志(排查配置錯誤)
curl
命令查看索引:curl -X GET "localhost:9200/_cat/indices?v&pretty" # 查看是否生成filebeat-*索引
sudo tail -f /var/log/logstash/logstash-plain.log
multiline
配置合并多行:filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/java-app/*.log
multiline.pattern: '^\[' # 匹配行首的'['(假設異常堆棧以'['開頭)
multiline.negate: true
multiline.match: after # 將匹配行之后的內容合并到上一行
通過以上步驟,Filebeat即可實現日志的收集與轉發。根據實際需求調整輸入路徑、輸出目標和高級配置,即可滿足不同場景的日志處理需求。