VM監視のベストプラクティス②

Application Insights

その①

前回に引き続き、Well Architected Frameworkに基づいた監視の構成について、

実装部分を行っていきます。

全体構成

ここからは、実際のWebサーバーの環境に合わせて監視体制を構築するための設計をしていきます。
ざっくりと全体構成を配備します。

※Application InsightsはAzure Monitorの機能の一部らしいので厳密には重複した言い方になっていますが、
  Azure Monitor = VM監視 Application Insights = アプリケーション監視くらいのニュアンスで使い分けしています。

例えばWebページに繋がらないなどの問い合わせに対しては、Network WatcherやAzure Monitorで原因を探し、Webページの特定のページがおかしいなどに対してはApplication Insightsで原因を探すというような使い分けを想定します。

監視体制

以下4つの観点から監視を行います。

ユーザー目線の可用性

これはApplication Insightの可用性テストを使って実装します。
Application Insightの可用性テストでは、世界中からWebサーバーに向けたアプリの死活だけでなく、証明書のチェックやHTTPヘッダ(POST,GETなど)に対する応答などもチェックできます。

Application Insights 可用性テスト - Azure Monitor
繰り返し実施される Web テストを設定して、アプリまたは Web サイトの可用性と応答性を監視します。

アプリケーションレイヤー(今回は省略)

こちらもApplication Insightを使って監視します。
ライブメトリック機能を使うとリアルタイムの監視ができたり、
スマート検知機能では「いつもと違う」をAIが検知してアラートを発砲するといった機能も備わっています。

以下は、Microsoft LearnのApplication Insight概要に関するトレーニングをAIに要約させた記事です。

App Serviceで構築したWebアプリケーションであればスムーズな連携が可能ですが、
VM上のApache+PHPで構築したWordPressのテレメトリ情報を取るにはコードの変更が必要だったりと作業の難易度や危険性がやや上がるため、今回は省略します。

<Java および Python アプリ用の App Service と Java Functions ではOpenTelemetoryの自動インストルメンテーションが利用できる>

Azure 上の OpenTelemetry - Azure Monitor
この記事では、Azure 上の OpenTelemetry の概要について説明します。

<JapaScript SDKを使うことでテレメトリデータの収集が可能だがコードの追加が必要>

Azure Monitor での Application Insights JavaScript SDK のセットアップ - Azure Monitor
Azure Monitor Application Insights JavaScript SDK を使用してページ ビュー、クリック、カスタム イベントを追跡し、アプリの分析情報を向上させる方法について説明します。

<App ServiceであればPortalからApplication Insightsの有効化が可能>

AzureでWordPressサイト作ってApplication Insights有効化してみた | QES ブログ
株式会社QUICK E-Solutionsから、皆さまへお役立ち情報を発信するブログです。ぜひご覧ください。

インフラレイヤー

Azure MonitorのVM Insightを使ってディスクやメモリ、CPUのメトリックを監視できます。
主要なプロセス(ApacheやMySQL)の稼働監視もでき、
取得したメトリックを可視化します。
また、ログの取得も可能で、syslogやauthログ(SSHログインの成功・失敗、sudoの使用履歴など)も
LogAnalyticsで一元監視できます。

VM insights の概要 - Azure Monitor
Azure VM の正常性とパフォーマンスを監視し、アプリケーション コンポーネントとその依存関係を自動的に検出およびマッピングする VM insights の概要。

ネットワークレイヤー

Network Watcherの仮想ネットワークフローログや、トラフィック分析を使うことで、
過剰なポートが開いていないか、トラフィックが輻輳していないかなどを見ることができます。
また、IPフロー検証NSG診断などのトラブルシュートなどに使えるツールが豊富です。
VM1台のWebサーバーに対する監視としては過剰ですが、学習のために今回は仮想ネットワークフローログの取得とトラフィック分析による可視化を採用してみます。

Azure Network Watcher の概要
仮想ネットワークでの Azure Network Watcher の監視、診断、ログ、メトリックの機能について説明します。

実装

紹介した順番と前後しますが、VMの監視(VMInsight)→アプリの監視(Application Insight)→ネットワークの監視(Network Watcher)の順に実装してみます。

VMの監視

流れとしては以下の通りです。
1.LogAnalyticsワークスペースの作成
2.VM Insight DCRの作成
3.データコレクションの追加(ログ取得)

Log Analyticsワークスペースの作成

1.Azure Portalにログイン

2.検索ボックスからLog Analyticsワークスペースを選択し、作成します。

3.リソースグループやリージョンなどを入力して作成します。

VM Insight DCRの作成

1.Azure Portalの「監視」→「仮想マシン」を選択し、分析情報の構成を選択します

2.監視対象外のVMで有効にするを選択します。

3.今回はプレビュー機能は外して、ログベースのメトリックを選択します。
オンボードに成功しましたと出れば、Azure Monitor AgentがVMにデプロイされています。

4.監視対象の項目に移り、DCRが設定されていればメトリックの取得は完了です。

5.仮想マシンのリソースから「分析情報」→Azure Monitorへと進みパフォーマンスタブで視覚化されたメトリック情報を確認できます。

データコレクションの追加(ログ取得)

1.続いて、認証ログなどもLog Analyticsで一元管理するために、Ljnux上のログを取得できるようDCRを構成します。
先ほど作成されたDCRから「データソース」→「パフォーマンスカウンター」と進みます。

2.追加を押し、データソースを選択します。
今回はLinuxサーバーなので「Linux Syslog」を選択し、取得するログの種類と程度を決めます。
ここはコスト面に関して重要な部分で、規定のままだと全てのログをフルで収集してしまいLogAnalyticsのデータ保存料金が増大してしまうリスクがあるので、必要分だけの取得を検討します。
今回は以下のログレベルで取得します。

ログの種類ログレベル備考
LOG_ALERTLOG_WARNINGその他に属さない警報ログ
LOG_AUDITnone監査ログ。量が多すぎるのでnone
LOG_AUTHLOG_INFO認証(一般)
LOG_AUTHPRIVLOG_INFO認証(機密)
LOG_CLOCKnoneシステム時計(NTPでカバー)
LOG_CRONLOG_ERR定期実行タスク
LOG_DAEMONLOG_WARNINGデーモン
LOG_FTPnoneファイル転送
LOG_KERNLOG_WARNINGカーネル
LOG_LOCAL0~7none 
LOG_LPRnoneプリンタログ
LOG_MAILnoneメールログ
LOG_NEWSnoneニュースグループ?
LOG_NOPRInone分類不能ログ
LOG_NTPLOG_ERRサーバーの時刻
LOG_SYSLOGLOG_WARNINGログシステム自体のメッセージ
LOG_USERLOG_ERRユーザーレベルのプログラムログ
LOG_UUCPnone昔のレガシープロトコル

3.その後、ターゲットの選択で送付するLogAnalyticsワークスペースを選択し、データソースの追加をします。

4.作成したデータソースが追加されていればOKです(Mocrosoft-Perfという謎のソースもできますが無視します。)

5.仮想マシンのページからログの項目を開くと、LogAnalyticsの画面が出てくるので、
authログを取得するKQLを打ってみます。

私のログインした情報が出てきました。
これにより、身に覚えのないログインなどを発見したり、アラートを飛ばすということがAzure Monitor上でできるようになります。

アプリケーションの監視

Application Insightsでは可用性テストやパフォーマンスチェックを使ってアプリケーションを監視します。

Application Insightsのデプロイ

1.Application Insightsと検索し、作成します。
ここで、Log Analyticsワークスペースは一元管理がWell-Architected Frameworkの推奨なので、VMログチェックの時に作成したものを選択します。

可用性テストの設定

1.デプロイしたApplication Insightsの「有効」から「標準テストの追加」を選択します。
※公式ドキュメントでは「有効」ではなく「可用性」と表記されています。環境によって変わるかもしれないのでご注意ください。

2.可用性テストの項目を設定します。
URLは監視対象のサイトURLを入力します。
テストの場所は今回、Japane EastやEast Asiaなど適当に5か所選択しており、選択したリージョンから10分おきに死活監視を行うようになります。

3.作成後規定の分数ごとにテスト結果が出ます。

<参考:可用性テストの作成>

Application Insights 可用性テスト - Azure Monitor
繰り返し実施される Web テストを設定して、アプリまたは Web サイトの可用性と応答性を監視します。

ネットワークの監視

Network Watcherを使ってネットワークの監視構成を組みます。

VNETフローログ

VNET内の通信を記録し可視化する機能です。(NSGフローログの後継)

1.フローログの保存場所はAzure ストレージアカウントになるので、ストレージアカウントを作成します。
リージョンは必ずVNetと同じリージョンを選択する必要があります。
検証のためLRSに設定し、その他は規定のまま作成します。

2.デプロイが完了したら、サブスクリプション→設定→リソースプロバイダーから「microsoft.insights」が登録されていることを確認します。

3.その後、Network Watcherからログ→フローログ→新規作成を行います。

4.ターゲットリソースを監視対象のVNETに設定します。

5.ログの保管先を先ほど作成したストレージアカウントに設定します。
リテンション期間は10日とします。

6.分析タブでTraffic Analyticsを有効にし、LogAnalyticsワークスペースを選択し作成を行います。

7.時間が経てばNetwork Watcherのトラフィック分析タブからトラフィック情報を確認できます。

悪意のあるトラフィックなど、ネットワークに関する様々な情報が見れます。

まとめ

今回は監視を行うための設定やログの取得設定などを中心に行いました。

ベストプラクティスに基づくと、監視やログ取得だけでなく「アラートの定義&発砲体制」「バックアップ」なども考える必要があるので、次回以降このあたりを調査し用と思います。

コメント