【发布时间】:2020-10-16 12:37:44
【问题描述】:
我正在使用 docker-compose,它会生成 20 多个服务。它们中的大多数相似,但解析不同的日期时间格式或值略有不同。我的日志记录想法是将所有内容记录到 systemd,然后通过 fluent-bit 获取。
docker-compose 中的大多数服务看起来像这样(标签开头会根据我稍后要使用的解析器获得不同的名称):
A-service:
image: A-service
restart: always
network_mode: host
depends_on:
- kafka
- schema-registry
environment:
- KAFKA_BROKERS=127.0.0.1:9092
- SCHEMA_REGISTRY_URL=127.0.0.1:8081
logging:
driver: journald
options:
tag: "dockerC/{{.ImageName}}/{{.Name}}/{{.ID}}"
B-service:
image: B-service
restart: always
network_mode: host
depends_on:
- kafka
- schema-registry
environment:
- KAFKA_BROKERS=127.0.0.1:9092
- SCHEMA_REGISTRY_URL=127.0.0.1:8081
logging:
driver: journald
options:
tag: "dockerJ/{{.ImageName}}/{{.Name}}/{{.ID}}"
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没有任何问题,但是由于稍后在我的弹性搜索或流利位invalid time format错误中的不同时间格式而出现问题
我可以用不同的标签编辑和制作 8 个不同的 [INPUT] 字段,但这样做似乎只是计算机资源的腰部。
所以我的问题是:如何实际使用标签/过滤器并根据设置在fluent-bit 范围之外的Tags 发送消息(如本例中的docker-compose.yml)?
【问题讨论】:
-
尝试使用
stdout输出并查看fluent-bit 看到的真实标签。标记是 fluent-bit 记录的行的第一部分。 -
[2] docker.service: [1603090688.558286000, {"PRIORITY"=>"6", "SYSLOG_IDENTIFIER"=>"kafka/confluentinc/cp-kafka:5.5.1/sentiveillance-server- unit_kafka_1/046e4274d9ba", .... 这很有趣。我猜 [2] 表示线程,“docker.service:”是由
Systemd_Filter _SYSTEMD_UNIT=docker.service设置的标签。在这一点上,我应该如何将一个标签与另一个标签区分开来?我尝试设置 `Systemd_Filter dockerC*` 但它似乎仍然与Systemd_Filter _SYSTEMD_UNIT=docker.service匹配并搜索文档 - 我无法找到有关 Systemd_Filter 的任何好的文档
标签: docker parsing match fluent-bit