ソリューション全体の監視
このユニットでは、ソリューション全体の監視について見ていきます。
はじめに
今日の複雑なコンピューティング環境全体の監視を可能にするには、分散システムのあらゆるレイヤーとコンポーネントから稼働データを収集する必要があります。 このデータについての深い分析情報が必要であり、組織内の数多くの利害関係者をサポートするためには、そのデータをさまざまな観点と組み合わせることが必要になります。
Azure Monitor によってさまざまな種類のソースからデータが収集され、これを分析、視覚化、およびアラート生成に使用できます。 これにより、監視対象のすべてのリソースと、Azure Monitor にそのデータを格納する他のサービスのデータに関しても詳細な分析情報が得られます。
Log Analytics
ログは、システム内で発生したイベントです。 ログにはさまざまな種類のデータが含まれる可能性があり、構造化されることもあれば、タイムスタンプ付きの自由形式テキストのこともあります。 環境内のイベントによってログ エントリが生成されるため、ログの作成が散発的ということもあります。 大きな負荷がかかっているシステムでは一般に大量のログが生成されます。
Azure Monitor のログは、問題の根本原因を特定するときに有益です。 Azure Monitor ログによって収集されたデータは、1 つまたは複数の Log Analytics ワークスペースに格納されます。 データはログ クエリを使用して Log Analytics ワークスペースから取得されます。これは、データを処理して結果を返す読み取り専用の要求です。 ログ クエリは、Azure Data Explorer で使用されるものと同じクエリ言語である Kusto クエリ言語 (KQL) で記述されます。
Note
ここで使用する Azure Spring Apps サンプル アプリケーションでは、1 つの Log Analytics ワークスペースが既に設定されています。 KQL 構文の詳細については、このトレーニングの最後にある「まとめ」ユニットを参照してください。
Log Analytics の使用
実際には、アプリケーションのログにアクセスする方法は、Azure Storage、Azure Events Hub、Log Analytics の 3 つがあります。 ここでは Log Analytics のみを取り上げますが、これが最も一般的であることと、メトリックの監視のために Azure Spring Apps に統合されていることがその理由です。
重要
Azure Monitor のログ データ インジェスト時間は最大 15 分となる場合があります。 データが Log Analytics にない場合は、Azure Spring Apps のログ データを取り込む時間が追加で必要になる可能性があります。
Azure portal を開きます。
Azure サービスの一覧から [Azure Spring Apps] を選択します。
ご自分の Azure Spring Apps インスタンスを選択します。
次に、[監視] セクションの [ログ] を選択します。
[クエリ] 検索ボックスで:
ログを見るには、次のようなクエリを実行します。
AppPlatformLogsforSpring | limit 50
メトリックを見るには、次のようなクエリを入力します。
AzureMetrics | limit 50
フィルター条件を設定することで、特定のアプリケーションまたはインスタンスのログを検索できます。
AppPlatformLogsforSpring | where ServiceName == "YourServiceName" and AppName == "YourAppName" and InstanceName == "YourInstanceName" | limit 50
アプリケーション ログを分析する
アプリケーション ログには、アプリケーションの正常性やパフォーマンスなどに関する重要な情報と詳細ログが記載されています。 次のセクションでは、アプリケーションの現在と過去の状態を理解するのに役立つクエリを紹介します。
Azure Spring Apps からアプリケーション ログを表示する
Azure portal を開きます。
Azure サービスの一覧から [Azure Spring Apps] を選択します。
ご自分の Azure Spring Apps インスタンスを選択します。
次に、[監視] セクションの [ログ] を選択します。
[クエリ] 検索ボックスで:
Azure Spring Apps からアプリケーション ログの一覧 (時間順に並べ替え、最新のログを最初に表示) を確認するには、次のクエリを実行します。
AppPlatformLogsforSpring | project TimeGenerated , ServiceName , AppName , InstanceName , Log | sort by TimeGenerated desc
エラーまたは例外を示す並べ替えられていないログ エントリを確認するには、次のクエリを実行します。
AppPlatformLogsforSpring | project TimeGenerated , ServiceName , AppName , InstanceName , Log | where Log contains "error" or Log contains "exception"
アプリケーションによってログに記録されたエラーと例外の数を表示する円グラフを作成するには、次のクエリを実行します。
AppPlatformLogsforSpring | where TimeGenerated > ago(1h) | where Log contains "error" or Log contains "exception" | summarize count_per_app = count() by AppName | sort by count_per_app desc | render piechart
データベースの監視
サーバーに関する監視データは、ワークロードをトラブルシューティングしたり最適化したりするのに役立ちます。 Azure Database for MySQL には、サーバーの動作への洞察を提供する各種のメトリックが用意されています。
Azure Database for MySQL では、ユーザーは低速クエリ ログを使用できます。 トランザクション ログへのアクセスはサポートされていません。 スロー クエリ ログを使用すると、トラブルシューティングの目的でパフォーマンスのボトルネックを特定することができます。
このサンプル アプリケーションでは、低速クエリ ログが診断ログを介して Azure Monitor ログにパイプされるよう設定されているため、低速クエリをさらに分析できます。 始めるのに役立つサンプル クエリを以下に示します。
重要
Azure Monitor の MySQL ログ データ インジェスト時間は最大 30 分となる場合があります。 Log Analytics にデータが見つからない場合は、MySQL のログ データの取り込みにかかる時間が長くなることがあります。
Azure portal にサインインします。
Azure Spring Apps に使用する Azure Database for MySQL サーバーを選択します。
次に、[監視] セクションの [ログ] を選択します。
[クエリ] 検索ボックスで:
所要時間が 1 秒を超えるクエリをすべて取得するには、次のクエリを実行します。
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s
所要時間が長い順に上位 5 つのクエリを一覧表示するには、次のクエリを実行します。
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s | order by query_time_d desc | take 5
スロー クエリを集計してクエリ時間の最小、最大、平均、標準偏差を求めるには、次のクエリを実行します。
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by LogicalServerName_s
特定のサーバーでのスロー クエリの分布をグラフ化するには、次のクエリを実行します。
AzureDiagnostics | where Category == 'MySqlSlowLogs' | project TimeGenerated, LogicalServerName_s, event_class_s, start_time_t , query_time_d, sql_text_s | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m) | render timechart
監査ログを使ってデータベースレベルのアクティビティを追跡することもできます。 これは一般的に、コンプライアンス目的で使用されます。 監査ログは、Azure Monitor の診断ログと統合されます。 このサンプルでは、MySQL サーバーで監査ログを有効にしました。そのため、監査イベントをさらに分析できます。
一般 MySQL ログを取得するサンプル クエリを次に示します。
AzureDiagnostics | where Category == 'MySqlAuditLogs' and event_class_s == "general_log" | project TimeGenerated, LogicalServerName_s, event_class_s, event_subclass_s, event_time_t, user_s , ip_s , sql_text_s | order by TimeGenerated desc
UI の監視
Application Insights をページ スクリプトに追加すると、ページの読み込みと AJAX 呼び出しのタイミング、ブラウザーの例外や AJAX エラーの数と詳細、さらにはユーザーとセッションの数を取得できます。 これらのメトリックすべてを、ページ、クライアントの OS とブラウザー バージョン、位置情報などのディメンションごとにセグメント化することができます。 失敗回数や遅いページ読み込みについてのアラートを設定することができ、JavaScript コードにトレース呼び出しを挿入すると、Web ページ アプリケーションのさまざまな機能がどのように使用されているかを追跡できます。
Application Insights はどの Web ページでも、短い JavaScript コードを追加するだけで使用できます。 Web サービスが Java の場合は、サーバー側 SDK をクライアント側 JavaScript SDK と共に使用して、アプリのパフォーマンスを把握することができます。
注意
UI の監視の詳細については、このトレーニングの最後にある「まとめ」ユニットを参照してください。