在字段中转义连字符以获取logstash

时间:2019-11-21 08:39:27

标签: json parsing escaping logstash

我在进行logstash解析时遇到问题,我需要提取一个由连字符分隔的字段:

if "[payload][text][code][session-id]" {
  mutate {
    add_field => { "session-id" => "%{[payload][text][code][session-id]}" }
  }
}

该条件之所以有效,是因为引号,但是当我运行过滤器时,它返回:

t session-id: %{[payload][text][code][session-id]}

我期望的是:

t session-id: HK5wfPQgzkKHmgzVF

如何在有效载荷字段中放置连字符?

1 个答案:

答案 0 :(得分:1)

您的条件是错误的,将字段名放在双引号之间将使其成为字符串,并且始终为真,因此您的session-id过滤器将始终运行并在字段[payload][text][code][session-id]中添加内容字段%{[payload][text][code][session-id]}中的,如果该字段不存在,则字符串session-id将作为字段的值添加到if [payload][text][code][session-id]中。

您的条件应为input { generator { message => "HK5wfPQgzkKHmgzVF" count => 1 } } filter { dissect { mapping => { "message" => "%{[payload][text][code][session-id]}" } } if "[payload][text][code][session-id]" { mutate { add_field => { "session-id" => "%{[payload][text][code][session-id]}"} } } } output { stdout { } } ,且不要使用双引号。

您可以通过以下测试管道来重现此行为

session-id

运行此管道将为您提供值为HK5wfPQgzkKHmgzVF的字段[payload][text][code][session-id],因为如果将字段名称更改为{,则字段[payload][text][code][session-id-test]存在并且您的条件始终为true dissect块中的{1}}并再次运行管道,session-id的值现在将为%{[payload][text][code][session-id]}

从条件中删除双引号,只有在字段[payload][text][code][session-id]确实存在的情况下,它才会为真。