Docker Fluent位过滤器似乎仅在匹配为*
我正在使用docker compose,它可以生成20多个服务。它们大多数是相似的,但解析不同的日期时间格式或值略有不同。我的日志想法是将所有内容都记录到systemd中,然后通过fluent bit进行记录 docker compose中的大多数服务如下所示(标记开头根据我稍后要使用的解析器获得不同的名称): fluent-bit.conf:Docker Fluent位过滤器似乎仅在匹配为*,docker,parsing,match,fluent-bit,Docker,Parsing,Match,Fluent Bit,我正在使用docker compose,它可以生成20多个服务。它们大多数是相似的,但解析不同的日期时间格式或值略有不同。我的日志想法是将所有内容都记录到systemd中,然后通过fluent bit进行记录 docker compose中的大多数服务如下所示(标记开头根据我稍后要使用的解析器获得不同的名称): fluent-bit.conf: [SERVICE] Flush 5 Daemon Off Log_Level info
[SERVICE]
Flush 5
Daemon Off
Log_Level info
parsers_file parsers.conf
[INPUT]
Name systemd
Tag *
Path /run/log/journal
Systemd_Filter _SYSTEMD_UNIT=docker.service
Systemd_Filter _SYSTEMD_UNIT=kubelet.service
[FILTER]
Name parser
Parser dockerJ
Match dockerJ*
Key_Name MESSAGE
Reserve_Data On
Preserve_Key On
[FILTER]
Name parser
Parser dockerC
Match dockerC*
Key_Name MESSAGE
Reserve_Data On
Preserve_Key On
[OUTPUT]
Name es
Match *
Index fluent_bit
Type json
Retry_Limit false
Host ${ELASTICSEARCH_HOST}
Port ${ELASTICSEARCH_PORT}
HTTP_User ${ELASTICSEARCH_USERNAME}
HTTP_Passwd ${ELASTICSEARCH_PASSWORD}
tls off
tls.verify Off
parsers.conf
[PARSER]
Name dockerJ
Format json
Time_Key timeStamp
Time_Format %Y-%m-%dT%H:%M:%S.%L
Time_Keep On
# Command | Decoder | Field | Optional Action
# =============|==================|=================
Decode_Field_As escaped_utf8 MESSAGE do_next
Decode_Field json MESSAGE
[PARSER]
Name dockerC
Format json
Time_Key time
Time_Format %Y/%m/%d %H:%M:%S.%L
Time_Keep On
# Command | Decoder | Field | Optional Action
# =============|==================|=================
Decode_Field_As escaped_utf8 MESSAGE do_next
Decode_Field json MESSAGE
如果我更改过滤器匹配:
Match dockerC*
->Match*
Match dockerJ*
->Match*
它匹配并在es中解析JSON,没有任何问题,但在我的弹性搜索中,由于不同的时间格式或fluent bit无效的时间格式
错误,我会遇到问题
我可以用不同的标签编辑和制作8个不同的[INPUT]字段,但这似乎只是计算机资源的一小部分
因此,我的问题是:如何实际使用标记/过滤器,并基于
fluent bit
范围外设置的标记发送消息(例如在本例中-docker compose.yml
)?Systemd_Filter\u Systemd_UNIT=docker.service
将标记设置为“docker.service”
而不是我期望的标记字段。要使用我想要的标签,我必须手动更改每个标签。添加rewrite_标签
filter可实现以下目标:
[FILTER]
Name rewrite_tag
Match docker.service*
Rule $NAME_OF_THE_TAG_KEY .* $NAME_OF_THE_TAG_KEY false
Emitter_Name re_emitted
因为我想更改我刚刚添加的与任何内容匹配的*
regex的每个字段尝试使用stdout
输出并查看fluent bit看到的真正标记。标记是fluent bit记录的行的第一部分。[2]docker.service:[1603090688.558286000,{“PRIORITY”=>“6”,“SYSLOG\u IDENTIFIER”=>“kafka/confluentinc/cp kafka:5.5.1/sentiveillance-server-unit\u kafka\u 1/046e4274d9ba”,这很有趣。我猜[2]是指线程和“docker.service”:是由Systemd\u Filter\u Systemd\u UNIT=docker.service
设置的标记。在这一点上,我应该如何区分一个标记和另一个标记?我尝试设置'Systemd\u Filter dockerC*',但它似乎仍然与Systemd\u Filter\u Systemd\u UNIT=docker.service
匹配,并搜索文档-我找不到任何好的标记关于Systemd_过滤器的文档
[FILTER]
Name rewrite_tag
Match docker.service*
Rule $NAME_OF_THE_TAG_KEY .* $NAME_OF_THE_TAG_KEY false
Emitter_Name re_emitted