问题描述
我有一个Fluent Bit设置,它以Elasticsearch格式将数据发送到SSL中的Haproxy。 Haproxy终止SSL并将数据转发到Fluentd。 现在是问题所在,Fluentd接收到未转义的数据,因此无法将其转发给ES。
Fluentd接收到此数据(我添加了换行符以提高Stackoverflow的可读性):
2020-09-14 11:07:16 +0000 [error]: #0 failed to process request error_class=RuntimeError
error="Received event is not json: {\"index\":{\"_index\":\"fluent_bit\",\"_type\":\"my_type
\"}}\n{\"@timestamp\":\"2020-09-14T11:07:15.173Z\",\"cpu_p\":3.583333333333333,\"user_p\":2.75,\"system_p\":0.8333333333333334,\"cpu0.p_cpu\":4,\"cpu0.p_user\":1,\"cpu0.p_system
\":3,\"cpu1.p_cpu\":2,\"cpu1.p_user\":1,\"cpu1.p_system\":1,\"cpu2.p_cpu\":4,\"cpu2.p_user
\":3,\"cpu2.p_system\":1,\"cpu3.p_cpu\":6,\"cpu3.p_user\":4,\"cpu3.p_system\":2,\"cpu4.p_cpu
\":3,\"cpu4.p_user\":3,\"cpu4.p_system\":0,\"cpu5.p_cpu\":6,\"cpu5.p_user\":6,\"cpu5.p_system
\":0,\"cpu6.p_cpu\":4,\"cpu6.p_user\":3,\"cpu6.p_system\":1,\"cpu7.p_cpu\":4,\"cpu7.p_user
\":4,\"cpu7.p_system\":0,\"cpu8.p_cpu\":3,\"cpu8.p_user\":2,\"cpu8.p_system\":1,\"cpu9.p_cpu
\":3,\"cpu9.p_user\":3,\"cpu9.p_system\":0,\"cpu10.p_cpu\":1,\"cpu10.p_user\":0,\"cpu10.p_system
\":1,\"cpu11.p_cpu\":2,\"cpu11.p_user\":2,\"cpu11.p_system\":0}\n"
要添加的多个注释:
- 我可以从Fluentbit发送HTTP中的所有内容,并且可以正常工作,但是在这种情况下,我会丢失时间戳,索引和索引类型。
- 必须有一个解析器或过滤器,该解析器或过滤器仅将Fluentd中当前未转义的json进行转换,但实际上我找不到amy。我愿意接受任何解决方案,任何堆栈。
流利位设置:
[OUTPUT]
Name es
Match *
Host <my-domain>
Port 443
Index fluent_bit
Type my_type
# + TLS settings
有效设置:
<source>
@type http
port 8888
bind 0.0.0.0
body_size_limit 32m
keepalive_timeout 10s
add_remote_addr true
format json
</source>
基本的HAProxy后端设置:
backend nodes
mode http
option forwardfor
timeout server 15m
balance roundrobin
server elastic-us-east-1a ip:port check inter 5000 downinter 500
解决方法
此行为的原因是您使用的是[OUTPUT] Name es
,但发送到了流畅的服务器而不是ES。
如果您想让日志在进入ES之前先通过集中式日志转发器(不受干扰的服务器),请使用以下方法:
FluentBit
...
[OUTPUT]
Name forward
...
熟练
...
<source>
type forward
bind 0.0.0.0
port 24224
</source>
<match **>
@type elasticsearch
...
</match>
...
有关日志转发的FluentBit文档:https://docs.fluentbit.io/manual/pipeline/outputs/forward
或,可以选择直接从FluentBit发送到ES:https://docs.fluentbit.io/manual/pipeline/outputs/elasticsearch