以往有篇文章介紹 EFK(Kibana + ElasticSearch + Filebeat)的外掛紀錄檔收集。Filebeat 外掛用於轉發和集中紀錄檔資料,並將它們轉發到 Elasticsearch 或 Logstash 以進行索引,但 Filebeat 作為 Elastic 的一員,只能在 Elastic 整個體系中使用。
Fluentd是一個開源的,分散式紀錄檔採集系統,可以從不同的服務,資料來源採集紀錄檔,對紀錄檔進行過濾加工,分發給多種儲存和處理系統。支援各種外掛,資料快取機制,且本身所需的資源很少,內建可靠性,結合其他服務,可以形成高效直觀的紀錄檔收集平臺。
本文介紹在 Rainbond 中使用 Fluentd 外掛,收集業務紀錄檔,輸出到多個不同的服務。
在收集元件紀錄檔時,只需在元件中開通 Fluentd 外掛,本文將演示以下兩種方式:
我們將 Fluentd 製作成 Rainbond 的 一般型別外掛
,在應用啟動之後,外掛也隨之啟動並自動收集紀錄檔輸出到多個服務源,整個過程對應用容器無侵入,且拓展性強。
Rainbond V5.7.0 版本中新增了:從開源應用商店安裝外掛,本文中的外掛已釋出到開源應用商店,當我們使用時一鍵安裝即可,根據需求修改組態檔。
Rainbond 外掛體系是相對於 Rainbond 應用模型的一部分,外掛主要用來實現應用容器擴充套件運維能力。由於運維工具的實現有較大的共性,因此外掛本身可以被複用。外掛必須繫結到應用容器時才具有執行時狀態,用以實現一種運維能力,比如效能分析外掛、網路治理外掛、初始化型別外掛。
在製作 Fluentd 外掛的過程中,使用到了 一般型別外掛,可以理解為一個POD啟動兩個 Container,Kubernetes原生支援一個POD中啟動多個 Container,但設定起來相對複雜,在 Rainbond 中通過外掛實現使使用者操作更加簡單。
Fluentd-ElasticSearch7 輸出外掛將紀錄檔記錄寫入 Elasticsearch。預設情況下,它使用批次 API建立記錄,該 API 在單個 API 呼叫中執行多個索引操作。這減少了開銷並可以大大提高索引速度。
應用 (Kibana + ElasticSearch)和外掛(Fluentd)都可以通過開源應用商店一鍵部署。
elasticsearch
並安裝 7.15.2
版本。Fluentd-ElasticSearch7
外掛nginx:latest
,並且掛載儲存var/log/nginx
。這裡使用 Nginx:latest
作為演示
Fluentd
組態檔,可參考下方組態檔簡介部分。存取 Kibana
面板,進入到 Stack Management -> 資料 -> 索引管理,可以看到已存在的索引名稱為 fluentd.es.nginx.log
,
存取 Kibana
面板,進入到 Stack Management -> Kibana -> 索引模式,建立索引模式。
進入到 Discover,紀錄檔正常展示。
組態檔參考 Fluentd 檔案 output_elasticsearch。
<source>
@type tail
path /var/log/nginx/access.log,/var/log/nginx/error.log
pos_file /var/log/nginx/nginx.access.log.pos
<parse>
@type nginx
</parse>
tag es.nginx.log
</source>
<match es.nginx.**>
@type elasticsearch
log_level info
hosts 127.0.0.1
port 9200
user elastic
password elastic
index_name fluentd.${tag}
<buffer>
chunk_limit_size 2M
queue_limit_length 32
flush_interval 5s
retry_max_times 30
</buffer>
</match>
設定項解釋:
<source></source> 紀錄檔的輸入源:
設定項 | 解釋說明 |
---|---|
@type | 採集紀錄檔型別,tail表示增量讀取紀錄檔內容 |
path | 紀錄檔路徑,多個路徑可以使用逗號分隔 |
pos_file | 用於標記已經讀取到位置的檔案(position file)所在的路徑 |
<parse></parse> | 紀錄檔格式解析,根據你自己的紀錄檔格式,編寫對應的解析規則。 |
<match></match>紀錄檔的輸出端:
設定項 | 解釋說明 |
---|---|
@type | 輸出到的服務型別 |
log_level | 設定輸出紀錄檔的級別為info;支援的紀錄檔級別有:fatal , error , warn , info , debug , trace . |
hosts | elasticsearch的地址 |
port | elasticsearch的埠 |
user/password | elasticsearch用到的使用者名稱/密碼 |
index_name | index定義的名稱 |
<buffer></buffer> | 紀錄檔的緩衝區,用於快取紀錄檔事件,提高系統效能。預設使用記憶體,也可以使用file檔案 |
chunk_limit_size | 每個塊的最大大小:事件將被寫入塊,直到塊的大小變成這個大小,記憶體預設為8M,檔案256M |
queue_limit_length | 此緩衝外掛範例的佇列長度限制 |
flush_interval | 緩衝區紀錄檔重新整理事件,預設60s重新整理輸出一次 |
retry_max_times | 重試失敗塊輸出的最大次數 |
以上只是部分設定引數,其他設定可以跟官網檔案自定義。
Fluentd S3 輸出外掛將紀錄檔記錄寫入到標準的 S3 物件儲存服務,例如 Amazon、Minio。
應用(Minio)和外掛(Fluentd S3)都可以通過開源應用商店進行一鍵部署。
對接開源應用商店。在開源應用商店中搜尋 minio
,並安裝 22.06.17
版本。
團隊檢視 -> 外掛 -> 從應用商店安裝 Fluentd-S3
外掛。
存取 Minio 9090 埠,使用者密碼在 Minio 元件 -> 依賴中獲取。
建立 Bucket,自定義名稱。
進入 Configurations -> Region,設定 Service Location
s3_region
預設為 en-west-test2
。基於映象建立元件,映象使用 nginx:latest
,並且掛載儲存var/log/nginx
。這裡使用 Nginx:latest
作為演示
進入到 Nginx 元件內,開通 Fluentd S3 外掛,修改組態檔中的 s3_bucket
s3_region
組態檔參考 Fluentd 檔案 Apache to Minio。
<source>
@type tail
path /var/log/nginx/access.log
pos_file /var/log/nginx/nginx.access.log.pos
tag minio.nginx.access
<parse>
@type nginx
</parse>
</source>
<match minio.nginx.**>
@type s3
aws_key_id "#{ENV['MINIO_ROOT_USER']}"
aws_sec_key "#{ENV['MINIO_ROOT_PASSWORD']}"
s3_endpoint http://127.0.0.1:9000/
s3_bucket test
s3_region en-west-test2
time_slice_format %Y%m%d%H%M
force_path_style true
path logs/
<buffer time>
@type file
path /var/log/nginx/s3
timekey 1m
timekey_wait 10s
chunk_limit_size 256m
</buffer>
</match>
設定項解釋:
<source></source> 紀錄檔的輸入源:
設定項 | 解釋說明 |
---|---|
@type | 採集紀錄檔型別,tail表示增量讀取紀錄檔內容 |
path | 紀錄檔路徑,多個路徑可以使用逗號分隔 |
pos_file | 用於標記已經讀取到位置的檔案(position file)所在的路徑 |
<parse></parse> | 紀錄檔格式解析,根據你自己的紀錄檔格式,編寫對應的解析規則。 |
<match></match>紀錄檔的輸出端:
設定項 | 解釋說明 |
---|---|
@type | 輸出到的服務型別 |
aws_key_id | Minio 使用者名稱 |
aws_sec_key | Minio 密碼 |
s3_endpoint | Minio 存取地址 |
s3_bucket | Minio 桶名稱 |
force_path_style | 防止 AWS SDK 破壞端點 URL |
time_slice_format | 每個檔名都加上這個時間戳 |
<buffer></buffer> | 紀錄檔的緩衝區,用於快取紀錄檔事件,提高系統效能。預設使用記憶體,也可以使用file檔案 |
timekey | 每 60 秒重新整理一次累積的chunk |
timekey_wait | 等待 10 秒再重新整理 |
chunk_limit_size | 每個塊的最大大小 |
Fluentd 外掛可以很靈活的收集業務紀錄檔並輸出至多個服務,並結合 Rainbond 外掛市場的一鍵安裝,讓我們的使用變得更加簡單、快捷。
目前 Rainbond 開源外掛應用市場的 Flunetd 外掛只有 Flunetd-S3
Flunetd-ElasticSearch7
,歡迎小夥伴們貢獻外掛哦!