先日 CloudWatch Agent が発表されました。
SSM Agent 導入が前提、となるとマネジメントコンソールすら使う必要が無いだろうということで、AWS CLI (aws ssm) での導入方法です。
- 公式導入手順
SSM Agent
CloudWatch Agent を使うには、SSM Agent がインストールされていることが前提条件になります。
SSM Agent 導入状況確認
query はお好みで。
$ aws ssm describe-instance-information \ --query 'sort_by(InstanceInformationList[].{ InstanceId:InstanceId, ComputerName:ComputerName, ResourceType:ResourceType, PingStatus:PingStatus, AgentVersion:AgentVersion, IsLatestVersion:IsLatestVersion PlatformType:PlatformType, PlatformName:join(`:`, [ PlatformName, PlatformVersion ]) },&PlatformName)' \ --output table ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | DescribeInstanceInformation | +--------------+---------------------------------------------------+----------------------+------------------+-------------+---------------------------+---------------+----------------+ | AgentVersion | ComputerName | InstanceId | IsLatestVersion | PingStatus | PlatformName | PlatformType | ResourceType | +--------------+---------------------------------------------------+----------------------+------------------+-------------+---------------------------+---------------+----------------+ | 2.2.120.0 | ip-xxx-xx-x-xx.ap-northeast-1.compute.internal | i-xxxxxxxxxxxx8632f | False | Online | Amazon Linux AMI:2017.09 | Linux | EC2Instance | | 2.2.103.0 | ip-xxx-xx-x-xx | i-xxxxxxxxxxxx2c23b | True | Online | Amazon Linux:2.0 | Linux | EC2Instance | ・・・
IsLatestVersion ですが、 Amazon Linux 2017.09 版で確認した所 False
が返ってきました。
最新版は 2.2.103.0 のはずですが、なぜか 2.2.120.0 が導入されており、マニュフェストに存在しないバージョンのため False
となっていたようです。
- 現時点での最新 Version は “2.2.103.0”
# https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/ssm-agent-manifest.json {"Name":"amazon-ssm-agent-linux-amd64.tar.gz","Version":"2.2.103.0"}
SSM Agent インストール
未導入の場合はインストールする必要があります。 SSM Agent が居ないことには AWS Systems Manager から実行できないため、EC2インスタンス起動時なり、sshログインなりでインストールを行います。
SSM Agent アップデート
On an Amazon EC2 instance, the CloudWatch agent requires that the instance is running version 2.2.93.0 or later.
バージョン 2.2.93.0 以上が必要なため、SSM Agent が古い場合は AWS-UpdateSSMAgent
を使用してアップデートを行います。
$ _DOCNAME="AWS-UpdateSSMAgent" $ _INSTANCEs="i-xxxxxxxxxxxx2c23b,i-xxxxxxxxxxxx8632f" $ aws ssm send-command \ --document-name "${_DOCNAME}" \ --targets "Key=instanceids,Values=${_INSTANCEs}"
send-command の結果確認
list-command-invocations
で実行結果一覧が取得できます。
- 一覧取得例
$ aws ssm list-command-invocations \ --query 'sort_by(CommandInvocations[].{ DocumentName:DocumentName, CommandId:CommandId, InstanceId:InstanceId, InstanceName:InstanceName, Status:Status, StatusDetails:StatusDetails, RequestedDateTime:RequestedDateTime }, &RequestedDateTime)' \ --output table ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ListCommandInvocations | +--------------------------------------+-------------------------------+----------------------+---------------------------------------------------+--------------------+----------+-----------------+ | CommandId | DocumentName | InstanceId | InstanceName | RequestedDateTime | Status | StatusDetails | +--------------------------------------+-------------------------------+----------------------+---------------------------------------------------+--------------------+----------+-----------------+ | XXXXXXXX-ab3e-4aaa-bb72-xxxxxxxxxxxx| AWS-UpdateSSMAgent | i-xxxxxxxxxxxx2c23b | ip-xxx-xx-x-xx | 1513519181.61 | Success | Success | | XXXXXXXX-83d4-4628-a01e-xxxxxxxxxxxx| AWS-ConfigureAWSPackage | i-xxxxxxxxxxxx2c23b | ip-xxx-xx-x-xx | 1513523228.34 | Failed | Failed |
get-command-invocation
で実行結果詳細が取得できます。 StandardOutputContent と StandardErrorContent が出力結果となります。
- 詳細取得例
- command-id、instance-id を指定
$ _CMDID=XXXXXXXX-ab3e-4aaa-bb72-xxxxxxxxxxxx $ _INSTANCE=i-xxxxxxxxxxxx2c23b # jq有 $ aws ssm get-command-invocation \ --command-id ${_CMDID} \ --instance-id ${_INSTANCE} \ | jq -r '.StandardOutputContent, .StandardErrorContent' Updating amazon-ssm-agent from 2.2.120.0 to latest Successfully downloaded https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/ssm-agent-manifest.json updating amazon-ssm-agent to an older version, please enable allow downgrade to proceed # jq無 $ aws ssm get-command-invocation \ --command-id ${_CMDID} \ --instance-id ${_INSTANCE} \ --query '[ StandardOutputContent, StandardErrorContent ]' \ | awk '{gsub(/\\n/,"\n"); print}'
CloudWatch Agent
CloudWatch Agent インストール
AWS-ConfigureAWSPackage で AmazonCloudWatchAgent を指定することでインストールします。
- InstanceID での指定例
$ _DOCNAME="AWS-ConfigureAWSPackage" $ _INSTANCEs="i-xxxxxxxxxxxx2c23b,i-xxxxxxxxxxxx8632f" $ aws ssm send-command \ --document-name "${_DOCNAME}" \ --targets "Key=instanceids,Values=${_INSTANCEs}" \ --parameters "action=Install, name=AmazonCloudWatchAgent, version=latest" ・・・ Successfully installed arn:aws:ssm:::package/AmazonCloudWatchAgent 1.73.9
構成ファイルの作成
構成ファイルを Parameter Store に格納しておくことで、複数台へ適用が可能になります。 構成ファイル作成はおそらくウィザードで生成、Parameter Store への格納を行うのが最も簡単かと思います。
- cloudwatch-agent-config-wizard
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
中身はJsonファイルなので一度作成してしまえば使い回し可能かと思います。
構成ファイルを基に設定を反映
ドキュメント AmazonCloudWatch-ManageAgent
を使用します。
- InstanceID での指定例
$ _DOCNAME="AmazonCloudWatch-ManageAgent" $ _INSTANCEs="i-xxxxxxxxxxxx2c23b,i-xxxxxxxxxxxx8632f" # Parameter Store を指定 $ _CONF="agent-config-linux" $ aws ssm send-command \ --document-name "${_DOCNAME}" \ --targets "Key=instanceids,Values=${_INSTANCEs}" \ --parameters "action=configure, mode=ec2, optionalConfigurationSource=ssm, optionalConfigurationLocation=${_CONF}, optionalRestart=yes"
導入結果
CloudWatch への転送
amazon-cloudwatch-agent は CloudWatch エンドポイントへ 443 で転送します。
- 東京リージョン
monitoring.ap-northeast-1.amazonaws.com
カスタムメトリクス CWAgent
として CloudWatch へ登録されます。
metrics_collection_interval
を最短の 1sec で指定しておけば、秒単位でメトリクスを確認できます。
Linux、EC2、Advanced 指定で標準取得できるメトリクスは以下のような感じです。
CloudWatch Logsへの転送
ログ転送(logs_collected)設定を行っていれば CloudWatch Logs に転送されます。
CloudWatch Logs Agent (awslogs) とは別の設定になります。awslogsの方が細かな設定が可能なようです。
- SSM エージェント ログファイルの Amazon CloudWatch Logs への送信 – Amazon EC2 Systems Manager
- CloudWatch Logs エージェントのリファレンス – Amazon CloudWatch ログ