Azureインテグレーションでの監視事始め

こんにちは。Mackerelの社内ユーザー id:koudenpa です。はてな社内では珍しいAzure推し人間です。

この記事ではMicrosoft Azure(以下Azure)上に構築した『基本的なWebアプリケーション』を例に、MackerelのAzureインテグレーション機能を中心とした監視の事始めを紹介します。

『基本的なWebアプリケーション』はAzureアーキテクチャセンターで提示されているものです。

docs.microsoft.com

アプリケーションをApp Serviceでホスティングし、データをSQL Databaseに保存する、まさに基本的な構成です。

How to Azureインテグレーション

『基本的なWebアプリケーション』はAzureのマネージドサービスで構成されています。これをMackerelを使って監視するにはAzureインテグレーション機能を用いてそれらのサービスのメトリック(動作状況)を連携します。

Azureインテグレーションの設定手順はヘルプNTT東日本さんの記事が詳しいです。

設定の際にはメトリックを収集するAzureサービス毎のデフォルトロールを指定すると良いです。これによって自動的に見やすい単位で収集した情報をまとめてくれるようになります。

サービスとロールはAzureインテグレーションの設定前に作成しておきます。サービスは『基本的なWebアプリケーション』そのものに相当します。App Service と SQL Database を使用しているので、それぞれ対応したロールを作成します。

以下のような設定になります。

  • App Service に BasicWebApplication:AppService
  • SQL Database に BasicWebApplication:SQLDatabase

f:id:koudenpa:20200603141649p:plain
デフォルトロールの設定例
Azureインテグレーションを設定して暫くすると連携対象のホストが登録され、メトリックを見られるようになります。これでMackerelでの監視の準備が整いました。

f:id:koudenpa:20200603161548p:plain
しばらく待つとメトリックが収集されサービスのページに対象リソースが表示される(画面レイアウトは設定によって異なります)

監視事始め

監視、何をどう監視するのでしょうか? 基本的にはアプリケーションが正常に動作しているか? を監視できると良いでしょう。Mackerelでは収集したメトリックに対して異常や異常の予兆がないか? の閾値を設定し、その閾値を超えていないかを監視できます。 Mackerelでの監視やその設定の手順は、監視とアラート機能紹介ページヘルプが詳しいです。

どのような設定をするのが良いのかは監視にあたっての永遠のテーマですが、私は大きく二つの観点で考えています。 まず、一般的に気にしておいた方が良いだろうとされているメトリックの変化です。Azureのマネージドサービスであれば各サービスのドキュメントに書かれている推奨の監視が参考になります。 もう一つは、アプリケーションの運用中に発生した障害中のメトリック状態です。事後策となってしまいますが、平常時とは異なる状態のメトリックがあった場合、その変化を監視することで今後は同様の障害の予兆を知ることができるようになります。 もちろん、障害の発生中に何が要因で障害が発生しているのかの切り分けにもMackerelでのメトリック確認は役立ちます。

監視設定の一例

(あまり嬉しい例ではないですが)今回は以前アプリケーションの応答がなくなった時に、DBのCPU使用率が上がっていた……ということにして、CPU使用率に対して応答がなかった時のCPU使用率を異常、普段よりやや高いCPU使用率を警告として設定してみました。

※この記事中のスクリーンショット・グラフは全て仮想シナリオです。

はぁ、なんかアプリ落ちてたらしい。どんな感じだったのかMackerelでメトリック見ておくか。

とりあえず応答がなかった時間のApp Serviceのホストメトリックを見てみる。サーバーエラーしていたが、他のメトリックにはこれで落ちるとは考えられない程度の変化しかなかった。なんでだ?

f:id:koudenpa:20200603171924p:plain
HTTPエラーがある

同時間帯のDBも見てみる。なるほどCPU使用量が増えてる。

f:id:koudenpa:20200603172216p:plain
その時間CPU使用率があがっていた

次似たようなこと起きたら気付くように監視設定しとくか……

f:id:koudenpa:20200603174417p:plain
こんな感じで

監視設定の流れの一例でした。

監視結果を通知

Mackerelではデフォルトで登録メールアドレスに、監視に基づくアラートの発生が通知されるように設定されています。 昨今はアプリケーションの開発・運用にメッセージングサービスを主に使用している場面が多いと思います。日常的に参照しているそれらのサービスに通知されるとアラートの発生に気付きやすくなります。 Mackerelは各種メッセージングサービスへの通知をサポートしているので、使用しているサービスへの通知を設定しておくと良いでしょう。

ここではMicrosoft Teamsに通知するようにしてみました。 アラートを通知する部屋を作って関係者に入ってもらうと良いでしょう。 何か異常が発生した際の初動対応の早さや、その予兆が発生した際の対応の検討の促しにつながります。

f:id:koudenpa:20200603182614p:plain
こんなことがあるかも

事始めの締め

Mackerelでサッとグラフを動かしてアプリケーションの状態を確認、気づいたことがあれば今後は類似の出来事が起きたらすぐ知れるように監視と通知を設定。まずはこのように監視をはじめてみてはいかがでしょうか。