docker容器技術(shù)學(xué)習(xí)筆記(11、日志管理之docker logs)

幾個已經(jīng)廣泛應(yīng)用的日志管理方案:ELK、Fluentd 和 Graylog。


Docker logs

docker logs 能夠打印出自容器啟動以來完整的日志,并且 -f 參數(shù)可以繼續(xù)打印出新產(chǎn)生的日志,效果上與 Linux 命令 tail -f 一樣。

logging driver

Docker 的默認(rèn) logging driver 是 json-file。

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

json-file 會將容器的日志保存在 json 文件中,Docker 負(fù)責(zé)格式化其內(nèi)容并輸出到 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 上的兩種日志管理服務(wù)。
awslogs、splunk 和 gcplogs 是第三方日志托管服務(wù)。
gelf 和 fluentd 是兩種開源的日志管理方案

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

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

ELK

  • Elasticsearch

一個近乎實時查詢的全文搜索引擎。Elasticsearch 的設(shè)計目標(biāo)就是要能夠處理和搜索巨量的日志數(shù)據(jù)。

  • Logstash

讀取原始日志,并對其進(jìn)行分析和過濾,然后將其轉(zhuǎn)發(fā)給其他組件(比如 Elasticsearch)進(jìn)行索引或存儲。Logstash 支持豐富的 Input 和 Output 類型,能夠處理各種應(yīng)用的日志。

  • Kibana

一個基于 JavaScript 的 Web 圖形界面程序,專門用于可視化 Elasticsearch 的數(shù)據(jù)。Kibana 能夠查詢 Elasticsearch 并通過豐富的圖表展示結(jié)果。用戶可以創(chuàng)建 Dashboard 來監(jiān)控系統(tǒng)的日志。

  • 日志處理流程

下圖展示了 Docker 部署環(huán)境下典型的 ELK 日志處理流程:

Logstash 負(fù)責(zé)從各個 Docker 容器中提取日志,Logstash將日志轉(zhuǎn)發(fā)到 Elasticsearch 進(jìn)行索引和保存,Kibana 分析和可視化數(shù)據(jù)。

幾乎所有的軟件和應(yīng)用都有自己的日志文件,容器也不例外。前面我們已經(jīng)知道 Docker 會將容器日志記錄到 /var/lib/docker/containers/<contariner ID>/<contariner ID>-json.log,那么只要我們能夠?qū)⒋宋募l(fā)送給 ELK 就可以實現(xiàn)日志管理。實現(xiàn)這一步其實不難,因為 ELK 提供了一個配套小工具 Filebeat,它能將指定路徑下的日志文件轉(zhuǎn)發(fā)給 ELK。

當(dāng)前的日志處理流程如下圖所示:

Fluentd

Fluentd 是一個開源的數(shù)據(jù)收集器,它目前有超過 500 種的 plugin,可以連接各種數(shù)據(jù)源和數(shù)據(jù)輸出組件。Fluentd 會負(fù)責(zé)收集容器日志,然后發(fā)送給 Elasticsearch。日志處理流程如下:


Filebeat 將 Fluentd 收集到的日志轉(zhuǎn)發(fā)給 Elasticsearch。這當(dāng)然不是唯一的方案,F(xiàn)luentd 有一個 plugin fluent-plugin-elasticsearch 可以直接將日志發(fā)送給 Elasticsearch。條條道路通羅馬,開源世界給予了我們多種可能性,可以根據(jù)需要選擇合適的方案。

Graylog日志系統(tǒng)

  • Graylog 架構(gòu)

Graylog 負(fù)責(zé)接收來自各種設(shè)備和應(yīng)用的日志,并為用戶提供 Web 訪問接口。
Elasticsearch 用于索引和保存 Graylog 接收到的日志。
MongoDB 負(fù)責(zé)保存 Graylog 自身的配置信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容