一套软件系统的整个生命周期中,其中超过80%的时间都是在运维。运维中有几块不可缺,其中监控和日志,虽然没有这么复杂,但却是运维的基础。
docker的出现,颠覆了原基础架构以及应用部署的模式。今天聊一下docker环境的日志。
我们先准备个测试环境
先在我们的docker host上起一个tomcat的容器
输入命令docker search tomcat
我们选择STARS最高的一个镜像
然后pull下来
docker pull docker.io/tomcat
我们使用docker images 找到下载完成的镜像
现在我们启动一个tomcat的容器
docker run -d -p 8080:8080 docker.io/tomcat
启动成功后,我们可以看到完整的容器id
7df4f4428df4290497abf70c8fee013f405ce22c61c3ca797c57dfd155e28545
我们也可以使用docker ps 查看我们刚才启动的容器
但是container id 会被阶段,显示并不完整,但是实际上显示部分已经是唯一的了
docker ps --no-trunc 命令可以不截断完整的id
大家要记住这个id号,这个很重要
基础环境已经准备好了。
我们现在要开始查看这个容器的日志了
我们输入(命令格式docker logs container-id)docker logs 7df4f4428df4290497abf70c8fee013f405ce22c61c3ca797c57dfd155e28545
我们会看到有日志打出,屏幕上显示的都是tomcat的日志
使用docker logs还有几个参数可以选择 例如 –t 是显示时间,时间会精确到秒后9位
而使用 docker logs –f 则是实时输出日志
重点来了,为什么容器内的日志可以通过docker logs查看呢?是因为容器内应用的日志都输出到标准输出了(打到console,或者打到屏幕上,这样说比较容易理解)
如果你的日志还是写在文件里,那是无法通过docker logs查看的!
问题来了,如果有人说:我不想通过docker logs查看日志,我想直接拿到日志文件,那文件在哪里呢?
文件在这个位置
/var/lib/docker/containers/
进入这个目录我ls了一下,然后我就惊呆了! 这都是什么呀
我的确进入了一个计算机的世界!
别急,这些都是以容器id为名称的文件夹,您需要的日志都在这些文件夹里
还记得我刚才让您记住的容器id么? 我们cd 进入这个目录
还真有这个目录!好神奇
ls一下,发现有一个*-json.log的文件
大哥您要的日志文件在此!
当然如果您公司内部有统一的日志收集系统例如splunk,elk什么,也可以抽取这个位置的日志。
回到刚才中间的聊到的一个问题,如果您的日志写在本地怎么办?
有2个方法,也许不止
1,您可以exec到容器内去查看,具体查看的方法与您之前直接在电脑上查看日志是一样的。
2,您可以在容器启动的时候挂在一个volume,可以将日志写入到这volume上,您可以直接到这个volume里上查看日志。
今天就到这里
客官,这是您的docker 请用好。