docker-fluentd, 使用Fluentd收集其他 Docker 容器日志的Docker 容器

分享于 

4分钟阅读

GitHub

  繁體 雙語
Docker container to collect other docker container logs with Fluentd
  • 源代码名称:docker-fluentd
  • 源代码网址:http://www.github.com/kiyoto/docker-fluentd
  • docker-fluentd源代码文档
  • docker-fluentd源代码下载
  • Git URL:
    git://www.github.com/kiyoto/docker-fluentd.git
    Git Clone代码到本地:
    git clone http://www.github.com/kiyoto/docker-fluentd
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/kiyoto/docker-fluentd
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    :用于记录其他容器日志的容器:容器

    什么

    运行以下命令,可以将运行在同一主机上的Docker 容器的日志聚合在一起:

    
    docker run -d -v/var/lib/docker/containers:/var/lib/docker/containers kiyoto/docker-fluentd
    
    
    
    

    默认情况下,容器日志存储在/var/log/docker/yyyyMMdd.log inside 日志容器中。 数据被缓冲,因此你可能会看到像/var/log/docker/20141114. b507c71e6fe540eab.log 这样的缓冲文件,其中"b507c71e6fe540eab"是散列。 你可以将该容器卷装载回主机。 另外,通过修改 fluent.conf 和重建 Docker 映像,可以将日志流到 Elasticsearch。Amazon S3。MongoDB。宝藏数据等等。

    除了每一行都有"container_id"字段外,输出日志看起来完全像 Docker 格式的日志的JSON:

    
    {"log":"Fri Nov 14 01:03:19 UTC 2014rn","stream":"stdout","container_id":"db18480728ed247a64bf6df49684cb246a38bbe11f14276d4c2bb84f56255ff4"}
    
    
    
    

    docker-fluentd 使用 Fluentd inside 来跟踪安装在 /var/lib/docker/containers/<CONTAINER_ID>/<CONTAINER_ID>-json.log 它使用尾输入插件插件对每个 Docker 容器发出的格式化的日志文件进行

    然后,在使用文件输出插件写入本地文件之前,Fluentd使用记录转换器添加"container_id"字段。

    Fluentd有很多插件,而且可能支持你的数据输出目标。 例如如果希望将日志输出为Elasticsearch而不是文件,那么可以将以下行添加到 Dockerfile

    
    RUN ["apt-get","update"]
    
    
    RUN ["apt-get","install","--yes","make","libcurl4-gnutls-dev"]
    
    
    RUN ["/usr/local/bin/gem","install","fluent-plugin-elasticsearch","--no-rdoc","--no-ri"]
    
    
    
    

    在"入口点"之前这将安装Elasticsearch的输出插件。 然后,按如下方式更新 fluent.conf

    
    <source>
    
    
     type tail
    
    
     path/var/lib/docker/containers/*/*-json.log
    
    
     pos_file/var/log/fluentd-docker.pos
    
    
     time_format %Y-%m-%dT%H:%M:%S 
    
    
     tag docker.*
    
    
     format json
    
    
    </source>
    
    
    
    <match docker.var.lib.docker.containers.*.*.log>
    
    
     type record_reformer
    
    
     container_id ${tag_parts[5]}
    
    
     tag docker.all
    
    
    </match>
    
    
    
    <match docker.all>
    
    
     type elasticsearch
    
    
     log_level info
    
    
     host YOUR_ES_HOST
    
    
     port YOUR_ES_PORT
    
    
     include_tag_key true 
    
    
     logstash_format true
    
    
     flush_intercal 5s
    
    
    </match>
    
    
    
    

    下一步?


    COL  DOC  Collect  log  Docker  DOCK  
    相关文章