docker日志存儲(chǔ)位置
在Linux系統(tǒng)中docker啟動(dòng)后日志存儲(chǔ)在/var/lib/docker/containers/容器ID/
目錄中僻肖,啟動(dòng)一個(gè)容器后掀亩,容器ID目錄中會(huì)生成如下文件:
-rw-r----- 1 root root 10325 Nov 16 14:09 12f7f218aa3ba42cf58e3a77ab7ff615c3b06cb04c8d2f22561592c2ea2d3126-json.log
drwx------ 2 root root 4096 Nov 16 14:07 checkpoints
-rw------- 1 root root 3664 Nov 16 14:07 config.v2.json
-rw-r--r-- 1 root root 1514 Nov 16 14:07 hostconfig.json
-rw-r--r-- 1 root root 13 Nov 16 14:07 hostname
-rw-r--r-- 1 root root 174 Nov 16 14:07 hosts
drwx------ 2 root root 4096 Nov 16 14:07 mounts
-rw-r--r-- 1 root root 108 Nov 16 14:07 resolv.conf
-rw-r--r-- 1 root root 71 Nov 16 14:07 resolv.conf.hash
每個(gè)容器的日志默認(rèn)都會(huì)以 json-file 的格式存儲(chǔ)于/var/lib/docker/containers/<容器id>/<容器id>-json.log
下,不過并不建議去這里直接讀取內(nèi)容锻离,因?yàn)槿萜鞯娜罩緞t可以通過 docker logs
命令來訪問铺峭,而且可以像 tail -f
一樣,使用 docker logs -f
來實(shí)時(shí)查看汽纠。如果使用 Docker Compose卫键,則可以通過 docker-compose logs <服務(wù)名>
來查看。
docker容器日志導(dǎo)致磁盤空間爆滿
從上面可以知道docker容器日志存儲(chǔ)在文件中虱朵,容器銷毀后/var/lib/docker/containers/<容器id>/
目錄會(huì)被自動(dòng)刪除莉炉,所以容器日志也被一并刪除。如果容器一直運(yùn)行并且一直產(chǎn)生日志碴犬,容器日志會(huì)導(dǎo)致磁盤空間爆滿絮宁,如何解決這個(gè)問題?
設(shè)置docker容器日志大蟹(全局設(shè)置)
新建/etc/docker/daemon.json
绍昂,若有就不用新建了。添加log-dirver和log-opts參數(shù)偿荷,如下:
# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
-
max-size=500m
治专,意味著一個(gè)容器日志大小上限是500M -
max-file=3
,意味著一個(gè)容器最多有三個(gè)日志遭顶,分別是:容器id-json.log张峰、容器id-json.log.1、容器id-json.log.2
, 當(dāng)日志文件的大小達(dá)到500m時(shí)棒旗,自動(dòng)劃分文件保存喘批,最多劃分3個(gè)文件 - 這兩個(gè)參數(shù)設(shè)置之后說明撩荣,一個(gè)容器最多保存1500m(3 * 500)日志,超過范圍的日志不會(huì)被保存饶深,文件中保存的是最新的日志餐曹,文件會(huì)自動(dòng)滾動(dòng)更新。
# 重啟docker守護(hù)進(jìn)程
systemctl daemon-reload
# 重啟docker
systemctl restart docker
注意:設(shè)置的日志大小敌厘,只對新建的容器有效台猴。
設(shè)置完成之后,需要?jiǎng)h除容器俱两,并重新啟動(dòng)容器饱狂,我們可以看到/var/lib/docker/containers/<容器id>/hostconfig.json
文件的變化如下:
設(shè)置log-opts
之前:
cat hostconfig.json
# 其中的LogConfig如下
"LogConfig": {
"Type": "json-file",
"Config": {}
}
設(shè)置log-opts
之后:
cat hostconfig.json
# 其中的LogConfig如下
"LogConfig": {
"Type": "json-file",
"Config": {
"max-file": "3",
"max-size": "500m"
}
}
k8s中的容器日志
在k8s集群中docker容器日志/var/lib/docker/containers/容器ID/
目錄的文件如下:
-rw-r----- 1 root root 27K Oct 30 19:45 830b17595b2c5cac86e9294b00e90d90e867d7d67489b4e4ee47f847d4726efb-json.log
drwx------ 2 root root 4.0K Oct 30 19:44 checkpoints
-rw------- 1 root root 24K Oct 30 19:44 config.v2.json
-rw-r--r-- 1 root root 2.1K Oct 30 19:44 hostconfig.json
drwx------ 2 root root 4.0K Oct 30 19:44 mounts
與docker容器目錄相比少了一些文件:hostname、hosts宪彩、resolv.conf休讳、resolv.conf.hash
k8s通過sandbox(pause容器,關(guān)于pause容器的介紹可以查閱資料)
關(guān)聯(lián)了這些文件尿孔,通過查看cat config.v2.json
可以發(fā)現(xiàn)如下配置:
"HostnamePath": "/var/lib/docker/containers/27c9b0c0d1d7c8c7db515f96d5ae8c50ef7aeea02ecddcaa6546ea233dc5445c/hostname",
"HostsPath": "/var/lib/kubelet/pods/88f3a665-fdd1-4ad5-b0e0-0b613f762b4c/etc-hosts",
"ShmPath": "/var/lib/docker/containers/27c9b0c0d1d7c8c7db515f96d5ae8c50ef7aeea02ecddcaa6546ea233dc5445c/mounts/shm",
"ResolvConfPath": "/var/lib/docker/containers/27c9b0c0d1d7c8c7db515f96d5ae8c50ef7aeea02ecddcaa6546ea233dc5445c/resolv.conf",
使用命令cat /var/lib/docker/containers/<容器id>/hostconfig.json
查看hostconfig.json
的內(nèi)容俊柔,發(fā)現(xiàn)有如下設(shè)置:
{
"Binds": [
"/var/lib/kubelet/pods/e268cba1-95c6-4c16-904c-6be0b70344ea/volumes/kubernetes.io~secret/default-token-7vpxg:/var/run/secrets/kubernetes.io/serviceaccount:ro",
"/var/lib/kubelet/pods/e268cba1-95c6-4c16-904c-6be0b70344ea/etc-hosts:/etc/hosts",
"/var/lib/kubelet/pods/e268cba1-95c6-4c16-904c-6be0b70344ea/containers/demo/eee5300c:/dev/termination-log"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {
"max-file": "10",
"max-size": "100m"
}
},
"NetworkMode": cd "container:ab24db5934f3a0153d9deb3c2de054c87148c3919f1bc2b1d2c11c4c8a2c8c57",
"PortBindings": null,
//其他參數(shù)沒有列出來
......
......
}
說明一個(gè)容器中日志文件的大小最大為100m,最多10個(gè)文件活合,一個(gè)容器的日志最多保存1000m日志數(shù)據(jù)
查看/etc/docker/daemon.json
發(fā)現(xiàn)有如下配置:
cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
}
}
下面列出了一個(gè)容器的日志文件達(dá)到設(shè)置值的情況:
total 927M
drwx------ 2 root root 4.0K Sep 9 14:51 checkpoints
-rw------- 1 root root 24K Sep 9 14:51 config.v2.json
-rw-r----- 1 root root 69M Nov 16 14:21 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log
-rw-r----- 1 root root 96M Nov 16 07:24 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.1
-rw-r----- 1 root root 96M Nov 15 21:49 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.2
-rw-r----- 1 root root 96M Nov 15 12:04 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.3
-rw-r----- 1 root root 96M Nov 15 02:21 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.4
-rw-r----- 1 root root 96M Nov 14 16:47 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.5
-rw-r----- 1 root root 96M Nov 14 07:11 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.6
-rw-r----- 1 root root 96M Nov 13 21:35 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.7
-rw-r----- 1 root root 96M Nov 13 11:57 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.8
-rw-r----- 1 root root 96M Nov 13 02:21 f627a603df6e162645d6e29ad27b379b1b92607ea3a95667bcfcd851d9695f38-json.log.9
-rw-r--r-- 1 root root 2.2K Sep 9 14:51 hostconfig.json
drwx------ 2 root root 4.0K Sep 9 14:51 mounts