如何在Grafana中配置Azure应用网关WAF日志仪表盘?(Azure Monitor插件尝试失败)
我之前帮不少开发者搞定过Azure WAF日志在Grafana里可视化的问题,你遇到的Azure Monitor插件拿不到日志的情况真的挺常见,咱们一步步来排查和落地:
这是最容易被忽略的前提——如果日志没先送到Log Analytics,Grafana的插件根本没地方捞数据:
- 登录Azure门户,找到你的WAF(不管是应用网关WAF还是Front Door WAF)
- 进入诊断设置,点击添加诊断设置
- 勾选要收集的日志类型:应用网关WAF选
ApplicationGatewayFirewallLogs,Front Door WAF选FrontDoorWebApplicationFirewallLogs - 目标选发送到Log Analytics工作区,挑一个已有的工作区或者新建一个
- 保存后等5-10分钟,让日志开始流入工作区
要是已经设置了日志导出但插件还是没数据,大概率是权限或配置细节没做对:
- 确认你用的服务主体(SPN)有Log Analytics Reader权限在目标工作区上(划重点:是工作区的权限,不是WAF资源的权限!很多人在这里踩坑)
- 打开Grafana的Azure Monitor数据源配置,核对订阅ID、租户ID、客户端ID、客户端密钥全是对的,并且选对了对应的Log Analytics工作区
- 直接测个查询:在Grafana的探索页面,选Azure Monitor数据源,切到Logs模式,输入这条简单的查询试试:
AzureDiagnostics | where Category == "ApplicationGatewayFirewallLogs" | take 10
要是能返回结果,说明数据源没问题;没结果的话,检查诊断设置里的日志类别和查询里的Category是不是匹配(Front Door的话要换成FrontDoorWebApplicationFirewallLogs)
拿到日志后,就可以做各种实用的可视化了,分享几个常用的面板查询:
1. WAF请求趋势图
用时间序列图看每分钟的拦截/允许请求数,一目了然:
AzureDiagnostics | where Category == "ApplicationGatewayFirewallLogs" | summarize count() by bin(TimeGenerated, 1m), action_s | render timechart
把action_s设为图例,就能区分Allow(允许)和Block(拦截)的请求趋势
2. Top 10被拦截的URI
用条形图展示最常被WAF拦下来的请求路径,方便定位恶意请求:
AzureDiagnostics | where Category == "ApplicationGatewayFirewallLogs" and action_s == "Block" | summarize count() by requestUri_s | top 10 by count_ | render barchart
3. WAF规则触发统计
用饼图看哪些规则被触发得最多,帮你优化WAF规则配置:
AzureDiagnostics | where Category == "ApplicationGatewayFirewallLogs" | summarize count() by ruleName_s | render piechart
要是插件一直有兼容问题,可以试试专门的Azure Log Analytics数据源插件——有时候比通用的Azure Monitor插件更稳定:
- 在Grafana插件市场搜
Azure Log Analytics安装 - 配置时直接填Log Analytics工作区ID和密钥(或者用SPN权限)
- 同样用Kusto查询拉取WAF日志就行
另外,也可以把WAF日志导出到Azure Blob存储,用Loki/Promtail采集后导入Grafana,但这个步骤更复杂,除非你已经有Loki栈,不然优先用Log Analytics的方式。
- 日志有延迟:WAF日志到Log Analytics通常有5-15分钟的延迟,刚设置完别着急查数据
- 权限不够:服务主体必须有Log Analytics工作区的读取权限,只给WAF资源权限没用
- 日志类别选错:不同WAF类型的日志Category不一样,查询时要对应上
要是你还是拿不到数据,可以把Grafana数据源的测试结果和Azure诊断设置的截图贴出来,这样更容易定位问题。
内容的提问来源于stack exchange,提问作者SiddhiMorajkar

