輕鬆上手Fluentd,結合 Rainbond 外掛市場,日誌收集更快捷
以往有篇文章介紹 [EFK(Kibana + ElasticSearch + Filebeat)](https://mp.weixin.qq.com/s/XCTja56IibLDlASQkdonMA)的外掛日誌收集。Filebeat 外掛用於轉發和集中日誌資料,並將它們轉發到 Elasticsearch 或 Logstash 以進行索引,但 Filebeat 作為 Elastic 的一員,只能在 Elastic 整個體系中使用。
## Fluentd
Fluentd是一個開源的,分散式日誌採集系統,可以從不同的服務,資料來源採集日誌,對日誌進行過濾加工,分發給多種儲存和處理系統。支援各種外掛,資料快取機制,且本身所需的資源很少,內建可靠性,結合其他服務,可以形成高效直觀的日誌收集平臺。
本文介紹在 Rainbond 中使用 Fluentd 外掛,收集業務日誌,輸出到多個不同的服務。
## 一、整合架構
在收集元件日誌時,只需在元件中開通 Fluentd 外掛,本文將演示以下兩種方式:
1. Kibana + ElasticSearch + Fluentd
2. Minio + Fluentd
我們將 Fluentd 製作成 Rainbond 的 `一般型別外掛` ,在應用啟動之後,外掛也隨之啟動並自動收集日誌輸出到多個服務源,整個過程對應用容器無侵入,且擴充性強。
![]()
## 二、外掛原理分析
Rainbond V5.7.0 版本中新增了:**從開源應用商店安裝外掛**,本文中的外掛已釋出到開源應用商店,當我們使用時一鍵安裝即可,根據需求修改配置檔案。
Rainbond 外掛體系是相對於 Rainbond 應用模型的一部分,外掛主要用來實現應用容器擴充套件運維能力。由於運維工具的實現有較大的共性,因此外掛本身可以被複用。外掛必須繫結到應用容器時才具有執行時狀態,用以實現一種運維能力,比如效能分析外掛、網路治理外掛、初始化型別外掛。
在製作 Fluentd 外掛的過程中,使用到了 **一般型別外掛**,可以理解為一個POD啟動兩個 Container,Kubernetes原生支援一個POD中啟動多個 Container,但配置起來相對複雜,在 Rainbond 中透過外掛實現使使用者操作更加簡單。
## 三、EFK 日誌收集實踐
Fluentd-ElasticSearch7 輸出外掛將日誌記錄寫入 Elasticsearch。預設情況下,它使用批次 API建立記錄,該 API 在單個 API 呼叫中執行多個索引操作。這減少了開銷並可以大大提高索引速度。
### 3.1 操作步驟
應用 (Kibana + ElasticSearch)和外掛(Fluentd)都可以透過開源應用商店一鍵部署。
1. 對接開源應用商店
2. 在應用商店中搜尋 `elasticsearch` 並安裝 `7.15.2` 版本。
3. 團隊檢視 -> 外掛 -> 從應用商店安裝 `Fluentd-ElasticSearch7` 外掛
4. 基於映象建立元件,映象使用 `nginx:latest`,並且掛載儲存`var/log/nginx`。這裡使用 `Nginx:latest` 作為演示
* 在元件內掛載儲存後,外掛也會自定掛載該儲存,並可訪問 Nginx 產生的日誌檔案。
5. 在 Nginx 元件內開通外掛,可以根據所需進行修改 `Fluentd` 配置檔案,可參考下方配置檔案簡介部分。
![]()
6. 新增 ElasticSearch 依賴,將 Nginx 連線到 ElasticSearch,如下圖:
![]()
7. 訪問 `Kibana` 皮膚,進入到 Stack Management -> 資料 -> 索引管理,可以看到已存在的索引名稱為 `fluentd.es.nginx.log`,
8. 訪問 `Kibana` 皮膚,進入到 Stack Management -> Kibana -> 索引模式,建立索引模式。
9. 進入到 Discover,日誌正常展示。
![]()
### 3.2 配置檔案介紹
配置檔案參考 Fluentd 文件 [output_elasticsearch]( "output_elasticsearch")。
```shell
<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 + Minio 日誌收集實踐
Fluentd S3 輸出外掛將日誌記錄寫入到標準的 S3 物件儲存服務,例如 Amazon、Minio。
### 4.1 操作步驟
應用(Minio)和外掛(Fluentd S3)都可以透過開源應用商店進行一鍵部署。
1. 對接開源應用商店。在開源應用商店中搜尋 `minio`,並安裝 `22.06.17` 版本。
2. 團隊檢視 -> 外掛 -> 從應用商店安裝 `Fluentd-S3` 外掛。
3. 訪問 Minio 9090 埠,使用者密碼在 Minio 元件 -> 依賴中獲取。
* 建立 Bucket,自定義名稱。
* 進入 Configurations -> Region,設定 Service Location
* Fluentd 外掛的配置檔案中 `s3_region` 預設為 `en-west-test2`。
4. 基於映象建立元件,映象使用 `nginx:latest`,並且掛載儲存`var/log/nginx`。這裡使用 `Nginx:latest` 作為演示
* 在元件內掛載儲存後,外掛也會自定掛載該儲存,並可訪問 Nginx 產生的日誌檔案。
5. 進入到 Nginx 元件內,開通 Fluentd S3 外掛,修改配置檔案中的 `s3_bucket` `s3_region`
![]()
6. 建立依賴關係,Nginx 元件依賴 Minio,更新元件使其生效。
![]()
7. 訪問 Nginx 服務,讓其產生日誌,片刻後就可以在 Minio 的 Bucket 中看到。
![]()
### 4.2 配置檔案介紹
配置檔案參考 Fluentd 文件 [Apache to Minio]( "Apache to Minio")。
```shell
<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
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`,歡迎小夥伴們貢獻外掛哦!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70008902/viewspace-2902143/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Rainbond通過外掛整合ELK/EFK,實現日誌收集AI
- 使用Fluentd + Elasticsearch收集訪問日誌Elasticsearch
- fluentd收集kubernetes 叢集日誌分析
- 結合 AOP 輕鬆處理事件釋出處理日誌事件
- Docker Compose部署 EFK(Elasticsearch + Fluentd + Kibana)收集日誌DockerElasticsearch
- 帶你輕鬆上手Mac快捷鍵使用小技巧!Mac
- 輕鬆上手移動互聯——百度SiteApp建造日誌APP
- 輕量級日誌收集方案LokiLoki
- 使用Autodesk Vault外掛嚮導輕鬆建立Vault外掛
- 日誌分析平臺ELK之日誌收集器logstash常用外掛配置
- iOS之輕鬆上手blockiOSBloC
- PyCharm編輯器結合Black外掛,輕鬆實現Python程式碼格式化PyCharmPython
- #VSTS日誌# 15/11/18 外掛應用市場,RM,包管理器等
- SSM(十二) dubbo日誌外掛SSM
- 輕鬆定位硬體故障方法-日誌分析
- 教你8步輕鬆上手kafkaKafka
- 想看新指標?教你輕鬆寫prober外掛指標
- VS收集外掛
- Elasticsearch+Fluentd+Kafka搭建分散式日誌系ElasticsearchKafka分散式
- IT小白也能輕鬆get日誌服務---使用Nginx模式採集日誌Nginx模式
- 爬蟲解析庫:XPath 輕鬆上手爬蟲
- 『輕鬆部署 Laravel 應用』系列文章快捷連結Laravel
- Stickup – 輕鬆實現元素固定效果的 jQuery 外掛jQuery
- 使用Rainbond部署Logikm,輕鬆管理Kafka叢集AIKafka
- 輕鬆上手Jackjson(珍藏版)JSON
- 一個輕APP場景應用-外掛APP
- logstash的安裝使用、收集json日誌、csv日誌總結JSON
- rac日誌收集方法
- 日誌收集分析-heka
- HP收集日誌方法
- oracle 日誌收集工具Oracle
- Vector + ClickHouse 收集日誌
- HP日誌收集工具和收集方法
- changelog 日誌自動生成外掛
- 有了這個視覺化外掛,刷題除錯更輕鬆視覺化除錯
- 比較開源日誌:Logstash、FluentD 和 Fluent Bit
- ChatGPT:讓程式開發更輕鬆ChatGPT
- 使用Kafka做日誌收集Kafka