docker容器技術學習筆記(11、日誌管理之docker logs) Docker logs logging driver ELK Fluentd Graylog日誌系統

幾個已經廣泛應用的日誌管理方案:ELK、Fluentd 和 Graylog。


Docker logs

docker logs 能夠打印出自容器啓動以來完整的日誌,並且 -f 參數可以繼續打印出新產生的日誌,效果上與 Linux 命令 tail -f 一樣。

logging driver

Docker 的默認 logging driver 是 json-file。

# docker info |grep 'Logging Driver'
Logging Driver: json-file

json-file 會將容器的日誌保存在 json 文件中,Docker 負責格式化其內容並輸出到 STDOUT 和 STDERR。

我們可以在 Host 的容器目錄中找到這個文件,器路徑爲 /var/lib/docker/containers/<contariner ID>/<contariner ID>-json.log

除了 json-file,Docker 還支持多種 logging driver。完整列表可訪問官方文檔 https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers

none 是 disable 容器日誌功能。
syslog 和 journald 是 Linux 上的兩種日誌管理服務。
awslogs、splunk 和 gcplogs 是第三方日誌託管服務。
gelf 和 fluentd 是兩種開源的日誌管理方案

容器啓動時可以通過 --log-driver 指定使用的 logging driver。如果要設置 Docker 默認的 logging driver,需要修改 Docker daemon 的啓動腳本,指定 --log-driver 參數,比如:

ExecStart=/usr/bin/dockerd -H fd:// --log-driver=syslog --log-opt ......
每種 logging driver 都有自己的 --log-opt,使用時請參考官方文檔。

ELK

  • Elasticsearch

一個近乎實時查詢的全文搜索引擎。Elasticsearch 的設計目標就是要能夠處理和搜索巨量的日誌數據。

  • Logstash

讀取原始日誌,並對其進行分析和過濾,然後將其轉發給其他組件(比如 Elasticsearch)進行索引或存儲。Logstash 支持豐富的 Input 和 Output 類型,能夠處理各種應用的日誌。

  • Kibana

一個基於 JavaScript 的 Web 圖形界面程序,專門用於可視化 Elasticsearch 的數據。Kibana 能夠查詢 Elasticsearch 並通過豐富的圖表展示結果。用戶可以創建 Dashboard 來監控系統的日誌。

  • 日誌處理流程

下圖展示了 Docker 部署環境下典型的 ELK 日誌處理流程:

Logstash 負責從各個 Docker 容器中提取日誌,Logstash將日誌轉發到 Elasticsearch 進行索引和保存,Kibana 分析和可視化數據。

幾乎所有的軟件和應用都有自己的日誌文件,容器也不例外。前面我們已經知道 Docker 會將容器日誌記錄到 /var/lib/docker/containers/<contariner ID>/<contariner ID>-json.log,那麼只要我們能夠將此文件發送給 ELK 就可以實現日誌管理。實現這一步其實不難,因爲 ELK 提供了一個配套小工具 Filebeat,它能將指定路徑下的日誌文件轉發給 ELK。

當前的日誌處理流程如下圖所示:

Fluentd

Fluentd 是一個開源的數據收集器,它目前有超過 500 種的 plugin,可以連接各種數據源和數據輸出組件。Fluentd 會負責收集容器日誌,然後發送給 Elasticsearch。日誌處理流程如下:


Filebeat 將 Fluentd 收集到的日誌轉發給 Elasticsearch。這當然不是唯一的方案,Fluentd 有一個 plugin fluent-plugin-elasticsearch 可以直接將日誌發送給 Elasticsearch。條條道路通羅馬,開源世界給予了我們多種可能性,可以根據需要選擇合適的方案。

Graylog日誌系統

  • Graylog 架構

Graylog 負責接收來自各種設備和應用的日誌,併爲用戶提供 Web 訪問接口。
Elasticsearch 用於索引和保存 Graylog 接收到的日誌。
MongoDB 負責保存 Graylog 自身的配置信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章