"本文主要對fluent-bit 1.3版本外部插件做詳細介紹,關注後回覆【pdf】獲得文檔"
1、回顧
隨着集羣規模不斷擴大,日誌收集問題將一直縈繞在我們耳邊,前段時間我用六篇文章安利了使用fluentd及fluent-bit好處,具體可以參考如下鏈接:
下面我就直接介紹fluent-bit整體收集架構和插件,如果對整體有不理解的部分,可以參考如上鍊接。
2、外部輸入插件
fluent-bit可以收集事件、日誌、度量指標等數據,它可以通過一個網絡接口,無線電硬件或一些內置的度量。以下是各個版本支持數據收集表格:
1.0版本 | 1.1版本 | 1.2版本 | 1.3版本 | 名稱 | 標題 | 描述 |
X | X | √ | √ | collected | Collected | 偵聽來自Collected的UDP數據包。 |
√ | √ | √ | √ | CPU | CPU使用率 | 測量CPU的總使用率 |
√ | √ | √ | √ | disk | 磁盤使用率 | 測量磁盤IO |
√ | √ | √ | √ | dummy | Dummy | 生成虛擬事件 |
√ | √ | √ | √ | exec | Exec | 執行外部程序並收集事件日誌。 |
√ | √ | √ | √ | forward | Forward | fluentd轉發協議 |
√ | √ | √ | √ | head | Head | 讀取文件的前幾行 |
√ | √ | √ | √ | health | health | 檢查TCP服務的健康狀況。 |
√ | √ | √ | √ | kmsg | Kernel Log Buffer | 讀取Linux內核日誌緩衝區消息。 |
√ | √ | √ | √ | MEM | 內存使用情況 | 測量系統上使用的內存總量。 |
√ | √ | √ | √ | MQTT | MQTT | 啓動MQTT服務器並接收發布消息。 |
√ | √ | √ | √ | netif | 網絡流量 | 測量網絡流量。 |
√ | √ | √ | √ | proc | 處理 | 檢查進程的運行狀況。 |
√ | √ | √ | √ | random | 隨機 | 生成隨機樣本 |
√ | √ | √ | √ | serial | 串行事件 | 從串行接口讀取數據信息。 |
√ | √ | √ | √ | stdin | 標準輸入 | 從標準輸入讀取數據。 |
√ | √ | √ | √ | syslog | syslog | 從Unix套接字讀取syslog消息。 |
√ | √ | √ | √ | systemd | Systemd | 從Systemd / Journaled讀取日誌。 |
√ | √ | √ | √ | tail | tail | 從文件末尾讀取數據 |
√ | √ | √ | √ | TCP | TCP | 通過tcp監聽json數據 |
X | X | √ | √ | thermal | Thermal | 測量系統溫度。 |
3、外部輸出插件
以下是fluent-bit可用的輸出插件,具體見表格:
1.0版本 | 1.1版本 | 1.2版本 | 1.3版本 | name | title | describtion |
√ | √ | √ | √ | azure | Azure日誌分析 | 將記錄吸收到Azure Log Analytics中 |
√ | √ | √ | √ | bigquery | bigquery | 將記錄提取到Google BigQuery中 |
√ | √ | √ | √ | counter | counter | 簡單記錄計數器。 |
X | √ | √ | √ | datadog | datadog | 提取日誌到Datadog。 |
√ | √ | √ | √ | es | es | 將記錄刷新到Elasticsearch服務器。 |
√ | √ | √ | √ | file | 文件 | 將記錄刷新到文件。 |
√ | √ | √ | √ | flowcounter | FlowCounter | 計數記錄。 |
√ | √ | √ | √ | forward | forward | 轉發協議 |
√ | √ | √ | √ | http | HTTP | 將記錄刷新到HTTP端點。 |
√ | √ | √ | √ | influxdb | InfluxDB | 將記錄刷新到InfluxDB時間序列數據庫。 |
√ | √ | √ | √ | kafaka | kafaka | 將記錄刷新到Apache Kafka |
√ | √ | √ | √ | kafaka-rest | Kafka REST代理 | 將記錄刷新到Kafka REST代理服務器。 |
√ | √ | √ | √ | stackdriver | Google Stackdriver記錄 | 將記錄刷新到Google Stackdriver Logging服務。 |
√ | √ | √ | √ | stdout | 標準輸出 | 將記錄刷新到標準輸出。 |
√ | √ | √ | √ | splunk | Splunk | 將記錄刷新到Splunk Enterprise服務 |
√ | √ | √ | √ | tcp | TCP和TLS | 將記錄刷新到TCP服務器。 |
√ | √ | √ | √ | td | td | 將記錄刷新到雲服務以進行分析。 |
√ | √ | √ | √ | nats | nats | 將記錄刷新到NATS服務器。 |
√ | √ | √ | √ | null | 空值 | 不進行事件處理 |
4、使用示例
4.1、 tail插件(輸入)
輸入插件tail允許監視一個或多個文本文件。它具有類似於tail -f shell命令的行爲。該插件讀取路徑模式中的每個匹配文件,併爲找到的每個新行(用\ n分隔)生成一條新記錄。(可選)可以使用數據庫文件,以便插件可以具有跟蹤文件的歷史記錄和偏移狀態,這對於重新啓動服務時恢復狀態非常有用。
配置參數:
該插件支持以下參數配置,如下表所示:
Key | Description | Default |
Buffer_Chunk_Size | 設置初始緩衝區大小以讀取文件數據。該值也用於增加緩衝區大小。該值必須符合“ 單位大小”規範。 | 32k |
Buffer_Max_Size | 設置每個受監視文件的緩衝區大小的限制。當需要增加緩衝區時(例如:很長的行),該值用於限制內存緩衝區可以增長多少。如果讀取的文件超過此限制,將從監視的文件列表中刪除該文件。該值必須符合“ 單位大小”規範。 | Buffer_Chunk_Size |
Path | 通過使用通用通配符指定一個或多個特定日誌文件的模式。 | |
Path_Key | 如果啓用,它將附加受監視文件的名稱作爲記錄的一部分。分配的值成爲映射中的鍵。 | |
Exclude_Path | 設置一個或多個用逗號分隔的外殼模式,以排除符合特定條件的文件,例如:exclude_path = *.gz,*.zip | |
Refresh_Interval | 刷新監視文件列表的時間間隔(以秒爲單位)。 | 60s |
Rotate_Wait | 指定在刷新某些掛起的數據時,以秒爲單位監視文件一次輪轉所需的額外時間。 | 5s |
Ignore_Older | 忽略比該時間舊的記錄(以秒爲單位)。支持m,h,d(分鐘,小時,天)語法。默認行爲是從指定文件中讀取所有記錄。僅在指定了解析器並且可以解析記錄時間時纔可用。 | |
Skip_Long_Lines | 當受監視的文件由於行很長(Buffer_Max_Size)而達到緩衝區容量時,默認行爲是停止監視該文件。Skip_Long_Lines會更改該行爲,並指示Fluent Bit跳過長行並繼續處理適合緩衝區大小的其他行。 | 關 |
DB | 指定數據庫文件以跟蹤受監視的文件和偏移量。 | |
DB.Sync | 設置默認的同步(I / O)方法。值:Extra,Full,Normal,Off。此標誌影響內部SQLite引擎與磁盤同步的方式 | full |
Mem_Buf_Limit | 設置將數據附加到引擎時,Tail插件可以使用的內存限制。如果達到極限,它將被暫停;刷新數據後,它將恢復。 | |
Parser | 指定解析器的名稱,以將其解析爲結構化消息。 | |
Key | 當消息是非結構化消息(未應用解析器)時,它將作爲字符串附加在鍵名log下。此選項允許爲該鍵定義替代名稱。 | log |
Tag | 設置一個標籤(帶有正則表達式提取字段),該標籤將放置在讀取的行上。例如kube.<namespace_name>.<pod_name>.<container_name> | |
Tag_Regex | 設置正則表達式以從文件中提取字段。例如(?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)- |
注意,如果未指定數據庫參數db,則默認情況下,插件將從頭開始讀取每個目標文件。
Docker日誌收集模式配置參數:
由於行長度限制,通過docker模式收集docker守護進程產生json日誌,如果需要使用此模式。需要解析器配置tail插件,然後啓用docker模式。
Key | Description | Default |
Docker | 如果啓用,該插件將重新組合已拆分的Docker日誌行,然後將其傳遞至如上配置的任何解析器。此模式不能與多行同時使用。 | 關 |
Docker_Mode_Flush | 等待時間(以秒爲單位),以刷新未完成的數據行。 | 4 |
入門:
爲了尾隨文本或日誌文件,您可以從命令行或通過配置文件運行插件。
命令行:
$ fluent-bit -i tail -p path=/var/log/syslog -o stdout
配置:
[INPUT]
Name tail
Path /var/log/syslog
[OUTPUT]
Name stdout
Match *
文件獲取狀態保持:
該tail插件功能輸入保存跟蹤文件的狀態,強烈建議您啓用此。爲此,可以使用db屬性,例如:
fluent-bit -i tail -p path=/var/log/syslog -p db=/path/to/logs.db -o stdout
4.2、file文件介紹(輸出)
配置參數:
該插件支持以下配置參數:
Key | Description |
Path | 輸出文件路徑。如果未設置,則文件名將爲標籤名。 |
format | 文件內容的格式。另請參閱格式部分。默認值:out_file。 |
格式:
輸出時間,標籤和json記錄,如下所示:
tag: [time, {"key1":"value1", "key2":"value2", "key3":"value3"}]
將記錄輸出爲JSON(沒有其他和屬性),如下所示:
{"key1":"value1", "key2":"value2", "key3":"value3"}
將記錄輸出爲CSV,CSV支持其他配置參數,如下所示:
Key | Description |
Delimiter | 用於分隔每個數據的字符。默認值:“,” |
time[delimiter]"value1"[delimiter]"value2"[delimiter]"value3"
模板格式
使用自定義格式模板輸出記錄配置參數如下:
Key | Description |
Template | 格式字符串。默認值:“ {time} {message}” |
例如,如果您按如下模板所示設置配置:
[INPUT]
Name mem
[OUTPUT]
Name file
Format template
Template {time} used={Mem.used} free={Mem.free} total={Mem.total}
輸出:
1564462620.000254 used=1045448 free=31760160 total=32805608
入門介紹:
您可以從命令行或通過配置文件運行插件;
命令行模式收集cpu運行指標信息:
fluent-bit -i cpu -o file -p path=output.txt
配置文件運行:
[INPUT]
Name cpu
Tag cpu
[OUTPUT]
Name file
Match *
Path output.txt
5、總結
本文主要介紹了各個版本插件支持進行列舉以及對部分插件的使用做了簡單介紹,如果對上述運行有疑問的地方,可以參考前幾節的介紹;下文我會繼續分享fluent-bit結合docker和Kubernetes使用介紹,敬請期待。關注、公衆號後臺回覆【pdf】可獲得詳細文檔。
推薦閱讀:
Kubernetes中如何使用ClusterDNS進行服務發現?
從Ice到Kubernetes容器技術,微服務架構經歷了什麼?
原創不易,隨手關注或者”在看“,誠摯感謝!