logstash Filebeat处理器没有解析json日志文件中的字段异常

jjjwad0x  于 2023-09-28  发布在  Logstash
关注(0)|答案(1)|浏览(213)

我想将应用程序中的JSON日志文件摄取到ElasticSearch中。为此,我使用运行在Elastic agent上的Custom log files集成,该Elastic agentFleet Manager管理。
日志文件由一个JSON对象组成,每行一个,如下所示:

{"timestamp":"2023-08-14T18:00:55.554","level":"ERROR","thread":"http-nio-8080-exec-5","logger":"some class","message":"API error.","context":"default","exception":"some exception message\r\n\t stack..."}
{"timestamp":"2023-08-14T18:00:55.554", ...

在字段中没有换行符或特殊字符,因为从一些帖子建议。
agent policy定义的处理器设置如下:

- decode_json_fields:
    fields: ["message","context"]
    process_array: true
    max_depth: 1
    target: ""
    overwrite_keys: true
    add_error_key: false

它工作正常,字段messagecontextloggertimestamp等都被摄取。所有字段,但不包括exception字段。
添加exception字段根本没有效果。
我怀疑我需要将异常字段添加到某个模式中,但我无法理解。我们现在开始使用Elastic Search,对它的工作原理知之甚少。
我怀疑的另一件事是,这可能是对字段大小的一些限制。异常字段正在填充堆栈信息,这可能导致>5k大小的数据。我不知道有没有这个限度。
有什么建议吗?

1tu0hz3e

1tu0hz3e1#

问题是字段的大小超出了某个限制。通过将处理器设置为以2k最大大小截断字段,字段被正确摄取。
新配置:

- decode_json_fields:
    fields: ["message","context","exception"]
    process_array: true
    max_depth: 1
    target: ""
    overwrite_keys: true
    add_error_key: false

- truncate_fields:
  fields:
    - exception
  max_characters: 2048
  fail_on_error: false
  ignore_missing: true

为了避免丢失一些重要的堆栈数据,有必要调整字段的填充方式。我发现有几种策略可以减少堆栈大小。例如,一种方法是反转堆栈的顺序,因此源代码应该首先写入。

相关问题