Prometheus 集成指引
通过 webhook 的方式将 Prometheus 告警事件通过 AlertManager 推送到 Flashduty。当告警触发时,向 Flashduty 发送触发事件,当告警恢复时,向 Flashduty 发送恢复事件。
使用限制
在 AlertManager
- 您必须拥有修改 AlertManager 配置文件的权限。
- 您的 AlertManager server 必须能够访问域名 api.flascat.cloud,将告警推送到外网。
支持版本
本文适配 Alertmanager 0.16.0 及以上 版本。
操作步骤
在 Flashduty
您可通过以下2种方式,获取一个集成推送地址,任选其一即可。
使用专属集成
当您不需要将告警事件路由到不同的协作空间,优先选择此方式,更简单。
展开
- 进入 Flashduty 控制台,选择 协作空间,进入某个空间的详情页面
- 选择 集成数据 tab,点击 添加一个集成,进入添加集成页面
- 选择 Prometheus 集成,点击 保存,生成卡片。
- 点击生成的卡片,可以查看到 推送地址,复制备用,完成。
使用共享集成
当您需要根据告警事件的 Payload 信息,将告警路由到不同的协作空间,优先选择此方式。
展开
- 进入 Flashduty 控制台,选择 集成中心=>告警事件,进入集成选择页面。
- 选择 ** Prometheus** 集成:
- 集成名称:为当前集成定义一个名称。
- 点击 保存 后,复制当前页面的新生成的 推送地址 备用。
- 点击 创建路由,为集成配置路由规则。您可以按条件匹配不同的告警到不同的协作空间,也可以直接设置默认协作空间作为兜底,后续再按需调整。
- 完成。
在 AlertManager
步骤 1:配置 Alertmanager
登录您的 Alertmanager 实例
找到并打开配置文件,一般为 Alertmanager 部署根目录下的 alertmanager.yml
在 receivers 配置部分,增加一个 Flashduty webhook 类型的 receiver,如下
receivers: - name: 'flashcat' webhook_configs: - url: '<您的集成推送地址>' send_resolved: true http_config: proxy_url: 'http://proxyserver:port'
您需要替换 url 对应的参数值为集成的推送地址,注意 query string 参数部分需要携带 integration_key。
如果您需要通过代理请求 Flashduty ,可以额外设置 http_config 的 proxy_url 参数为代理地址。
在 route 配置部分,更改默认 route 指定 receiver 为刚才配置的 webhook,如下:
route: ... receiver: 'flashcat'
您也可以把 receiver 添加到非默认 route,但这样您只会同步对应 route 的告警事件到 Flashduty ,而非全部告警事件。
保存配置文件
通过重新加载配置文件(向进程发送 SIGHUP 信号,或 POST 请求/-/reload api),使更改生效
完成
步骤 2:配置 Timestamp
默认情况下,系统使用当前时间作为事件触发时间。如果您希望自定义时间,您可以额外设定一个 timestamp 字段来标识每一次告警发生的准确时间。
登录您的 Prometheus Server 实例
打开告警规则相关配置文件
对于每一条告警规则,更改 annotations 部分,添加 timestamp 字段,如下:
annotations: timestamp: '{{ with query "time()" }}{{ . | first | value }}{{ end }}' ...
保存配置文件
通过重新加载配置文件(向进程发送 SIGHUP 信号,或 POST 请求/-/reload api),使更改生效
完成
严重程度映射关系
系统依次提取告警事件标签中的 severity
、priority
和 level
,对应值将作为 Prometheus 自身的告警等级,如果没有提取到,系统自动设置 Prometheus 告警等级为 Warning
。
Promtheus 到 Flashduty 告警等级映射关系:
Prometheus | Flashduty | 状态 |
---|---|---|
critical | Critical | 严重 |
warning | Warning | 警告 |
warn | Warning | 警告 |
info | Info | 提醒 |
acknowledged | Info | 提醒 |
unknown | Info | 提醒 |
unk | Info | 提醒 |
ok | Ok | 恢复 |
常见问题
为什么在Flashduty没有收到告警?
在 Flashduty
- 查看集成是否展示了 最新事件时间?如果没有,代表Flashduty没有收到推送,直接优先排查 AlertManager 部分。
- 如果您使用的是 共享集成,优先确认您是否配置了 路由规则。不设置路由规则,系统会直接拒绝新的推送,因为没有协作空间可以承接您的告警。这种情况下,直接配置路由规则到您期望的空间即可。
在 AlertManager
- 首先确认 AlertManager 测是否产生了新的告警。如没有产生新告警,请继续等待新告警触发后重新验证。
- 打开 AlertManager 配置文件,如果您设置了子路由,请确保您的路由设置正确(比如前边的路由设置了 continue,AlertManager 会跳过匹配后续子路由。我们推荐您永远仅设置一个默认路由到 Flashduty)。同时验证,目标回调地址是否和集成推送地址完全匹配。如果不匹配,请修改 告警规则后重新验证。
- 如果匹配,请继续确认 AlertManager 实例可以访问外网 api.flashcat.cloud 域名。如果不可以,您首先需要为其开通外网,或单独针对 Flashduty 的域名开通外网访问。
- 如果网络无问题,您需要继续排查 AlertManager,查找是否存在相关的错误日志。
如果以上步骤执行之后,仍然没有查询到问题根因,请直接联系我们。