使用 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 會自動提供自訂記錄給 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("<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();