Azure Monitor OpenTelemetry TypeScript
为 Node.js 应用接入 Application Insights 遥测。
文档说明连接字符串、遥测导出、离线存储和日志摄取等数据流,并展示了 DefaultAzureCredential 与 ManagedIdentityCredential;但未说明敏感数据脱敏、日志内容边界、最小权限、用户确认、外部传输影响或回滚方案,因此从中等基础分扣分。未见凭据窃取、隐蔽外传或破坏性默认设置。
安装、初始化顺序、ESM loader、采样、关闭和错误处理均有示例,正常路径较清晰;但未提供针对该技能的测试、版本约束或可复现验证,部分示例存在潜在 API 使用风险,例如直接修改 span.attributes 和 traceFlags,因此受静态上限限制并扣分。
目标受众和主要场景明确,覆盖 Node.js 应用的追踪、指标、日志、自动插桩和手动导出;但未明确不适用场景、运行时限制、隐私合规边界、触发条件或中国大陆网络/区域可达性,且 Azure 服务依赖较强,因此扣分。
SKILL.md 结构清楚,按安装、配置、快速开始、专项能力和最佳实践渐进组织;包含 MIT、作者和 1.0.0 版本元数据。缺少变更日志、维护责任与更新路径、依赖版本、故障排查、FAQ、已知限制和完整参数说明,因此未给满分。
示例可直接作为 Node.js Azure Monitor/OpenTelemetry 集成起点,覆盖多种常见任务;但没有该技能专属的代表性输出、验收标准或执行证据,若 API、初始化顺序或导出配置不匹配仍需人工校正,因此静态评估不超过 7 分并扣分。
源文件包含具体包名、代码、环境变量和仓库 CI/测试基础设施,具备一定审计线索;但所给测试未覆盖该技能的关键路径,未提供针对该 SKILL.md 的验收套件、第三方执行结果或版本锁定证据,因此仅给有限可验证性。
- 发送到 Application Insights/Azure Monitor 的遥测可能包含请求、异常、属性和日志中的敏感信息;部署前应明确数据分类、脱敏、采样、区域与保留策略。
- 示例未给出依赖版本或兼容性矩阵;应核对当前 Node.js、OpenTelemetry 和 Azure SDK API,尤其是自定义 SpanProcessor 中对 attributes 和 traceFlags 的直接修改。
- Custom logs ingestion 示例展示了向外部 Azure 端点上传日志,但未说明最小 RBAC 权限、失败后的重试/幂等策略或上传前验证。
- 该评估仅读取源文件,未执行示例、安装依赖或验证 Azure 服务连接。
它能做什么 & 适用场景
这是一个面向 TypeScript 和 JavaScript Node.js 应用的 Azure Monitor OpenTelemetry 技能。它指导开发者使用自动插桩采集分布式追踪、指标和日志,并将遥测发送到 Application Insights。技能还涵盖 ESM 加载器、采样、离线存储、自定义资源、自定义 span 与手动导出器配置。若应用需要 Azure Monitor 可观测性,这个技能适合直接采用;若只需要通用 OpenTelemetry 或其他后端,它的内容则明显偏向 Azure。
指导安装 @azure/monitor-opentelemetry、@azure/monitor-opentelemetry-exporter 和 @azure/monitor-ingestion;配置 APPLICATIONINSIGHTS_CONNECTION_STRING 与可选的 AZURE_TOKEN_CREDENTIALS;在导入其他应用模块前调用 useAzureMonitor();通过 Node.js ESM loader 启用自动插桩;配置采样、Live Metrics、标准指标、性能计数器、离线存储和具体 instrumentation;创建自定义 span、counter、histogram 和 observable gauge;使用 Azure Monitor trace、metric、log exporter 手动导出;通过 LogsIngestionClient 上传自定义日志;配置自定义 SpanProcessor;在进程退出时调用 shutdownAzureMonitor()。
- Node.js 服务团队希望用少量初始化代码自动采集 HTTP、Azure SDK、数据库和日志库的 Application Insights 遥测。
- TypeScript 应用需要同时记录分布式追踪、指标和日志,并使用连接字符串发送到 Azure Monitor。
- ESM 项目运行在 Node.js 18.19+,需要通过 @azure/monitor-opentelemetry/loader 启用自动插桩。
- 高流量应用需要设置采样比例、离线存储和优雅关闭,以减少遥测开销并尽量避免数据丢失。
- 开发者需要为业务操作添加自定义 span、指标、属性或事件,或完全控制 OpenTelemetry exporter。
- 应用需要使用 Logs Ingestion API 将自定义日志写入 Azure Monitor。
优缺点一览
- 覆盖自动插桩与手动 exporter 两种 OpenTelemetry 配置方式。
- 同时涉及分布式追踪、指标、日志、采样、离线存储和优雅关闭。
- 提供 TypeScript 示例,包含自定义 span、指标、资源和 SpanProcessor。
- 明确强调必须在导入其他模块前调用 useAzureMonitor()。
- 内容主要针对 Azure Monitor 和 Application Insights,不是与后端无关的通用 OpenTelemetry 指南。
- 运行示例依赖 Node.js、npm 以及 Azure Monitor 相关包和配置。
- 源材料没有说明该具体技能的独立测试覆盖情况。
- 示例要求用户自行准备 Application Insights 连接字符串、端点、规则 ID 等 Azure 配置。
如何安装
安装整个技能集合:npx skills add microsoft/skills。根据向导选择所需技能;README 说明技能会安装到所选 agent 的目录,例如 GitHub Copilot 使用 .github/skills/,多 agent 配置可使用符号链接。源材料未提供仅安装 azure-monitor-opentelemetry-ts 的独立命令。运行时安装对应 npm 包:npm install @azure/monitor-opentelemetry;自定义 OpenTelemetry 导出时安装 npm install @azure/monitor-opentelemetry-exporter;自定义日志摄取时安装 npm install @azure/monitor-ingestion。
如何使用
在 Node.js 应用中,将以下请求作为触发场景:为这个 TypeScript Node.js 服务接入 Azure Monitor OpenTelemetry,自动采集追踪、指标和日志,并使用 APPLICATIONINSIGHTS_CONNECTION_STRING 配置 Application Insights。实现时先调用 useAzureMonitor(),再导入其他应用模块;ESM 项目可使用 node --import @azure/monitor-opentelemetry/loader ./dist/index.js。生产环境若使用 DefaultAzureCredential,设置 AZURE_TOKEN_CREDENTIALS=prod。
对比同类
该技能将推荐的 @azure/monitor-opentelemetry 自动插桩方案,与低级别 @azure/monitor-opentelemetry-exporter 手动配置并列说明;前者适合快速接入,后者适合需要自行管理 OpenTelemetry provider 和 processor 的场景。