1 ELK日誌系統 經典的ELK架構或現被稱為Elastic Stack。Elastic Stack架構為Elasticsearch + Logstash + Kibana + Beats的組合: Beats負責日誌的採集 Logstash負責做日誌的聚合和處理 ES作為日誌的存儲和搜索系統 Kib ...
1 ELK日誌系統
經典的ELK架構或現被稱為Elastic Stack。Elastic Stack架構為Elasticsearch + Logstash + Kibana + Beats的組合:
- Beats負責日誌的採集
- Logstash負責做日誌的聚合和處理
- ES作為日誌的存儲和搜索系統
- Kibana作為可視化前端展示
整體架構圖:
2 EFK日誌系統
容器化場景中,尤其k8s環境,用戶經常使用EFK架構。F代表Fluent Bit,一個開源多平臺的日誌處理器和轉發器。Fluent Bit可以:
- 讓用戶從不同來源收集數據/日誌
- 統一併發到多個目的地
- 完全相容Docker和k8s環境
3 PLG日誌系統
3.1 Prometheus+k8s日誌系統
PLG
Grafana Labs提供的另一個日誌解決方案PLG逐漸流行。PLG架構即Promtail + Loki + Grafana的組合:
Grafana,開源的可視化和分析軟體,允許用戶查詢、可視化、警告和探索監控指標。Grafana主要提供時間序列數據的儀錶板解決方案,支持超過數十種數據源。
Grafana Loki是一組可以組成一個功能齊全的日誌堆棧組件,與其它日誌系統不同,Loki只建立日誌標簽的索引而不索引原始日誌消息,而是為日誌數據設置一組標簽,即Loki運營成本更低,效率還提高幾個數量級。
Loki設計理念
Prometheus啟發,可實現可水平擴展、高可用的多租戶日誌系統。Loki整體架構由不同組件協同完成日誌收集、索引、存儲等。
各組件如下,Loki’s Architecture深入瞭解。Loki就是like Prometheus, but for logs。
Promtail是一個日誌收集的代理,會將本地日誌內容發到一個Loki實例,它通常部署到需要監視應用程式的每台機器/容器上。Promtail主要是用來發現目標、將標簽附加到日誌流以及將日誌推送到Loki。截止到目前,Promtail可以跟蹤兩個來源的日誌:本地日誌文件和systemd日誌(僅支持AMD64架構)。
4 PLG V.S ELK
4.1 ES V.S Loki
ELK/EFK架構確實強,經多年實際環境驗證。存儲在ES中的日誌通常以非結構化JSON對象形式存儲在磁碟,且ES為每個對象都建索引,以便全文搜索,然後用戶可特定查詢語言搜索這些日誌數據。
而Loki數據存儲解耦:
- 既可在磁碟存儲
- 也可用如Amazon S3雲存儲系統
Loki日誌帶有一組標簽名和值,只有標簽對被索引,這種權衡使它比完整索引操作成本更低,但針對基於內容的查詢,需通過LogQL再單獨查詢。
4.2 Fluentd V.S Promtail
相比Fluentd,Promtail專為Loki定製,它可為運行在同一節點的k8s Pods做服務發現,從指定文件夾讀取日誌。Loki類似Prometheus的標簽方式。因此,當與Prometheus部署在同一環境,因為相同的服務發現機制,來自Promtail的日誌通常具有與應用程式指標相同的標簽,統一標簽管理。
4.3 Grafana V.S Kibana
Kibana提供許多可視化工具來進行數據分析,高級功能如異常檢測等機器學習功能。Grafana針對Prometheus和Loki等時間序列數據打造,可在同一儀錶板上查看日誌指標。
參考
- https://logz.io/blog/fluentd-logstash/
- https://aws.amazon.com/cn/blogs/china/from-elk-efk-to-plg-implement-in-eks-a-container-logging-solution-based-on-promtail-loki-grafana/
本文由博客一文多發平臺 OpenWrite 發佈!