十一、日志管理
(一)日志管理之 Docker logs
? 高效的監控和日志管理對保持生產系統持續穩定地運行以及排查問題至關重要,在微服務架構中,由于容器的數量眾多以及快速變化的特性使得記錄日志和監控變得越來越重要,考慮到容器短暫和不固定的生命周期,當我們需要 debug 問題時有些容器可能已經不存在了,因此,一套集中式的日志管理系統是生產環境中不可或缺的組成部分,
? 本章我們將討論監控容器的各種可用技術和方案,首先會介紹 Docker 自帶的 logs 子命令,然后討論 Docker 的 logging driver,接下來通過實踐學習幾個已經廣泛應用的日志管理方案:ELK、Fluentd 和 Graylog,
(1)dockers log
我們首先來看一看默認配置下 Docker 的日志功能,
對于一個運行的容器,Docker 會將日志發送到 容器的 標準輸出設備(STDOUT)和標準錯誤設備(STDERR),STDOUT 和 STDERR 實際上就是容器的控制臺終端,
舉個例子,用下面的命令運行 httpd 容器:
docker run -p 80:80 httpd
因為我們在啟動日志的時候沒有用 -d 引數,httpd 容器以前臺方式啟動,日志會直接列印在當前的終端視窗,
如果加上 -d 引數以后臺方式運行容器,我們就看不到輸出的日志了,
root@host1:~# docker run -d -p 81:80 httpd
0aeccbe176442fe521ee1dd19aa9fabb5edf758b64d37412ad3737585847c434
root@host1:~#
這種情況下如果要查看容器的日志,有兩種方法:
- attach 到該容器,
- 用
docker logs命令查看日志,
先來看 attach 的方法,運行 docker attach 命令,
attach 到了 httpd 容器,但并沒有任何輸出,這是因為當前沒有新的日志資訊,
為了產生一條新的日志,可以在 host 的另一個命令列終端執行 curl localhost,
這時,attach 的終端就會列印出新的日志,
attach 的方法在實際使用中不太方便,因為:
- 只能看到 attach 之后的日志,以前的日志不可見,
- 退出 attach 狀態比較麻煩(Ctrl+p 然后 Ctrl+q 組合鍵),一不小心很容器將容器殺掉(比如按下 Ctrl+C),
查看容器日志推薦的方法是用 docker logs 命令,
root@host1:~# docker logs 0aeccbe17644
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Wed Nov 18 09:01:11.542927 2020] [mpm_event:notice] [pid 1:tid 140339416298624] AH00489: Apache/2.4.46 (Unix) configured -- resuming normal operations
[Wed Nov 18 09:01:11.543957 2020] [core:notice] [pid 1:tid 140339416298624] AH00094: Command line: 'httpd -D FOREGROUND'
root@host1:~#
docker logs 能夠列印出自容器啟動以來完整的日志,并且 -f 引數可以繼續列印出新產生的日志,效果上與 Linux 命令 tail -f 一樣,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245088.html
標籤:其他
上一篇:剪繩子
