ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

AWSをMackerelで監視(通知編)

こんにちは。ソリューション技術部の松尾です。

最近は夏の暑さを感じ始めたとともに、ゴマサバの季節が来たなとしみじみと感じております・・・。

※ゴマサバは一年中美味しく食べられますが、マサバは冬が旬ということで、マサバの味が落ちる夏にゴマサバの漁獲量が上がるらしいです。

サバといえば??

そうです!Mackerelです!!

前回の投稿ではMackerelのオーガニゼーション登録から基本的なメトリクスの取得までの手順を記載させていただきました。 以下前回のブログとなります!

techblog.forgevision.com

今回はその第2弾ということで、監視の醍醐味であるアラートの設定・通知方法について記載したいと思います!

※前回のブログで説明させていただいている用語におきましては、説明を省かせていただきます。

アラート設定

早速アラートの設定を開始していきます。

MackerelのUI画面にログイン後、左ペインの「Monitors」を押下します。

監視ルール設定画面が表示されますが、既に「connectivity」という監視ルールが設定されています。

f:id:matsuo1017:20180712180652p:plain

この監視ルールは各ホストにインストールされたmackerel-agentの死活監視を行っており、ホストが停止(mackerel-agentが停止)するとアラートが発報されます。

※削除してしまっても問題ありません。

「connectivity」の詳細は以下MackerelサイトのFAQをご覧ください。

mackerel.io

続いて画面右上の「監視ルールを追加」を押下すると、新規監視ルールを作成する画面が表示されます。

f:id:matsuo1017:20180712181231p:plain

アラートが設定可能な監視は以下の4種類です。

  • ホストメトリック監視
    • ホストで取得可能なメトリック(CPU、Memoryなど)からアラートを作成します。
  • ホスト死活監視
    • 上述した「connectivity」アラートがこちらの設定です。
  • サービスメトリック監視
    • サービスに紐付いたメトリックからアラートを作成します。
    • サービスメトリックは特定のホストとは直接紐付かないメトリックを可視化、監視する仕組みです。
  • 外形監視
    • 指定したURLに対して1分毎にHTTPのリクエストを行い、レスポンスタイムやステータスコードの監視を行います。

今回はホストメトリック監視について各設定項目を説明しつつ設定を行っていきます。

1.監視対象

設定したアラートを通知先に発報したい場合は、ホストのステータスが「working」である必要があります。 ステータスは以下の4種類があり、ステータスを変更することによって監視・通知を制限することができます。

  • working
  • standby
  • maintenance
  • poweroff

定期的に起動・停止を行っている場合や、メンテナンスを行う際などに「maintenance」や「poweroff」のステータスとすることで不要なアラートが発報されることを防ぎます。

各ステータスの詳細は以下のMackerelサイトヘルプをご確認下さい。

mackerel.io

2.メトリック

アラートを設定したいメトリックを選択します。 Mackerelで取得できているメトリックであれば、どれでも指定が可能です。

今回はCPU使用率「CPU %」でアラートを作成します。

f:id:matsuo1017:20180712181127p:plain

3.閾値

指定したメトリックの閾値を設定します。 今回はCPU使用率が80%を超えたらWarning、90%を超えたらCriticalとなるよう設定します。

※取得するメトリックによって大なり「>」、小なり「<」の考え方が変わりますので注意しましょう!

「平均値監視」は取得したメトリックの何点分の平均値を取るかを設定します。

メトリックは1分間隔となっているため、デフォルトの「3」を指定した場合は3分の平均となりますが、直前の3分間の平均ではありません。 メトリックは取得できない場合もあるため、3分間のうち2点分のメトリックしか取得されない場合が考えられます。 そういった場合には、それより前に取得できているメトリック(4分前など)を使用し3点分の平均値をもとめます。

詳細は以下Mackerelサイトブログをご確認下さい。

mackerel.io

今回の設定はデフォルトの「3」のままで設定をします。

4.アラート発生までの最大試行回数

Warning、Criticalのアラートに相当する異常値が何回連続で発生した場合にアラートとするかの設定となります。

今回はデフォルトの「1」回のままで設定をします。

5.絞込

ここではアラートを設定するホストを絞り込むことができます。 絞込を行うにはホストをサービスとロールに紐づける必要があります。 サービス配下のホスト全てを監視する場合は、サービスのみ選択し、ロールを「*」とする必要があります。 除外条件も同じく設定することが可能です。

今回は作成済みの以下を対象として設定します。

 サービス:john-production-service  ロール:john-production-web

f:id:matsuo1017:20180712181714p:plain

6.基本設定

ここではアラートの名前を設定します。 日本語入力が可能です。

今回は「【JOHN】WEBサーバーCPU使用率監視」と設定します。

7.オプション

ここでは通知の再送間隔の設定を行うことができます。 アラートが発生している期間に一定の時間間隔で通知を再送し続けます。 10分以上から設定可能です。

今回は60分で設定を行います。

1~7までの手順が完了したら、画面左下の「作成」を押下します。

監視ルール設定画面に作成したアラート設定が表示されていることを確認します。

f:id:matsuo1017:20180712182012p:plain

これでホストメトリック監視のアラート設定は完了です!

通知設定

アラートの作成が完了しましたので早速負荷をかけて検証!といきたいところですが、せっかくなら実際にアラートが発報されるところまで確認できればと思いますので、先に通知設定について記載していきます。

先ほどアラートを作成した監視ルール設定画面右上の「チャンネル設定」を押下します。

f:id:matsuo1017:20180712182258p:plain

既にデフォルトで通知グループ「Default」、通知チャンネル「Email Broadcast」が作成されています。

通知チャンネルにはメールアドレスなど通知先の設定を行います。 既に設定されている「Email Broadcast」は「オーガニゼーションに所属する全ユーザ」が選択されています。

※所属しているユーザは、MackerelUI画面左ペインのオーガニゼーションを押下し、「メンバー」タブで確認することができます。

f:id:matsuo1017:20180712182742p:plain f:id:matsuo1017:20180712182823p:plain

通知するイベントには「アラート通知」が設定されていますので、アラートが発生すると所属する全メンバーのメールアドレス宛にアラートが発報されることとなります。 アラートグループ通知については以下Mackerelサイトのヘルプをご確認下さい。

mackerel.io

なお「Email Broadcast」は削除可能ですので、不要であれば削除しても問題ありません。

通知グループの設定は、通知対象のサービスの指定と、通知チャンネルの紐づけを行います。 「Default」は削除することができず、サービスも指定できないため、全てのサービスに所属しているホストのアラートが通知先に送られます。

f:id:matsuo1017:20180712183112p:plain

なお、通知チャンネルを作成した際は必ずこの「Default」に所属してしまうため、不要なアラート通知がされないよう通知先から削除する等の注意が必要です。 また、この通知グループの設定で、通知レベルを「Critical only」とすることができ、一部の連絡先はCriticalアラートのみ発報するといった設定もできます。

それではまず通知チャンネルを追加していきます。 表示しているチャンネル設定画面右上の「通知グループ/通知チャンネルを追加」を押下します。

新しく通知チャンネルを作成画面で任意のツールを選択します。

f:id:matsuo1017:20180712183358p:plain

今回はSlackとの連携方法を紹介したいので、Slackを選択します。

f:id:matsuo1017:20180712183441p:plain

以下各項目の概要です。

1.通知チャンネル名

こちらは実際にSlackで使用しているチャンネル名にする必要はありません。

今回は「mackerel-john」という名前で登録します。

2.URL

こちらはSlack APIの1つであるIncoming Webhooksを利用し生成されたチャンネルURLの入力を行います。 Incoming WebhooksでURLを取得する方法は以下の通りです。

 1.Slack にて Mackerel アラート受信用のチャンネルを作成

 2.受信用チャンネルの「Channel Setting」(歯車マーク)で「Add apps ...」を押下

 3.画面上部の「View App Directory」を押下

 4.Add apps, get work done画面にて「Get Essential Apps」を押下

 5.画面最上部のSearch App Directoryにて「Incoming WebHooks」を検索して押下

 6.Incoming WebHooks 画面で「Add Configuration」を押下

 7.Post to Channnelで受信用チャンネル名を選択し、「Add Incoming WebHooks integration」を押下

 8.Webhook URLを取得

やや古い情報ですが、Mackerelサイトのヘルプでも情報が公開されております。

mackerel.io

3.Mentions

OK、Warning、Criticalの通知がされた際にメンションを付与することができます。 今回は特に設定は行いません。

関連するグラフを表示は、通知と併せてグラフの情報も投稿する設定です。 デフォルトで有効化されており、今回はチェックされた状態で設定を進めます。

4.通知するイベント

設定したチャンネルに通知するイベントのレベルを設定できます。 デフォルトはアラート通知のみとなっておりますが、それ以外のイベントも通知したい場合は随時有効化してください。

今回はデフォルトのままとします。

以上の1~4の作業が完了したら「作成」を押下します。

チャンネル設定画面で通知チャンネルが追加されていることを確認します。

f:id:matsuo1017:20180712184051p:plain

上述の通り、作成直後は「Default」通知グループに所属しています。 不要なアラート通知を避けるため、「Default」通知グループから作成した通知チャンネルを削除します。

f:id:matsuo1017:20180712184310p:plain

次に通知グループを追加していきます。

チャンネル設定画面右上の「通知グループ/通知チャンネルを追加」を押下します。 「通知グループ」を押下します。

f:id:matsuo1017:20180712184336p:plain

以下各項目の概要です。

1.通知グループ名

こちら通知グループの名前となります。

今回は「john-group」という名前で登録します。

2.通知対象

どのサービスもしくは監視ルールを通知対象とするか選択します。 今回は作成したサービス「john-production-service」を選択します。

※監視ルールで指定する場合は、作成したアラート名を選択します。

3.通知先

作成した通知チャンネルを指定します。 今回は作成した通知チャンネル「mackerel-john」を選択します。

4.通知レベル

通知をCritical onlyとする場合に有効化します。

今回はWarningも取得したいため無効とします。

1~4の作業が完了したら、「作成」を押下します。

チャンネル設定で新しく作成した通知グループが表示されていることを確認します。

f:id:matsuo1017:20180712184719p:plain

アラート通知検証

実際にCPU使用率が高騰した際にどのようにSlackに通知されるかを確認します。

MackerelUI画面左ペインの「Alerts」を押下し、現在何もアラートが発生していないことを確認します。

f:id:matsuo1017:20180712184751p:plain

それでは実際にアラートが発生するかの確認を行います。 今回のアラート設定ではCPU使用率の3点の平均が90%となり、それが1回発生した場合にCriticalが発報されるようになっています。

ホストのCPUに負荷をかけること3分、以下のアラートが発生しました!

f:id:matsuo1017:20180712185148p:plain

また、Slackでも以下の通り問題なくアラート通知できたことを確認しました!

f:id:matsuo1017:20180712185215j:plain

アラートの確認は完了したので次は復旧した場合にどのような表示となるか確認します。

ホスト側の負荷を下げて2分前後で以下の通りMackerelのアラートは無くなりました!

f:id:matsuo1017:20180712185258p:plain

アラートとなっていた項目はClosed配下に表示されています。 Closedとなったアラートを選択すると、以下の通りアラートの発生から終了までの情報(時系列など)が確認できます。

f:id:matsuo1017:20180712185319p:plain

また、SlackでもステータスがOKとなった旨が通知されたことを確認しました!

f:id:matsuo1017:20180712185337j:plain

これで、基本的なアラート・通知設定は完了です!!

次の配信について

今回のブログでは基本的なアラートと通知の設定について記載させていただきました。

次回は一部から要望のあった以下の記事を書きたいと思います。

  • pluginによる監視(テンプレで使えそうな設定など)
  • Windowsの監視方法

それでは次回もお楽しみに!!