本篇已加入《 .NET Core on K8S學習實踐系列文章索引 》,可以點選檢視更多容器化技術相關系列文章。監控和日志曆來都是系統穩定運作和問題排查的關鍵,在微服務架構中,數量衆多的容器以及快速變化的特性使得一套集中式的日志管理系統變成了生産環境中一個不可擷取的部分。此次話題我們會集中在日志管理方面,本篇會介紹Docker自帶的logs子指令以及其Logging driver。
一、Docker logs子指令
預設情況下,Docker的日志會發送到容器的标準輸出裝置(STDOUT)和标準錯誤裝置(STDERR),其中STDOUT和STDERR實際上就是容器的控制台終端。
我們可以通過logs子指令來檢視具體某個容器的日志輸出:
docker logs edc-k8s-demo
這時看到的日志是靜态的,截止到目前為止的日志。如果想要持續看到新列印出的日志資訊,那麼可以加上 -f 參數,如:
docker logs -f edc-k8s-demo
二、Docker logging driver
剛剛我們學習了預設配置下,Docker日志會發送到STDOUT和STDERR。但實際上,Docker還提供了其他的一些機制允許我們從運作的容器中提取日志,這些機制統稱為 logging driver。
對Docker而言,其預設的logging driver是json-file,如果在啟動時沒有特别指定,都會使用這個預設的logging driver。
json-file會将我們在控制台通過docker logs命名看到的日志都儲存在一個json檔案中,我們可以在伺服器Host上的容器目錄中找到這個json檔案。
容器日志路徑:/var/lib/docker/containers/<container-id>/<container-id>-json.log
例如我們可以檢視一個exceptionless-api容器的json日志:
一個快速檢視某個容器的日志檔案路徑的方法:
docker inspect exceptionless_api_1
通過inspect指令,可以查到該容器的ID及一系列配置資訊,我們重點關注LogPath即可:
查到LogPath後,即可複制其後面的日志路徑了,打開這個json檔案你就可以看到輸出的容器日志了。
除了json-file,Docker還支援以下多種logging dirver,來源:
Configure logging drivers其中,none 代表禁用容器日志,不會輸出任何容器日志。
其他幾個logging driver解釋如下:
- syslog 與 journald 是Linux上的兩種日志管理服務
- awslog、splunk 與 gcplogs是第三方日志托管服務
- gelf 與 fluentd 是兩種開源的日志管理方案
我們可以在容器啟動時通過加上 --log-driver 來指定使用哪個具體的 logging driver,例如:
docker run -d --log-driver=syslog ......
如果想要設定預設的logging driver,那麼則需要修改Docker daemon的啟動腳本,例如:
{
"log-driver": "json-file",
"log-opts": {
"labels": "production_status",
"env": "os,customer"
}
}
每個logging driver都有一些自己特定的log-opt,使用時可以參考具體官方文檔。
三、小結
本文介紹了Docker自帶的logs子指令以及logging driver,預設的logging driver是json-file,當然Docker還支援多個不同機制的logging dirver,我們可以根據自己的需要在使用時進行指定。下一篇,我們會學習流行的開源日志管理三兄弟ELK(ElasticSearch、Logstash、Kibana)。