async function getLogGroupInfo() { return await getPaginatedResults(async (NextMarker) => { const logGroups = await logs.describeLogGroups({nextToken: NextMarker}).promise(); return { marker: logGroups.nextToken, results: logGroups.logGroups, }; }); }
async function getLogGroupStats() { let now = moment(); return await getPaginatedResults(async (NextMarker) => { const logGroups = await logs.describeLogGroups({limit: pageSize, nextToken: NextMarker}).promise(); const metrics = await Promise.all(logGroups.logGroups.map(async lg=>{ let m = await cloudwatch.getMetricStatistics({ Namespace: 'AWS/Logs', MetricName:'IncomingBytes', Dimensions: [{Name: 'LogGroupName', Value: lg.logGroupName}], StartTime: moment().subtract(7, 'day').toISOString(), EndTime: now.toISOString(), Period: 3600*24*7, Statistics: ['Sum'], Unit: 'Bytes' }).promise(); return { logGroupName: lg, IncomingBytes: m.Datapoints } })); return { marker: logGroups.nextToken, results: metrics }; }) }
getLogGroupArn(logGroupName, nextToken = null) { return new Promise((resolve, reject) => { const cloudWatchLogs = new AWS.CloudWatchLogs(); const params = { logGroupNamePrefix: logGroupName, nextToken, }; cloudWatchLogs.describeLogGroups(params).promise() .then((data) => { const logGroups = data.logGroups; if (logGroups.length === 0) { return reject(new Error('LogGroup not found')); } const logGroup = _.find(logGroups, { logGroupName }); if (!logGroup) { return this.getLogGroupArn(logGroupName, data.nextToken); } return resolve(logGroup.arn); }) .catch((err) => { reject(err); }); }); }