0

我有一个 Lambda 函数,旨在从 SQS 队列中获取消息,然后输入一个名为的值perf_value,该值只是一个整数。CloudWatch 日志显示它每次触发并记录Done,如.then()我的写入点块中所示。每次触发时,我仍然只能在 InfluxDB Cloud 中看到一个数据点。我不知道为什么它只输入一个值,然后什么都没有。我在 SQS 中没有看到积压,在 CloudWatch 中也没有错误消息。我猜这是代码问题或 InfluxDB Cloud 设置,尽管我使用了您希望实际适用于多个数据点的默认值

'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,然后什么都不会出现。

4

1 回答 1

0

@Joshk132 -

我相信问题出在这里:

writeApi
  .close() // <-- here
  .then(() => {
    console.log('Done')
  })

您将在第一次写入后关闭 API 客户端对象,因此您只能写入一次。flush()如果您想立即强制发送点,您可以使用。

于 2020-10-16T18:36:56.110 回答