監控你的 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 portal:使用 Azure portal建立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"
SUBSCRIPTION_ID=$(az account show --query id -o tsv)

# 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 的診斷設定。

在你的 IaC 範本中整合日誌、指標和警報,並附上 Bicep diagnosticSettings 資源參考。 範例(Bicep):

param webAppName string

resource webApp 'Microsoft.Web/sites@2022-09-01' existing = {
  name: webAppName
}

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:Microsoft.Insights/metricAlerts 的宣告式 IaC 定義

警示可以指定目標計量、通知通道(電子郵件、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工作區,選擇Logs。 您可以對記錄執行 Kusto 查詢語言 (KQL) 查詢。

資料流記錄

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

Azure MCP 伺服器

在本地開發時,你可以使用 Azure MCP Servermonitor 工具查詢日誌,而不必離開 IDE。 一旦你安裝伺服器,範例Copilot提示包括:

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

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

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

  • 在 Azure 服務和原始碼中進行標準日誌記錄,具體取決於初始化設置。
  • 在您的部署流程和原始程式碼中進行自訂日誌記錄。

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

Azure網頁應用程式和Azure Functions會自動提供自訂日誌到 stdout 和 stderr,只要你使用正確的日誌功能:

  • 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(process.env.APPLICATIONINSIGHTS_CONNECTION_STRING || "<YOUR_CONNECTION_STRING>")
  .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: {
  connectionString: "<YOUR_CONNECTION_STRING>",
  enableAutoRouteTracking: true
}});
ai.loadAppInsights();