Fluentd 配置文件-client fluentd 到 server fluentd

使用fluentd收集docker容器日志,使用docker的log-driver,并且使用fluentd的高可用配置方式(Fluentd High Availability Configuration)

即,在一台宿主机上运行docker容器,同时该宿主机上也运行着一个fluentd进程(log forwarders,这个进程暂且成为fluentd的客户端程序client)。

使用这个宿主机上的fluentd程序收集docker日志,并通过网络向另一个机器(也运行着fluentd程序,暂且称为fluentd服务器程序,log aggregators)发送日志,fluentd收集之后存在在某个地方,或者输出到标准输出。

fluentd_%e9%ab%98%e5%8f%af%e7%94%a8

Client机器

# 客户端fluentd配置文件
<source>
  type forward
  port 24224
  bind 0.0.0.0
</source>

<match docker.test*>
    type forward    
    <server>
    host 192.168.126.136
    port 24224
    </server>
    flush_interval 60s
</match>

<match docker.temp*>
    type forward    
    <server>
    host 192.168.126.136
    port 24224
    </server>
    flush_interval 60s
</match>
# 客户端运行命令,开启fluentd
# 其中fluentd可执行文件是在/opt/td-agent/embedded/bin/ 目录下
# 配置文件是在/etc/td-agent/目录下
fluentd -c docker_in04.conf

# 运行docker容器
# 指定docker的容器名,指定fluentd的log-driver选项异步
# 指定tag
docker run --name test01 --log-driver=fluentd --log-opt tag="docker.{{.Name}}" \ 
--log-opt fluentd-async-connect=true -d -p 8001:8000 imekaku/simple-web python /work/simple.py

docker run --name temp01 --log-driver=fluentd --log-opt tag="docker.{{.Name}}" \ 
--log-opt fluentd-async-connect=true -d -p 8002:8000 imekaku/simple-web python /work/simple.py

注意:这里最好需要再fluentd的选项中指定--log-opt fluentd-async-connect=true,如果没有指定,当你的fluentd进程挂了之后,容器就会立即终止,这样服务就挂了。

官网原文:”If container cannot connect to the Fluentd daemon on the specified address and fluentd-async-connect is not enabled, the container stops immediately.”

注意:运行fluentd时,如果遇到:

2016-09-18 11:35:00 -0400 [error]: unexpected error error_class=Errno::EADDRINUSE error=#< errno::eaddrinuse: Address already in use - bind(2) for "0.0.0.0" port 24224>

类似的错误,需要先关掉td-agent,在终端执行/etc/init.d/td-agent stop

提示:log tag支持如下,官网说明

{{.ID}},{{.FullID}},{{.Name}},{{.ImageID}},{{.ImageFullID}},{{.ImageName}},{{.DaemonName}}

fluentd服务器(接收多个fluentd发送的消息)

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

<match docker.test*>
  type stdout
</match>

<match docker.temp*>
  type file
  path /home/lee/fluentd-log
</match>
/opt/td-agent/embedded/bin/fluentd -c docker_in03.conf

可以得到在stdout和/home/lee/fluentd-log目录下有相应的日志生成

目前遇到的问题2016年9月14日16:18:44

1. 在fluentd服务器输出路径是指定的,如上个例子中path /home/lee/fluentd-log,需要中tag中获取名字

解决办法:Fluentd 服务器log aggregators根据tag输出到指定路径

2. 在fluentd中获取得到的json格式的日志文件,取出log字段

解决办法:Fluentd提取发送日志中的value

3. 区分出fluentd从docker中获取日志来源,有两种来源:stdout,stderr

解决办法:Fluentd将Docker log中stdout和stderr分开

一个回复在 “Fluentd 配置文件-client fluentd 到 server fluentd

发表回复

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

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

返回顶部