Logstash从JSON日志规范化URL

时间:2018-04-07 18:48:04

标签: elasticsearch logstash logstash-grok logstash-configuration

我有新行分隔的JSON,如下面的

{
  "httpRequest": {
    "requestMethod": "GET",
    "requestUrl": "/foo/submit?proj=56"
  }
}

现在我需要在第一个资源(someTenant)中没有动态部分的url,并且将查询参数添加为elasticsearch中的字段即ie。预期的规范化网址是

"requestUrl": "/{{someTenant}}/submit?{{someParams}}"

我已经在logstash配置中有以下过滤器,但不知道如何在特定字段上执行正则表达式操作序列并将其添加为新字段。

    json{
        source => "message"
    }

这样我可以聚合唯一的端点,尽管由于可变路径参数和查询参数,日志中的URL不同。

1 个答案:

答案 0 :(得分:0)

由于此问题标有grok,我会继续并假设您可以使用grok过滤器。

使用grok过滤器并从requestUrl字段创建新字段,然后您可以使用URIPATHPARAM grok模式将各种组件与requestUrl分开,如下所示,

grok {
  match => {"requestUrl" => "%{URIPATHPARAM:request_data}"}
}

这将产生以下输出,

{
  "request_data": [
    [
      "/foo/submit?proj=56"
    ]
  ],
  "URIPATH": [
    [
      "/foo/submit"
    ]
  ],
  "URIPARAM": [
    [
      "?proj=56"
    ]
  ]
}

可以在Grok Online Debugger

上进行测试

感谢