使用合成监控将incident.io状态发送到New Relic
内容提要
本文介绍了如何使用New Relic来监控incident.io托管的状态页面。通过使用合成监控和脚本化API测试,可以将incident.io的公共状态页面数据格式化并导入New Relic。通过在New Relic中创建警报,可以及时了解公共状态页面的事件。
延伸解读
监控原理与数据来源
incident.io 托管的状态页面通过 /proxy/ 路径提供结构化 JSON 数据,包含组件列表和受影响组件摘要。New Relic 的合成监控(脚本化 API 测试)定期请求该接口,解析 JSON 并将组件状态作为自定义事件发送到 New Relic 事件收集器。这种方法无需直接访问 incident.io 后台,仅依赖公开状态页,适合监控第三方服务的可用性。
脚本关键逻辑解析
脚本使用 got 库获取状态页数据,先构建受影响组件的映射(component_id 到 status),再遍历所有组件,为每个组件设置 eventType、statuspage 和 status 字段(若组件未受影响则标记为 operational)。最后将组件数组批量 POST 到 New Relic 的 insights-collector 端点。注意需替换 statuspage 变量,并通过 $secure 安全存储账户 ID 和摄取密钥。
数据查询与告警设置
数据发送后,可用 NRQL 查询验证,例如 SELECT * FROM IncidentIOSample 查看所有事件,或使用 SELECT latest(status) FROM IncidentIOSample WHERE statuspage='my-statuspage' FACET name 按组件名称查看最新状态。基于这些查询,可在 New Relic 中创建告警条件,当组件状态非 operational 时触发通知,从而及时响应 incident.io 状态页上的事件。
Q&A
如何使用New Relic监控incident.io的状态页面?
可以通过合成监控和脚本化API测试,将incident.io的公共状态页面数据格式化并导入New Relic。
incident.io的状态页面数据是什么格式?
incident.io的公共状态页面数据格式为JSON。
如何在New Relic中创建警报?
在New Relic中,可以使用NRQL查询数据并根据组件名称创建警报,以及时了解事件。
提供一个获取incident.io状态页面数据的脚本示例吗?
可以使用以下脚本示例:const got = require('got'); async function getStatusPage() { ... },具体代码可参考GitHub上的示例。
如何在New Relic中查询incident.io的状态数据?
可以使用NRQL查询,例如:SELECT * FROM IncidentIOSample。
如何快速查找受影响的组件状态?
可以创建一个映射,快速查找受影响组件的状态,使用affectedComponentsMap来存储组件状态。