注:本篇基於filebeat7.5.2
filebeat是什麼?
Filebeat是用於轉發和集中日誌數據的輕量級傳送程序。作爲服務器上的代理安裝,Filebeat監視您指定的日誌文件或位置,收集日誌事件,並將它們轉發到Elasticsearch或 Logstash等進行索引。
filebeat工作方式
Filebeat的工作方式如下:啓動Filebeat時,它將啓動一個或多個輸入,這些輸入將在爲日誌數據指定的位置中查找。對於Filebeat所找到的每個日誌,Filebeat都會啓動harvester。每個harvester都讀取單個日誌以獲取新內容,並將新日誌數據發送到libbeat,libbeat將聚集事件,並將聚集的數據發送到爲Filebeat配置的輸出。
input:負責管理harvester並查找所有可讀取的資源。Input包括多種類型。Log,syslog,kafka,redis,tcp,s3 等等、
Tips: Filebeat保留每個文件的狀態,並經常將狀態刷新到註冊表文件中的磁盤。該狀態用於記住harvester正在讀取的最後一個偏移量。
filebeat常見命令&參數
export 將配置或索引模板導出到stdout。
help 顯示任何命令的幫助。
keystore 管理祕密密鑰庫。
modules 管理配置的模塊。
run 運行Filebeat。如果在未指定命令的情況下啓動Filebeat,則默認使用此命令。
setup 設置初始環境,包括索引模板,Kibana儀表板和機器學習作業
test 測試配置。
version 顯示有關當前版本的信息
-E 覆蓋配置文件中的配置。
filebeat -E "output.elasticsearch.hosts=["http://myhost:9200"]"
-M 覆蓋filebeat模塊的配置
filebeat -modules=nginx -M "nginx.access.var.paths=[/var/log/nginx/access.log*]"
-c 小c 指定配置文件的路徑。
-e 記錄到stderr並禁用syslog /文件輸出。
filebeat test config -c filebeat.yml 測試配置文件正確與否
filebeat輸入
filebeat輸入最主要的就是區分什麼樣的數據作爲一行數據進行接下來的操作。
filebeat modules list 查看啓停的模塊。
filebeat modules disable/enable mysql 關閉或啓動模塊。對應 modules.d/xxx.yml會被啓用
在inputs配置輸入,指定要輸入的文件類型以及文件的路徑,harvest會去收集
在處理文件行時,可能多行文件是一個日誌,這時需要配置multiline特殊處理
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
Negate和match 設置的是行組合方式、
Tips: 自定義設置,需要配置相關日誌文件的解析方式,如何識別數據成爲一個doc
filebeat輸出
如下的配置可以收集paths 下的文件,並以message爲字段傳給es
filebeat.inputs:
- type: log
enabled: true
#指定一個要讀取數據的文件路徑
paths:
- /var/log/nginx/*.log
setup.kibana:
host: “127.0.0.1:5601"
output.elasticsearch:
hosts: [“127.0.0.1:9200"]
processors: #處理器、用來過濾要導出的數據
- add_host_metadata: ~
nohup filebeat & 後臺執行
等一會去檢查es的索引存在, curl -XGET ‘localhost:9200/filbeat*’ 有輸出
filebeat輸出通過ingest進行拆分字段
將下面的管道在es中建立。
PUT _ingest/pipeline/pipeline-nginx-access
{
"description" : "nginx access log",
"processors": [
{
"grok": {
"field": "message",
"patterns": ["%{IP:clientip} - %{DATA:userid} %{DATA:username} - %{DATA:location} %{DATA:sex} at %{DATA:timestamp} \"%{DATA:useragent}\" end"]
}
},{
"geoip":{
"field": "clientip",
"target_field": "geoip"
}
},{
"user_agent": {
"field": "useragent",
"target_field": "useragent"
}
},{
"date": {
"field": "timestamp",
"formats": ["yyyy-MM-dd HH:mm:ss"],
"target_field": "timestamp"
}
}
]
}
在/var/log/nginx/access.log中替換成如下內容
10.95.110.123 - 82304918473 zhangsan - beijing male at 2020-03-14 14:41:58 "TimeHut/5.3.3 (iPhone8,2; iOS 9.3.5; Scale/3.00) (SOURCE/App Store, VERSION_CODE/533)" end
10.95.110.123 - 82304918474 zhangsan - beijing male at 2020-03-14 14:41:58 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36" end
修改filebeat.yml配置文件爲
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
fields:
type: "access-log"
setup.template.name: "ignore-this"
setup.template.pattern: "ignore-this"
output.elasticsearch:
hosts: ["localhost:9200"]
indices:
- index: "filebeat-nginx-access-%{+yyy.MM.dd}"
when.equals:
fields.type: "access-log"
pipelines:
- pipeline: "pipeline-nginx-access"
when.equals:
fields.type: "access-log"
然後 nohup filebeat & 後臺運行
去logs 下面查 filebeat的日誌。
參考: