Fluentd将Docker log中stdout和stderr分开

Fluentd 配置文件-client fluentd 到 server fluentd,从客户端机器收集日志,发送到服务器端。客户端收集日志的时候,使用docker的log-driver。打印出来的日志格式大致如下:

2016-09-18T23:42:36+08:00 docker.temp01 {“container_id”:”cc3c42b73c43eb56f53804da81f3ea7850d0f85bf48f7b3095b73d841dee7010″,”container_name”:”/temp01″,”source”:”stdout”,”log”:”hello”}

在日志中source字段,fluentd接收docker的log-driver会接收两个来源,stdout/stderr官网说明),在一般的日志收集中我们不会用到stdout,所以需要将其除去。

这里主要使用fluent-plugin-rewrite-tag-filter插件,插件官网文档Github地址

安装:

fluent-gem install fluent-plugin-rewrite-tag-filter

或者

/opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-rewrite-tag-filter

客户端Fluent

<source>
  type forward
  log_level error
  port 24224
  bind 0.0.0.0
</source>

# 接收来docker的log-driver的tag
<match docker.*>
  type rewrite_tag_filter 
  # 根据source字段,重新把tag进行标记
  rewriterule1 source stdout out.${tag}
  rewriterule2 source stderr err.${tag}
</match>

# source字段为stdout的,重新标记tag,新的tag为out.docker.*
<match out.docker.*>
  type stdout
</match>

# source字段为stderr的,重新标记tag,新的tag为err.docker.*
# 发送给192.168.126.136 Fluentd 服务器
<match err.docker.*>
    type forward    
    <server>
    host 192.168.126.136
    port 24224
    </server>
    flush_interval 5s
</match>

用此配置文件运行fluentd:fluentd -c docker_in06.conf

服务器端fluentd

<source>
  type forward
  port 24224
  bind 0.0.0.0
  log_level error
</source>

<match err.docker.*>
  type forest
  subtype file
  <template>
    type file_alternative
    path /home/lee/fluentd-log/${tag_parts[2]}/temp
  </template>
</match>

从客户端转发过来的日志,会根据服务器端的match进行相应的匹配,并存储在相应的地方

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部