如何用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--
相关产品推荐
相关产品推荐

