搭建日誌系統

架構說明

DeepinScreenshot_select-area_20230310170746

① EDGE節點將日誌(請求日誌、健康檢測等)訊息,傳輸至Kafka集群
② Logstash訂閱Kafka集群訊息。
③ Logstash將訊息加以整理後,傳送至Elasticsearch集群。
④ 此時用戶即可通過Portal看到日誌訊息。
⑤ 綠色框內即是本次要搭建的日誌系統。

環境準備

為快速演示日誌系統,我們將以Docker方式進行搭建。需要準備如下:

  • 一台安裝Docker環境的主機,記憶體至少需要4G
  • Logstash需要訂閱Kafka訊息(標示②),主機需要可以向外存取。
  • Portal需要可以存取Elasticsearch訊息(標示④),主機需要可以從外部存取。

Elasticsearch可以使用白名單(whitelist)和帳號密碼(basic auth)來加固。


專案說明

容器用途

以本專案為例,可以看到docker-compose.yml內有三個服務,分別為logstashes(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以下區域。
DeepinScreenshot_select-area_20230331125110


開始搭建(無SASL)

下載示範專案

git clone https://github.com/inodeninja/inode-log-system
點此下載

修改環境變數

DeepinScreenshot_select-area_20230331152633

啟動容器

docker-compose up


開始搭建(SASL)

下載示範專案

點此下載

修改環境變數

---2023-04-18---11.23.24

啟動容器

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。
    DeepinScreenshot_select-area_20230331125831

本專案為自建日誌系統最小示範,實際運行需要依照日誌存取量做調整和設計。比如Logstash autoscale配置, Elasticsearch 是否需要 dedicated master等等。