0

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

要添加的多个注释:

  1. 我可以从 Fluentbit 发送 HTTP 中的所有内容,它会工作,但在这种情况下,我会丢失时间戳、索引和索引类型。
  2. 必须有一个解析器或过滤器,只需在 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
4

1 回答 1

1

这种行为的原因是您正在使用[OUTPUT] Name es但发送到流利的服务器而不是 ES。如果您希望日志在到达 ES 之前通过集中式日志转发器(fleuntd 服务器),请使用以下命令:

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

于 2020-09-14T13:37:11.800 回答