@stefafafan の fa は3つです

すてにゃんのブログです

サーバ管理・監視サービス「Mackerel」においての「監視」と「通知」の違いと設定項目についてまとめてみた

業務で監視にMackerelを使っているのですがここ最近も機能が増えたり、実際使っていく中で閾値の設定などでどうするんだっけと迷ったりしたことがあったので、自分の理解のためにもまとめてみようと思います。

ここでは主に以下のことについて書きます。

  • 監視と通知の違い
  • 監視の閾値設定
  • 通知のミュート

mackerel.io

「監視」と「通知」は別

  • まず、監視と通知は似ていますが別の概念です
    • MackerelのWeb UI的には、監視設定はMonitors、通知系はChannelsというメニューにまとまっています
  • メトリックがMackerelに投稿される(そしてMackerel Web UIにグラフができる)→ 作成した「監視設定」によって監視が行われる
  • 設定した監視設定の閾値を超える → 設定した「通知チャンネル」や「通知グループ」を元にメールやSlackなどで通知が行われる
  • また、Mackerel上のホストの状態(ステータス)によって「監視」や「通知」がされるかどうか変わってくるのですが、以下の公式ドキュメントにわかりやすく表としてまとまっています

mackerel.io

「監視」

基本のWarningとCriticalの閾値設定

まず一番シンプルなWarningとCriticalの閾値設定について

  • メトリックの値に応じて、Warningやより緊急度が高いと感じるレベルのCriticalを指定できます
  • 用途によっては、「Warningだけで良い」「Criticalだけで良い」などがあるかもしれないですが、片方だけ指定することで実現が可能です

f:id:stefafafan:20200301131712p:plain
CPU%の監視で50%を超えた場合にWarningのみの設定をしている図

「平均値監視」と「アラート発生までの最大試行回数」

これについては id:a-know さんのエントリにわかりやすくまとまっています
blog.a-know.me

  • 簡単にまとめると、
    • 平均値監視: 指定した「点」数で平均値をとり、その平均の値が閾値を超えたらアラートとする
    • アラート発生までの最大試行回数: 閾値を超えていたとしても、指定した回数連続で超えてる場合のみアラートとする
    • 「平均値監視」と「アラート発生までの最大試行回数」は組み合わせて指定することが可能
  • 自分なりに注意点をさらに付け加えると、Mackerelのデータは最短で1分粒度ですが、全てのメトリックが1分粒度であるとは限らないということです
    • 例えばサービスメトリックは好きなタイミングでメトリック投稿が可能です
    • また、Mackerelの AWSインテグレーションAmazonのCloudwatch APIに依存していますが、CloudwatchのAPIで取得できるメトリックの間隔は様々です
    • このため、「平均値監視」と「アラート発生までの最大試行回数」を使って監視設定を調整する際は、監視対象メトリックの粒度に応じて対応すると良いでしょう

CloudWatch でサポートされる最小の分解能は 1 秒のデータポイントで、これが高分解能のメトリクスです。または、1 分の粒度でもメトリクスを保存できます。CloudWatch によって受信されるメトリクスは、3 分間隔や 5 分間隔など、さまざまな間隔の場合があります
よくある質問 - Amazon CloudWatch | AWS

ダウンタイム
  • ダウンタイムという機能が半年前にリリースされました、これは「監視」を決まったタイミングで停止する機能です
  • ここでのポイントは「通知をミュートする」のではなく、「監視」そのものが止まるという点です。そのため、監視設定で指定した閾値を超えたとしても、ダウンタイム期間中はアラート一覧画面には表示されません

ダウンタイムを設定している時間帯は、対象の監視ルールに抵触するようなメトリック投稿があった場合でも、アラート一覧への起票や通知チャンネルへの通知は行われません。(メトリック投稿は行われます。)
ダウンタイム機能をリリースしました ほか - Mackerel ブログ #mackerelio

mackerel.io

「通知」

通知周りは id:missasan さんのエントリにわかりやすくまとまっていますが、改めてポイントを自分なりにも書いてみます。
missasan.hatenablog.com

通知チャンネル
  • 「監視」セクションで設定した監視設定に基づいて起票されたアラートの通知を受け取るための設定を、「通知チャンネル」として作成できます
  • 作成できる通知チャンネルの種類は様々で、メール、Slack、Twilio、Webhook、等など…好みに応じて作成できます
アラートメール通知受信設定
  • 「通知チャンネル」の設定で例えば「オーガニゼーションに所属する全ユーザー」に対してのアラートメールの設定がされた場合に、アラートメールからオプトアウトしたいことがあると思います
  • 個人設定ページ よりいつでもこのオプトアウトが可能です
通知グループ
  • Mackerelではデフォルトであらゆるアラートを吸収し、そこから適切に通知先に通知してくれる「デフォルト通知グループ」があります
  • とはいえ、アラートの種類によっては全通知ではなく、決まったチャンネルにのみ通知させたいという用途もあるのでそこで通知グループというものが作れます
  • また通知グループの設定として、通知レベルを「Critical only」に設定することも可能です。緊急度が高いアラートのみ特定のSlackチャンネルに流す、といったようなことが実現可能です。

mackerel.io

アラートの再送間隔
  • 「監視設定」を作る画面でアラートの再送間隔の設定がありますが、通知に関する設定です
  • これを設定すると、アラート発生中(つまりWarningやCritical状態)が続いている間は、再送間隔で指定した間隔で定期的に通知がやってくるようになります
    • 通知先は変わらず、↑で設定した通知グループに依存します
  • 一度Critical状態に入ったまま数十分、数時間とか経過してしまうとアラートの存在自体忘れかねないのでそういう場合に設定しておくと安心でしょう

mackerel.io

監視設定のミュート
  • こちらも監視設定作成・編集画面や一覧画面からの操作となりますが、通知に関する設定です
  • 指定した監視設定をワンクリックで通知無効にしたり、指定した時間まで無効にすることができます

f:id:stefafafan:20200301203053p:plain
CPUの監視設定をミュートにしている様子
f:id:stefafafan:20200301203118p:plain
監視設定編集画面から時間指定で通知をミュートにしている様子

オーガニゼーションに関わる全ての通知のミュート
  • 名前通りすべての通知を一括でミュートにすることもできます
    • とても危険な機能なため、利用は推奨されていないようです

この機能はオーガニゼーション内の全てのアラートの通知がされなくなってしまう影響範囲の広い機能であるにも関わらず、誰がどういう意図で変更したのか分からないという問題があり、ご利用の推奨はしておりません。
【リリース予告】オーガニゼーションの通知停止設定の仕様変更予定のお知らせ - Mackerel ブログ #mackerelio

まとめ

以上色々と書いたところで、最後にやりたいことベースに改めて書いてきたことをもう一度まとめてみます。

監視や通知の微調整がしたいときにやれること

まずアラートが上がってきたときの挙動についてファインチューニングしたいとなった際にやれそうなことは以下の通りです。

  • 監視
    • 閾値の値を調整する
    • メトリックの投稿間隔を考慮しつつ、「平均値監視」や「アラート発生までの最大試行回数」の値を調整する
    • また今回はあえて取り上げていなかったですが、「ホストメトリック監視」以外にも「ロール内異常検知」や実験的機能である「式による監視」を活用してみるのも良いでしょう
  • 通知
    • 通知グループを活用して、サービスごとに通知先を振り分けたり、CRITICAL通知のみに絞り込みしたりする
監視や通知を一時的に無効にしたいときにやれること

次に、「異常が発生することはわかっているので、通知はきてほしくない」つまり無効にしたいときに、いくつかやれることがあります。

  • 対象ホストのステータスをstandby/maintenance/poweroffにする
    • standby: 対象ホストの通知のみ停止する
    • maintenance/poweroff: 対象ホストの監視と通知を停止する
  • ダウンタイムを設定する
    • 指定した期間でのサービス/ロール/監視設定の監視と通知を停止する
  • 対象の監視設定をミュートにする
    • 指定した監視設定の通知を停止する
  • アラートメール通知受信設定を無効にする
    • (ユーザ個人のメールアドレスへの)通知を停止する
  • オーガニゼーションに関わる全ての通知のミュート
    • そのオーガニゼーションのすべての通知を停止する
    • 影響範囲が広くて危険なため非推奨

「対象ホストのステータスをmaintenance/poweroffにする」「ダウンタイムを設定する」の2つについては、監視と通知の両方を停止します。これはつまり、その間アラートとして起票されないということです。期間中アラートメールなどが止まるだけでなく、後ほどアラート一覧画面などを眺めて振り返ろうにもアラートとして起票されていないので、これらの手段を取るときは一度「アラートとして起票されないこと」を念頭に使っていくべきでしょう。(逆に、サービスがメンテナンスに入ってる間にアラート一覧がメンテ中のもので埋もれるということを防げるということでもあります)。

Mackerelでは、時間帯を指定して監視を停止することができます。 定期的なバッチ処理や、メンテナンス期間など、あらかじめ負荷が上がることが分かっている期間に、アラートが発報されないように設定することができます
ダウンタイムを設定する - Mackerel ヘルプ