You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js应用使用DefaultAzureCredentials对接Application Insights无日志问题

排查步骤:DefaultAzureCredential对接Application Insights无数据问题

以下是针对你遇到的问题的具体排查和修复步骤:

1. 移除连接字符串,避免AAD认证与连接字符串冲突

当使用AAD身份认证(aadTokenCredential)时,不需要设置Application Insights连接字符串,两者不能同时生效。修改代码如下:

const { DefaultAzureCredential } = require('@azure/identity');
const appInsights = require("applicationinsights");

// 初始化时不要传入连接字符串
appInsights.setup()
  .setAutoCollectConsole(true)
  .setSendLiveMetrics(true)
  .start();

const credential = new DefaultAzureCredential();
const client = appInsights.defaultClient;
// 设置Instrumentation Key(必须,替代连接字符串)
client.config.instrumentationKey = "<你的Application Insights Instrumentation Key>";
client.config.aadTokenCredential = credential;

client.trackEvent({ name: 'testEvent', properties: { customProperty: 'customValue' } });
// 手动触发发送,避免脚本退出前未完成发送
client.flush();

2. 确认SDK版本支持AAD认证

确保applicationinsights包版本≥2.0.0,低版本不支持AAD Token Credential功能。执行以下命令检查并升级:

npm list applicationinsights
# 升级到最新版本
npm install applicationinsights@latest

3. 验证权限配置正确性

确认给服务主体(对应AZURE_CLIENT_ID)分配的是Application Insights Data Contributor角色,且角色分配范围包含目标Application Insights资源:

  • 进入Azure门户的Application Insights资源 → 访问控制(IAM)→ 角色分配
  • 检查是否存在对应服务主体的Application Insights Data Contributor角色,若没有则添加

4. 测试DefaultAzureCredential是否能正常获取Token

添加代码测试认证是否成功,排除身份认证本身的问题:

const { DefaultAzureCredential } = require('@azure/identity');

async function testCredential() {
  const credential = new DefaultAzureCredential();
  try {
    const token = await credential.getToken("https://monitor.azure.com/.default");
    console.log("获取Token成功:", token.token);
  } catch (err) {
    console.error("认证失败:", err.message);
  }
}

testCredential();

如果运行后报错,说明环境变量配置或服务主体权限有问题,先解决认证问题。

5. 开启SDK调试日志排查发送错误

开启Application Insights的内部日志,查看是否有发送失败或认证错误的信息:

appInsights.setup()
  .setAutoCollectConsole(true)
  .setSendLiveMetrics(true)
  .setInternalLogging(true, true) // 开启调试日志
  .start();

运行程序后,查看控制台输出的日志,寻找类似"Failed to send telemetry"或"Authentication failed"的错误信息。

6. 确保Telemetry被正确发送

  • 对于短生命周期的脚本(比如测试脚本),必须调用client.flush()强制发送,因为SDK默认是批量异步发送,脚本结束时可能还未完成发送。
  • 对于长期运行的服务,可以设置setAutoFlush(true)让SDK自动定时发送:
appInsights.setup()
  .setAutoFlush(true)
  .start();

内容的提问来源于stack exchange,提问作者Raghu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:43:30