はじめに
こんにちは、Datadog Japan で Sales Engineer をしている AoTo です。
この記事は AoTo Advent Calendar 2023 5日目の記事です。
今回は、Microsoft Build 2023で発表された Azure App Spaces を利用することで、Azure での Observability へ入門してみました。
この記事の前段として、Azure App Spaces を使ってテンプレートをもとに簡単な Todo List アプリケーションを作成し、Azure App Spaces と その裏側で利用されている Azure Developer CLI の関係についてまとめいます。
前回に引き続き、Azure から提供されているテンプレート ToDo List アプリケーションを利用します。今回はazure-dev.yml
にUSE_APIM: true
を追加することで、Azure API Management を利用したアーキテクチャを利用しました。
azure-dev.yml の変更
jobs:
build:
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/azure-dev-cli-apps:latest
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
+ USE_APIM: true
Bicep で Azure Monitor を設定
プラットフォーム側
App Spaces で監視の実装をするためには、Bicep による設定が必要です。ここではinfra/main.bicep
によりmonitoring.bicep
を指定して、Log Alaytics ワークスペースと Application Insights、Application Insights Dashboard が有効化・作成できます。
ここで設定されている内容は、App Spaces の画面(Monitoring)から確認できます。
今回はこれらのサンプリアプリケーションを利用して、Azure Monitor 監視する方法を掘り下げていきます。
アプリケーション側
監視対象のアプリケーションにも Application Insights 名を monitoring.outputs.applicationInsightsName
の形で渡して、監視情報をルーティングできるようにしています。
ちなみに、Application Insights のサポート言語は広く、サーバー側のアプリケーション言語 (ASP.NET, Java, Python, Node.js, ASP.NET Core) だけではなく、クライアント側の JavaScript SDK(React, ReactNative, Angular) にも対応しているため、React クライアントアプリケーションからのリクエストから Python API サーバでの処理をつなげて確認することが可能です。1
Log Analytics
概要
Log Analytics は現在では Azure Monitor Logs で利用できるログ分析の機能ですが、もともとは Azure Monitor とは分離されたログ分析ソリューションでした。Azure Monitor に統合され現在も、保管先のテナントとして Log Analytics ワークスペース が必要なことには変わりありません。2
Bicep によりこのワークスペースが有効化されており、一連のアプリケーションのリソースによって記録されたログが収集されます。ログは Azure Table にログの種類ごとにテーブルを分けて保存され、保持期間もテーブルごとに設定できます。
ログの分析
Log Analytics は対象のワークスペース上でログをクエリすることでログの検索が可能です。ログのクエリは Kusto Query Language (KQL) を使用します。クエリステートメントは3種類ありますが、基本的には以下のような表形式の式ステートメントで単純なクエリを実行できます。
${{ LogTableName }}
| where StartTime between (datetime(2023-12-01) .. datetime(2023-12-25))
| where State == "${{ QueryStatement }}"
対象のログのテーブル名は Log Analytics ワークスペースの [Tables] から確認できます。
ここで検索対象のログを見つけ、[Logs]で KQL によるクエリを実行します。
Application Insight
概要
Application Insights は言わずとれた、Azure Monitor の Application Preformance Monitoring(APM) ソリューションで、ASP.NET, Java, Python, Node.js, ASP.NET Core などの言語のアプリケーション処理やリクエストを可視化することができます。
今回の環境では前述の通り、Python のサーバー側の処理に加えて、React のクライアント側のリクエストまで Application Insights による組み込みで可視化されています。
Application Insights による監視情報は、下記のロジック図に基づいて関連する情報を参照できます。
アプリケーションパフォーマンスの分析
まず初めにアプリケーションの状態を把握するには、[Application map]からアプリケーションのリクエストやコール数を確認するのがわかりやすいです。今回のアプリケーションでは、クライアント側のビュー数が React アプリケーションの計装によってわかり、バックエンドの Python API サーバーに到達するまでに、API Management がリクエストを受け取って処理している様子が可視化されています。
ここでは、最終的にAPI Management から Python API サーバーを呼び出したうちの0.3%がエラーとなっていることが一目でわかります。
エラーが発生している箇所のリクエストをクリックすると、その内容をより詳細に確認できます。全体のレスポンスコードの割合やエラータイプ、どこがエラーになっているのかを可視化できます。
Application Insights Dashboard
概要
Application Insights Dashboard は Application Insights で取得できたアプリケーションのパフォーマンスメトリクスを一画面で確認し、根本原因の特定や障害の調査に役立てることができる機能です。
グラフや要素をクリックするだけで、時間軸を指定したり、特定のメトリクスグラフの詳細の確認が簡単に行えます。
アプリケーションメトリクスの分析
SRE のゴールデンシグナルと呼ばれるような、トラフィック・エラーレイテンシー・サチュレーション(飽和) に準じたメトリクスがグラフ上に同一の時系列で表示されます。
これらのメトリクスの時間上の相関を確認し、失敗したリクエストの増加によってレスポンスタイムが増加していることを確認したり、その原因としてI/O処理時間が遅くなっていることを発見できます。
このように Application Insights Dashboard はアプリケーションに欠かせない重要なメトリクスを意識することなく一画面に可視化し、アプリケーションの健全性を即座に把握するのに役立てることができます。
おわりに
今回は App Spaces とはあまり関係なく、Azure Monitor の監視ソリューションをサンプルアプリケーションをもとに確認してきました。Azure Monitor は監視情報の中でも重要なメトリクス・ログ・トレースの情報を関連づけながら確認できる Azure ネイティブなソリューションです。
これらの監視ソリューションの導入は App Spaces のように Bicep や Azure Resource Manager のように、コードで一元的に管理することができ、Azure 上のエコシステムを有効活用する上ではとても便利な機能です!
Azure Monitor の各種機能が気になっていた、という方は Azure App Spaces のサンプルアプリケーションから触ってみてはいかがでしょうか?