業務で監視にMackerelを使っているのですがここ最近も機能が増えたり、実際使っていく中で閾値の設定などでどうするんだっけと迷ったりしたことがあったので、自分の理解のためにもまとめてみようと思います。
ここでは主に以下のことについて書きます。
- 監視と通知の違い
- 監視の閾値設定
- 通知のミュート
「監視」と「通知」は別
- まず、監視と通知は似ていますが別の概念です
- MackerelのWeb UI的には、監視設定はMonitors、通知系はChannelsというメニューにまとまっています
- メトリックがMackerelに投稿される(そしてMackerel Web UIにグラフができる)→ 作成した「監視設定」によって監視が行われる
- 設定した監視設定の閾値を超える → 設定した「通知チャンネル」や「通知グループ」を元にメールやSlackなどで通知が行われる
- また、Mackerel上のホストの状態(ステータス)によって「監視」や「通知」がされるかどうか変わってくるのですが、以下の公式ドキュメントにわかりやすく表としてまとまっています
「監視」
基本のWarningとCriticalの閾値設定
まず一番シンプルなWarningとCriticalの閾値設定について
- メトリックの値に応じて、Warningやより緊急度が高いと感じるレベルのCriticalを指定できます
- 用途によっては、「Warningだけで良い」「Criticalだけで良い」などがあるかもしれないですが、片方だけ指定することで実現が可能です
「平均値監視」と「アラート発生までの最大試行回数」
これについては 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
「通知」
通知周りは id:missasan さんのエントリにわかりやすくまとまっていますが、改めてポイントを自分なりにも書いてみます。
missasan.hatenablog.com
通知チャンネル
- 「監視」セクションで設定した監視設定に基づいて起票されたアラートの通知を受け取るための設定を、「通知チャンネル」として作成できます
- 作成できる通知チャンネルの種類は様々で、メール、Slack、Twilio、Webhook、等など…好みに応じて作成できます
アラートメール通知受信設定
- 「通知チャンネル」の設定で例えば「オーガニゼーションに所属する全ユーザー」に対してのアラートメールの設定がされた場合に、アラートメールからオプトアウトしたいことがあると思います
- 個人設定ページ よりいつでもこのオプトアウトが可能です
通知グループ
- Mackerelではデフォルトであらゆるアラートを吸収し、そこから適切に通知先に通知してくれる「デフォルト通知グループ」があります
- とはいえ、アラートの種類によっては全通知ではなく、決まったチャンネルにのみ通知させたいという用途もあるのでそこで通知グループというものが作れます
- また通知グループの設定として、通知レベルを「Critical only」に設定することも可能です。緊急度が高いアラートのみ特定のSlackチャンネルに流す、といったようなことが実現可能です。
アラートの再送間隔
- 「監視設定」を作る画面でアラートの再送間隔の設定がありますが、通知に関する設定です
- これを設定すると、アラート発生中(つまりWarningやCritical状態)が続いている間は、再送間隔で指定した間隔で定期的に通知がやってくるようになります
- 通知先は変わらず、↑で設定した通知グループに依存します
- 一度Critical状態に入ったまま数十分、数時間とか経過してしまうとアラートの存在自体忘れかねないのでそういう場合に設定しておくと安心でしょう
監視設定のミュート
- こちらも監視設定作成・編集画面や一覧画面からの操作となりますが、通知に関する設定です
- 指定した監視設定をワンクリックで通知無効にしたり、指定した時間まで無効にすることができます
オーガニゼーションに関わる全ての通知のミュート
- 名前通りすべての通知を一括でミュートにすることもできます
- とても危険な機能なため、利用は推奨されていないようです
この機能はオーガニゼーション内の全てのアラートの通知がされなくなってしまう影響範囲の広い機能であるにも関わらず、誰がどういう意図で変更したのか分からないという問題があり、ご利用の推奨はしておりません。
【リリース予告】オーガニゼーションの通知停止設定の仕様変更予定のお知らせ - Mackerel ブログ #mackerelio
まとめ
以上色々と書いたところで、最後にやりたいことベースに改めて書いてきたことをもう一度まとめてみます。
監視や通知の微調整がしたいときにやれること
まずアラートが上がってきたときの挙動についてファインチューニングしたいとなった際にやれそうなことは以下の通りです。
監視や通知を一時的に無効にしたいときにやれること
次に、「異常が発生することはわかっているので、通知はきてほしくない」つまり無効にしたいときに、いくつかやれることがあります。
- 対象ホストのステータスをstandby/maintenance/poweroffにする
- standby: 対象ホストの通知のみ停止する
- maintenance/poweroff: 対象ホストの監視と通知を停止する
- ダウンタイムを設定する
- 指定した期間でのサービス/ロール/監視設定の監視と通知を停止する
- 対象の監視設定をミュートにする
- 指定した監視設定の通知を停止する
- アラートメール通知受信設定を無効にする
- (ユーザ個人のメールアドレスへの)通知を停止する
- オーガニゼーションに関わる全ての通知のミュート
- そのオーガニゼーションのすべての通知を停止する
- 影響範囲が広くて危険なため非推奨
「対象ホストのステータスをmaintenance/poweroffにする」「ダウンタイムを設定する」の2つについては、監視と通知の両方を停止します。これはつまり、その間アラートとして起票されないということです。期間中アラートメールなどが止まるだけでなく、後ほどアラート一覧画面などを眺めて振り返ろうにもアラートとして起票されていないので、これらの手段を取るときは一度「アラートとして起票されないこと」を念頭に使っていくべきでしょう。(逆に、サービスがメンテナンスに入ってる間にアラート一覧がメンテ中のもので埋もれるということを防げるということでもあります)。
Mackerelでは、時間帯を指定して監視を停止することができます。 定期的なバッチ処理や、メンテナンス期間など、あらかじめ負荷が上がることが分かっている期間に、アラートが発報されないように設定することができます
ダウンタイムを設定する - Mackerel ヘルプ