使用 Azure Monitor 跨 JavaScript 应用程序及其依赖的 Azure 服务收集日志、指标和警报。 Azure Monitor 是收集和存储遥测数据的中心平台服务。 可以使用 Application Insights 检测应用程序。 应监视托管的应用程序服务、应用程序与之集成的 Azure 服务以及应用程序源代码本身。
了解日志、指标和警报
遥测是从应用程序和服务收集的数据,用于监视其运行状况、性能和使用情况。 在 Azure 中,遥测分为日志、指标和警报。
Azure 提供四种类型的遥测:
遥测类型 | 它给你什么 | 如何找到每项服务 |
---|---|---|
指标 | 数值、时序数据(CPU、内存等) | 门户或 CLI 中的az monitor metrics |
警报 | 达到阈值时主动通知 |
az monitor metrics alert
|
日志 | 基于文本的事件和诊断 (Web, 应用) | 应用服务 日志 、函数 监视器、容器应用 诊断 |
自定义日志 | 使用 App Insights 获取自己的应用程序遥测数据 | Application Insights 资源的 日志(跟踪) 表 |
为问题选取正确的遥测数据:
情景 | 使用日志... | 使用指标... | 使用通知... |
---|---|---|---|
“我的 Web 应用是否启动并响应? | 应用服务网络服务器日志(Web 日志) | 无 | 无 |
“我的函数是否超时或失败? | 函数调用日志 (监视器) | 函数执行持续时间指标 | 有关“函数错误 >0”的警报 |
“我的服务有多忙?它可以扩展以应对需求吗?” | 无 | 指标中的服务吞吐量和CPU | CPU% > 70% 上的自动缩放警报 |
“我的代码引发什么异常? | Application Insights 中的自定义跟踪日志 | 无 | 有关“>ServerExceptions 0”的警报 |
我是否超出了交易或配额限制? | 无 | 与配额相关的指标(事务、限流) | 有关“ThrottlingCount >0”的警报 |
成本优化
通过了解配置选项的最佳做法和减少其收集的数据量,可以显著降低 Azure Monitor 的成本。
为所有 Azure 资源启用日志记录和指标
Azure 中的每个服务都有自己的日志记录和指标功能。 在每个 Azure 资源上启用日志记录,以确保获取所需的遥测数据来监控您的整个端到端应用程序。
创建 Azure Monitor 资源
可以创建 Azure Monitor 资源,以便从 Azure 资源收集日志和指标。 此资源通常是 Log Analytics 工作区,存储日志和指标的位置。
可以通过多种方式创建此资源:
- Azure 门户:使用 Azure 门户 创建 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 工作区并配置应用服务的诊断设置:
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 Apps 和 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/日志记录器)
使用 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
初始化 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 注入到请求中。 若要添加自定义关联或属性,请执行以下作:
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();