Help us understand the problem. What is going on with this article?

Prometheus のアラートを Sentry で管理する

More than 1 year has passed since last update.

Z Lab では様々なシステムの監視に Prometheus を使用しています。Prometheus からのアラート通知には Alertmanager を使用していますが、障害対応などをしていくうちに、チーム内で以下のような不満が出てきました。

  • アラートの履歴が時間が経つとで消えてしまい、何が起きていたのか分かりにくい
  • どのアラートが多く発生しているかなどの集計がしにくい
  • アラートの情報をもとに GitHub に Issue を簡単に作成したい

そこで、Alertmanager の機能についてもう少し詳しく調べてみたところ、そもそも Alertmanager はアラートの通知に特化した設計になっており、永続的にアラートの情報を管理する場合は、Webhook による通知機能を利用して別のシステムにアラート情報を転送して管理するのが良いことが分かりました。

新たにアラート情報を収集して管理するシステムを作ることも検討しましたが、あまりそこにコストをかけたくなかったため、以前から使ってみたいと思っていた Sentry に Prometheus のアラートを転送して管理してみることにしました。

Sentry とは?

Sentry はモバイルアプリケーションのクラッシュや Rails などのエラーログといったイベントを収集して、閲覧や管理ができるサービスです。様々なプログラミング言語用にライブラリが提供されており、簡単にイベントの収集機能を組み込むことができます。

Sentry でアラートを管理することは、サービスの本来の用途に適していないように見えるかもしれませんが、以下のようなポイントが今回の要件にマッチしていたので、ひとまずやってみることにします。

  • イベントを時系列で管理できる
  • イベントに付与したタグで柔軟に集計ができる
  • Issue Tracker との連携が充実しており、Issue の作成などができる
  • ライブラリが充実しており、アラートを Sentry に転送する仕組みの実装が容易
  • Sentry 自体が OSS で公開されており、オンプレミス環境での運用も可能

alertmanager-sentry-gateway で Sentry にアラートを送信する

Alertmanager から Sentry にはアラートを転送する機能がなかったため、今回は Alertmanager から Webhook を受信して、その情報を Sentry に転送するための alertmanager-sentry-gateway を実装しました。

alertmanager-sentry-gateway は GitHub の Release ページからバイナリーをダウンロードして、以下のように起動します。起動には 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 のプロジェクトにアラート情報が Issue として登録されます。

Sentry Project

Issue には同じアラートが時系列で紐付けられるので、後からいつアラートが発生したのかを確認できます。また Prometheus のラベルが Sentry の Tag として記録されるので、Tag で絞り込んだり集計したりすることもできます。

Sentry Issue

また、Sentry の Issue Tracker 連携機能を使えば、アラートから Issue を作成したり、既存の Issue にコメントを投稿できたりするので便利です。

Screen Shot 2017-12-03 at 11.37.10.png

まとめ

Prometheus のアラートを Sentry に転送しておけば、Alertmanager で不満に感じていたアラートの管理が柔軟にできることが分かりました。Sentry には他にも Release を登録しておくことでバージョンごとのイベント管理ができるようなので、そのあたりの機能もうまく使い込んでアラートの管理をより効率化していきたいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした