创建自定义 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), scaleWeight=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/)
输出:
我正在使用 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), scaleWeight=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/)
输出: