【问题标题】:Logstash pipeline "in" clauseLogstash 管道“in”子句
【发布时间】:2019-02-27 10:54:34
【问题描述】:

快速背景:

  • 我们正在使用文件节拍向消息添加字段 - 一个“管道标记”和一个“服务”标记。
  • 理想情况下,它们将进入一个名为foo-${[fields][service]}-${+YYYY.MM.dd} 的索引

但是,我们担心“某些”服务器可能配置错误并且没有这些标记(我们有自动化来保护我们,但我们全都采用腰带和护腕的方法)。

Logstash 文档充其量是模糊的,有时甚至是错误的,例如在某些元素周围使用或不使用引号。但这就是我们所拥有的:

- pipeline.id beats-server
  config.string |
      input { beats { port => 5504 }}
      output {
        if [fields][pipeline_marker] == "application" {     # works
            pipeline { send_to => "application" }
        } else if [fields][pipeline_marker] == "REDACTED" { # works
            pipeline { send_to => "REDACTED" }
        } else if [service] in [fields] {                   # THIS DOESNT 
            pipeline { send_to => "default-service" }
        } else {                                            # Works
            pipeline { send_to => "default"
        }
      }

然后是管道配置,这些都很好。

所以特别是声明if [service] in [fields]。我尝试了if "service" in [fields] 的一些替代方案 - Logstash 文档说“in”是一回事,我发现了一个模糊的例子。基本上所有内容都符合我的默认捕获所有内容索引。

【问题讨论】:

    标签: logging logstash elastic-stack


    【解决方案1】:

    使用if [service] in [fields],您正在测试字段service 的值是否在字段fields 的值中,但fields 在顶层没有任何值,它具有嵌套字段,例如你之前测试过的那些,例如[fields][pipeline_marker]

    如果你想测试[fields][service]是否存在,你应该使用:

    if [fields][service] { }
    

    或者如果你想测试它,你应该使用if [something] in [fields][service]

    【讨论】:

    • 谢谢,我认为我大脑中的 python 部分启动了,我正在尝试做相当于 if foo in some_list 的操作。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多