如何修改Azure逻辑应用,格式化Teams告警消息展示VM磁盘信息?
解决方案:提取Azure通用告警维度并发送整洁的Teams消息
一、使用Logic App内置Teams连接器解决维度提取问题
Azure通用告警Schema中,Computer、Disk、Val这些维度数据存储在triggerBody()?['alertContext']?['dimensions']数组里,直接拖拽该字段会自动生成foreach循环导致消息混乱,你可以通过XPath表达式精准提取指定维度值,或者将维度数组转换为整洁的键值对字符串。
1. 精准提取单个维度值
在Teams连接器的Message body中,使用以下表达式直接提取目标维度:
**VM低磁盘空间告警触发** - 计算机名称: @{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Computer"]/value/text()')} - 磁盘盘符: @{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Disk"]/value/text()')} - 剩余空间占比: @{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Val"]/value/text()')}% - 告警状态: @{triggerBody()?['status']}
表达式说明:
- 将维度数组转换为XML结构,通过XPath匹配
name字段对应的value first()函数确保只取匹配到的第一个值(避免多维度重复)
2. 批量处理所有维度(避免遗漏)
如果需要展示所有维度,可先添加**"Initialize variable"动作,变量类型设为String,然后添加"For each"循环遍历triggerBody()?['alertContext']?['dimensions'],在循环内添加"Append to string variable"**动作,内容为:
- @{item().name}: @{item().value}
最后在Teams消息体中引用该变量,示例:
**VM低磁盘空间告警触发** @{variables('维度信息')} 告警详情: @{triggerBody()?['alertContext']?['description']}
二、使用Teams Incoming Webhook实现更灵活的消息格式
如果内置连接器的格式限制较多,可改用Incoming Webhook发送自适应卡片或自定义文本:
1. 创建Teams Incoming Webhook
在目标Teams频道的「连接器」中添加「Incoming Webhook」,复制生成的Webhook URL。
2. 在Logic App中配置HTTP动作
- 添加**"HTTP"**动作,方法选择
POST - 「URI」填入复制的Webhook URL
- 「Headers」添加键值对:
Content-Type: application/json - 「Body」使用以下JSON构建消息(支持Markdown或自适应卡片):
方案A:简洁文本格式
{ "text": "**VM低磁盘空间告警触发**\n- 计算机名称: @{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Computer"]/value/text()')}\n- 磁盘盘符: @{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Disk"]/value/text()')}\n- 剩余空间占比: @{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Val"]/value/text()')}%" }
方案B:自适应卡片(更美观)
{ "type": "message", "attachments": [ { "contentType": "application/vnd.microsoft.card.adaptive", "content": { "type": "AdaptiveCard", "version": "1.0", "body": [ { "type": "TextBlock", "size": "Large", "weight": "Bolder", "text": "⚠️ VM低磁盘空间告警" }, { "type": "FactSet", "facts": [ { "title": "计算机名称:", "value": "@{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Computer"]/value/text()')}" }, { "title": "磁盘盘符:", "value": "@{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Disk"]/value/text()')}" }, { "title": "剩余空间占比:", "value": "@{first(xpath(xml(json(concat('{"root":', triggerBody()?['alertContext']?['dimensions'], '}'))), '//root/Item[name="Val"]/value/text()')}%" }, { "title": "告警时间:", "value": "@{triggerBody()?['context']?['timestamp']}" } ] } ] } } ] }
3. 测试触发
保存Logic App后,触发低磁盘空间告警,即可在Teams频道收到格式整洁的消息。
内容的提问来源于stack exchange,提问作者I_am_Dawid
相关产品推荐
相关产品推荐

