如何实现Azure Monitor日志查询报告的自动化邮件推送?
实现Azure Monitor日志查询定时自动化并发送邮件的方案
方案一:Azure Logic Apps(可视化无代码/低代码)
这是最直观的实现方式,无需编写大量代码,通过拖拽配置完成流程:
- 创建定时触发的逻辑应用
在Azure门户新建「消耗型逻辑应用」,触发源选择「定期」,设置每日运行的具体时间和时区。 - 添加日志查询操作
新增「Azure Monitor - 运行日志查询」动作,选择目标Log Analytics工作区,粘贴你的日志查询语句,配置查询的时间范围(比如过去24小时)。 - 转换结果为表格格式
日志查询返回JSON格式数据,需转成邮件友好的格式:- 用「数据操作 - 选择」动作提取你需要的字段(过滤掉冗余数据);
- 用「数据操作 - 创建HTML表格」把筛选后的数据转为HTML表格,用于邮件正文;
- 若需要Excel附件,可通过「OneDrive for Business - 创建文件」或「Azure Blob存储 - 创建Blob」将数据保存为CSV/Excel格式,后续作为附件添加。
- 配置发送邮件
选择邮件服务(如「Office 365 Outlook - 发送电子邮件」或「SendGrid - 发送邮件」),填写收件人、主题,将HTML表格插入邮件正文,同时添加生成的Excel文件作为附件。
方案二:Azure Automation Runbook(PowerShell脚本方式)
适合习惯用脚本实现自动化的场景:
- 创建自动化账户
在Azure门户新建自动化账户,启用「Azure运行方式账户」,并给该账户分配Log Analytics工作区的「读取者」权限,以及邮件服务的发送权限(如Office 365应用权限)。 - 编写PowerShell Runbook
示例脚本如下:# 通过托管身份连接Azure Connect-AzAccount -Identity # 配置工作区和查询语句 $workspaceId = "你的Log Analytics工作区ID" $logQuery = @" # 替换成你的日志查询语句 你的示例查询内容 "@ # 执行日志查询 $queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId $workspaceId -Query $logQuery # 将结果导出为CSV(可直接作为Excel兼容格式) $csvOutputPath = Join-Path $env:TEMP "DailyLogResults.csv" $queryResults.Results | Export-Csv -Path $csvOutputPath -NoTypeInformation -Encoding UTF8 # 发送邮件(以Office 365为例) $mailCredentials = Get-AutomationPSCredential -Name "Office365_Send_Account" Send-MailMessage -SmtpServer "smtp.office365.com" -Port 587 -UseSsl ` -Credential $mailCredentials -From "sender@yourdomain.com" -To "recipient@yourdomain.com" ` -Subject "每日Azure Monitor日志查询结果" -Body ("查询结果如下:<br><br>" + ($queryResults.Results | ConvertTo-Html -Fragment)) ` -BodyAsHtml -Attachments $csvOutputPath - 设置定时触发
在自动化账户中为该Runbook添加「计划」,配置每日运行的时间规则。
注意事项
- 确保逻辑应用/自动化账户的身份拥有足够权限:Log Analytics工作区的读取权限,以及邮件服务的发送权限;
- 若查询结果数据量较大,需注意逻辑应用的超时限制,或在Runbook中处理分页逻辑;
- 可自定义HTML表格的样式,让邮件正文更易读。
内容的提问来源于stack exchange,提问作者Taanu Abbas
相关产品推荐
相关产品推荐

