Azure Monitorで通知機能を作り込む

##はじめに
Azure上に構築したシステムをみなさんはどのように監視運用していますでしょうか？
今回はAzure Monitorを活用した監視運用の方法について書いていきたいと思います。


##オンプレ時代の監視運用
監視運用というと、オンプレ時代はだいたいどのお客様もデータセンター内に純国産の統合運用システムを導入されていて、業務システムの監視運用やバッチ運用を行っていました。振り返ると、私がこれまで担当したシステムでは、富士通のSystemwalkerやNECのWebSAM、NRIのSenjuなんかも触りました。（何故か日立のJP1は関わらなかった・・・）

従来の運用ツールの仕組みは、”ノード”と呼ばれる管理対象サーバ内に運用ツール用のエージェントをインストールし、そのエージェントがOSやOS上のアプリケーションの情報を収集、マネージャに継続的に送信する、さらにマネージャに集められた情報を専用のアプリケーションやブラウザで監視する、という方法が取られていました。また、マネージャ側では、アラートを上げるための条件（CPU使用率が80％以上になった、とか、あるログから特定エラーメッセージが出力された、とか）を定義しておき、その定義に合致した状態になったらアラート（メール通知、電話通知など）をあげるという方式を取っていました。
![キャプチャ1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/daa2d673-3f69-b4b2-fd11-5b3c9b1a2612.png)

これらの統合運用システムは、機能がとても豊富で、実運用十分な機能が実装されていましたが、一方で、非常に高価なものだっただめ一般人が購入するようなものではありませんでした。


##クラウド時代の監視運用
さて、クラウド時代となった現在はどうでしょうか？システムの構築が各段に楽になったこともあり、クラウド上には小さなシステムが大量に作られています。これらのシステムについても本番稼働しているなら監視運用を行う必要があります。しかし、従来のような効果な統合運用システムを導入する訳にはいきません。そんな時には以下のような選択肢があります。

**１．（運用基盤を持っている場合、）オンプレからクラウドに閉域接続し、引き続きオンプレ上の統合運用システムで管理する**
エンタープライズのお客様はこのパタンが一番多いと思います。クラウド環境だけで新規システムを構築するというシーンが少なく、どちらかというと従来からあるオンプレの共通機能（DBや認証機能）を使う必要があったり、イントラの延長でクラウドを使いたいという要望が多く、閉域接続がシステム構築の前提になるからです。この場合は、既存の運用の仕組みを使うのが一番効率的です。
![キャプチャ2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/edbb26a7-4962-fd03-d283-a50afd462e04.png)
ただし、IaaS系のシステムに限ります。PaaSになると、従来の監視の仕組み（エージェント導入）ができませんので、別の運用の仕組みを検討する必要があり、統合運用システム側がPaaS系のクラウドサービスに対応しているかが肝になります。

**２．クラウド上で新規に運用システムを構築する**
昨今では、オープンソースの運用ツールが多数登場してきたり、運用SaaSも出てきており、機能的には従来の統合運用システムに引けを取らないレベルになっています。このようなツールを採用するのも1案です。ただし、オープンソースについてはサポートが付かないので、エンタープライズの世界だと嫌がられたります。一方、運用SaaSは、機能も十分でサポートもあるため、多くの企業で採用されていると思います。ただ、ライセンス体系をしっかり見極めておく必要があります。ライセンス料はノード単位が多いと思いますが、将来的な構築台数見込みと一緒に検討しないと、気づいたらものすごい量のライセンス料を支払うことになっていた、なんて危険があります。（「ちりつも」系のコワい所。）
![キャプチャ3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/3b8731a8-450b-19c2-c76d-8a82bac5d5f4.png)![キャプチャ4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/867e5078-22c8-e370-6de6-76b677a80c1f.png)

**３．クラウドの標準的な(マネージドな)運用機能を利用する**
Microsoft Azureには、IaaS系サービス、PaaS系サービスの運用を行うサービスがあります。このようなサービスを有効活用する方法があります。機能的には従来の統合監視システムには劣る所はあると思いますが、実運用で適用可能なレベルにはあることと、何よりコスト面で大きなアドバンテージがあると思います。ということでこの後は、Microsoft Azureが提供する運用ツール「Azure Monitor」について機能紹介と使い方について紹介したいと思います。

##Azure Monitor とは
AzureMonitorはAzure上の各層に分散した様々なログやメトリクスといった情報を統合して収集し、ユーザの要求（例えば、視覚化、分析、通知）に繋げるための統合サービスです。対象のサービスは、Virtua Machine やコンテナ、PaaSサービスなど多岐にわたります。プラグインを導入すれば、オンプレ上のリソースに対しても同様に管理することもできます。運用系で聞いたことがある「Application Insights」や「Log Analytics」といったサービスも”Azure Monitor”に包含されるサービスに位置付けられています。
![キャプチャ5.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/ae91b8e1-240f-6648-47fe-699bb782a8a1.png)

(こんなイカした？ダッシュボードをつくることもできます)
![キャプチャ6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/cc3c484b-91cc-b8dd-76c5-bbdcc293b6ae.png)

####VM Insights
では早速触ってみましょう。今回試してみるのはVMの監視方法です。今回はWindowsVMを対象とします。まずWindowsVMを構築してしばらくたつと、すでに拡張機能がインストールされています。このうち「MicrosoftMonitoringAgent」がAzure Monitorのエージェントになります。
![キャプチャ7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/a05c299b-a2a9-3f86-d7e2-98a019cc7999.png)

さらに、対象VMの管理ブレードより「診断設定」に進むと、”ゲストレベルの監視を有効にする”という項目が出てきます。これをセットアップすると、WindowsVMのOS内の情報（例えばイベントログやパフォーマンスモニタ）も取得できるようになります。
![キャプチャ8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/85c1c073-4915-00b8-46db-fc4ed1a63177.png)

####VM Metrics
VMのメトリクスについては、こんな感じで可視化も簡単にできるようになります。ちなみに上部がホスト層から取得した値、下部がゲスト層から取得した値を対比して並べています。ホスト層の方がうまく取れてますね。ゲストの方はチューニングが必要なのかな？？ディスク値は何かミスってる気がする。あとホスト層でメモリ使用率が取れるようになっていたのが驚き。。
![キャプチャ9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/eb5a2076-3c20-09f7-7313-7ac2aca69e0b.png)

####イベントログ
ログについてはLog Analyticsにより参照・分析することができます。WindowsVMであれば、取り急ぎイベントログを連携したくなりますね。この場合は、事前にLog Analyticsを構成しておきます。LogAnalyticsの「仮想マシン」に監視対象のVM名が表示されていればOKです。
![キャプチャ10.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/a57ca566-d946-9a97-fcfd-9e85e2c5ed58.png)
![キャプチャ11.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/36f92d17-3b8e-d69f-b322-0fa0322b56f4.png)
![キャプチャ13.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/2346ebc4-1018-a266-62af-c93a41bcb24a.png)

さて、そしたらLogAnalyticsのクエリ実行でEventログが取得できるか実行しています。
Event | Where Computer == "VM名" と実行すると、対象VMのイベントログが参照できました！
![キャプチャ12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/9bd73b81-462f-8ab9-fce5-52c8ebfd6cf3.png)

####アラート通知
最後はアラート通知です。今回は取り合えず通知をさせたいので「VMのCPUが10%になったら通知する」という設定を入れてみましょう。設定は超簡単です。アラートを飛ばしたいメトリックを選択して、メニューから「新しいアラートルール」というリンクを選択します。すると「アラートルールの作成」画面に進みます。ここで具体的なアラート条件を決めていきます。（その閾値にすると過去これだけ条件にヒットするよ、みたいな示唆も面白いですね。）
![キャプチャ14.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/20ed1980-e3e6-4f96-f5f4-6fce343ec3b6.png)

また、アラート作る際には「アクショングループ」というものを作ります。アクショングループは、そのアラートを”だれに”、”どのような手段で”飛ばすかを定義する設定です。このアクショングループは、アラート設定とは独立しているため、別のアラート設定でも同じアクショングループを選択することが可能です。アラートの手段は、電子メール、SMS、Azureプッシュ通知、音声（電話）です。ただし、SMSと電話は現在のところ米国の電話番号のみ対応しています。
![キャプチャ15.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/ebfc1dcb-bd6b-3cf8-3813-b094d9f4806d.png)

その他、通知するだけでなく、下記に挙げられた別サービスに連携するこことも可能です。すでに通知基盤をお持ちだったり、Azureに無いサービス（例えばインシデント管理等）に連携したいという時に、別サービスに連携するのに効果的です。
![キャプチャ16.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/c3a45bf2-0571-1772-57d7-1c1cb8ac1a94.png)


すべての設定が完了したら、アラートを有効化します。さて、メールは飛んでくるでしょうか？？
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
・
無事飛んできました！！
この通知文言についてはカスタマイズができませんので、あくまで気付く用にセットして、詳細の調査はきちんとAzureポータルに入って行う、くらいに思っていた方がよいかと思います。
![キャプチャ17.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1199489/ec060795-9544-24a2-711a-11a6c6966170.png)


##さいごに
今回は簡単に構築できるAzure Monitorの通知機能について紹介しました。ホントはPaaSの監視運用や、Azure全体（Azure層やAzureADまわり）の監視運用なんかもネタにしたかったのですが、VM監視を書くだけでお腹いっぱいになってしまいました（ゴメンナサイ・・・）
しかし、どのレイヤもどのサービスも基本的には今回紹介したVM Insightsと同じようなイメージで監視設定することができますので、学習コストは低いです。Log Analyticsが中々取っ付きにくかったりアラートメールの内容が読みにくい、みたいな細かな気になるポイントはあるものの、総じてきちんと作られており小規模・中規模のシステムには実運用に使えるレベルかと思います。Azure上にちょっとしたシステムを作ってきちんと監視運用したい、という場合には是非活用してみてください！

それでは！