文档章节

docker日志监控

爱宝贝丶
 爱宝贝丶
发布于 07/22 23:19
字数 1197
阅读 31
收藏 0
  • 日志处理机制

    • 我们先来了解一下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/config
      cd ./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/udp
    volumes:
      mongo_data:
        driver: local
      es_data:
        driver: local
      graylog_journal:
        driver: local
    
  • Graylog系统配置

    • input配置

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

      • 填好相关属性,新建,然后保存,就可以开始收集日志了:

    • docker配置

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

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

        示例:

        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
        

© 著作权归作者所有

爱宝贝丶

爱宝贝丶

粉丝 325
博文 130
码字总数 430897
作品 0
武汉
程序员
私信 提问
cSphere 希云 Docker 实训第三讲开始报名

cSphere 希云 Docker实训第三讲《Docker实战之监控报警以及日志管理》开始报名啦! 如今,Docker 不仅成为了历史上最流行的开源项目之一,而且也从根本上改变了人们构建应用程序的思维方式。...

oschina
2015/06/24
1K
8
日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要。 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。考虑到容器短暂和不固...

CloudMan6
2017/10/30
0
0
Docker学习路线图 (持续更新中)

Docker学习路线图 最近很多阿里内部的同学和客户私信来咨询如何学习 Docker 技术。为此,我们列了一个路线图供大家学习Docker和阿里云容器服务。这个列表包含了一些社区的优秀资料和我们的原...

易立
2016/05/09
0
0
日志管理之 Docker logs - 每天5分钟玩转 Docker 容器技术(87)

高效的监控和日志管理对保持生产系统持续稳定地运行以及排查问题至关重要。 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。考虑到容器短暂和不固...

CloudMAN
2017/10/30
490
1
初探 ELK - 每天5分钟玩转 Docker 容器技术(89)

在开源的日志管理方案中,最出名的莫过于 ELK 了。ELK 是三个软件的合称:Elasticsearch、Logstash、Kibana。 Elasticsearch 一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是...

CloudMan6
2017/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
5
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
8
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部