【问题标题】:Is there any method in aws sdk for javascript to get the aws log insights query method results synchronously?aws sdk 中是否有任何方法可以同步获取 aws 日志洞察查询方法结果?
【发布时间】:2022-07-01 03:21:48
【问题描述】:
我正在尝试使用 sdk for javascript v3 从 aws 获取日志见解,我可以看到我们只能使用 StartQuery 安排查询,然后使用 @987654322 获得结果@ 方法。我遇到了filterLogEvents 方法,它使用正则表达式单独过滤日志事件,但我需要单独使用查询。
有什么技巧可以同步获取结果吗?
【问题讨论】:
标签:
amazon-web-services
amazon-cloudwatch
aws-sdk-nodejs
aws-cloudwatch-log-insights
【解决方案1】:
我使用 'aws-sdk' v2 并设法得到这样的查询结果,希望这会有所帮助。
const cl = new AWS.CloudWatchLogs({
region: 'your-region',
})
const params = {
endTime: new Date().getTime() /* required */ ,
logGroupName: 'your-log-group-name' /* required */ ,
queryString: `fields @message, @timestamp
| parse @message /\\[(?<time>[\\S ]+): (?<msg_type>\\S+)\\/.+\\[(?<task_id>\\S+)\\](?<msg>.+)/
| filter task_id = '${taskId}'
| sort @timestamp desc
| display @timestamp, time,msg_type,msg`,
startTime: new Date().getTime(),/*start time*/
}
const getResults = (data) => {
cl.getQueryResults({
queryId: data.queryId
}, (_err, _data) => {
if (_err) {
console.log(_err, _err.stack)
}
else {
const res = _data.results ? .map((r) => {
return {
timestamp: r.find((el) => el.field === '@timestamp') ? .value,
type: r.find((el) => el.field === 'msg_type') ? .value,
msg: r.find((el) => el.field === 'msg') ? .value,
}
})
/*check the status and run the function again*/
if (_data.status.toLowerCase() === 'running') {
getResults(data)
}
})
}
cl.startQuery(params, (err, data) => {
if (err) {
console.log(err, err.stack)
} else {
getResults(data)
}
})