SuperAPI AI 工具集

azure-monitor-opentelemetry-ts

部署与运维

查看项目

更新于 10-16 02:50

技能介绍

用途

Azure Monitor OpenTelemetry SDK for TypeScript 用于为 Node.js / TypeScript 应用接入 Azure Monitor,自动采集并上报分布式追踪(traces)、指标(metrics)和日志(logs)。它构建在 OpenTelemetry 标准之上,既可以开箱即用地自动插桩,也支持按 OpenTelemetry 原生方式手工搭建导出管线。

主要能力

  • 自动插桩:通过发行版包 @azure/monitor-opentelemetry 自动采集常见依赖的遥测数据。
  • 可配置插桩库:在 instrumentationOptions 中按需开启或关闭 azureSdk、http、mongoDb、mySql、postgreSql、redis、bunyan、winston 等插桩。
  • 遥测导出器:@azure/monitor-opentelemetry-exporter 提供 Trace、Metric、Log 三类导出器,可用于自定义 OpenTelemetry 设置。
  • 自定义日志摄取:@azure/monitor-ingestion 提供 LogsIngestionClient,可将自定义日志上传到 Azure Monitor。
  • 采样:支持 samplingRatio 配置以及 ApplicationInsightsSampler 采样器。
  • 附加特性开关:enableLiveMetrics、enableStandardMetrics、enablePerformanceCounters。
  • 自定义资源与处理器:可通过 resourceFromAttributes 设置 service.name 等资源属性,并可挂载自定义 SpanProcessor 对 span 做富化或过滤。
  • 离线存储:导出器选项支持 storageDirectory 与 disableOfflineStorage,用于断连场景下可靠上报。
  • 优雅关闭:提供 shutdownAzureMonitor() 以刷新遥测数据。

使用方式

安装

# Distro (recommended - auto-instrumentation)
npm install @azure/monitor-opentelemetry

# Low-level exporters (custom OpenTelemetry setup)
npm install @azure/monitor-opentelemetry-exporter

# Custom logs ingestion
npm install @azure/monitor-ingestion

环境变量

APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=...;IngestionEndpoint=...

快速开始(自动插桩)

重要:需在导入其他模块之前调用 useAzureMonitor()。

import { useAzureMonitor } from "@azure/monitor-opentelemetry";

useAzureMonitor({
  azureMonitorExporterOptions: {
    connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING
  }
});

// Now import your application
import express from "express";
const app = express();

ESM 支持(Node.js 18.19+)

node --import @azure/monitor-opentelemetry/loader ./dist/index.js

package.json:

{
  "scripts": {
    "start": "node --import @azure/monitor-opentelemetry/loader ./dist/index.js"
  }
}

完整配置示例(含采样、特性开关、插桩库与自定义资源):

import { useAzureMonitor, AzureMonitorOpenTelemetryOptions } from "@azure/monitor-opentelemetry";
import { resourceFromAttributes } from "@opentelemetry/resources";

const options: AzureMonitorOpenTelemetryOptions = {
  azureMonitorExporterOptions: {
    connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
    storageDirectory: "/path/to/offline/storage",
    disableOfflineStorage: false
  },
  samplingRatio: 1.0,
  enableLiveMetrics: true,
  enableStandardMetrics: true,
  enablePerformanceCounters: true,
  instrumentationOptions: {
    azureSdk: { enabled: true },
    http: { enabled: true },
    mongoDb: { enabled: true },
    mySql: { enabled: true },
    postgreSql: { enabled: true },
    redis: { enabled: true },
    bunyan: { enabled: false },
    winston: { enabled: false }
  },
  resource: resourceFromAttributes({ "service.name": "my-service" })
};

useAzureMonitor(options);

此外资料还给出了自定义 Traces、自定义 Metrics(Counter / Histogram / Observable Gauge)、手工设置 Trace/Metric/Log 导出器、自定义日志摄取、自定义 Span Processor、采样以及关闭流程的代码示例,可按需参考上文的官方示例片段。

适用场景

  • 需要为 Node.js / TypeScript 服务接入 Azure Monitor 的应用性能监控。
  • 希望基于 OpenTelemetry 标准统一 traces、metrics、logs 采集的项目。
  • 需要自动插桩常见 HTTP 框架、数据库驱动或 Azure SDK 调用的服务。
  • 高流量场景下需要通过采样控制遥测数据量。
  • 需要在断连环境下缓存遥测数据后补传。

限制

  • 资料中注明:仅当任务明确匹配上述范围时才使用该技能。
  • 不应将输出视为环境相关验证、测试或专家评审的替代品。
  • 若缺少所需输入、权限、安全边界或成功标准,应停止并向用户询问澄清。
  • 关于定价、收费、平台支持范围的更多细节,资料中暂未提供。