在 Datadog Grok 解析器中解析混合键值和 JSON 时遇到问题

问题描述 投票:0回答:1

我正在尝试解析具有混合格式的 Datadog 日志。

我有一些日志传入 Datadog,如下所示:

... some_field="value123" org_id="test-org-id" query_params="{"updated_date": {"eq": "2020-01-01T00:00:00Z", "lte": "2025-01-01T00:00:00Z"}, "active": {"eq": true}}" request_id="test-request-id" request_method="GET" ... Response: {"data": []}

到目前为止,我一直在 Grok 解析器中使用以下规则来解析它们:

rule ...%{some_field}?%{org_id}?%{query_params}?%{request_id}?%{request_method}?...%{regex(".*"):msg}
org_id (%{regex("org_id=")}\"%{regex("[a-zA-Z_0-9\\-]+"):org_id}\"\s)
query_params (%{regex("query_params=")}\"%{regex("\\{.*\\}"):query_params}\"\s)
request_id (%{regex("request_id=")}\"%{regex("[a-zA-Z_0-9\\-\\=]+"):request_id}\"\s)
request_method (%{regex("request_method=")}\"%{regex("[a-zA-Z]+"):request_method}\"\s)

输出如下:

{
  "msg": "Response: {"data": []}",
  "request_method": "GET",
  "org_id": "test-org-id",
  "query_params": "{\"updated_date\": {\"eq\": \"2020-01-01T00:00:00Z\", \"lte\": \"2025-01-01T00:00:00Z\"}, \"active\": {\"eq\": true}}",
  "request_id": "test-request-id"
}

我愿意:

  1. 将查询参数解析为 JSON,这样它们就可以像这样输出

    1. {
        "msg": "Response: {"data": []}",
        "request_method": "GET",
        "org_id": "test-org-id",
        "query_params": {
              "updated_date": {
                  "eq": "2020-01-01T00:00:00Z",
                  "lte": "2025-01-01T00:00:00Z"
              },
              "active": true
        }
        "request_id": "test-request-id"
      }
      
  2. 获取有关简化我的主规则的任何建议。我尝试过这样的事情:

    1. api_rule %{celery_prefix}?\s*%{data::keyvalue}?%{query_params}?%{data::keyvalue}?%{regex("Response: .*"):msg}
      

      但由于某种原因它丢弃了 query_params 中的数据。

我可以控制日志的输出方式,因此如果需要从后端更改任何内容,这也是一个选项。

谢谢!

logging datadog grok
1个回答
0
投票

在 Datadog 支持人员的帮助下解决了。

updated_api_rule %{regex(".+?(?=query_params)")::keyvalue}query_params="%{regex("\\{.*\\}"):query_params:json}%{regex(".+?(?=Response)")::keyvalue}%{data:msg}
© www.soinside.com 2019 - 2024. All rights reserved.