Azure Monitor を使用して、JavaScript アプリケーションと、それらが依存する Azure サービス全体でログ、メトリック、アラートを収集します。 Azure Monitor は、テレメトリを収集して格納する中心的なプラットフォーム サービスです。 Application Insights を使用してアプリケーションをインストルメント化できます。 ホストされているアプリケーション サービス、アプリケーションが統合される Azure サービス、およびアプリケーションのソース コード自体を監視する必要があります。
ログ、メトリック、アラートについて
テレメトリは、アプリケーションとサービスから収集され、その正常性、パフォーマンス、使用状況を監視するために収集されるデータです。 Azure では、テレメトリはログ、メトリック、アラートに分類されます。
Azure には、次の 4 種類のテレメトリが用意されています。
利用統計情報タイプ | それがあなたに与えるもの | サービスごとに検索する場所 |
---|---|---|
メトリック | 数値、時系列データ (CPU、メモリなど) | ポータルまたは CLI のaz monitor metrics |
アラート | しきい値に達したときのプロアクティブ通知 | ポータルまたは CLI でのaz monitor metrics alert |
ログ | テキスト ベースのイベントと診断 (Web、アプリ) | App Service ログ 、Functions モニター、Container Apps 診断 |
カスタム ログ | App Insights を使用した独自のアプリケーション テレメトリ | Application Insights リソースの ログ (トレース) テーブル |
質問に適したテレメトリを選択します。
シナリオ | ログの使用... | メトリックの使用... | アラートの使用... |
---|---|---|---|
"Web アプリは起動して応答しましたか? | App サービス Web サーバー ログ | なし | なし |
"関数がタイムアウトしているか、失敗していますか? | 関数呼び出しログ (モニター) | 関数の実行期間メトリック | "関数エラー >0" に関するアラート |
「私のサービスはどれほど忙しく、拡張可能ですか?」 | なし | メトリックにおけるサービススループット/CPU | CPU% > 70% での自動スケール アラート |
私のコードが発生させている例外は何ですか? | Application Insights のカスタム トレース ログ | なし | "ServerExceptions >0" に関するアラート |
"トランザクションまたはクォータの制限を超えましたか? | なし | クォータ関連のメトリック (トランザクション、スロットリング) | "ThrottlingCount >0" に関するアラート |
コストの最適化
構成オプションのベスト プラクティスと、収集するデータの量を減らす機会を理解することで、Azure Monitor のコストを大幅に削減できます。
すべての Azure リソースのログとメトリックを有効にする
Azure の各サービスには、独自のログ記録とメトリック機能があります。 各 Azure リソースのログ記録を有効にして、エンド ツー エンド アプリケーション全体を監視するために必要なテレメトリがあることを確認します。
Azure Monitor リソースの作成
Azure Monitor リソースを作成して、Azure リソースからログとメトリックを収集できます。 通常、このリソースは Log Analytics ワークスペースであり、ログとメトリックが格納されます。
このリソースは、いくつかの方法で作成できます。
- Azure portal: Azure portal を使用して Log Analytics ワークスペースを作成し、リソースの診断設定を構成します。
- Azure CLI: Azure CLI を使用して Log Analytics ワークスペースを作成し、リソースの診断設定を構成します。
- PowerShell: PowerShell を使用して Log Analytics ワークスペースを作成し、リソースの診断設定を構成します。
- Bicep: Bicep テンプレートを使用して、Azure Monitor リソースを宣言によって定義してデプロイします。
Azure CLI を使用して Log Analytics ワークスペースを作成する
Azure CLI を使用して、ログとメトリックが格納される Log Analytics ワークスペースを作成します。 例:
# Variables
resourceGroup="myResourceGroup"
location="eastus"
workspaceName="myWorkspace"
webAppName="myWebApp"
diagName="${webAppName}/appServiceLogging"
# 1) Create a Log Analytics workspace
workspaceId=$(az monitor log-analytics workspace create \
--resource-group $resourceGroup \
--workspace-name $workspaceName \
--location $location \
--query id -o tsv)
# 2) Enable diagnostic settings on your App Service
az monitor diagnostic-settings create \
--name "$diagName" \
--resource "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$webAppName" \
--workspace $workspaceId \
--logs '[{"category": "Administrative", "enabled": true},{"category":"AppServiceConsoleLogs","enabled":true},{"category":"AppServiceHTTPLogs","enabled":true}]' \
--metrics '[{"category":"AllMetrics","enabled":true}]'
Bicep を使用して Log Analytics ワークスペースを作成する
Bicep を使用して、Azure Monitor リソースを宣言によって定義してデプロイします。 この例では、Log Analytics ワークスペースを作成し、App Service の診断設定を構成します。
Include logging, metrics, and alerting in your IaC templates with a [Bicep diagnosticSettings resource reference](/azure/templates/microsoft.insights/diagnosticsettings). Example (Bicep):
```bicep
resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2022-10-01' = {
name: 'myWorkspace'
location: resourceGroup().location
}
resource diagSettings 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
name: '${webApp.name}/appServiceLogging'
properties: {
workspaceId: logAnalytics.id
logs: [
{ category: 'AppServiceConsoleLogs'; enabled: true }
{ category: 'AppServiceHTTPLogs'; enabled: true }
]
metrics: [
{ category: 'AllMetrics'; enabled: true }
]
}
}
リソースのアラートを作成する
メトリックのアラートは、 Azure portal または Azure CLI を使用して設定できます。 アラートには、特定のメトリック、通信ストリーム (電子メールなど)、頻度を含めることができます。
ポータルまたはプログラムでメトリック アラートを作成するには、次の例を使用します。
- Azure CLI: クイック セットアップ
az monitor metrics alert
- Bicep: 宣言型 IaC の定義
Microsoft.Insights/metricAlerts
アラートでは、ターゲット メトリック、通知チャネル (電子メール、Webhook)、重大度、評価頻度、およびアクション グループを指定できます。
az monitor metrics alert create \
--name HighCpuAlert \
--resource-group MyResourceGroup \
--scopes /subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/Microsoft.Web/sites/myApp \
--condition "avg CpuPercentage > 70" \
--description "Alert when CPU goes above 70%" \
--severity 2 \
--window-size 5m \
--evaluation-frequency 1m \
--action /subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/microsoft.insights/actionGroups/MyActionGroup
resource cpuAlert 'Microsoft.Insights/metricAlerts@2018-03-01' = {
name: 'highCpuAlert'
location: resourceGroup().location
properties: {
description: 'Alert when CPU goes above 70%'
severity: 2
enabled: true
scopes: [
webApp.id
]
evaluationFrequency: 'PT1M'
windowSize: 'PT5M'
criteria: {
allOf: [
{
criterionType: 'StaticThresholdCriterion'
name: 'HighCpu'
metricName: 'CpuPercentage'
metricNamespace: 'Microsoft.Web/sites'
operator: 'GreaterThan'
threshold: 70
timeAggregation: 'Average'
}
]
}
autoMitigate: false
actions: [
{
actionGroupId: '/subscriptions/{sub}/resourceGroups/MyResourceGroup/providers/microsoft.insights/actionGroups/MyActionGroup'
}
]
}
}
ログ データを表示する
Azure portal でログ データを表示するには、Log Analytics ワークスペースに移動し、[ログ] を選択 します。 ログに対して Kusto クエリ言語 (KQL) クエリを実行できます。
ログのストリーミング
ログのストリーミング方法の詳細については、次の表を参照してください。
Azure MCP サーバー
ローカルで開発する場合は、 Azure MCP Serverモニター ツールを使用して、IDE を終了せずにログにクエリを実行できます。 サーバーをインストールすると、Copilot プロンプトの例は次のようになります。
- ワークスペースを一覧表示する: "サブスクリプション内のすべての Log Analytics ワークスペースを表示する"
- テーブルの検索: "ワークスペース 'security-logs' 内のすべてのテーブルを一覧表示する"
- 複雑なクエリ: "過去 24 時間の Web サーバーの CPU 使用率の傾向を表示する"
コードにログ記録を追加する
アプリケーション ログの場合、Application Insights は次の機能を提供できます。
- 初期化に応じて、Azure サービスとソース コードでの標準ログ記録。
- デプロイ パイプラインとソース コードからのカスタム ログ。
標準コンソールログ出力 (stdout/stderr)
Azure Web アプリと Azure Functions では、適切なログ機能を使用すると、 stdout
と stderr
にカスタム ログが自動的に提供されます。
- Web アプリでは
console.log('your message here')
を使用します。 - 関数アプリは
context.log('your message here')
を使用します。
カスタム Application Insights のログ記録を追加する
Azure Monitor で Application Insights を使用して、より豊富なカスタム ログを追加できます。 Application Insights には、 サーバー (Node.js) と クライアント (ブラウザー) のシナリオが用意されています。
- Application Insights SDK をソース コードに追加します。
-
npm パッケージを使用して Node.js からログを記録します。
- カスタム コンソール ログを収集するには、
enableAutoCollectConsole: true
を使用して Node.js SDK を構成してください。
- カスタム コンソール ログを収集するには、
- npm パッケージを使用してクライアント コードからログを記録します。
- Kubernetes クラスターまたは Azure 仮想マシンからログを記録します。
SDK パイプライン ログを有効にする (@Azure/logger)
SDKの詳細度をAZURE_LOG_LEVEL
環境変数または@azure/logger
npmパッケージを使用して制御します。
import { setLogLevel } from "@azure/logger";
// Options: 'error', 'warning', 'info', 'verbose'
setLogLevel(process.env.AZURE_LOG_LEVEL || "info");
Application Insights Node.js SDK を構成する
サンプリング、依存関係の収集、およびコンソール ログ キャプチャを使用して、 Node.js SDK の Application Insights を初期化します。
import appInsights from "applicationinsights";
appInsights
.setup("<INSTRUMENTATION_KEY>")
.setAutoCollectConsole(true, true) // collect console.log
.setAutoCollectDependencies(true) // track outgoing requests
.setInternalLogging(false, true) // SDK internal logs
.start();
// Optional: add custom properties to all telemetry
appInsights.defaultClient.commonProperties = { serviceName: "my-service" };
相関関係と分散トレースを追加する
Application Insights SDK は、操作 ID と関連付け ID を要求に自動挿入します。 カスタム関連付けまたはプロパティを追加するには:
appInsights.defaultClient.trackTrace({
message: "Custom trace",
properties: { userId: user.id }
});
詳細情報: 分散トレース のガイダンス
開発スクリプトでテレメトリをフラッシュする
ローカル開発中にプロセスが終了する前にログが送信されていることを確認します。
appInsights.defaultClient.flush({
callback: () => process.exit(0)
});
クライアント側のテレメトリのセットアップ
クライアント アプリケーションの場合は、 @microsoft/applicationinsights-web
パッケージ を使用します。
import { ApplicationInsights } from "@microsoft/applicationinsights-web";
const ai = new ApplicationInsights({ config: {
instrumentationKey: "<INSTRUMENTATION_KEY>",
enableAutoRouteTracking: true
}});
ai.loadAppInsights();