Aws cloudwatch log insights CloudWatchLogs filterLogEvents空事件
我试图通过发送参数来获取CloudWatchLogs filterLogEvents。 有时它会工作并在那个时候向我发送准确的日志,但对于不同的lambda函数,它会返回带有下一个令牌的空事件 参数={ “logGroupName”:metricFilter.logGroupName, “filterPattern”:metricFilter.filterPattern?metricFilter.filterPattern:“”, “startTime”:时间戳-偏移量, “endTime”:时间戳 }; 我正在通过发送带有下一个令牌的参数进行重试,但它仍然得到空事件。有人知道吗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”:时
{
"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进行了一些调整,它也可以工作