我使用流利的日志驱动程序来收集docker swarm集群中的日志。
我创建了流利的服务:
docker service create --name fluentd --network my-network \
--mount type=bind,src=/data/fluentd,dst=/fluentd/etc \
--mount type=bind,src=/data/fluentd/logs,dst=/fluentd/log \
-p 24224:24224 -p 24224:24224/udp\
-e FLUENTD_CONF=fluent.conf fluent/fluentd:v0.12;
然后我用流利的日志驱动程序创建了服务:
docker service create --name service-name --network my-network \
--log-driver=fluentd --log-opt fluentd-address=123.456.789.123:24224
--log-opt tag="service-name" \
--with-registry-auth service-name;
我的fluent.conf
是
<source>
@type forward
port 24224
bind 0.0.0.0
</source>
<match service-name>
@type copy
<store>
path /fluentd/log/service-name.*.log
@type file
time_slice_format %Y.%m.%d
time_slice_wait 1m
time_format %Y%m%dT%H%M%S%z
compress gzip
format json
</store>
</match>
日志文本格式如下:
{"container_id":"d798ca314b54a27f8b0e9acad46879632c7fdb1796d17c6850665ca93995c717",
"container_name":"/service-name.1.rrcfvwvzrn17pyyt2zi69nhag",
"source":"stdout","log":"2017-10-02 00:35:59 [qtp2091640041-40] DEBUG Log message..."}
如何在女巫容器上添加服务器主机名,以便熟悉日志消息?
我尝试过这种方法:
1)创建安装了docker_metadata_filter的新流畅图像。我使用了以下Dockerfile
:
FROM fluent/fluentd:v0.12-onbuild
RUN apk add --update --virtual .build-deps \
sudo build-base ruby-dev \
&& sudo gem install \
fluent-plugin-docker_metadata_filter \
&& sudo gem sources --clear-all \
&& apk del .build-deps \
&& rm -rf /var/cache/apk/* \
/home/fluent/.gem/ruby/2.3.0/cache/*.gem
2)使用新图片运行fluentd
服务。
但我仍然有格式的日志
{"container_id":"...",
"container_name":"...",
"source":"stdout",
"log":"..."}
答案 0 :(得分:0)
请纠正我,因为我无法发表评论。我认为这是我们可以实现的方式。当使用给定的命令创建docker服务时,请在标签选项中包含服务器的主机名。
docker service create --name service-name --log-driver=fluentd --log-opt tag="service-name"_${HOSTNAME}
现在,您的匹配项将为服务名称。* 。
由于<store>
部分与<match>
部分相似。您可以执行以下操作,而不是format json
<format>
@type json
include_tag_key true
tag_key event_tag
</format>
现在,您的json输出应该具有一个名为event_tag的新字段。
{"container_id":"...",
"container_name":"...",
"source":"stdout",
"log":"...",
"event_tag":"service-name_SERVER01"}
参考- https://docs.fluentd.org/v1.0/articles/out_copy#%3Cstore%3E-section https://docs.fluentd.org/v1.0/articles/formatter_json
让我知道这是否行不通。对于$ {HOSTNAME},我假设您正在使用bash在Linux服务器上运行swarm,并且可以在event_tag字段值的service-name前缀部分使用ok。 :)