04 . Filebeat簡介原理及配置檔案和一些案例

men發表於2020-07-21

簡介

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

相關文章