Lambda 函数只将一个数据点放入 InfluxDB
Lambda function only putting one data point into InfluxDB
我有一个 Lambda 函数,旨在从 SQS 队列中获取消息,然后输入一个名为 perf_value
的值,它只是一个整数。 CloudWatch 日志显示它每次都触发并记录 Done
,如我的写入点的 .then()
块所示。每次它触发时,我仍然只能在 InfluxDB Cloud 中看到一个数据点。我不明白为什么它只输入一个值然后什么都不输入。我在 SQS 中没有看到积压,在 CloudWatch 中也没有看到错误消息。我猜这是一个代码问题或 InfluxDB 云设置,尽管我使用了默认值,您希望这些默认值实际上适用于多个数据点
'use strict';
const {InfluxDB, Point, HttpError} = require('@influxdata/influxdb-client')
const InfluxURL = 'https://us-west-2-1.aws.cloud2.influxdata.com'
const token = '<my token>=='
const org = '<my org>'
const bucket= '<bucket name>'
const writeApi = new InfluxDB({url: InfluxURL, token}).getWriteApi(org, bucket, 'ms')
module.exports.perf = function (event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;
let input = JSON.parse(event.Records[0].body);
console.log(input)
const point = new Point('elapsedTime')
.tag(input.monitorID, 'monitorID')
.floatField('elapsedTime', input.perf_value)
// .timestamp(input.time)
writeApi.writePoint(point)
writeApi
.close()
.then(() => {
console.log('Done')
})
.catch(e => {
console.error(e)
if (e instanceof HttpError && e.statusCode === 401) {
console.log('Unauthorized request')
}
console.log('\nFinished ERROR')
})
return true
};
编辑**
仍然无法解决问题。我可以获得一个数据点进入 influxdb,然后什么也不会显示。
@Joshk132 -
我认为问题出在这里:
writeApi
.close() // <-- here
.then(() => {
console.log('Done')
})
您将在第一次写入后关闭 API 客户端对象,因此您只能写入一次。如果您想立即强制发送点数,可以使用 flush()
。
我有一个 Lambda 函数,旨在从 SQS 队列中获取消息,然后输入一个名为 perf_value
的值,它只是一个整数。 CloudWatch 日志显示它每次都触发并记录 Done
,如我的写入点的 .then()
块所示。每次它触发时,我仍然只能在 InfluxDB Cloud 中看到一个数据点。我不明白为什么它只输入一个值然后什么都不输入。我在 SQS 中没有看到积压,在 CloudWatch 中也没有看到错误消息。我猜这是一个代码问题或 InfluxDB 云设置,尽管我使用了默认值,您希望这些默认值实际上适用于多个数据点
'use strict';
const {InfluxDB, Point, HttpError} = require('@influxdata/influxdb-client')
const InfluxURL = 'https://us-west-2-1.aws.cloud2.influxdata.com'
const token = '<my token>=='
const org = '<my org>'
const bucket= '<bucket name>'
const writeApi = new InfluxDB({url: InfluxURL, token}).getWriteApi(org, bucket, 'ms')
module.exports.perf = function (event, context, callback) {
context.callbackWaitsForEmptyEventLoop = false;
let input = JSON.parse(event.Records[0].body);
console.log(input)
const point = new Point('elapsedTime')
.tag(input.monitorID, 'monitorID')
.floatField('elapsedTime', input.perf_value)
// .timestamp(input.time)
writeApi.writePoint(point)
writeApi
.close()
.then(() => {
console.log('Done')
})
.catch(e => {
console.error(e)
if (e instanceof HttpError && e.statusCode === 401) {
console.log('Unauthorized request')
}
console.log('\nFinished ERROR')
})
return true
};
编辑** 仍然无法解决问题。我可以获得一个数据点进入 influxdb,然后什么也不会显示。
@Joshk132 -
我认为问题出在这里:
writeApi
.close() // <-- here
.then(() => {
console.log('Done')
})
您将在第一次写入后关闭 API 客户端对象,因此您只能写入一次。如果您想立即强制发送点数,可以使用 flush()
。