Aws cloudwatch log insights CloudWatchLogs filterLogEvents空事件

Aws cloudwatch log insights CloudWatchLogs filterLogEvents空事件,aws-cloudwatch-log-insights,Aws Cloudwatch Log Insights,我试图通过发送参数来获取CloudWatchLogs filterLogEvents。 有时它会工作并在那个时候向我发送准确的日志,但对于不同的lambda函数,它会返回带有下一个令牌的空事件 参数={ “logGroupName”:metricFilter.logGroupName, “filterPattern”:metricFilter.filterPattern?metricFilter.filterPattern:“”, “startTime”:时间戳-偏移量, “endTime”:时

我试图通过发送参数来获取CloudWatchLogs filterLogEvents。 有时它会工作并在那个时候向我发送准确的日志,但对于不同的lambda函数,它会返回带有下一个令牌的空事件

参数={

“logGroupName”:metricFilter.logGroupName, “filterPattern”:metricFilter.filterPattern?metricFilter.filterPattern:“”, “startTime”:时间戳-偏移量, “endTime”:时间戳 };

我正在通过发送带有下一个令牌的参数进行重试,但它仍然得到空事件。有人知道吗

{
    "events": [],
    "searchedLogStreams": [],
    "nextToken": "long text"
}

当我尝试使用aws sdk捕获aws clould监视日志时,我也遇到了同样的问题

当我使用logStreamNamePrefix时,我最终解决了这个问题,在我的例子中,它是设备的uuid

因此,我创建了下面的函数,当我第一次在没有nextToken的情况下运行它时,以及随后的几次,我在请求中获取令牌并使用令牌再次调用它以继续搜索

loadCloudWatchLogs(nextToken?: string) {
  // Set the region
  AWS.config.update({
    region: 'sa-east-1',
    credentials: {
      accessKeyId: environment.awsAccessKeyId,
      secretAccessKey: environment.awsSecretAccessKey,
    },
  });

  // Create the CloudWatchLogs service object
  const cloudwatchlogs = new AWS.CloudWatchLogs({ apiVersion: '2014-03-28' });

  // Defines the params attributes pattern.
  let params: AWSCloudWatchParams;

  // Check if token was provided to permorm a next query to AWSCloudWatchLogs.
  if (nextToken) {
    params = {
      logGroupName: 'group-name' /* required */,
      startTime: this.startTime,
      endTime: this.endTime,
      logStreamNamePrefix: this.device,
      filterPattern: `{ ($.device="${this.device}") }`,
      nextToken,
    };
  } else {
    params = {
      logGroupName: 'group-name' /* required */,
      startTime: this.startTime,
      endTime: this.endTime,
      logStreamNamePrefix: this.device,
      filterPattern: `{ ($.device="${this.device}") }`,
    };
  }

  // Execute a filter for logs.
  cloudwatchlogs.filterLogEvents(params, (err, data) => {
    if (err) {
      console.log(err, err.stack);
    } else {
      if (data.searchedLogStreams.length > 0) {
        // Chegk if exists more logs for query.
        const loadMoreLogs = !data.searchedLogStreams[
          data.searchedLogStreams.length - 1
        ].searchedCompletely;

        // Update the token for the next query.
        this.nextToken = data.nextToken;

        data.events.forEach(log => {
          // log proccessing...
        });
      }
    }
  });
}
这个函数是我在Angular项目中使用的,但即使javascript vanila进行了一些调整,它也可以工作