Docker從json-file到syslog的集中化管理實(shí)戰(zhàn)指南
1. 實(shí)戰(zhàn)概述
- 本次實(shí)戰(zhàn)通過對比
json-file與syslog兩種日志驅(qū)動,演示了 Docker 容器日志的本地存儲與系統(tǒng)日志集成方式,并成功將默認(rèn)日志驅(qū)動全局配置為syslog,實(shí)現(xiàn)日志集中化管理。
2. 實(shí)戰(zhàn)步驟
2.1 使用默認(rèn)日志驅(qū)動 - json-file
2.1.1 查看日志驅(qū)動
執(zhí)行命令:docker info | grep -i logging

結(jié)果說明:當(dāng)前 Docker 日志驅(qū)動為 json-file,表示容器日志以 JSON 格式寫入本地文件(如 /var/lib/docker/containers/<id>/<id>-json.log),可通過 docker logs 查看。未啟用 syslog 或其他遠(yuǎn)程日志驅(qū)動。
2.1.2 啟動測試容器
執(zhí)行命令
docker run -d \ --name testlog1 \ --log-opt tag="testlog1" \ busybox \ sh -c 'i=1; while true; do echo "Message $((i++)) from testlog1"; sleep 1; done'

結(jié)果說明:已成功啟動名為 testlog1 的容器,使用默認(rèn)日志驅(qū)動(json-file),并設(shè)置日志標(biāo)簽為 testlog1。容器內(nèi)執(zhí)行循環(huán)腳本,持續(xù)輸出消息至 stdout,日志將被 Docker 捕獲并存儲在本地文件中。
2.1.3 查看日志信息
查看前3條日志
執(zhí)行命令:docker logs testlog1 | head -3

結(jié)果說明:通過 docker logs testlog1 | head -3 成功獲取容器 testlog1 的前 3 條日志,顯示初始輸出內(nèi)容為 “Message 1 from testlog1” 至 “Message 3 from testlog1”,驗(yàn)證了日志可正常讀取并按需截取。
查看指定時間范圍內(nèi)的日志
執(zhí)行命令:docker logs -f --since="2025-12-29T10:23:19" --until="2025-12-29T10:23:25" testlog1

結(jié)果說明:成功獲取容器 testlog1 在指定時間范圍(2025-12-29T10:23:19 至 10:23:25)內(nèi)的日志,共輸出 6 條消息,顯示日志按時間篩選功能正常,且容器持續(xù)運(yùn)行并產(chǎn)生日志。
查看最后3條日志
執(zhí)行命令:docker logs --tail 3 testlog1

結(jié)果說明:成功使用 docker logs --tail 3 testlog1 獲取容器 testlog1 的最后 3 條日志,輸出顯示為 Message 980 至 982,驗(yàn)證了日志尾部內(nèi)容可正常查看,符合預(yù)期。
2.1.4 查看日志文件路徑
執(zhí)行命令:docker inspect testlog1 | grep -i LogPath

結(jié)果說明:容器 testlog1 的日志路徑為 /var/lib/docker/containers/.../json.log,表明使用默認(rèn) json-file 日志驅(qū)動,日志以 JSON 格式存儲在本地文件中,可通過 docker logs 查看。
2.1.5 查看日志文件內(nèi)容
執(zhí)行命令:cat /var/lib/docker/containers/4e83e4fa3eb483c79b5fbeebb8818be3365bd09281b485d65c3537a7bf045d55/4e83e4fa3eb483c79b5fbeebb8818be3365bd09281b485d65c3537a7bf045d55-json.log | head -3

結(jié)果說明:查看了容器 testlog1 的日志文件,內(nèi)容為 JSON 格式,包含每條日志的輸出內(nèi)容、時間戳和標(biāo)簽(tag),驗(yàn)證了默認(rèn) json-file 日志驅(qū)動將 stdout/stderr 寫入本地文件,且數(shù)據(jù)結(jié)構(gòu)完整。
2.2 使用非默認(rèn)日志驅(qū)動 - syslog
2.2.1 確保rsyslog啟用imuxsock
執(zhí)行命令:sed -i 's/^#\(.*imuxsock.*\)/\1/' /etc/rsyslog.conf

結(jié)果說明:執(zhí)行 sed -i 's/^#\(.*imuxsock.*\)/\1/' /etc/rsyslog.conf 命令,成功將 /etc/rsyslog.conf 中以 # 開頭的 imuxsock 模塊行取消注釋,使其啟用,以便接收 Docker 通過 Unix socket 發(fā)送的日志。
執(zhí)行命令:systemctl restart rsyslog

結(jié)果說明:執(zhí)行 systemctl restart rsyslog 成功重啟 rsyslog 服務(wù),使配置文件中的修改(如啟用 imuxsock 模塊)生效,確保 Docker 日志可通過 syslog 驅(qū)動正常發(fā)送并記錄。
2.2.2 啟動測試容器
執(zhí)行命令
docker run -d \ --name testlog2 \ --log-driver=syslog \ --log-opt tag="testlog2" \ busybox \ sh -c 'i=1; while true; do echo "Message $((i++)) from testlog2"; sleep 1; done'

- 結(jié)果說明:成功啟動名為
testlog2的容器,使用syslog日志驅(qū)動,并設(shè)置標(biāo)簽為testlog2,容器內(nèi)執(zhí)行循環(huán)腳本持續(xù)輸出日志,日志將通過 syslog 發(fā)送到系統(tǒng)日志服務(wù)(如 rsyslog),不再寫入本地文件。
2.2.3 查看日志信息
查看前3條日志
執(zhí)行命令:docker logs testlog2 | head -3

結(jié)果說明:通過 docker logs testlog2 | head -3 成功獲取容器 testlog1 的前 3 條日志,顯示初始輸出內(nèi)容為 “Message 1 from testlog2” 至 “Message 3 from testlog2”,驗(yàn)證了日志可正常讀取并按需截取。
查看指定時間范圍內(nèi)的日志
執(zhí)行命令:docker logs -f --since="2025-12-29T10:56:19" --until="2025-12-29T10:56:25" testlog2

結(jié)果說明:成功獲取容器 testlog2 在指定時間范圍(2025-12-29T10:56:19 至 10:56:25)內(nèi)的日志,共輸出 6 條消息,顯示日志按時間篩選功能正常,且容器持續(xù)運(yùn)行并產(chǎn)生日志。
查看最后3條日志
執(zhí)行命令:docker logs --tail 3 testlog2

結(jié)果說明:成功使用 docker logs --tail 3 testlog1 獲取容器 testlog1 的最后 3 條日志,輸出顯示為 Message 253 至 255,驗(yàn)證了日志尾部內(nèi)容可正常查看,符合預(yù)期。
2.2.4 查看日志文件路徑
執(zhí)行命令:docker inspect testlog2 | grep -i LogPath

結(jié)果說明:容器 testlog2 的 LogPath 為空,表明其使用了非默認(rèn)日志驅(qū)動(如 syslog),日志不寫入本地文件,而是通過 syslog 驅(qū)動發(fā)送至系統(tǒng)日志服務(wù),符合預(yù)期配置。
執(zhí)行命令:grep testlog2 /var/log/messages

結(jié)果說明:通過 grep testlog2 /var/log/messages 成功查到容器 testlog2 的日志輸出,顯示其日志已通過 syslog 驅(qū)動正確發(fā)送至系統(tǒng)日志文件,每條日志包含標(biāo)簽、進(jìn)程號和消息內(nèi)容,驗(yàn)證了 syslog 日志驅(qū)動配置生效。
2.3 修改默認(rèn)日志驅(qū)動
2.3.1 設(shè)置默認(rèn)日志驅(qū)動
執(zhí)行命令:vim /etc/docker/daemon.json,編輯Docker守護(hù)進(jìn)程配置文件

結(jié)果說明:配置文件中設(shè)置默認(rèn)日志驅(qū)動為 syslog,并指定設(shè)施為 local0,標(biāo)簽格式為容器名與ID組合,實(shí)現(xiàn)容器日志統(tǒng)一通過 syslog 輸出,便于集中管理和監(jiān)控。
2.3.2 重載并重啟Docker
執(zhí)行命令:systemctl daemon-reload

執(zhí)行命令:systemctl restart docker

2.3.3 啟動測試容器
執(zhí)行命令
docker run -d \ --name testlog3 \ --log-opt tag="testlog3" \ busybox \ sh -c 'i=1; while true; do echo "Message $((i++)) from testlog3"; sleep 1; done'

結(jié)果說明:成功啟動名為 testlog3 的容器,使用默認(rèn)日志驅(qū)動(syslog),并設(shè)置標(biāo)簽為 testlog3,容器內(nèi)執(zhí)行循環(huán)腳本持續(xù)輸出日志,日志通過 syslog 驅(qū)動發(fā)送至系統(tǒng)日志服務(wù),驗(yàn)證了默認(rèn)配置生效。
2.3.4 檢查容器采用的日志驅(qū)動
執(zhí)行命令:docker inspect testlog3 --format='容器采用的日志驅(qū)動:{{.HostConfig.LogConfig.Type}}'

結(jié)果說明:容器 testlog3 采用的日志驅(qū)動為 syslog,表明其日志已通過 syslog 驅(qū)動輸出至系統(tǒng)日志服務(wù),驗(yàn)證了 Docker 默認(rèn)日志驅(qū)動配置成功生效。
2.3.5 查看日志文件內(nèi)容
執(zhí)行命令:grep testlog3 /var/log/messages,查看日志文件/var/log/messages里包含testlog3的條目

3. 實(shí)戰(zhàn)總結(jié)
- 本次實(shí)戰(zhàn)系統(tǒng)驗(yàn)證了 Docker 日志驅(qū)動的兩種典型使用場景:默認(rèn)的
json-file驅(qū)動將日志以 JSON 格式保存在本地文件中,支持docker logs查看;而syslog驅(qū)動則將日志轉(zhuǎn)發(fā)至系統(tǒng)日志服務(wù)(如 rsyslog),適用于集中日志管理。通過啟用 rsyslog 的imuxsock模塊,確保容器日志能正確寫入/var/log/messages。最終,通過配置/etc/docker/daemon.json將默認(rèn)日志驅(qū)動設(shè)為syslog,并驗(yàn)證新容器自動繼承該配置。整個過程完整展示了從單容器日志定制到全局策略部署的運(yùn)維實(shí)踐,為生產(chǎn)環(huán)境日志規(guī)范化奠定了基礎(chǔ)。
到此這篇關(guān)于Docker實(shí)戰(zhàn):從json-file到syslog的集中化管理的文章就介紹到這了,更多相關(guān)docker json-file到syslog管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker部署Apollo的實(shí)現(xiàn)步驟
眾所周知分布式配置中心在目前也可以說是企業(yè)中項(xiàng)目的標(biāo)配了,本文主要介紹了Docker 部署Apollo的實(shí)現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下2024-02-02
dockerfile中CMD和ENTRYPOINT指令使用及說明
介紹了Dockerfile中的CMD和ENTRYPOINT指令以及它們的執(zhí)行方式,包括exec形式和shell形式,CMD提供默認(rèn)命令,支持覆蓋;ENTRYPOINT定義固定命令,不支持覆蓋,但可以通過--entrypoint參數(shù)實(shí)現(xiàn)覆蓋2025-11-11
Prometheus 整合 AlertManager的教程詳解
Alertmanager 主要用于接收 Prometheus 發(fā)送的告警信息,它很容易做到告警信息的去重,降噪,分組,策略路由,是一款前衛(wèi)的告警通知系統(tǒng)。這篇文章主要介紹了Prometheus 整合 AlertManager的教程 ,需要的朋友可以參考下2019-07-07
docker安裝elasticsearch報錯AccessDeniedException:/tmp/elasticsea
在使用Docker安裝Elasticsearch 7.7.1時遇到權(quán)限問題,通過設(shè)置環(huán)境變量、修改掛載目錄權(quán)限、進(jìn)入容器排查問題以及使用docker-compose最終解決了問題2025-10-10
Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析
這篇文章主要介紹了Docker數(shù)據(jù)卷容器創(chuàng)建及使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
docker 數(shù)據(jù)目錄遷移的兩種實(shí)現(xiàn)方法
本文主要介紹了docker 數(shù)據(jù)目錄遷移的兩種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03
使用Docker部署MongoDB?Cluster實(shí)踐
本文詳細(xì)介紹了如何使用Docker和mongoDB官方鏡像搭建一個四節(jié)點(diǎn)的MongoDB分片集群,包括環(huán)境準(zhǔn)備、配置文件設(shè)置、啟動節(jié)點(diǎn)、初始化Replica?Set和Shard,以及增加Shard節(jié)點(diǎn)和配置Sharding,最后,總結(jié)了整個搭建過程2026-03-03
Docker以掛載方式安裝RocketMQ的實(shí)現(xiàn)方式
Docker中安裝和使用RocketMQ有多種方式,本文主要介紹了Docker以掛載方式安裝RocketMQ的實(shí)現(xiàn)方式,具有一定的參考價值,感興趣的可以了解一下2024-06-06
Docker不同網(wǎng)段下的容器互聯(lián)的實(shí)現(xiàn)
本文主要介紹了Docker不同網(wǎng)段下的容器互聯(lián)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01

