创建自定义 grok 模式

Create a custom grok pattern

我正在使用 logstash 构建以下类型的日志:

2020 年 4 月 14 日 22:49:02,868 [信息] 1932a8e0-3892-4bae-81e3-1fc1850dff55-LPmAoB (coral-client-orchestrator-41786) hub_delivery_audit: RequestContext{CONTAINER_ID=200414224842439045902810201AZ,TRACKING_ID=TSTJ8N7GLBS0ZZW,PHYSICAL_ATTRIBUTES=物理属性(长度=尺寸(值=30.0,单位=CM,类型=空),宽度=尺寸(值=30.0,单位=CM,类型=null), height=Dimension(value=30.0, unit=CM, type=null), scaleWe​​ight=Weight(value=5.0, unit=kg, type=null)), SHIP_METHOD=AMZN_US_PRIME , ADDRESS_ID=LDI7ICATBZNOAQNW634MG057BMA07370713J4ZQ1VGOMB7KPXTQ2EIA2OX4CKT7L, CUSTOMER_ID=A07370713J4ZQ1VGOMB7K, REQUEST_STATE=UNKNOWN, RESPONSE=GetAccessPointsForHubDeliveryOutput(destinationLocation=null, fallBackLocation=null, capability=null), IS_COMMERCIAL_ATTRIBUTE_PRESENT=false}

我想从中提取以下数据:

CONTAINER_ID

TRACKING_ID

PHYSICAL_ATTRIBUTES

SHIP_METHOD

ADDRESS_ID

REQUEST_STATE

回应

但我无法为如此大的日志事件找到合适的过滤器。我试过使用 https://grokdebug.herokuapp.com/ 并浏览了 Logstash grok 文档,但仍然无法提取所需的字段。我只能想出这个:

%{MONTHDAY:monthday} %{MONTH:month} %{YEAR:year} %{TIME:time} [%{LOGLEVEL:logLevel}] %{HOSTNAME}

请就此提出一种方法,以及如何在不创建时间和日期等额外字段的情况下直接过滤以下字段。

我试过下面的 grok 模式

{CONTAINER_ID=%{DATA:container_id}, TRACKING_ID=%{DATA:tracking_id}, PHYSICAL_ATTRIBUTES=PhysicalAttributes%{DATA:physical_attributes} SHIP_METHOD=%{DATA:ship_method}, ADDRESS_ID=%{DATA:address_id}, CUSTOMER_ID=%{DATA:customer_id}, REQUEST_STATE=%{DATA:request_state}, RESPONSE=%{GREEDYDATA:response}(?=,)

在 grok 调试器中 (https://grokdebug.herokuapp.com/)

输出: