Elastic 技術棧之 Filebeat
簡介
Beats 是安裝在服務器上的數據中轉代理。
Beats 可以將數據直接傳輸到 Elasticsearch 或傳輸到 Logstash 。
Beats 有多種類型,可以根據實際應用需要選擇合適的類型。
常用的類型有:
- Packetbeat:網絡數據包分析器,提供有關您的應用程序服務器之間交換的事務的信息。
- Filebeat:從您的服務器發送日志文件。
- Metricbeat:是一個服務器監視代理程序,它定期從服務器上運行的操作系統和服務收集指標。
- Winlogbeat:提供Windows事件日志。
參考
更多 Beats 類型可以參考:community-beats
說明
由於本人工作中只應用了 FileBeat,所以后面內容僅介紹 FileBeat 。
FileBeat 的作用
相比 Logstash,FileBeat 更加輕量化。
在任何環境下,應用程序都有停機的可能性。 Filebeat 讀取並轉發日志行,如果中斷,則會記住所有事件恢復聯機狀態時所在位置。
Filebeat帶有內部模塊(auditd,Apache,Nginx,System和MySQL),可通過一個指定命令來簡化通用日志格式的收集,解析和可視化。
FileBeat 不會讓你的管道超負荷。FileBeat 如果是向 Logstash 傳輸數據,當 Logstash 忙於處理數據,會通知 FileBeat 放慢讀取速度。一旦擁塞得到解決,FileBeat 將恢復到原來的速度並繼續傳播。
安裝
Unix / Linux 系統建議使用下面方式安裝,因為比較通用。
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.1.1-linux-x86_64.tar.gz
tar -zxf filebeat-6.1.1-linux-x86_64.tar.gz
參考
更多內容可以參考:filebeat-installation
配置
配置文件
首先,需要知道的是:filebeat.yml
是 filebeat 的配置文件。配置文件的路徑會因為你安裝方式的不同而變化。
Beat 所有系列產品的配置文件都基於 YAML 格式,FileBeat 當然也不例外。
filebeat.yml 部分配置示例:
filebeat:
prospectors:
- type: log
paths:
- /var/log/*.log
multiline:
pattern: '^['
match: after
參考
更多 filebeat 配置內容可以參考:配置 filebeat
更多 filebeat.yml 文件格式內容可以參考:filebeat.yml 文件格式
重要配置項
filebeat.prospectors
(文件監視器)用於指定需要關注的文件。
示例
filebeat.prospectors:
- type: log
enabled: true
paths:
- /var/log/*.log
output.elasticsearch
如果你希望使用 filebeat 直接向 elasticsearch 輸出數據,需要配置 output.elasticsearch 。
示例
output.elasticsearch:
hosts: ["192.168.1.42:9200"]
output.logstash
如果你希望使用 filebeat 向 logstash輸出數據,然后由 logstash 再向elasticsearch 輸出數據,需要配置 output.logstash。
注意
相比於向 elasticsearch 輸出數據,個人更推薦向 logstash 輸出數據。
因為 logstash 和 filebeat 一起工作時,如果 logstash 忙於處理數據,會通知 FileBeat 放慢讀取速度。一旦擁塞得到解決,FileBeat 將恢復到原來的速度並繼續傳播。這樣,可以減少管道超負荷的情況。
示例
output.logstash:
hosts: ["127.0.0.1:5044"]
此外,還需要在 logstash 的配置文件(如 logstash.conf)中指定 beats input 插件:
input {
beats {
port => 5044 # 此端口需要與 filebeat.yml 中的端口相同
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
setup.kibana
如果打算使用 Filebeat 提供的 Kibana 儀表板,需要配置 setup.kibana 。
示例
setup.kibana:
host: "localhost:5601"
setup.template.settings
在 Elasticsearch 中,索引模板用於定義設置和映射,以確定如何分析字段。
在 Filebeat 中,setup.template.settings 用於配置索引模板。
Filebeat 推薦的索引模板文件由 Filebeat 軟件包安裝。如果您接受 filebeat.yml 配置文件中的默認配置,Filebeat在成功連接到 Elasticsearch 后自動加載模板。
您可以通過在 Filebeat 配置文件中配置模板加載選項來禁用自動模板加載,或加載自己的模板。您還可以設置選項來更改索引和索引模板的名稱。
參考
更多內容可以參考:filebeat-template
說明
如無必要,使用 Filebeat 配置文件中的默認索引模板即可。
setup.dashboards
Filebeat 附帶了示例 Kibana 儀表板。在使用儀表板之前,您需要創建索引模式 filebeat- *
,並將儀表板加載到Kibana 中。為此,您可以運行 setup
命令或在 filebeat.yml
配置文件中配置儀表板加載。
為了在 Kibana 中加載 Filebeat 的儀表盤,需要在 filebeat.yml
配置中啟動開關:
setup.dashboards.enabled: true
參考
更多內容可以參考:configuration-dashboards
命令
filebeat 提供了一系列命令來完成各種功能。
執行命令方式:
./filebeat COMMAND
參考
更多內容可以參考:command-line-options
說明
個人認為命令行沒有必要一一掌握,因為絕大部分功能都可以通過配置來完成。且通過命令行指定功能這種方式要求每次輸入同樣參數,不利於固化啟動方式。
最重要的當然是啟動命令 run 了。
示例 指定配置文件啟動
./filebeat run -e -c filebeat.yml -d "publish" ./filebeat -e -c filebeat.yml -d "publish" # run 可以省略
模塊
Filebeat 提供了一套預構建的模塊,讓您可以快速實施和部署日志監視解決方案,並附帶示例儀表板和數據可視化。這些模塊支持常見的日志格式,例如Nginx,Apache2和MySQL 等。
運行模塊的步驟
- 配置 elasticsearch 和 kibana
output.elasticsearch:
hosts: ["myEShost:9200"]
username: "elastic"
password: "elastic"
setup.kibana:
host: "mykibanahost:5601"
username: "elastic"
password: "elastic
username 和 password 是可選的,如果不需要認證則不填。
- 初始化環境
執行下面命令,filebeat 會加載推薦索引模板。
./filebeat setup -e
- 指定模塊
執行下面命令,指定希望加載的模塊。
./filebeat -e --modules system,nginx,mysql
參考
更多內容可以參考: 配置 filebeat 模塊 | filebeat 支持模塊
原理
Filebeat 有兩個主要組件:
harvester:負責讀取一個文件的內容。它會逐行讀取文件內容,並將內容發送到輸出目的地。
prospector:負責管理 harvester 並找到所有需要讀取的文件源。比如類型是日志,prospector 就會遍歷制定路徑下的所有匹配要求的文件。
filebeat.prospectors:
- type: log
paths:
- /var/log/*.log
- /var/path2/*.log
Filebeat保持每個文件的狀態,並經常刷新注冊表文件中的磁盤狀態。狀態用於記住 harvester 正在讀取的最后偏移量,並確保發送所有日志行。
Filebeat 將每個事件的傳遞狀態存儲在注冊表文件中。所以它能保證事件至少傳遞一次到配置的輸出,沒有數據丟失。