Docker Fluent位过滤器似乎仅在匹配为*

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

我正在使用docker compose,它可以生成20多个服务。它们大多数是相似的,但解析不同的日期时间格式或值略有不同。我的日志想法是将所有内容都记录到systemd中,然后通过fluent bit进行记录

docker compose中的大多数服务如下所示(标记开头根据我稍后要使用的解析器获得不同的名称):

fluent-bit.conf:

[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