千家信息网

使用docker怎么实现日志监控

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章给大家介绍使用docker怎么实现日志监控,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。日志处理机制我们先来了解一下docker日志处理的机制,当启动一个容器的时候,它其
千家信息网最后更新 2025年12月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安全错误 数据库的锁怎样保障安全 服务器被攻击解决方案 宜兴自动软件开发项目信息 高新区管理软件开发方法 网络安全发展观错误的 怎么买服务器代理游戏 网络安全公司的logo spark 查询数据库 堡垒之夜安全计划服务器在哪里 软件开发实验心得 嘉兴学软件开发总结 上汽汽车软件开发 服务器管理员权限怎么设置 天津渣打环球软件开发面试 浙江咨询网络安全工程平台资质 服务器有必要装加速阵列卡吗 查看服务器是否有重启任务 数据库的事务面试真题 软件开发所需要的性能需求 广东配件管理软件开发 hp服务器售后电话咨询 滨湖区加工软件开发注意事项 网络安全审查办公室社 江宁区工商软件开发 派出所加强网络安全培训 蓝天播放器苹果手机服务器异常 国家网络安全法第六十二条 服务器流量越多越贵吗 网络安全渗透软件有哪些 西瓜开播提示服务器升级中 数据库索引通俗理解
0