LoginSignup
5
2

More than 5 years have passed since last update.

CloudWatch Agent 仕込み済み AMI からEC2インスタンスを作成するときの注意点

Last updated at Posted at 2018-02-18

概要

CloudWatch Agent 仕込み済み AMI から EC2インスタンス を作成すると、作成された EC2インスタンス の CloudWatch Agent の設定ファイルの "log_stream_name" には元のEC2インスタンスの情報が残ってしまう。
そのため、新しく作成したEC2インスタンスのログも、元のEC2インスタンスの CLoudWatch ロググループ (ログストリーム)へ送られてしまう。

例) 新しく作成した EC2インスタンス(インスタンスID: i-07711e9e622631299)の cloudwatch agent の設定ファイル

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


[[outputs.cloudwatchlogs]]
file_name_field_key = "file_name"
file_state_folder = "/opt/aws/amazon-cloudwatch-agent/logs/state"
log_entry_field_key = "value"
log_group_name_tag_key = "log_group_name"
log_stream_name = "i-0f00fefdaa33fbc2a" ← 新しいEC2インスタンスIDではなく、元のEC2インスタンスIDになっている
log_stream_name_tag_key = "log_stream_name"
log_timestamp_field_key = "log_timestamp"
multi_line_start_field_key = "multi_line_start"
offset_field_key = "offset"
region = "ap-northeast-1"

対策

CloudWatch Agent の設定ファイルを初期化するコマンドを cloud-init に仕込んで AMI を作成する。
その AMI を使って EC2インスタンス を作成すれば、EC2インスタンス初期起動時に CloudWatch Agent 初期化コマンドが実行されるので、新しい EC2インスタンスの CloudWatch Agent の設定ファイル を、その新しい EC2インスタンスの情報にアップデートすることができる。

  • cloud-init に仕込む内容

/etc/cloud/cloud.cfg


# CloudWatch Agent
runcmd:

  • /opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --download-source ssm:agent-config-linux --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
  • /opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
  • /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
  • /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
  • /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start

解説

上記 runcmd で実行させるコマンドの実行内容は、「CloudWatch エージェントを開始する」の "Systems Manager Run Command を使用して CloudWatch エージェントを開始する" で行っていることと同等。

  1. AWS Systems Manager の "agent-config-linux" という名前の Parameter Store をダウンロードして、/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json に保存する

/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --download-source ssm:agent-config-linux --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml

  1. jsonフォーマット を toml フォーマットへ変換する

/opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml

  1. schematest

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml

  1. amazon-cloudwatch-agent の再起動 (amazon-cloudwatch-agent.toml を読み込みなおすため)

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a start

2019/03/10更新

おそらく、Amazon CloudWatch エージェントが Procstat プラグインおよび複数の設定ファイルのサポートを追加 のタイミングで、config-downloader コマンドから --output-file オプションがなくなった。
そして、次の一連のコマンドが、

/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-file /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --download-source ssm:cloudwatch-agent-basic-config --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
/opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml

次のコマンド1つで行えるようになった。

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:cloudwatch-agent-basic-config -s

※参考
開始方法: CloudWatch エージェントを最初のインスタンスにインストールする
⇒コマンドラインを使用して Amazon EC2 インスタンスで CloudWatch エージェントを開始する

さらに、この新しいバージョンの CloudWatch エージェントを仕込んだ AMI から EC2インスタンス を作成すると、作成された EC2インスタンスは上記の様に cloud-init 設定とかを特に行わなくても、新しいEC2インスタンスの情報が反映されるようになり、CloudWatch ロググループにログが転送されるようになった。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2