寻求适配特定HTTP响应日志的ElasticSearch Grok匹配模式
适配该HTTP响应日志的Elasticsearch Grok模式
针对你提供的HTTP响应日志,以下是可精准提取各关键字段的Grok模式,涵盖请求ID、响应耗时、HTTP状态、响应头和响应体:
分步拆解的Grok片段
提取响应标识与请求ID:
Outgoing Response: %{DATA:response_id}用
%{DATA:response_id}捕获CUR-d13cfb432b1064f0这类请求ID。提取响应耗时:
Duration: %{NUMBER:duration_ms:int} ms用
%{NUMBER:duration_ms:int}将11转为整数类型的duration_ms字段。提取HTTP状态行:
HTTP/%{NUMBER:http_version} %{NUMBER:http_status_code:int} %{DATA:http_status_text}分别捕获HTTP版本、状态码(转为整数)、状态描述文本。
提取JSON响应体:
%{GREEDYDATA:response_body}用
%{GREEDYDATA}捕获空行后的完整JSON内容,后续可配合json过滤器将JSON解析为嵌套字段。
完整Grok模式
结合所有片段的完整Grok模式如下(注意需启用多行匹配规则,比如在Filebeat/Logstash中配置以Outgoing Response:作为日志起始行):
Outgoing Response: %{DATA:response_id}\nDuration: %{NUMBER:duration_ms:int} ms\nHTTP/%{NUMBER:http_version} %{NUMBER:http_status_code:int} %{DATA:http_status_text}\n%{GREEDYDATA:response_headers}\n\n%{GREEDYDATA:response_body}
优化建议
如果需要将响应头拆分为独立字段,建议先用Grok捕获所有响应头到response_headers字段,再通过kv过滤器拆分,示例配置如下:
filter { grok { match => { "message" => "Outgoing Response: %{DATA:response_id}\nDuration: %{NUMBER:duration_ms:int} ms\nHTTP/%{NUMBER:http_version} %{NUMBER:http_status_code:int} %{DATA:http_status_text}\n%{GREEDYDATA:response_headers}\n\n%{GREEDYDATA:response_body}" } } kv { source => "response_headers" field_split => "\n" value_split => ": " prefix => "header_" } json { source => "response_body" target => "response_json" } }
配置后会生成header_Access-Control-Allow-Origin、response_json.code等结构化字段,方便后续分析。
内容的提问来源于stack exchange,提问作者DIALLO Boubacar
相关产品推荐
相关产品推荐

