LoginSignup
1
0

More than 3 years have passed since last update.

Mackerelのアラート回数をモニター別に集計しようとしてみたが失敗した

Last updated at Posted at 2019-12-19

こんにちは、これはMackerel Advent Calendar 2019 の19日目のエントリです。

日々サービス運用に携わっている中である特定のアラートが多く発生したり、
また逆に、何かしらの対策を講じることで今まで頻発していたアラートが減ることがあるかと思います。

そのような時、感覚的には増えたな、減ったなと思うんですが、
じゃあ具体的にどのくらい増減してるんだ、ということが分からない状態でした。

そこで定量的にアラートの増減を把握するために、アラート回数の集計を試みることにしました。

Mackerelではアラートの通知もwebhookで飛ばすことができるので、
エンドポイントをAPI+Lambdaにして、
その結果をMackerelのサービスメトリックに投稿して集計できないかと考えました。

大まかな流れは下記の通りです。
※こちらは cohalzさんの記事を参考にしました。

  1. アラートが発生するとMackerelのwebhookからAPI Gatewayのエンドポイントにリクエストが飛ぶ
  2. API GatewayからLambdaを呼び出す
  3. LambdaからMackerelのサービスメトリック投稿のAPIにPOSTする

スクリーンショット 2019-12-19 5.58.50.png

サービスメトリック投稿のためにはMackerelのAPIに下記のようなJSONをPOSTします。

[{"name": string, "time": number, "value": number}]


MackerelからAPI Gatewayに通知されるJSONには以下のような内容を含んでいるため、
nameをmonitorName、timeを日付+固定時刻(00:00)にしてサービスメトリックに投稿すれば、
日×モニター名別にアラート回数をグラフ化できそうだと考えました。
参考

  "alert": {
    "openedAt": 1473129912,
    "closedAt": 1473130092,
    "createdAt": 1473129912693, 
    "criticalThreshold": 1.9588528112516932, 
    "duration": 5, 
    "isOpen": true, 
    "metricLabel": "MetricName", 
    "metricValue": 2.255356387321597, 
    "monitorName": "MonitorName", 
    "monitorOperator": ">", 
    "status": "critical", 
    "trigger": "monitor", 
    "url": "https://mackerel.io/orgs/.../alerts/2bj...",
    "warningThreshold": 1.4665636369580741


実際にアラート発火させサービスメトリックに投稿した結果がこちらになります。
スクリーンショット 2019-12-19 7.35.29.png

countAlert*のサービスメトリックに対して、alertA、alertBの結果が投稿されています。

しかし、これだと意図通りに集計できません。
同一nameで同一時刻にサービスメトリックを投稿すればvalueは増加していくと何故か思い込んでいたのですが、
もちろんそんなことはなく、valueは新しい投稿で上書きされます。
(最初に気づけよという話なのですが、メトリック投稿するまで気づきませんでした…)

思ったようにアラートを集計できなかったというまとめになってしまったのですが、
Mackerelがwebhookで飛ばせる情報には、有益な項目が多々含まれていることがわかったので、
アラート集計に限らず試していければと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0