我有一个 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