千家信息网

使用docker怎么实现日志监控

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家介绍使用docker怎么实现日志监控,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。日志处理机制我们先来了解一下docker日志处理的机制,当启动一个容器的时候,它其
千家信息网最后更新 2026年11月02日使用docker怎么实现日志监控

这篇文章给大家介绍使用docker怎么实现日志监控,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

  • 日志处理机制

    • 我们先来了解一下docker日志处理的机制,当启动一个容器的时候,它其实是docker daemon的一个子进程,docker daemon可以拿到你容器里面进程的标准输出,拿到标准输出后,它会通过自身的一个LogDriver模块来处理,LogDriver支持的方式很多,可以写到本地的文件(默认方式),可以发送到syslog等。

    • docker会默认手机应用程序的标准输出存储到一个json.log的文件中,文件的格式类似下面这种:

      {"log": "root@c835298de6dd:/# ls\r\n", "stream": "stdout", "time": "xxoo.155863426Z"}{"log":"bin boot dev\u0009etc home lib\u0009lib64 media mnt opt\u0009proc root run sbin selinux\u0009srv sys tmp usr var\r\n"}


      以一行一个作为一条json数据存储。docker的这种日志存储方式是可以配置的,具体参数可以在运行run启动容器的时候通过log-driver进行配置,具体配置可以参考log-driver。

    • docker默认使用了json-file driver作为log driver,而gelf则是我们需要使用的log driver。当容器多了,或者是采用类似swarm集群部署docker的时候,各种日志分散存储在各个json.log文件中,当查找问题或者进行相关统计的时候,分散的日志对我们来说非常不友好。我们需要一个能够集中管理docker日志的工具,这就是graylog。

  • Graylog

    • docker原生支持graylog协议,直接将日志发送到graylog(通过gelf协议);

    • graylog官方提供了将本身部署在docker的支持。

  • graylog官方提供了dockerfile供我们快速的在docker上部署日志系统,在这个docker hub的地址中,也提供了docker-compose.yml来快速部署整个graylog栈,包含了MongoDB、elasticsearch,而不需要分别单独进行部署。

    https://hub.docker.com/r/graylog/graylog


  • graylog部署

    • 创建一个目录用来部署graylog,本文假设目录为/root/graylog,以下所有操作都是在/root/graylog中进行的。

    • 初始化目录和配置文件

      # 创建数据目录mkdir -p ./graylog/data# 创建配置文件目录mkdir -p ./graylog/configcd ./graylog/config# 直接下载官方推荐的配置文件wget https://raw.githubusercontent.com/Graylog2/graylog-docker/2.5/config/graylog.conf# 日志配置文件wget https://raw.githubusercontent.com/Graylog2/graylog-docker/2.5/config/log4j2.xml


    • 修改下载完的graylog.conf中的root_timezone为GMT+0800中国时区

      root_timezone=Etc/GMT-8


    • 新建docker-compose.yml来供docker-compose快速启动完成服务。需要注意的是,由于docker-compose内容较多,我们以附件的形式存放在了当前同级目录;

    • 启动整个服务

      docker-compose up


    • 如果没有问题的话,会看到graylog webserver started的终端输出消息。访问http://{server}:9000会看到graylog的web界面,使用用户名admin,密码admin来登录后台,至此部署完成。

  • 完整的docker-compose文件

    version: '2'services:  mongodb:    image: mongo:3    volumes:      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime      - mongo_data:/data/db  elasticsearch:    image: elasticsearch:6.6.2    volumes:      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime      - es_data:/usr/share/elasticsearch/data# 这里需要在本地添加一个jvm.options文件,并且指定垃圾回收器为G1GC,否则无法启动成功      - /Users/zhangxufeng/xufeng.zhang/docker/conf-compose/graylog/graylog/jvm.options:/usr/share/elasticsearch/config/jvm.options    environment:      - http.host=0.0.0.0      - transport.host=localhost      - network.host=0.0.0.0      - xpack.security.enabled=false      - xpack.watcher.enabled=false      - xpack.monitoring.enabled=false      - xpack.security.audit.enabled=false      - xpack.ml.enabled=false      - xpack.graph.enabled=false      - ES_JAVA_OPTS=-Xms512m -Xmx512m -XX:+UseG1GC    ulimits:      memlock:        soft: -1        hard: -1    mem_limit: 512M  graylog:    image: graylog/graylog:2.5    volumes:      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime      - graylog_journal:/usr/share/graylog/data/journal      - ./graylog/config:/usr/share/graylog/data/config    environment:      - GRAYLOG_PASSWORD_SECRET=admin_zxfwy1314_      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918      - GRAYLOG_WEB_ENDPOINT_URI=http://127.0.0.1:9000/api    links:      - mongodb:mongo      - elasticsearch    depends_on:      - mongodb      - elasticsearch    ports:      - 9000:9000      - 514:514      - 514:514/udp      - 12201:12201      - 12201:12201/udpvolumes:  mongo_data:    driver: local  es_data:    driver: local  graylog_journal:    driver: local


  • Graylog系统配置

    • 如果docker通过命令行启动,可以在run命令中加上如下参数:

      docker run --log-driver=gelf --log-opt gelf-address=udp://{graylog服务器地址}:12201 --log-opt tag=<当前容器服务标签,用来供graylog查询的时候进行分类>  <运行命令>


      示例:

      docker run -d --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" busybox sh -c 'while true; do echo "Hello, this is A"; sleep 10; done;'


    • 如果通过docker-compose命令,则可以在docker-compose.yml中加入相关配置,一下用NGINX容器举例:

      version: '2'services:  nginx:    image: nginx:latest    ports:      - "80:80"    logging:      driver: "gelf"      options:        gelf-address: "udp://localhost:12201"        tag: front-nginx


    • graylog的日志收集通过定义input对象来完成,在graylogweb管理界面中按照如下方式进入input对象配置,选择GELF UDP协议来新建一个输入器:



关于使用docker怎么实现日志监控就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

日志 文件 配置 目录 容器 方式 时候 存储 输出 内容 命令 官方 标准 处理 支持 服务 监控 参数 地址 对象 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技活动banner 智能科技公司是互联网公司吗 互联网科技公司电话 金融科技和互联网金融 顺网科技2021年互联网排名 互联网科技公司的市场部门 辽宁互联网新科技 亳州好赞互联网科技有限公司 中国科技创新与世界互联网大会 燊美集互联网科技有限公司 东莞新华互联网科技学校 长沙茂晟互联网科技有限公司 2021互联网科技公司排名 杭州披云加互联网科技有限公司 互联网科技年终奖 广州互联网高科技取餐柜 互联网科技企业商标注意事项 求路客互联网科技电话 山东蛋芒互联网科技有限公司 北京瑞云互联网科技有限公司 湖北九亚互联网络科技有限公司 互联网 的科技创新 互联网科技公司官网 互联网与未来科技 郑州华宇互联网科技 青岛中康互联网医疗科技有限公司 广州优美互联网科技 重庆互联网医院沙龙医盟信息科技 中和天地互联网科技有限公司 福州德业互联网科技
0