搭建日誌系統
架構說明
① EDGE節點將日誌(請求日誌、健康檢測等)訊息,傳輸至Kafka集群
② Logstash訂閱Kafka集群訊息。
③ Logstash將訊息加以整理後,傳送至Elasticsearch集群。
④ 此時用戶即可通過Portal看到日誌訊息。
⑤ 綠色框內即是本次要搭建的日誌系統。
環境準備
為快速演示日誌系統,我們將以Docker
方式進行搭建。需要準備如下:
- 一台安裝
Docker
環境的主機,記憶體至少需要4G
- Logstash需要訂閱Kafka訊息(標示②),主機需要可以向外存取。
- Portal需要可以存取Elasticsearch訊息(標示④),主機需要可以從外部存取。
Elasticsearch可以使用白名單(whitelist)和帳號密碼(basic auth)來加固。
專案說明
容器用途
以本專案為例,可以看到docker-compose.yml
內有三個服務,分別為logstash
、es(elasticsearch)
及 sidecar
,三組服務個別的用途如下:
- logstash: 從
Kafka
訂閱日誌,經過處理後送入es
。 - es: 儲存log訊息,提供Portal檢索。
- sidecar: 定期更新logstash設定檔,以同步訂閱Portal目前擁有的群組。
Logstash pipelines
Logstash pipelines
即為logstash接收資料的設定檔,目前主要的pipelines有以下四個:
accesslog.conf
: 訂閱Edge的日誌訊息,並寫入Elasticsearch。accesslog-sampling.conf
: 訂閱Edge的日誌訊息,以採樣比1:100
寫入Elasticsearch。accesslog-report.conf
: 訂閱Edge的日誌訊息,以聚合方式,萃取成報表資料
寫入Elasticsearch。edge-filebeat.conf
: 接收Edge的回源延遲檢測
、Nginx錯誤訊息
及Lua錯誤訊息
,寫入Elasticsearch。
各自pipelines分別對應portal以下區域。
開始搭建(無SASL)
下載示範專案
git clone https://github.com/inodeninja/inode-log-system
點此下載
修改環境變數
啟動容器
docker-compose up
開始搭建(SASL)
下載示範專案
修改環境變數
啟動容器
docker-compose up
查看成果
- 驗證Elasticsearch內有資料
❯ curl 'localhost:9200/_cat/indices?v&s=index'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open rcm-monitor-edge-accesslog-2023.03.31 pZnHoe4rQ7GdIDWrSzurdQ 4 0 23 0 795.8kb 795.8kb
green open rcm-monitor-edge-accesslogreport-2023.03.31 QKuXirF4TyqQporEcVmcFA 4 0 6 0 54.2kb 54.2kb
green open rcm-monitor-edge-accesslogsampling-2023.03.31 Csdi-XHVSA2UKbkcD7YScw 4 0 19 0 609.8kb 609.8kb
yellow open rcm-monitor-edge-luastatus-2023.03.31 70VCJQyWTGG16seolG6Slw 1 1 513 0 165.1kb 165.1kb
yellow open rcm-monitor-edge-origincheck-2023.03.31 LqGBo2P5QQCzLmsmf43TOw 1 1 1265 0 36mb 36mb
- 後台修改Elasticsearch集群地址,使Portal可以抓取我們配置的ELK。
本專案為自建日誌系統最小示範,實際運行需要依照日誌存取量做調整和設計。比如Logstash autoscale配置, Elasticsearch 是否需要 dedicated master等等。