教程:在指标顾问中启用异常通知

重要

从 2023 年 9 月 20 日开始,将无法创建新的 Azure 指标顾问资源。 指标顾问服务将于 2026 年 10 月 1 日停用。

本教程介绍如何执行下列操作:

  • 如何在指标顾问中创建挂钩
  • 如何通过 Azure 逻辑应用发送通知
  • 如何 Microsoft 团队发送通知
  • 如何通过 SMTP 服务器发送通知

必备条件

创建“指标顾问”资源

若要探索指标顾问的功能,需要在 Azure 门户中创建指标顾问资源,以部署你的指标顾问实例。

如何在指标顾问中创建挂钩

指标顾问中的挂钩是一个桥梁,让客户能够订阅指标异常并通过不同通道发送通知。 指标顾问中有四种挂钩:

  • 电子邮件挂钩
  • Webhook
  • Teams 挂钩
  • Azure DevOps 挂钩

每个挂钩类型对应一个通知异常情况时使用的特定通道。

使用 Azure 逻辑应用、Teams 和 SMTP 发送通知

使用逻辑应用发送电子邮件通知

指标顾问中支持两个发送电子邮件通知的常见选项。 一个是使用 Webhook 和 Azure 逻辑应用发送电子邮件警报,另一个是设置 SMTP 服务器并使用它直接发送电子邮件警报。 本部分重点介绍第一个选项,对于没有可用 SMTP 服务器的客户来说,此选项更容易操作。

步骤 1:在指标顾问中创建 Webhook

Webhook 是指标顾问服务中所有可用信息的入口点,在触发警报时会调用用户提供的 API。 所有警报都可以通过 Webhook 发送。

在指标顾问的工作区中选择“挂钩”选项卡,然后选择“创建挂钩”按钮。 选择“Webhook”的挂钩类型。 填写必需的参数,然后选择“确定”。 有关详细步骤,请参阅创建 Webhook

需要额外填写一个“终结点”参数,这可以在完成下面的步骤 3 后完成。

步骤 2:创建消耗逻辑应用资源

Azure 门户中,按照创建示例消耗型逻辑应用工作流中的说明,创建具有空白工作流的消耗型逻辑应用资源。 看到工作流设计器打开时,请返回到本教程。

步骤 3:添加一个“收到 HTTP 请求时”触发器

  • Azure 逻辑应用使用各种操作来触发定义的工作流。 在本用例中,它使用了名为“收到 HTTP 请求时”的触发器。

  • 在“收到 HTTP 请求时”对话框中,选择“使用示例有效负载生成架构”。

    显示“收到 HTTP 请求时”对话框的屏幕截图,选中了“使用示例有效负载生成架构”选项。

    将以下示例 JSON 复制到文本框中,然后选择“完成”。

    {
    "properties": {
        "value": {
            "items": {
                "properties": {
                    "alertInfo": {
                        "properties": {
                            "alertId": {
                                "type": "string"
                            },
                            "anomalyAlertingConfigurationId": {
                                "type": "string"
                            },
                            "createdTime": {
                                "type": "string"
                            },
                            "modifiedTime": {
                                "type": "string"
                            },
                            "timestamp": {
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "alertType": {
                        "type": "string"
                    },
                    "callBackUrl": {
                        "type": "string"
                    },
                    "hookId": {
                        "type": "string"
                    }
                },
                "required": [
                    "hookId",
                    "alertType",
                    "alertInfo",
                    "callBackUrl"
                ],
                "type": "object"
            },
            "type": "array"
        }
    },
    "type": "object"
     }
    
  • 选择此方法作为“POST”,然后选择“保存”。 现在可以查看 HTTP 请求触发器的 URL。 选择复制图标以复制它,并填写回步骤 1 中的“终结点”中。

    屏幕截图:突出显示复制 HTTP 请求触发器的 URL 时使用的复制图标。

步骤 4:使用“HTTP”操作添加下一步

通过 Webhook 推送的信号仅包含时间戳、alertID、configurationID 等有限信息。需使用信号中提供的回调 URL 查询详细信息。 此步骤是查询详细的警报信息。

  • 选择一个“GET”方法

  • 从“URI”中的“动态内容”列表中选择“callBackURL”。

  • 在“标头”中输入“Content-Type”的密钥,并输入“application/json”的值

  • 在“标头”中输入“x-api-key”的密钥,单击指标顾问工作区中的“API 密钥”选项卡来获取密钥。 此步骤的目的是为了确保工作流具有足够的 API 调用权限。

    屏幕截图:突出显示 api-key

步骤 5:添加下一步到“分析 JSON”

需要分析 API 的响应,以便更轻松地设置电子邮件内容的格式。

注意

本教程仅分享一个简明示例,最终的电子邮件格式还需要进一步设计。

  • 从“内容”中的“动态内容”列表中选择"正文"
  • 选择“使用示例有效负载生成架构”。 将以下示例 JSON 复制到文本框中,然后选择“完成”。
{
    "properties": {
        "@@nextLink": {},
        "value": {
            "items": {
                "properties": {
                    "properties": {
                        "properties": {
                            "IncidentSeverity": {
                                "type": "string"
                            },
                            "IncidentStatus": {
                                "type": "string"
                            }
                        },
                        "type": "object"
                    },
                    "rootNode": {
                        "properties": {
                            "createdTime": {
                                "type": "string"
                            },
                            "detectConfigGuid": {
                                "type": "string"
                            },
                            "dimensions": {
                                "properties": {
                                },
                                "type": "object"
                            },
                            "metricGuid": {
                                "type": "string"
                            },
                            "modifiedTime": {
                                "type": "string"
                            },
                            "properties": {
                                "properties": {
                                    "AnomalySeverity": {
                                        "type": "string"
                                    },
                                    "ExpectedValue": {}
                                },
                                "type": "object"
                            },
                            "seriesId": {
                                "type": "string"
                            },
                            "timestamp": {
                                "type": "string"
                            },
                            "value": {
                                "type": "number"
                            }
                        },
                        "type": "object"
                    }
                },
                "required": [
                    "rootNode",
                    "properties"
                ],
                "type": "object"
            },
            "type": "array"
        }
    },
    "type": "object"
}

步骤 6:添加下一步到“创建 HTML 表格”

API 调用返回了一些信息,但根据你的方案不同,并非所有信息都很有用。 选择你关注并想要包含在警报电子邮件中的项。

下面是一个 HTML 表格示例,其中选择在警报电子邮件中包含“timestamp”、“metricGUID”和“dimension”。

屏幕截图:html 表格示例

步骤 7:将最后一个步骤添加到“发送电子邮件”

发送电子邮件时有几个选项,包括 Microsoft 托管的产品/服务和第三方产品/服务。 客户可能需要具有适合所选选项的租户/帐户。 例如,选择"Office 365 Outlook"作为服务器时。 将启动登录过程以构建连接和授权。 将建立 API 连接以使用电子邮件服务器发送警报。

在电子邮件的“正文”和“主题”中填写你想要包含的内容,并在“收件人”中填写电子邮件地址。

屏幕截图:发送电子邮件

后续步骤

转到下一篇文章,了解创建方法。