在Sentry上管理Prometheus的警报

在 Z Lab,我们使用 Prometheus 对各种系统进行监控。我们使用 Alertmanager 来从 Prometheus 接收警报通知。但是,在处理故障等过程中,团队内出现了以下不满情况。

    • アラートの履歴が時間が経つとで消えてしまい、何が起きていたのか分かりにくい

 

    • どのアラートが多く発生しているかなどの集計がしにくい

 

    アラートの情報をもとに GitHub に Issue を簡単に作成したい

因此,我更详细地研究了Alertmanager的功能,原来Alertmanager的设计专注于警报通知,如果需要持续管理警报信息,最好使用基于Webhook的通知功能将警报信息传递给另一个系统进行管理。

我们曾考虑新建一个收集和管理警报信息的系统,但由于不想花费太多成本,所以决定将 Prometheus 的警报传输到之前一直想尝试使用的 Sentry 进行管理。

岗哨是什么?

Sentry是一项服务,它收集来自移动应用程序的崩溃日志、Rails和其他错误日志等事件,并可以进行浏览和管理。它为各种编程语言提供了库,方便地集成事件收集功能。

尽管使用Sentry来管理警报可能看起来不适合该服务的本来用途,但由于以下几点符合本次要求,因此暂时决定尝试一下。

    • イベントを時系列で管理できる

 

    • イベントに付与したタグで柔軟に集計ができる

 

    • Issue Tracker との連携が充実しており、Issue の作成などができる

 

    • ライブラリが充実しており、アラートを Sentry に転送する仕組みの実装が容易

 

    Sentry 自体が OSS で公開されており、オンプレミス環境での運用も可能

使用alertmanager-sentry-gateway将警报发送到Sentry。

由于 Alertmanager 在向 Sentry 传送警报时没有相应的功能,因此我们实现了 alertmanager-sentry-gateway,通过接收 Alertmanager 的 Webhook,并将其信息转发到 Sentry。

请从GitHub的Release页面下载alertmanager-sentry-gateway的二进制文件,并按照以下方式启动。启动需要一个用于将事件发送到Sentry的DSN,所以请提前在Sentry的界面上获取它。

$ sentry-gateway --dsn ${SENTRY_DSN}

在Alertmanager端,我们将配置alertmanager-sentry-gateway将Webhook发送到以下位置。

receivers:
- name: infra-team
  webhook_configs:
  - url: http://${SENTRY_GATEWAY_HOST}:9096
    send_resolved: false

当Alertmanager成功将警报传递到Sentry时,将以以下方式在Sentry项目中注册警报信息作为问题。

Sentry Project

由于问题(Issue)能够按照时间顺序关联相同的警报(Alert),因此您可以确认警报是在什么时间发生的。此外,Prometheus的标签会记录为Sentry的标签,因此您还可以通过标签进行筛选和汇总。

Sentry Issue

另外,通过使用 Sentry 的问题追踪器协作功能,可以方便地从警报中创建问题或在现有问题上发表评论。

Screen Shot 2017-12-03 at 11.37.10.png

总结

如果将 Prometheus 的警报转发到 Sentry,我们发现可以灵活地通过 Alertmanager 来管理警报,这一点让我们非常满意。除此之外,通过在 Sentry 中注册 Release,我们可以进行版本控制,实现按版本管理事件的功能。因此,我们希望能够巧妙地利用这些功能,进一步提高警报管理的效率。

广告
将在 10 秒后关闭
bannerAds