目次
最初に
ども、安田です。
「きっと君は来ない、ひとりきりのクリスマス」に向けて、
アドカレブログのトップバッターとしてアウトプットします。
実施目的とメリット
-
標準監視設定を一元管理
パラメータストアに設定を保存しておくことで、変更やバージョン管理が容易。 -
自動化が容易
EC2の起動時にRun Commandや起動スクリプトを使って、CloudWatch Agentの設定を自動的に適用可能。 -
複数環境の同時適用が可能
同じ設定を複数のサーバに簡単に展開できるし、環境ごとに異なるパス(例:/cloudwatchagent/prod/config
、/cloudwatchagent/dev/config
)を用意して切り替え可能 -
手動オペレーションミスや設定内容のミスを削減
設定ファイルをサーバに手動で配置する手間が省けるから、設定ミスを防げる。
今回の検証で作成するAWSリソース
-
EC2インスタンス
OSのおすすめ
Amazon Linux系(SSMがデフォルトでインストールされている)
必要なIAMポリシー
AmazonSSMManagedInstanceCore
CloudWatchAgentServerPolicy
参考リンク
SSMに関してはこちらの記事を参照してください。 -
パラメータストア
CloudWatch AgentのConfig.json
を設定。 -
Run Commandドキュメント
パラメータストアのConfig.json
をマネージインスタンスのローカル設定ファイルに反映するためのドキュメントを作成。
Run CommandでCloudWatch Agentをインストール
手順
-
Run Commandを実行
-
AWS Management Console: 検索欄に
Systemsmanager
を入力。ノードツール
からRun Command
をクリックする。 -
コマンドドキュメント: 検索欄に
AWS-ConfigureAWSPackage
を入力。 -
コマンドパラメータ: フィールドに
AmazonCloudWatchAgent
を入力。 -
ターゲット: 作成済みの検証環境を選択。
-
実行: をクリックすると実行結果のページに遷移します。
-
以下のように実行結果が成功になればOKです!
※その他のオプションについては、公式記事を参照してください。S3へのログ出力はエラーになったときのトラブルシュートに役立ちます。
-
サーバ側でインストール結果を確認
rpm -qa | grep cloudwatch
結果:
amazon-cloudwatch-agent-1.300049.1b929-1.x86_64
正しくCloudWatchAgentがインストールされています。
パラメータストアを作成
手順
- configファイルのパラメータを設定
systemmanager
のページから、アプリケーションツールのパラメータストア
にアクセス - 作成をクリック
- 名前を入力:
/cloudwatchagent/prod/config
- 説明を入力:
CloudWatch Agent configuration for custom metrics
- 利用枠:標準
- タイプ:文字列
- データ型:text
- 値:↓を入れる
{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "metrics": { "namespace": "${aws:Hostname}", "aggregation_dimensions": [ [ "InstanceId" ] ], "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "collectd": { "collectd_security_level": "encrypt", "collectd_auth_file": "/etc/collectd.d/auth_file", "metrics_aggregation_interval": 60 }, "disk": { "measurement": [ "used_percent" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_available_percent" ], "metrics_collection_interval": 60 } } } }
- 名前を入力:
ドキュメントの作成
- ドキュメントを設定
`systemmanager`のページから、変更管理ツールの`ドキュメント`にアクセスする。 - 作成をクリック
`ドキュメントの作成`をクリックし`コマンドまたはセッション`をクリックする。- 名前を入力:`ApplyCloudWatchAgentConfigFromSSM`
- ターゲットタイプ-オプション:`空でOK`
- ドキュメントタイプ:`Command`
- コンテンツ:`yaml`
- 値:↓を入れる
description: "Fetch CloudWatch Agent config from Parameter Store and apply it" mainSteps:
- action: "aws:runCommand"
name: "FetchAndApplyConfig"
inputs:
DocumentName: "AWS-RunShellScript"
Parameters:
commands:- "# 1. Fetch the config from Parameter Store"
- "sudo amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:/cloudwatchagent/prod/config"
- "# 2. Restart the agent to apply the new config"
- "sudo systemctl restart amazon-cloudwatch-agent"
設定内容の解説:
Run Commandを使用して、AWS Systems Manager Parameter Storeに保存されたCloudWatch Agentの設定を取得し、ローカル設定ファイルとして扱います。その後エージェントに設定を適用し動作します。
Run Commandの実行
-
作成したドキュメントの実行
冒頭と同じようにRuncommandで対象インスタンスに対してApplyCloudWatchAgentConfigFromSSM
を実行。サーバに接続して設定ファイルが正しく適用されているかを確認する。
cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm__cloudwatchagent_prod_config
パラメータストアと同じであることを確認:
{ "metrics": { "namespace": "${aws:Hostname}", "aggregation_dimensions": [ [ "InstanceId" ] ], "append_dimensions": { "InstanceId": "${aws:InstanceId}" }, "metrics_collected": { "disk": { "measurement": [ "used_percent" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_available_percent" ], "metrics_collection_interval": 60 } } } }
メトリクス出力の確認
Cloudwatchagentで設定したメトリクスが出力されていることを確認します。
感想
感想は、設定管理と適用を一括管理することができることが素晴らしいと思いました。次の挑戦として、今回のRuncommandをトリガーに自動でCloudWatchアラームを設定できるような検証を行おうと思っています。ではでは
体はグミでできている。
LINK
クラウドベリージャム:プロフィールページ