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

如何用JS通过单次HTTP请求向DataDog批量上报日志

如何通过单次HTTP请求向DataDog V2接口批量上报多条日志

你之前的代码错误在于将多条日志的消息封装进了单个日志对象的message字段,DataDog会把这个数组直接当作单条日志的内容展示,所以只生成了一条日志。

要实现批量上报,正确的方式是构造一个日志对象数组,每个对象对应一条独立的日志,然后将这个数组作为请求体发送:

const dataDogEndpoint = 'https://http-intake.logs.datadoghq.com/api/v2/logs';
// 每条日志对应一个独立的对象,可包含各自的字段(也可复用公共字段)
const logs = [
  {
    ddtags: 'env:production,status:info',
    hostname: 'my-host',
    message: 'My first production log.',
    service: 'my-service'
  },
  {
    ddtags: 'env:production,status:info',
    hostname: 'my-host',
    message: 'My second production log.',
    service: 'my-service'
  }
];

const response = await fetch(dataDogEndpoint, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'DD-API-KEY': apiKey
  },
  body: JSON.stringify(logs) // 直接序列化日志数组
});

如果日志数量较多,也可以使用**NDJSON(换行分隔的JSON)**格式发送,这种格式的解析性能更优,只需将请求的Content-Type改为application/x-ndjson,并将日志对象逐个序列化后用换行符拼接:

const dataDogEndpoint = 'https://http-intake.logs.datadoghq.com/api/v2/logs';
const logs = [
  {
    ddtags: 'env:production,status:info',
    hostname: 'my-host',
    message: 'My first production log.',
    service: 'my-service'
  },
  {
    ddtags: 'env:production,status:info',
    hostname: 'my-host',
    message: 'My second production log.',
    service: 'my-service'
  }
];

// 将每个日志对象转为JSON字符串后用换行拼接
const ndjsonBody = logs.map(log => JSON.stringify(log)).join('\n');

const response = await fetch(dataDogEndpoint, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-ndjson',
    'DD-API-KEY': apiKey
  },
  body: ndjsonBody
});

以上两种方式都能让DataDog将请求中的内容解析为多条独立的日志条目。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:20:50