簡介
Beats輕量型資料採集器
Beats 平臺集合了多種單一用途資料採集器。它們從成百上千或成千上萬臺機器和系統向 Logstash 或 Elasticsearch 傳送資料。
Beats系列
全品類採集器,搞定所有資料型別
Beats 可以直接將資料傳送到 Elasticsearch 或通過 Logstash,在Kibana 中視覺化之前,可以進一步處理和增強資料。
平時我們在檢視日誌時,使用
tail -f xxx.log
命令來實時檢視日誌,而當我們要面對成百上千、甚至成千上萬的伺服器、虛擬機器和容器生成的日誌時,再使用上面的命令來操作幾乎是完全不可能的。Filebeat 為我們提供一種輕量型方法,用於轉發和彙總日誌與檔案,讓簡單的事情不再繁雜。Filebeat 內建有多種模組(Apache、Cisco ASA、Microsoft Azure、Nginx、MySQL 等等),可針對常見格式的日誌大大簡化收集、解析和視覺化過程,只需一條命令即可。之所以能實現這一點,是因為它將自動預設路徑(因作業系統而異)與 Elasticsearch 採集節點管道的定義和 Kibana 儀表板組合在一起。
Filebaet工作原理
無論在任何環境中,隨時都潛伏著應用程式中斷的風險。Filebeat 能夠讀取並轉發日誌行,如果出現中斷,還會在一切恢復正常後,從中斷前停止的位置繼續開始。
Filebeat由兩個主要元件組成: Prospector(收割者) 和 Harvester(勘探者)。
# Harvester
# 負責讀取單個檔案的內容
# 如果檔案在讀取時被刪除或重新命名,Filebeat 將繼續讀取檔案
# Prospector
# Prospector 負責管理 Harvester 並找到所有要讀取的檔案來源
# 如果輸入型別為日誌,則查詢器將查詢路徑匹配的所有檔案,併為每個檔案啟動一個 Harvester。
# Filebeat 目前支援兩種 Prospector 型別: log 和 stdin
# Filebeat 如何保持檔案的狀態
# Filebeat 儲存每個檔案的狀態並經常將狀態重新整理到磁碟上的註冊檔案中。
# 該狀態用於記住 Harvester 正在讀取的最後偏移量,並確保傳送所有日誌行。
# 如果輸出(例如 Elasticsearch 或 Logstash )無法訪問,Filebeat 會跟蹤最後傳送的行,並在輸出再次可用 時繼續讀取檔案。
# 在 Filebeat 執行時,每個 Prospector 記憶體中也會儲存的檔案狀態資訊,當重新啟動 Filebeat 時,
# 將使用註冊檔案的資料來重建檔案狀態,Filebeat 將每個 Harvester 在從儲存的最後偏移量繼續讀取。
# 檔案狀態記錄在 data/registry 檔案中。
配置詳解
input配置段
#每一個prospectors,起始於一個破折號”-“
filebeat.prospectors:
#預設log,從日誌檔案讀取每一行。stdin,從標準輸入讀取
- input_type: log
#日誌檔案路徑列表,可用萬用字元,不遞迴
paths: - /var/log/*.log
#編碼,預設無,plain(不驗證或者改變任何輸入), latin1, utf-8, utf-16be-bom, utf-16be, utf-16le, big5, gb18030, gbk, hz-gb-2312, euc-kr, euc-jp, iso-2022-jp, shift-jis
encoding: plain
#匹配行,後接一個正規表示式列表,預設無,如果啟用,則filebeat只輸出匹配行,如果同時指定了多行匹配,仍會按照include_lines做過濾
include_lines: [‘^ERR’, ‘^WARN’]
#排除行,後接一個正規表示式的列表,預設無
#排除檔案,後接一個正規表示式的列表,預設無
exclude_lines: [“^DBG”]
#排除更改時間超過定義的檔案,時間字串可以用2h表示2小時,5m表示5分鐘,預設0
ignore_older: 5m
#該type會被新增到type欄位,對於輸出到ES來說,這個輸入時的type欄位會被儲存,預設log
document_type: log
#prospector掃描新檔案的時間間隔,預設10秒
scan_frequency: 10s
#單檔案最大收集的位元組數,單檔案超過此位元組數後的位元組將被丟棄,預設10MB,需要增大,保持與日誌輸出配置的單檔案最大值一致即可
max_bytes: 10485760
#多行匹配模式,後接正規表示式,預設無
multiline.pattern: ^[
#多行匹配模式後配置的模式是否取反,預設false
multiline.negate: false
#定義多行內容被新增到模式匹配行之後還是之前,預設無,可以被設定為after或者before
multiline.match: after
#單一多行匹配聚合的最大行數,超過定義行數後的行會被丟棄,預設500
multiline.max_lines: 500
#多行匹配超時時間,超過超時時間後的當前多行匹配事件將停止併傳送,然後開始一個新的多行匹配事件,預設5秒
multiline.timeout: 5s
#可以配置為true和false。配置為true時,filebeat將從新檔案的最後位置開始讀取,如果配合日誌輪循使用,新檔案的第一行將被跳過
tail_files: false
#當檔案被重新命名或被輪詢時關閉重新命名的檔案處理。注意:潛在的資料丟失。請務必閱讀並理解此選項的文件。預設false
close_renamed: false
#如果檔案不存在,立即關閉檔案處理。如果後面檔案又出現了,會在scan_frequency之後繼續從最後一個已知position處開始收集,預設true
close_removed: true
#每個prospectors的開關,預設true
enabled: true
#後臺事件計數閾值,超過後強制傳送,預設2048
filebeat.spool_size: 2048
#後臺重新整理超時時間,超過定義時間後強制傳送,不管spool_size是否達到,預設5秒
filebeat.idle_timeout: 5s
#登錄檔檔案,同logstash的sincedb,記錄日誌檔案資訊,如果使用相對路徑,則意味著相對於日誌資料的路徑
filebeat.registry_file: ${path.data}/registry
#定義filebeat配置檔案目錄,必須指定一個不同於filebeat主配置檔案所在的目錄,目錄中所有配置檔案中的全域性配置會被忽略
filebeat.config_dir
通用配置段
#配置傳送者名稱,如果不配置則使用hostname
name:
#標記tag,可用於分組
tags: [“service-X”, “web-tier”]
#新增附件欄位,可以使values,arrays,dictionaries或者任何巢狀資料
fields:
#處理管道中單個事件內的佇列大小,預設1000
queue_size: 1000
#設定最大CPU數,預設為CPU核數
max_procs:
Output.elasticsearch
#啟用模組
enabled: true
#ES地址
hosts: [“localhost:9200”]
#gzip壓縮級別,預設0,不壓縮,壓縮耗CPU
compression_level: 0
#每個ES的worker數,預設1
worker: 1
#可選配置,ES索引名稱,預設filebeat-%{+yyyy.MM.dd}
index: “filebeat-%{+yyyy.MM.dd}”
#可選配置,輸出到ES接收節點的pipeline,預設無
pipeline: “”
#可選的,HTTP路徑,預設無
path: “/elasticsearch”
#http代理伺服器地址,預設無
proxy_url: http://proxy:3128
#ES重試次數,預設3次,超過3次後,當前事件將被丟棄
max_retries: 3
#對一個單獨的ES批量API索引請求的最大事件數,預設50
bulk_max_size: 50
#到ES的http請求超時時間,預設90秒
timeout: 90
Output.logstash
#啟用模組
enabled: true
#logstash地址
hosts: [“localhost:5044”]
#每個logstash的worker數,預設1
worker: 1
#壓縮級別,預設3
compression_level: 3
#負載均衡開關,在不同的logstash間負載
loadbalance: true
#在處理新的批量期間,非同步傳送至logstash的批量次數
pipelining: 0
#可選配置,索引名稱,預設為filebeat
index: ‘filebeat’
#socks5代理伺服器地址
proxy_url: socks5://user:password@socks5-server:2233
#使用代理時是否使用本地解析,預設false
proxy_use_local_resolver: false
Output.redis
#啟用模組
enabled: true
#logstash地址
hosts: [“localhost:6379”]
#redis地址,地址為一個列表,如果loadbalance開啟,則負載到裡表中的伺服器,當一個redis伺服器不可達,事件將被分發到可到達的redis伺服器
worker: 1
#redis埠,如果hosts內未包含埠資訊,預設6379
port: 6379
#事件釋出到redis的list或channel,預設filebeat
key: filebeat
#redis密碼,預設無
password:
#redis的db值,預設0
db: 0
#釋出事件使用的redis資料型別,如果為list,使用RPUSH命令(生產消費模式)。如果為channel,使用PUBLISH命令{釋出訂閱模式}。預設為list
datatype: list
#為每個redis伺服器啟動的工作程式數,會根據負載均衡配置遞增
worker: 1
#負載均衡,預設開啟
loadbalance: true
#redis連線超時時間,預設5s
timeout: 5s
#filebeat會忽略此設定,並一直重試到全部傳送為止,其他beat設定為0即忽略,預設3
max_retries: 3
#對一個redis請求或管道批量的最大事件數,預設2048
bulk_max_size: 2048
#socks5代理地址,必須使用socks5://
proxy_url:
#使用代理時是否使用本地解析,預設false
proxy_use_local_resolver: false
1
Path配置段
filebeat安裝目錄,為其他所有path配置的預設基本路徑,預設為filebeat二進位制檔案的本地目錄
path.home:
#filebeat配置路徑,主配置檔案和es模板的預設基本路徑,預設為filebeat家目錄
path.config: ${path.home}
#filebeat資料儲存路徑,預設在filebeat家目錄下
path.data: ${path.home}/data
#filebeat日誌儲存路徑,預設在filebeat家目錄下
path.logs: ${path.home}/logs
logging配置段
#有3個可配置的filebeat日誌輸出選項:syslog,file,stderr
#windows預設輸出到file
#設定日誌級別,可設定級別有critical, error, warning, info, debug
logging.level: info
#開啟debug輸出的選擇元件,開啟所有選擇使用[“*”],其他可用選擇為”beat”,”publish”,”service”
logging.selectors: [ ]
#輸出所有日誌到syslog,預設為false
logging.to_syslog: true
#定期記錄filebeat內部效能指標,預設true
logging.metrics.enabled: true
#記錄內部效能指標的週期,預設30秒
logging.metrics.period: 30s
#輸出所有日誌到file,預設true
logging.to_files: true
#日誌輸出的檔案配置
logging.files:
#配置日誌輸出路徑,預設在家目錄的logs目錄
path: /var/log/filebeat
#filebeat #日誌檔名
name:
#日誌輪循大小,預設10MB
rotateeverybytes: 10485760
#日誌輪循檔案儲存數量,預設7
keepfiles: 7
常用例子
輸出到kafka叢集中
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/admin/taobao-tomcat-production-7.0.59.3/logs/catalina.out
fields:
local_type: 'tomcat' #這些都是附加的標籤
local_ip: 1.1.1.1
local_host: 'prod_商品_1'
fields_under_root: true #將標籤放到頂頭,不然在message欄位裡
multiline.pattern: '^20' #20開頭和20開頭之間的算作一行,具體根據日誌情況
multiline.negate: true
multiline.match: after
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
output.kafka:
enabled: true
hosts: ["1.1.1.1:9092","1.1.1.2:9092","1.1.1.3:9092"] #kafka叢集地址
topic: 'tomcat-server-log' #topic名
Output.elasticsearch
#啟用模組
enabled: true
#ES地址
hosts: [“localhost:9200”]
#gzip壓縮級別,預設0,不壓縮,壓縮耗CPU
compression_level: 0
#每個ES的worker數,預設1
worker: 1
#可選配置,ES索引名稱,預設filebeat-%{+yyyy.MM.dd}
index: “filebeat-%{+yyyy.MM.dd}”
#可選配置,輸出到ES接收節點的pipeline,預設無
pipeline: “”
#可選的,HTTP路徑,預設無
path: “/elasticsearch”
#http代理伺服器地址,預設無
proxy_url: http://proxy:3128
#ES重試次數,預設3次,超過3次後,當前事件將被丟棄
max_retries: 3
#對一個單獨的ES批量API索引請求的最大事件數,預設50
bulk_max_size: 50
#到ES的http請求超時時間,預設90秒
timeout: 90
Output.logstash
#啟用模組
enabled: true
#logstash地址
hosts: [“localhost:5044”]
#每個logstash的worker數,預設1
worker: 1
#壓縮級別,預設3
compression_level: 3
#負載均衡開關,在不同的logstash間負載
loadbalance: true
#在處理新的批量期間,非同步傳送至logstash的批量次數
pipelining: 0
#可選配置,索引名稱,預設為filebeat
index: ‘filebeat’
#socks5代理伺服器地址
proxy_url: socks5://user:password@socks5-server:2233
#使用代理時是否使用本地解析,預設false
proxy_use_local_resolver: false
Output.redis
#啟用模組
enabled: true
#logstash地址
hosts: [“localhost:6379”]
#redis地址,地址為一個列表,如果loadbalance開啟,則負載到裡表中的伺服器,當一個redis伺服器不可達,事件將被分發到可到達的redis伺服器
worker: 1
#redis埠,如果hosts內未包含埠資訊,預設6379
port: 6379
#事件釋出到redis的list或channel,預設filebeat
key: filebeat
#redis密碼,預設無
password:
#redis的db值,預設0
db: 0
#釋出事件使用的redis資料型別,如果為list,使用RPUSH命令(生產消費模式)。如果為channel,使用PUBLISH命令{釋出訂閱模式}。預設為list
datatype: list
#為每個redis伺服器啟動的工作程式數,會根據負載均衡配置遞增
worker: 1
#負載均衡,預設開啟
loadbalance: true
#redis連線超時時間,預設5s
timeout: 5s
#filebeat會忽略此設定,並一直重試到全部傳送為止,其他beat設定為0即忽略,預設3
max_retries: 3
#對一個redis請求或管道批量的最大事件數,預設2048
bulk_max_size: 2048
#socks5代理地址,必須使用socks5://
proxy_url:
#使用代理時是否使用本地解析,預設false
proxy_use_local_resolver: fals
安裝配置
下載安裝
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.2-linux-x86_64.tar.gz
# 將下載包解壓到 /usr/local 目錄下
tar xzvf filebeat-7.6.2-linux-x86_64.tar.gz -C /usr/local
配置
監聽stdin 輸入,並輸出到控制檯上
filebeat.inputs:
- type: stdin
enabled: true
output.console:
pretty: true
enable: true
啟動執行
cd /usr/local/filebeat-7.6.2-linux-x86_64
./filebeat -e -c filebeat-std.yml
# 引數說明
-e: 輸出到標準輸出,預設輸出到syslog和logs下
-c: 指定配置檔案
收集Nginx配置
讀取配置檔案
# 配置讀取日誌檔案 filebeat-log.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/*.log
setup.template.settings:
index.number_of_shards: 3
output.console:
pretty: true
enable: true
啟動執行測試
systemctl start filebeat
filebeat -e -c filebeat-log.yml
# 引數說明
-e: 輸出到標準輸出,預設輸出到syslog和logs下
-c: 指定配置檔案
curl 192.168.43.205
{
"@timestamp": "2020-07-21T01:45:56.008Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.2.0"
},
"log": {
"offset": 95,
"file": {
"path": "/var/log/nginx/access.log"
}
},
"message": "192.168.43.176 - - [21/Jul/2020:09:45:52 +0800] \"GET / HTTP/1.1\" 200 612 \"-\" \"curl/7.29.0\" \"-\"",
"input": {
"type": "log"
},
"ecs": {
"version": "1.0.0"
},
"host": {
"name": "nginx"
},
"agent": {
"version": "7.2.0",
"type": "filebeat",
"ephemeral_id": "bf9cd048-7041-4167-b8a2-46485a5028ec",
"hostname": "nginx",
"id": "cf47c715-17f2-48d5-9f10-866f10eba0cf"
}
}
配置nginx輸出到Elasticsearch
(vim /etc/filebeat/filebeat.yml) shift + : 輸入set nu 顯示行號
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
24: enabled: true # 更改為true以啟用輸入配置
28: - /data/*.log # 替換為要抓取的日誌檔案路徑,如果抓取nginx日誌,修改為/var/log/nginx/access.log,如果是日誌伺服器,在下面再加上多行其他地方的日誌目錄即可
73: reload.enabled: true # 啟動Filebeat模組
output.elasticsearch:
hosts: ["192.168.43.176:9200","192.168.43.205:9200","192.168.43.215:9200"]