gpt4 book ai didi

docker - 如何将Docker主机传递给流利的日志

转载 作者:行者123 更新时间:2023-12-02 09:41:27 25 4
gpt4 key购买 nike

我使用fluentd日志驱动程序来收集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":"..."}

最佳答案

请纠正我,因为我无法发表评论。我认为这是我们可以实现的方式。当使用给定的命令创建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前缀部分。 :)

关于docker - 如何将Docker主机传递给流利的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46517623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com