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()