簡介
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"]