首页
/ Azure Sentinel中NGINX日志解析器的优化实践

Azure Sentinel中NGINX日志解析器的优化实践

2025-06-09 07:29:55作者:魏侃纯Zoe

背景介绍

在Azure Sentinel的安全监控环境中,NGINX作为广泛使用的Web服务器,其访问日志和错误日志是重要的安全数据源。原始解析器在处理这些日志时存在一个关键缺陷——无法准确提取服务器主机名信息,这给安全分析和事件溯源带来了不便。

问题分析

通过分析NGINX_CL表中的原始日志数据,我们发现日志内容本身并不包含服务器标识信息。例如典型的NGINX访问日志格式如下:

1.2.3.4 - - [09/Apr/2025:17:48:35 +0200] "GET /api/v1/tickets/12345 HTTP/1.1" 200 15064 "https://example.com/" "Mozilla/5.0..."

这种标准格式只包含客户端IP、时间戳、请求方法、响应状态码等信息,缺少服务器标识。但在Azure资源模型中,每台服务器都有唯一的资源ID,格式如下:

/subscriptions/.../resourcegroups/.../providers/microsoft.hybridcompute/machines/my-machine-01

解决方案

我们通过在解析器中添加资源ID提取逻辑,从_ResourceId字段中获取服务器主机名。关键改进点包括:

  1. 在访问日志和错误日志解析函数中都添加了服务器名提取逻辑
  2. 使用KQL的extract函数从资源ID路径中提取主机名部分
  3. 正则表达式machines\/([^\/]+)$精确匹配主机名

优化后的解析器核心逻辑如下:

| extend Server = extract(@'machines\/([^\/]+)$', 1, _ResourceId)

实现效果

改进后的解析器能够:

  • 自动从资源ID中提取服务器主机名
  • 保持原有日志解析功能不变
  • 在输出结果中新增Server字段
  • 支持后续基于服务器名的聚合分析

最佳实践建议

  1. 对于Azure资源日志,优先考虑从_ResourceId提取资源标识
  2. 正则表达式应精确匹配目标字段,避免误匹配
  3. 新增字段应放在project语句靠前位置,便于查看
  4. 类似逻辑可应用于Apache等其他Web服务器日志解析

总结

通过本次优化,Azure Sentinel中的NGINX日志解析器增强了服务器标识能力,为安全团队提供了更完整的上下文信息。这种基于资源ID提取关键信息的方法,也可推广到其他Azure服务的日志解析场景中。

登录后查看全文
热门项目推荐
相关项目推荐