百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>服务器> 详解Docker容器的日志处置
分享文章到:

详解Docker容器的日志处置

发布时间:05/13 来源:未知 浏览: 关键词:

Docker有许多的日志插件,默许运用 json-file,只要运用json-file时,sudo docker logs -f 才可以显示,输入下列下令查看docker日志插件:

$ sudo docker info | grep Logging

这里先注明一下,当容器运转时,docker会在宿主机上创建一个该容器相干的文件,然后将容器发生的日志转存到该文件下。docker logs -f 下令就会找到该文件内容并显示在终端上。

我们都晓得docker logs -f会将所有对应的服务日志输出到终端,不管服务的部署在哪个节点上,那么我此刻提出一个题目,是否每个节点对应的容器文件,都会保留该服务的完备日志备份,还是只保留该节点服务对应容器发生的日志?

由于这个题目波及到每个节点要是都用filebeat监听宿主机的容器日志文件,那么要是每个节点的容器日志都是一个完备的备份,日志就会反复,要是只是保留该节点上容器的日志,就不会。

答案是只保存该节点上容器的日志,docker logs -f 下令只不过在overlay网络模型上走了一层协定,把在其它节点上的雷同的容器日志会聚起来。

默许运用docker的json-file,首先配置daemon:

$ sudo dockerd \
--log-driver=json-file \
--log-opt labels=servicename

启动容器需要增加如下参数:

$ sudo docker service update --label servicename=test

或者直接在docker-compose.yml中标志:

version: "3"

services:
 go-gin-demo:
  image: chenghuizhang/go-gin-demo:v3
  ports:
   - 8081:8081
  networks:
   - overlay
  deploy:
   mode: replicated
   replicas: 3
  labels:
   servicename: go-gin-demoxxxxxxx
  logging:
   options:
    labels: "servicename"

networks:
 overlay:

在每个节点安装filebeat,并且filebeat.yml配置如下:

filebeat.prospectors:
- type: log
  paths:
  		# 容器的日志目录
   - /var/lib/docker/containers/*/*.log
   # 由于docker运用的log driver是json-file,因而采集到的日志格局是json格局,设置为true之后,filebeat会将日志进行json_decode处置
  json.keys_under_root: true
  tail_files: true
output.logstash:
 hosts: ["172.17.10.114:5044"]

在logstash.conf中配置索引:

output {
 elasticsearch {
  action => "index"
  hosts => ["172.17.10.114:9200"]
  # 获取日志label
  index => "%{attrs.servicename}-%{+YYYY.MM.dd}"
 }
}

Dockerfile文件需要将项目输出的日志打印到stdout和stderr中,不然json-file日志驱动不会收集到容器里面输出的日志,sudo docker logs -f就在终端显示不了容器日志了,在Dockerfile中需参加下列下令:

RUN ln -sf /dev/stdout /xx/xx.log \ # info
	&& ln -sf /dev/stderr /xx/xx.log # error

或者在在项目的log4j配置输出控制台:

<Appenders>
  <Console name="Console" target="SYSTEM_OUT">
    <PatternLayout pattern="[%d{DEFAULT}]%m"/>
  </Console>
</Appenders>

要是日志需要记载容器id名称和镜像名称,在运转容器时可以参加下列参数:

--log-opt tag="//"

终究,json-file日志插件将容器打印到控制台的日志生成到当地 /var/lib/docker/containers/*/ 目录中,格局如下:

{
  "log":"[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.",
  "stream":"stderr",
  "attrs":{
    "tag":"chenghuizhang/go-gin-demo:v3@sha256:e6c0419d64e5eda510056a38cfb803750e4ac2f0f4862d153f7c4501f576798b/mygo.2.jhqptjugfti2t4emf55sehamo/647eaa4b3913",
    "servicename":"test"
  },
  "time":"2019-01-29T10:08:59.780161908Z"
}

在logstash中格局化日志:

filter {
 grok {
  patterns_dir => "/etc/logstash/conf.d/patterns"
  match => {"message" => "%{TIMESTAMP_ISO8601:time}%{SERVICENAME:attr.servicename}%{DOCKER_TAG:attr.tag}"}
}

以上就是本文的全部内容,但愿对大家的学习有所帮忙,也但愿大家多多支撑脚本之家。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有160人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板