zoukankan      html  css  js  c++  java
  • docker容器日志收集方案(方案一 filebeat+本地日志收集)

    filebeat不用多说就是扫描本地磁盘日志文件,读取文件内容然后远程传输。

    docker容器日志默认记录方式为 json-file 就是将日志以json格式记录在磁盘上

    格式如下:

    {
     "log": "2018-11-16 01:24:30.372  INFO [demo1,786a42d3b893168f,786a42d3b893168f,false] 1 --- [hystrix-test1-2] demo1.demo1.TestRest                     : 我收到了其他服务调用 ",
     "stream": "stdout",
     "time": "2018-11-16T01:24:30.37454385Z"
    }

    docker日志记录位置默认(centos7)为:

    /var/lib/docker/containers

    这个目录下面就是以各个容器命名的文件夹,文件夹下面就是日志如下图:

    那这个时候我们针对每个容器进行参数设置就可以了,设置参数如下示例(这里只给出docker swarm集群的一个语句,单机可以看docker官网):

    sudo docker service update --log-driver json-file --log-opt max-size=1m --log-opt max-file=3 pbblyrmsof5t

     --log-driver 为日志驱动类型

     --log-opt 为日志驱动参数,可以是多个具体可以查看docker官方文档(https://docs.docker-cn.com/engine/admin/logging/json-file/#usage

     --log-opt max-size=1m  设置日志文件每个大小
    
     --log-opt max-file=3 设置日志文件最多几个

    这样我们就可以设置filebeat进行目录扫描然后传输到ES(elasticsearch)搜索因引擎中。

    不过很遗憾有个潜在的问题,这个参数里面没有按时间进行滚动删除日志文件的策略,所以上面的数字要设计好,以免还没有吧日志传输出去就被删掉的情况。

    下面是所有配置参数(也可官方查看):

    这个方案有一个麻烦的问题,每个文件夹代表一个容器,如果要区分索引的话就需要设置,或解析日志,多个容器副本在多个宿主机上运行,需要拿到对应的服务名称等关键字段。

    如果大锅烩或一起全部收集可能会造成日志混乱,搜索排除条件增多,性能不佳等(ES服务器配置牛逼除外)

  • 相关阅读:
    一:Go编程语言规范--块、声明、作用域
    三:shell运算符
    二:shell之bash变量
    一:Shell基础
    Linux vim(4)
    二:C语言(分之结构)
    一:c语言(数据类型和运算符)
    吐槽一下百度系网站图片的一些问题
    深入理解querySelector(All)
    当fixed元素相互嵌套时chrome下父元素会影响子元素的层叠关系
  • 原文地址:https://www.cnblogs.com/zhyg/p/10006706.html
Copyright © 2011-2022 走看看