【问题标题】:Ruby exception occurred: undefined method `to_json' in logstash发生 Ruby 异常:logstash 中未定义的方法“to_json”
【发布时间】:2020-05-20 06:26:16
【问题描述】:

只是好奇如何解决发生 Ruby 异常:未定义方法 `to_json'

logstash 版本是 6.3.2。

“journalctl -u logstash”返回:

May 15 13:33:13 server-4-eu-central-1.sample.com logstash[2382]: [2020-05-15T13:33:13,818][ERROR][logstash.filters.ruby    ] Ruby exception occurred: undefined method `to_json' for #<Hash:0x7a9ee4b7>
May 15 13:33:13 server-4-eu-central-1.sample.com logstash[2382]: [2020-05-15T13:33:13,819][ERROR][logstash.filters.ruby    ] Ruby exception occurred: undefined method `to_json' for #<Hash:0x1a6464f3>
May 15 13:33:13 server-4-eu-central-1.sample.com logstash[2382]: [2020-05-15T13:33:13,820][ERROR][logstash.filters.ruby    ] Ruby exception occurred: undefined method `to_json' for #<Hash:0x34a23ab2>
...

我的 000_sample.conf 配置文件:

input { ...  }

filter {
    if [type] == "sample-client-logs" {
      json {
        source => "message"
      }
      ...
      if [principal] =~ /(?i)sfe|android|ios|kraken-analytics/ {
        json {
          source => "message"
          target => "[jsonPayload][message]"
          add_field => {
            "[jsonPayload][customer]" => "server-4-eu-central-1"
            "[jsonPayload][source]" => "sample-client-logs.log"
            "[jsonPayload][serviceContext][service]" => "cloud-log-harvester"
            "[jsonPayload][serviceContext][version]" => "null"
            "[jsonPayload][principal]" => "%{[jsonPayload][message][principal]}"
            "[resource][labels][instance_id]" => "%{host}"
            "[resource][labels][region]" => "aws:"
            "[resource][type]" => "aws_instance"
          }
          remove_field => ["message", "[jsonPayload][message][message]", "env", "logicalRegion", "@timestamp", "@version", "path", "host"]
        }
        ruby {
          code => 'event.set("[jsonPayload][message]", event.get("[jsonPayload][message]").to_json)'
        }
      }
      ...
    }
    ...
}

output {...}

【问题讨论】:

    标签: logstash jruby


    【解决方案1】:

    我找到了答案:

        ruby {
          code => "
            require 'json'
            event.set('[jsonPayload][message]', event.get('[jsonPayload][message]').to_json)
          "
        }
    

    注意不要将 '=>' 替换为 '=',并注意将双引号更改为单引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多