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

Lambda函数无法通过dd-trace npm库向Datadog发送自定义指标

问题描述

已按照Datadog官方文档完成Lambda函数的自定义指标配置,安装了Datadog Lambda库与扩展,本地使用AWS SAM CLI测试时,调用tracer.dogstatsd.increment/decrement出现TypeError,提示tracer.dogstatsd为undefined。相关代码、错误信息及template.yml配置如下:

Lambda函数代码

require("dotenv").config();
const tracer = require("dd-trace").init();
let response;

exports.lambdaHandler = tracer.wrap(
  "twilio.DDTraceFunction",
  async (event, context) => {
    try {
      tracer.dogstatsd.increment("example_metric.increment", 1, [
        "environment:dev",
      ]);
      tracer.dogstatsd.decrement("example_metric.decrement", 1, [
        "environment:dev",
      ]);

      response = {
        statusCode: 200,
        body: JSON.stringify({
          message: "hello world",
        }),
      };
    } catch (err) {
      console.log("err===============>", err);

      return {
        statusCode: 500,
        body: JSON.stringify("An error occurred"),
      };
    }

    return response;
  }
);

测试错误信息

➜  sam-app sam local invoke DDTraceFunction                    
Invoking /opt/nodejs/node_modules/datadog-lambda-js/handler.handler (nodejs14.x)                                                           
arn:aws:lambda:ap-south-1:464622532012:layer:Datadog-Extension:10 is already cached. Skipping download                                     
arn:aws:lambda:ap-south-1:464622532012:layer:Datadog-Node14-x:62 is already cached. Skipping download                                      
Local image is up-to-date                                                                                                                 
Using local image: samcli/lambda-nodejs:14-x86_64-12d24702a7805bbe910f9c1a2.                                                               
                                                                                                                                          
Mounting /Users/global/Desktop/test/datadog/sam-app/lib-dd-trace as /var/task:ro,delegated, inside runtime container                   
START RequestId: a3b8482b-2d9d-4094-b7d7-dc82c747d66e Version: $LATEST
2023-08-18T04:03:24.243Z    a3b8482b-2d9d-4094-b7d7-dc82c747d66e    INFO    err===============> TypeError: Cannot read property 'incre    at step (/opt/nodejs/node_modules/datadog-lambda-js/index.js:44:23)ndex.js:168:62)acer.js:42:29).js:57:14)
END RequestId: a3b8482b-2d9d-4094-b7d7-dc82c747d66e
REPORT RequestId: a3b8482b-2d9d-4094-b7d7-dc82c747d66e  Init Duration: 0.55 ms  Duration: 3807.39 ms    Billed Duration: 3808 ms    Memory Size: 128 MB Max Memory Used: 128 MB 
{"statusCode": 500, "body": "\"An error occurred\""}%                       

template.yml配置片段

DDTraceFunction:
  Type: AWS::Serverless::Function 
  Properties:
    CodeUri: lib-dd-trace/
    Handler: /opt/nodejs/node_modules/datadog-lambda-js/handler.handler
    Runtime: nodejs14.x
    Architectures:
      - x86_64
    Environment:
      Variables:
        DD_SERVERLESS_LOGS_ENABLED: true
        DD_TRACE_ENABLED: true
        DD_LAMBDA_HANDLER: app.lambdaHandler
    Layers:
      - arn:aws:lambda:ap-south-1:464622532012:layer:Datadog-Extension:10 
      - arn:aws:lambda:ap-south-1:464622532012:layer:Datadog-Node14-x:62

注:DD_API_KEY、DD_SITE等环境变量已在template.yml全局配置中设置。

解决方案

当tracer.dogstatsd不可用时,可通过以下两种方式发送计数、速率类自定义指标:

方法1:使用datadog-lambda-js的sendMetric方法

直接引入datadog-lambda-js模块调用sendMetric,该方法会自动通过Datadog扩展发送指标:

const { sendMetric } = require("datadog-lambda-js");

// 在Lambda handler中调用
sendMetric("example_metric.increment", 1, { environment: "dev" });
sendMetric("example_metric.decrement", -1, { environment: "dev" });
  • 计数递增传数值1,递减传-1;
  • 标签以对象形式传入,会自动转换为Datadog兼容格式。

方法2:使用tracer.metrics对象

如果坚持使用dd-trace的tracer实例,可改用tracer.metrics发送指标:

// 递增计数
tracer.metrics.increment("example_metric.increment", 1, ["environment:dev"]);
// 递减计数(通过传入负数实现)
tracer.metrics.increment("example_metric.decrement", -1, ["environment:dev"]);

tracer.metrics是dd-trace内置的指标发送器,无需额外配置dogstatsd客户端,在Serverless环境下会自动适配Datadog扩展。

额外注意事项

  • 本地SAM测试时,确保Datadog扩展正常运行,部分场景下需手动启动扩展或配置DD_AGENT_HOST指向本地代理;
  • 移除代码中手动初始化的require("dd-trace").init(),datadog-lambda-js已自动完成tracer初始化,重复初始化可能导致冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 06:17:09