【问题标题】:Removing Json object name using Logtash使用 Logstash 删除 Json 对象名称
【发布时间】:2020-05-12 11:39:12
【问题描述】:

我正在尝试使用 logstash 解析以下 json

   {
    "payload": "{\"class\":\"OpenLoyalty\\\\Component\\\\Account\\\\Domain\\\\Event\\\\PointsTransferHasBeenExpired\",\"payload\":{\"accountId\":\"1cbd42b8-1b1f-4a13-a28f-eefeb73a64b0\",\"pointsTransferId\":\"e82c96cf-32a3-43bd-9034-4df343e5f111\"}}"
}

使用此过滤器:

    input {
        jdbc {
            jdbc_connection_string => "jdbc:postgresql://localhost:5432/openloyalty"
            jdbc_user => "openloyalty"
            jdbc_password => "openloyalty"
            jdbc_driver_library => "C:\logstash\postgresql-42.2.12.jar"
            jdbc_driver_class => "org.postgresql.Driver"
            statement => "SELECT payload from events where events.id=130;"
        }
    }
    filter {
          json {
            source => "payload"
            remove_field => ["class"]
          }

    }
    output {
        stdout { codec => json_lines }
    }

我得到这个输出:

    {
    "@version": "1",
    "@timestamp": "2020-05-12T11:27:15.097Z",
    "payload": {
        "accountId": "1cbd42b8-1b1f-4a13-a28f-eefeb73a64b0",
        "pointsTransferId": "e82c96cf-32a3-43bd-9034-4df343e5f111"
    }
   }

但是,我正在寻找的是这样的:

{
"@version": "1",
"@timestamp": "2020-05-12T11:27:15.097Z",
 {
    "accountId": "1cbd42b8-1b1f-4a13-a28f-eefeb73a64b0",
    "pointsTransferId": "e82c96cf-32a3-43bd-9034-4df343e5f111"
 }
}

如何从我的 Json 对象中删除“有效负载”名称?

【问题讨论】:

    标签: json log4j logstash logstash-jdbc logstash-json


    【解决方案1】:

    您可以在 json 过滤器之后使用带有以下配置的 mutate 过滤器。

    mutate {
        rename => {
            "[payload][accountId]" => "accountId"
            "[payload][pointsTransferId]" => "pointsTransferId"
        }
        remove_field => ["[payload]"]
    }
    

    这将重命名您的字段并删除重命名后的空 payload json 对象。

    【讨论】:

    • 工作得很好,但恐怕我的有效载荷中可能有更复杂的值。我的意思是重命名所有字段似乎很难。还有其他方法吗?
    • 您可以尝试在第一个过滤器之后添加另一个json 过滤器,其来源也为payload。您的第一个 json 过滤器将解析 payload 消息,这是您的查询结果,您的第二个 json 过滤器将解析嵌套的 payload 字段,该字段位于您的 payload 消息内。
    • 我试过这个解决方案,但我明白了:{ "@version" => "1", "@timestamp" => 2020-05-13T10:21:13.807Z, "payload" => { "accountId" => "1cbd42b8-1b1f-4a13-a28f-eefeb73a64b0", "pointsTransferId" => "e82c96cf-32a3-43bd-9034-4df343e5f111" }, "tags" => [ [0] "_jsonparsefailure" ] }
    • 这是我面临的错误:Error parsing json {:source=>"payload", :raw=>{"accountId"=>"1cbd42b8-1b1f-4a13-a28f-eefeb73a64b0", "pointsTransferId"=>"e82c96cf-32a3-43bd-9034-4df343e5f111"}, :exception=>java.lang.ClassCastException: org.jruby.RubyHash cannot be cast to org.jruby.RubyIO}
    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2018-06-12
    • 1970-01-01
    相关资源
    最近更新 更多