共用方式為


監視您的 Azure 資源和應用程式

使用 Azure 監視器來收集 JavaScript 應用程式和其相依的 Azure 服務之間的記錄、計量和警示。 Azure 監視器 是收集及儲存遙測的中央平台服務。 您可以使用 Application Insights 檢測應用程式。 您應該監視裝載的應用程式服務、應用程式所整合的 Azure 服務,以及應用程式原始程式碼本身。

了解記錄、計量和警示

遙測是從應用程式和服務收集的數據,用來監視其健康情況、效能和使用量。 在 Azure 中,遙測會分類為記錄、計量和警示。

Azure 提供四種遙測:

遙測類型 它給你什麼 如何尋找每項服務的位置
指標 數值、時間序列資料(CPU、記憶體等) 入口網站或 CLI 中的az monitor metrics
警報 達到閾值時主動式通知 入口網站或 CLI 中的az monitor metrics alert
日誌 以文字為基礎的事件和診斷 (Web, 應用程式) App Service 記錄 、函式 監視器、容器應用程式 診斷
自訂的記錄 透過 App Insights 獲取您自己的應用程式遙測資料 Application Insights 資源的 日誌(追蹤) 資料表

為您的問題挑選正確的遙測:

情境 使用記錄... 使用量化指標... 使用警示...
「我的 Web 應用程式是否啟動並回應? App Service Web 伺服器記錄 (記錄) N/A N/A
「我的函式逾時或失敗嗎? 函式調用記錄 (監控) 函式執行持續時間計量 「函式錯誤 >0」的警示
我的服務有多忙碌?它可以擴展嗎? N/A 指標中的服務吞吐量/CPU CPU% 70% > 上的自動調整警示
我的程式代碼拋出什麼例外狀況?」 Application Insights 中的自定義追蹤日誌 N/A 有關「ServerExceptions >0」的警示
「我是否已超過交易或配額限制? N/A 配額相關計量(交易、節流) 「ThrottlingCount >0」的警示

成本優化

您可以藉由瞭解設定選項的最佳做法和機會來大幅降低 Azure 監視器的成本,以減少其收集的數據量。

啟用所有 Azure 資源的記錄和計量

Azure 中的每個服務都有自己的記錄和計量功能。 啟用每個 Azure 資源的日誌紀錄,以確保您擁有監視整體端對端應用程式所需的遙測資料。

建立 Azure 監視器資源

您可以建立 Azure 監視器資源,以從 Azure 資源收集記錄和計量。 此資源通常是Log Analytics工作區,也就是記錄和計量的儲存位置。

您可以透過數種方式建立此資源:

  • Azure 入口網站:使用 Azure 入口網站 建立 Log Analytics 工作區,併為您的資源設定診斷設定。
  • Azure CLI:使用 Azure CLI 建立 Log Analytics 工作區,並設定資源的診斷設定。
  • PowerShell:使用 PowerShell 建立 Log Analytics 工作區,並設定資源的診斷設定。
  • Bicep:使用 Bicep 範本以宣告方式定義及部署 Azure 監視器資源。

使用 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 監視器資源。 此範例會建立 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 入口網站 中或使用 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 入口網站中檢視記錄數據,請流覽至您的 Log Analytics 工作區,然後選取 [ 記錄]。 您可以對記錄執行 Kusto 查詢語言 (KQL) 查詢。

資料流記錄

使用下表深入瞭解如何串流記錄。

Azure MCP 伺服器

在本機開發時,您可以使用 Azure MCP 伺服器監視 工具來查詢記錄,而不需要離開 IDE。 安裝伺服器之後,範例 Copilot 提示包括:

  • 列出工作區:「顯示我訂用帳戶中的所有Log Analytics工作區」。
  • 查找資料表:在我的工作區 'security-logs' 中列出所有資料表
  • 複雜查詢:「顯示過去 24 小時內 Web 伺服器的 CPU 使用量趨勢」

將記錄加入到您的程式碼中

針對應用程式記錄,Application Insights 可以提供:

  • Azure 服務和原始程式碼中的標準記錄,視初始化而定。
  • 在您的部署流程和原始程式碼中進行自訂日誌記錄。

標準控制台記錄 (stdout/stderr)

如果您使用正確的記錄函式,Azure Web 應用程式和 Azure Functions 會自動提供自訂記錄給 stdoutstderr

  • Web 應用程式使用 console.log('your message here')
  • 函式應用程式使用 context.log('your message here')

新增自定的 Application Insights 日誌

您可以在 Azure 監視器中使用 Application Insights 來新增更豐富的自訂記錄。 Application Insights 提供 伺服器 (Node.js) 和 用戶端 (瀏覽器) 案例:

  • 將 Application Insights SDK 新增至您的原始程式碼。
  • 使用 npm 套件從 Node.js 記錄。
    • 請務必使用 enableAutoCollectConsole: true 來設定 Node.js SDK,以收集自定義主控台記錄。
  • 使用 npm 套件從用戶端程式代碼進行記錄。
  • Kubernetes 叢集Azure 虛擬機進行記錄。

啟用 SDK 管線日誌(@Azure/logger)

使用 AZURE_LOG_LEVEL 環境變數或 @azure/logger npm 套件來控制 SDK 的詳細程度:

import { setLogLevel } from "@azure/logger";
// Options: 'error', 'warning', 'info', 'verbose'
setLogLevel(process.env.AZURE_LOG_LEVEL || "info");

設定「Application Insights Node.js SDK」

使用取樣、相依性收集及主控台日誌擷取功能,初始化 Application Insights for Node.js SDK

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 會自動將作業和相互關聯標識碼插入要求中。 若要新增自訂相互關聯或屬性:

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();

後續步驟