【EC2】 CloudWatch エージェントで Auto Scaling グループ配下にあるインスタンス内のログを CloudWatch Logs へ転送 (後編)

(前編の続き)

設定手順 (続き)

CloudWatch エージェントインストール済みのゴールデンイメージ作成

前編で Auto Scaling 用ゴールデンイメージ作成元マシンへ CloudWatch エージェントをインストールしたので、 この状態の AMI を作成。

Auto Scaling 用起動テンプレートを更新 (新バージョン発行)

AMI を、先に作成した最新ゴールデンイメージへ差し替え。

新インスタンスへ IAM ロール EC2RoleForCloudWatchAgent を自動的に付与するよう設定。

起動テンプレートのデフォルトバージョンも適宜更新。

Auto Scaling グループの起動テンプレートバージョン設定がデフォルトを指している場合、この時点で Auto Scaling グループ配下のインスタンスが再生成され、各インスタンスのログとメトリクスが収集されはじめる。

その他

S3 へのエクスポート方法

AWS CLI、マネジメントコンソールどちらからでも可能。

なお、出力先 S3 バケットには、CloudWatch Logs からの書き込み許可を与えるバケットポリシーを要設定。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "s3:GetBucketAcl",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::cloudwatchagent-logs-export-xxxxxxxxxxxx",
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            }
        },
        {
            "Action": "s3:PutObject",
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::cloudwatchagent-logs-export-xxxxxxxxxxx/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            },
            "Principal": {
                "Service": "logs.ap-northeast-1.amazonaws.com"
            }
        }
    ]
}

ログが転送される間隔

ドキュメントに記載されていないような……

/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml

  [[outputs.cloudwatchlogs]]
  .
  .
  .
  force_flush_interval = "5s"
  .
  .
  .

/opt/aws/amazon-cloudwatch-agent/doc/amazon-cloudwatch-agent-schema.json

        "force_flush_interval": {
          "description": "Max time to wait before batch publishing the log, unit is second.",
          "$ref": "#/definitions/timeIntervalDefinition"
        },

これらのファイルを見る限り、5 秒間隔で転送されている模様。

実際、結構スムーズに転送されているので、Fluentd を使って S3 へ転送したときのようにインスタンス破棄直前の努力はしなくて良さそう。

ログ保管期間?

AWS が滅びるまで。

デフォルトでは、ログデータは CloudWatch Logs に永続的に保存されます。
ロググループとログストリームを操作する – Amazon CloudWatch Logs

この分かりづらい画面から変更も可能。

ロググループ新規作成時点で設定する方法は……よくわからない。

おわりに

  • AWS を使用している
  • 保管したログに関して複雑な分析をしない
    • Elasticsearch Service はオーバースペック
    • あとでなにかやるかもしれないが、とりあえず最低限、一覧・検索ができる程度にはしておきたい

のであれば、ちょうどいい選択肢なのかと。