CloudWatch Logsの保存期間を一括設定する

2018.07.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

CloudWatch Logsは便利なのです。 しかし、開発や検証を行っている時、不要なログがずっと残ってしまい、無駄なコストになりがちです。 デフォルトではログは残り続けるので、都度失効時間を設定しなければなりません。

というわけで、全てのロググループの失効期間を一括設定するスクリプトを作成しました。 Node.js 8.x 以上でお試しください。 また、AWS-SDKを利用しているので、モジュールの追加を忘れずに。

なお、ローカルで実行するよりも、Lambdaで実行する方が確実で簡単でしょう。

const AWS = require('aws-sdk');
const cwl = new AWS.CloudWatchLogs();
// 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653.
const RETENTION_IN_DAYS = 7;

const setRetentions = async (retentionInDays) => {
  let params = {};
  let groups = await cwl.describeLogGroups(params).promise();
  let groupNames = groups['logGroups'].map(e => {
    return e['logGroupName'];
  });
  for (let i = 0, len = groupNames.length; i < len; i++) {
    putRetentionPolicy(groupNames[i], retentionInDays);
  }
};

const putRetentionPolicy = async (groupName, retentionInDays) => {
    console.log(groupName);
    let params = {
        logGroupName: groupName,
        retentionInDays: retentionInDays
    };
    await cwl.putRetentionPolicy(params).promise();
};

setRetentions(RETENTION_IN_DAYS);

スッキリw