如何在AWS CloudWatch创建按SOAP操作分组的HTTP状态统计监控小部件?
按SOAP操作分组统计HTTP状态码的监控小部件实现方案
可行方案步骤
通过日志解析+时间窗口关联的方式,能实现你需要的统计效果,具体操作如下:
提取HTTP状态码字段
先用正则解析从日志中提取状态码,生成独立可统计的字段:parse @message '"HTTP/1.1 *"' as status_code | fields @IngestionTime, status_code提取SOAP操作名
根据SOAP请求体的XML结构,用正则提取操作名,同时保留关联用的 ingestion 时间:parse @message '<soap:Body>.*<([a-zA-Z0-9]+)Request>.*</[a-zA-Z0-9]+Request>.*</soap:Body>' as soap_operation | fields @IngestionTime, soap_operation注:请根据实际SOAP请求的标签结构调整正则表达式,确保能准确匹配到操作名。
时间窗口关联两类日志
利用@IngestionTime做时间窗口匹配,将同一次请求的SOAP操作日志和HTTP状态日志关联,假设两类日志的时间误差在1秒内:// 定义SOAP日志数据集 soap_data = parse @message '<soap:Body>.*<([a-zA-Z0-9]+)Request>.*</[a-zA-Z0-9]+Request>.*</soap:Body>' as soap_operation | fields @IngestionTime, soap_operation // 定义HTTP状态日志数据集 http_data = parse @message '"HTTP/1.1 *"' as status_code | fields @IngestionTime, status_code // 按1秒时间窗口关联日志 join soap_data, http_data on abs(soap_data.@IngestionTime - http_data.@IngestionTime) <= 1000 | fields soap_operation, status_code分组统计生成目标结果
关联完成后,按需求生成统计数据:- 按SOAP操作+状态码分组统计:
| stats count() as count by soap_operation, status_code - 仅统计所有状态码的总数(即你给出的表格样式):
| stats count() as count by status_code
- 按SOAP操作+状态码分组统计:
关键注意事项
- 时间窗口阈值需根据实际日志的生成延迟调整,若日志时间误差更大,可增大时间差的毫秒值。
- 若MDC字段未在Logs Insight显示,检查日志采集配置是否正确输出MDC字段(比如Logback配置中需明确指定将MDC字段作为日志字段输出)。
内容的提问来源于stack exchange,提问作者Michał
相关产品推荐
相关产品推荐

