
Zulip Pingdom 集成指南uptime 状态变化实时通知到团队频道【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip本篇技术指南介绍如何将 Zulip 与 Pingdom 集成实现网站与服务的 uptime 状态变化如 HTTP、SMTP、IMAP 检查从 UP 变为 DOWN实时推送到 Zulip 团队频道并讲解消息渲染逻辑、支持的事件类型与底层源码实现。读完本文你将掌握 Pingdom 集成的完整配置流程、Webhook 消息格式规范以及如何在 Zulip 中过滤和整理来自 Pingdom 的告警事件。一、Pingdom 集成能做什么Zulip 官方内置了 Pingdom 集成集成文档位于 zerver/webhooks/pingdom/doc.md它可以订阅 Pingdom 仪表盘上的uptime 状态变化事件将每一次状态变更如服务从正常变为故障、从故障恢复以结构化消息形式发送到指定的 Zulip 频道消息中自动携带服务主机名、检查类型、前后状态并在故障DOWN时附带故障描述帮助团队第一时间定位问题。该集成属于 Zulip 庞大的 Incoming webhook 集成体系 之一服务端处理逻辑位于 zerver/webhooks/pingdom/view.py配套测试见 zerver/webhooks/pingdom/tests.py。二、配置步骤从创建机器人到连接 Pingdom 检查1. 创建 Incoming webhook 机器人在 Zulip 中打开设置 → 你的机器人Your bots→ 添加机器人参考 帮助文档添加一个机器人或集成机器人名称可命名为Pingdom机器人类型Bot type必须选择Incoming webhook这样 Zulip 才会为该机器人生成专用的 Webhook URL。对应的模板说明位于 templates/zerver/integrations/include/create-an-incoming-webhook.md。2. 生成集成 URL确定希望 Pingdom 通知发往的频道例如# pingdom随后参考 生成集成 URL为刚才创建的 Incoming webhook 机器人生成形如https://your-zulip-host.example.com/api/v1/external/....?api_key....streampingdomtopic...的集成 URL。该 URL 是后续 Pingdom Webhook 的投递目标。3. 在 Pingdom 中创建 Webhook 集成登录 Pingdom 后台打开Integrations菜单点击Add integrationType选择WebhookName填写一个便于识别的名称例如ZulipURL粘贴上一步生成的 Zulip 集成 URL确保Active开关处于开启状态然后点击Save integration保存。4. 将集成连接到具体的检查项创建新的检查check或编辑已有检查时在该检查的Connect Integrations区域中开启上一步创建的Zulip集成。这样该检查的每一次状态变化都会触发 Webhook 并推送至 Zulip 频道。5. 验证集成配置完成后当检查状态发生切换时Zulip 频道中会收到类似下图的告警消息从上图可以看到Pingdom Bot在# pingdom频道、主题Test check status.下发布了Service someurl.com changed its HTTP status from UP to DOWN:的消息并附带了故障原因Non-recoverable failure in name resolutionDNS 名称解析失败。三、支持的事件类型检查类型Pingdom 集成声明并支持以下检查类型来自 zerver/webhooks/pingdom/view.py 中的SUPPORTED_CHECK_TYPES检查类型说明HTTPHTTP 协议检查HTTP_CUSTOM自定义 HTTP 检查HTTPSHTTPS 协议检查SMTPSMTP 邮件服务检查POP3POP3 邮件服务检查IMAPIMAP 邮件服务检查PINGICMP Ping 连通性检查DNSDNS 解析检查UDPUDP 端口检查PORT_TCPTCP 端口检查这 10 种类型共同构成ALL_EVENT_TYPES并由webhook_view(Pingdom, all_event_typesALL_EVENT_TYPES)注册为集成支持的完整事件集合。当收到的事件类型不在该列表内时服务端会抛出UnsupportedWebhookEventTypeError并拒绝处理。四、消息格式与渲染逻辑Pingdom 集成处理入口为 zerver/webhooks/pingdom/view.py 中的api_pingdom_webhook从请求 JSON 中提取check_type字段若类型受支持则根据 payload 生成主题topic与消息正文调用check_send_webhook_message发送消息并返回成功响应。主题Topic命名规则主题模板为{name} status.其中{name}取自 payload 的check_name字段。例如测试中使用的Test check、SMTP check、IMAP check分别生成主题Test check status.、SMTP check status.、IMAP check status.。消息正文正文模板为Service {service_url} changed its {type} status from {previous_state} to {current_state}:其中service_url取自check_params.hostname即被监控服务的主机名type为检查类型如HTTP、SMTPprevious_state/current_state为状态切换的起点与终点。特殊逻辑当状态从UP变为DOWN时消息末尾会追加故障描述块 quote {long_description}当状态为其他切换方向如 DOWN 恢复为 UP时不附加描述块并将句子结尾的冒号改为句号。 ### 渲染示例 结合 [zerver/webhooks/pingdom/tests.py](https://link.gitcode.com/i/6c6e427da32a08fab522e2373a263ff7) 中的断言可以得到四种典型输出 - HTTP 检查 UP → DOWNfixture [http_up_to_down.json](https://link.gitcode.com/i/2c556169a6a5648c51ecfa2979f47e2a) Service someurl.com changed its HTTP status from UP to DOWN: 后附 Non-recoverable failure in name resolution - SMTP 检查 UP → DOWNfixture [smtp_up_to_down.json](https://link.gitcode.com/i/fe68b535e90ab7840db80544a78d9d8d) Service smtp.someurl.com changed its SMTP status from UP to DOWN: 后附 Connection refused - IMAP 检查 UP → DOWNfixture [imap_up_to_down.json](https://link.gitcode.com/i/61efcd3a69c62535f9e6f677b67c57a3) Service imap.someurl.com changed its IMAP status from UP to DOWN: 后附 Invalid hostname, address or socket - IMAP 检查 DOWN → UPfixture [imap_down_to_up.json](https://link.gitcode.com/i/ade3604b6359a82f462e72175eae2343) Service imap.someurl.com changed its IMAP status from DOWN to UP. ## 五、Pingdom Webhook 请求负载解析 Pingdom 的 Webhook 请求为 JSON 格式。以 [http_up_to_down.json](https://link.gitcode.com/i/2c556169a6a5648c51ecfa2979f47e2a) 为例集成实际消费的字段包括 | 字段 | 含义 | 在集成中的用途 | | --- | --- | --- | | check_id | 检查项 ID | 标识检查 | | check_name | 检查项名称 | 生成消息主题 | | check_type | 检查类型HTTP/SMTP/IMAP 等 | 判断是否受支持、写入正文 | | check_params.hostname | 被监控主机名 | 写入正文 service_url | | previous_state | 上一状态UP/DOWN | 写入正文 | | current_state | 当前状态UP/DOWN | 写入正文并决定是否附带描述块 | | long_description | 故障详细描述 | DOWN 时以 quote 块展示 | | description | 故障摘要 | 当前未在消息中使用 | | first_probe / second_probe | 探测节点信息 | 当前未在消息中使用 | 所有字段通过 WildValue 与 tame(check_string) 进行类型校验后读取保证消息构建的安全性。 ## 六、事件过滤Filtering incoming events 与其他 Zulip 内置集成一样Pingdom 集成支持按事件类型进行过滤见 [templates/zerver/integrations/include/event-filtering-additional-feature.md](https://link.gitcode.com/i/d3d31ed8fac8d7fd82be0b59023d1c5d)。 你可以在 Zulip 的 Webhook 设置中通过 **只关注指定事件Only events** 与 **排除指定事件Exclude events** 两种模式来控制哪些检查类型HTTP、HTTP_CUSTOM、HTTPS、SMTP、POP3、IMAP、PING、DNS、UDP、PORT_TCP的告警进入频道。例如只希望接收 HTTP 与 HTTPS 的故障告警可将事件过滤配置为仅保留 HTTP、HTTPS从而避免邮件、端口类检查的通知刷屏。 ## 七、Webhook URL 规范 关于 Incoming webhook URL 的完整格式规范路径结构、api_key、stream、topic 等参数含义参见 [templates/zerver/integrations/include/webhooks-url-specification.md](https://link.gitcode.com/i/d1db8a2dce08b1b88ea7a7c04f56b216) 引用的 Webhook URL 规范文档也可查阅仓库中 [zerver/webhooks](https://link.gitcode.com/i/636959ad6d0d73b01a4fb3a5f398111c) 目录下其他集成的 doc.md 了解一致的使用模式。 ## 八、测试与验证 仓库为 Pingdom 集成提供了完整的单元测试[zerver/webhooks/pingdom/tests.py](https://link.gitcode.com/i/6c6e427da32a08fab522e2373a263ff7)覆盖了 - HTTP、SMTP、IMAP 三种检查类型从 UP 到 DOWN 的告警消息 - IMAP 检查从 DOWN 恢复到 UP 的消息验证无描述块、句尾为句号的分支。 测试使用各 [fixtures](https://link.gitcode.com/i/2782c9a9d3adbeecc50982fc45d7c0c6) 中的真实负载断言最终发送的正文如果你需要二次开发或排查消息格式问题这些测试是最直接的参考依据。 ## 总结 至此你已经完成了 Zulip Pingdom 集成的全流程创建 Incoming webhook 机器人 → 生成集成 URL → 在 Pingdom 中配置 Webhook 集成并连接到检查项 → 在 Zulip 频道中接收带状态切换信息与故障描述的告警。结合 [zerver/webhooks/pingdom/view.py](https://link.gitcode.com/i/6a957c4f2b4a7fa6f927005d8b617eb8) 中的渲染逻辑你还可以进一步定制主题与消息格式让监控告警与团队协作真正融为一体。【免费下载链接】zulipZulip server and web application. Open-source team chat that helps teams stay productive and focused.项目地址: https://gitcode.com/GitHub_Trending/zu/zulip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考