Coroot 接入 Microsoft Teams 通知:Webhook 工作流配置、多频道路由与源码实现解析 Coroot 接入 Microsoft Teams 通知Webhook 工作流配置、多频道路由与源码实现解析【免费下载链接】corootCoroot is an open-source observability and APM tool with AI-powered Root Cause Analysis. It combines metrics, logs, traces, continuous profiling, and SLO-based alerting with predefined dashboards and inspections.项目地址: https://gitcode.com/GitHub_Trending/co/coroot本指南以 Coroot 官方文档 docs/docs/alerting/teams.md 为骨架完整讲解如何在 Microsoft Teams 中创建 Incoming webhook with Workflows如何在 Coroot 的项目集成中绑定该 Webhook如何通过多个频道与默认频道实现告警路由并对照仓库源码notifications/teams.go、db/integrations.go、notifications/notifications.go说明通知的发送逻辑与校验规则。读完本文你可以独立完成 Coroot → Teams 的告警链路配置并理解频道路由的底层机制。Microsoft Teams 侧创建工作流 WebhookCoroot 通过 Microsoft Teams 的Incoming webhook with Workflows能力向指定频道推送通知。在 Teams 中创建步骤如下在 Teams 中选择一个频道或新建一个频道。点击频道名旁的...菜单选择Workflows。在工作流模板中选择Post to a channel when a webhook request is received。为工作流命名例如Coroot点击Next。点击Add workflow创建工作流。复制生成的工作流 URL点击Done完成。:::info 找回工作流 URL 如果之后需要再次获取该工作流 URL可以打开 Teams 中的 Workflows 应用选中已创建的工作流点击Edit然后展开触发器When a Teams webhook request is received即可看到。 :::Coroot 在向该 URL 发送请求时使用的是 Microsoft Teams 的 Adaptive Cards 消息格式。从源码看notifications/teams.go 通过adaptivecard.NewTextBlockCard构建卡片、adaptivecard.NewActionOpenURL附加 View incident / View alert 跳转按钮再经t.client.SendWithContext(ctx, t.webhookUrl, msg)发送其中client.SkipWebhookURLValidationOnSend(true)用于跳过 URL 校验、兼容不同的 Webhook 形态。Coroot 侧配置 MS Teams 集成在 Coroot 界面中完成 Teams 侧准备后进行集成配置进入Project Settings→Integrations。创建一条MS Teams集成。添加一个频道Channel把上一步复制的工作流 URL 粘贴到表单中。点击发送测试告警验证集成是否可用测试消息会发送到默认频道。多频道与默认频道Coroot 可以向多个 Microsoft Teams 频道发送通知每个频道对应一个独立的工作流 URL通知按频道名路由在应用分类的Notification routing设置中可为 Slack / Microsoft Teams 覆盖默认频道per-category 覆盖。若某个分类未指定频道则使用Default channel默认频道发送。这一逻辑在源码中有直接体现db/integrations.go 定义了集成数据结构IntegrationTeams包含Channels []IntegrationTeamsChannel、DefaultChannel以及Incidents、Deployments、Alerts三个事件开关IntegrationTeamsChannel由Name和WebhookUrl组成。db/integrations.go 的GetDefaultChannel()在未显式设置时返回常量TeamsDefaultChannelName即defaultGetWebhookUrl(channel)在channel为空时自动落到默认频道再在频道列表中匹配名称并返回对应 Webhook URL找不到则返回空字符串。notifications/notifications.go 在通知分发时调用NewTeams(cfg.GetWebhookUrl(destination.TeamsChannel))将目标频道解析为具体 Webhook 后构造发送客户端。校验规则配置合法性db/integrations.go 的Validate()方法规定了集成配置的合法性约束旧字段webhookURL与新的channels列表不能同时使用webhookURL is deprecated and cannot be used together with channels旧的webhookURL会被视为名为default的默认频道以兼容旧配置。至少需要一个频道at least one channel is required。每个频道必须有名称且不能为空频道名不允许包含冒号:。每个频道的 Webhook URL 不能为空且必须是以http/https为协议、带有效主机名的 URL。频道名不能重复。defaultChannel必须是已配置频道之一。事件类型开关Teams 集成与 Slack、PagerDuty、OpsGenie、Webhook 一样支持按事件类型独立开关。在应用分类的 Notification routing 中每种分类可对三类事件单独启用或禁用集成IncidentsSLO 违反事件对应 notifications/teams.go 的SendIncident触发时标题形如[CRITICAL] **app** is not meeting its SLOs恢复时形如**app** incident resolved并附带检查报告、Root Cause 与 Remediations 摘要。Deployments部署事件对应 notifications/teams.go 的SendDeployment包含部署状态 Deployed / Stuck / Cancelled、版本号与变更摘要进行中的部署ApplicationDeploymentStateInProgress不发送通知。Alerts基于 Check、日志与 PromQL 的告警对应 notifications/teams.go 的SendAlert消息包含项目名、告警规则名、各告警详情代码块类型详情以包裹并支持手动恢复与告警持续时长信息。通知如何路由到 Teams一条完整链路从源码调用链可以完整还原一条告警的 Teams 投递路径告警触发后Coroot 查询应用所属分类判断该分类对当前事件类型Incident / Alert / Deployment是否启用了 Teams 集成未启用则静默跳过参见应用分类文档。notifications/notifications.go 的getClient按destination.IntegrationType分发命中db.IntegrationTypeTeams且集成启用时用cfg.GetWebhookUrl(destination.TeamsChannel)解析出具体 Webhook URL 并构造Teams客户端notifications/notifications.go 的isEnabled依据Incidents/Alerts开关过滤通知类型。最终由 notifications/teams.go 通过 HTTP 向 Webhook 发送 Adaptive Card 消息卡片中的View incident/View alert按钮会把用户带回 Coroot 对应告警详情页baseUrl即集成设置中的 Base URL。在前端告警详情页中也会按IntegrationType channel去重展示投递到的频道api/views/alert/alert.go 使用cmp.Or(n.Destination.SlackChannel, n.Destination.TeamsChannel)计算频道名并生成去重键从而在界面上呈现每条通知实际送达的 Teams 频道。配置建议与注意事项每个希望独立接收通知的 Teams 频道都需要在 Teams 中单独创建一个 Workflow Webhook并在 Coroot 集成中登记为独立 Channel频道名是路由的唯一定义需保持稳定、不包含冒号。默认频道default是兜底路由建议始终保证它指向一个实际有效的 Webhook URL避免未分类应用的通知无处投递。修改集成配置后建议点击发送测试告警api/forms/forms.go 中的Test方法会调用NewTeams(...).SendIncident向默认频道发送一条测试 Incident 通知验证端到端链路。若分类设置中 Teams 频道覆盖为空路由会回退到默认频道若 Teams 集成未启用或未配置通知会被静默跳过不会影响其他集成通道。总结通过 Teams 侧创建 Incoming webhook with Workflows、Coroot 侧登记频道与 Webhook URL 两步操作即可将 Coroot 的 Incident、Alert 与 Deployment 事件推送到 Microsoft Teams。借助应用分类的 Notification routing可以实现按分类选择频道、未指定则回退默认频道的精细化路由而源码中的Validate、GetWebhookUrl与getClient等实现则保证了配置合法性与投递的确定性。这套机制与 Slack、PagerDuty、OpsGenie、Webhook 等集成共享同一套事件开关与路由框架可按需组合使用。【免费下载链接】corootCoroot is an open-source observability and APM tool with AI-powered Root Cause Analysis. It combines metrics, logs, traces, continuous profiling, and SLO-based alerting with predefined dashboards and inspections.项目地址: https://gitcode.com/GitHub_Trending/co/coroot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考