如何以流利的方式读取未转义的json?

问题描述

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

解决方法

此行为的原因是您使用的是[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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...