EC2にSystems MangerからCloudWatchエージェントをインストール
目次
CloudWatchエージェント
EC2の標準メトリクスでは収集できないメモリの情報などをカスタムメトリクスとして収集し、アプリケーションログをCloudWatch Logsへの収集をまとめて行ってくれるCloudWatchエージェントをインストールしました。
CloudWatch エージェントにより収集されるメトリクス
IAMロールの作成
EC2がCloudWatchにメトリクスやログを書き込めるようにすることももちろんですが、SSMからインストールするのでSSMに対しての権限も必要です。
公式の手順Amazon EC2 Linux インスタンスに SSM エージェント を手動でインストールするにそって進めてみます。
IAMロールを新規作成して、AmazonEC2RoleforSSMポリシーをアタッチしました。
AmazonEC2RoleforSSMポリシー
AmazonEC2RoleforSSMポリシーを見てみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssm:DescribeAssociation", "ssm:GetDeployablePatchSnapshotForInstance", "ssm:GetDocument", "ssm:GetManifest", "ssm:GetParameters", "ssm:ListAssociations", "ssm:ListInstanceAssociations", "ssm:PutInventory", "ssm:PutComplianceItems", "ssm:PutConfigurePackageResult", "ssm:UpdateAssociationStatus", "ssm:UpdateInstanceAssociationStatus", "ssm:UpdateInstanceInformation" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2messages:AcknowledgeMessage", "ec2messages:DeleteMessage", "ec2messages:FailMessage", "ec2messages:GetEndpoint", "ec2messages:GetMessages", "ec2messages:SendReply" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstanceStatus" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ds:CreateComputer", "ds:DescribeDirectories" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetEncryptionConfiguration", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Resource": "*" } ] } |
SSM、CloudWatchLogs、メトリクス、だけでなく、S3に対しての権限も有効になっています。
EC2にSSMエージェントをインストール
1 2 3 4 |
$ mkdir /tmp/ssm $ cd /tmp/ssm $ sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm |
インストールが終わってamazon-ssm-agentのステータスを見てみるとすでに起動しています。
自動起動も出来ているらしい。
1 2 3 4 5 6 7 8 |
$ sudo systemctl status amazon-ssm-agent ● amazon-ssm-agent.service - amazon-ssm-agent Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2018-08-21 02:24:19 UTC; 11s ago Main PID: 3585 (amazon-ssm-agen) CGroup: /system.slice/amazon-ssm-agent.service mq3585 /usr/bin/amazon-ssm-agent |
CloudWatchAgentのインストール
EC2用に作成したIAMロールにCloudWatchAgentAdminPolicyをアタッチします。
CloudWatchAgentAdminPolicy
CloudWatchAgentAdminPolicyポリシーを見てみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ec2:DescribeTags", "logs:PutLogEvents", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:GetParameter", "ssm:PutParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/AmazonCloudWatch-*" } ] } |
AmazonEC2RoleforSSMポリシーと内容がかぶってるステートメントもあります。
ですが、”ec2:DescribeTags”と”ssm:GetParameter” , “ssm:PutParameter”はない(GetPrametersはある)のでアタッチします。
必要なものだけインラインポリシーにするのも一つの方法ですが、ポリシーがまるごといらないときにデタッチしやすいのでCloudWatchAgentAdminPolicyポリシーを使います。
CloudWatchエージェントのインストール
Systems Manager Servicesの[コマンドの実行]からコマンドを実行します。
AWS-ConfigureAWSPackageを選択します。
- 対象のEC2インスタンスを選択
- Action: insatll
- Name: AmazonCludWatchAgent
- Version: latest
にしました。
成功しました。
CloudWatchエージェントの設定
EC2にSSHでログインして設定します。
amazon-cloudwatch-agent-config-wizardを実行しました。
1 2 |
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard |
1 2 3 4 5 6 7 8 |
============================================================= = Welcome to the AWS CloudWatch Agent Configuration Manager = ============================================================= On which OS are you planning to use the agent? 1. linux 2. windows default choice: [1]: |
Amazon Linux 2 なのでlinuxを選択しました。
1 2 3 4 5 6 |
Trying to fetch the default region based on ec2 metadata... Are you using EC2 or On-Premises hosts? 1. EC2 2. On-Premises default choice: [1]: |
EC2を選択しました。
1 2 3 4 5 |
Do you want to monitor any host metrics? e.g. CPU, memory, etc. 1. yes 2. no default choice: [1]: |
メトリクスの収集をします。
1 2 3 4 5 |
Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply. 1. yes 2. no default choice: [1]: |
CPUメトリクスも追加します。
1 2 3 4 5 |
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available? 1. yes 2. no default choice: [1]: |
追加可能な情報をメトリクスに追加します。
1 2 3 4 5 6 7 8 |
Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file. 1. 1s 2. 10s 3. 30s 4. 60s default choice: [4]: 2 |
収集間隔を10秒ごとにしました。
1 2 3 4 5 6 7 8 |
Which default metrics config do you want? 1. Basic 2. Standard 3. Advanced 4. None default choice: [1]: 3 |
より多くの情報を収集してみたかったのでタイプはアドバンスドにしました。
1 2 3 4 5 |
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items. 1. yes 2. no default choice: [1]: |
設定ファイルの内容が表示されたので、yesを選択しました。
1 2 3 4 5 |
Do you have any existing CloudWatch Log Agent (http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html) configuration file to import for migration? 1. yes 2. no default choice: [2]: |
すでにインストールしているCloudWatxh Logsエージェントがあるか聞かれたので、noを選択しました。
既存のCloudWatxh Logsエージェントがある場合はここでyesを選択することで設定をインポート出来るようです。
1 2 3 4 5 |
Do you want to monitor any log files? 1. yes 2. no default choice: [1]: |
ログ収集するかを聞かれるのでyesを選択しました。
1 2 3 4 5 6 7 8 9 10 |
Log file path: /var/log/amazon/efs/mount.log Log group name: default choice: [mount.log] Do you want to specify any additional log files to monitor? 1. yes 2. no default choice: [1]: |
ここから先は1ファイルづつ対象を設定していきます。
1 2 3 4 5 6 7 8 |
Please check the above content of the config. The config file is also located at /opt/aws/amazon-cloudwatch-agent/bin/config.json. Edit it manually if needed. Do you want to store the config in the SSM parameter store? 1. yes 2. no default choice: [1]: |
ログ設定の内容が表示されましたので、yesを選択しました。
1 2 3 |
What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy) default choice: [AmazonCloudWatch-linux] |
SSM パラメータストアに登録する名前は、デフォルトのAmazonCloudWatch-linuxにしました。
1 2 3 4 |
Trying to fetch the default region based on ec2 metadata... Which region do you want to store the config in the parameter store? default choice: [us-east-1] |
リージョンを選択します。
今回はバージニア北部です。
1 2 3 4 5 6 7 8 9 10 11 |
Which AWS credential should be used to send json config to parameter store? 1. xxxxxxxxxxxxxxxx(From SDK) 2. Other default choice: [1]: Please make sure the creds you used have the right permissions configured for SSM access. Which AWS credential should be used to send json config to parameter store? 1. xxxxxxxxxxxxxxxx(From SDK) 2. Other default choice: [1]: |
SSMパラメータストアに設定を書き込む認証をどれにするかを聞かれます。
IAMロールを設定することによって、EC2に設定されているアクセスキーを使用します。
1 2 3 |
Successfully put config to parameter store AmazonCloudWatch-linux. Program exits now. |
成功しました。
ちなみに前述のポリシーでPutParameterがないと、「Error in putting config to parameter store AmazonCloudWatch-linux: AccessDeniedException: 」になります。
CloudWatch Logsエージェントの起動
Systems Managerのコマンド実行から起動します。
amazonCloudWatch-ManageAgentを選択します。
- 対象のインスタンスを選択
- Action: Configure
- Mode: ec2
- Option Configuration Source: ssm
- Option Configuration Location: AmazonCloudWatch-linux(パラメータストアに登録した名前)
- Optional Restart: yes
で実行しました。
結果は成功しました。
結果を確認
このあと、対象のEC2からAMIを作成して起動設定を作成して、AutoScalingで起動してます。
カスタムメトリクスにCWAgentがあります。
ちゃんととれてます。
ログもちゃんととれてます。
一つのAgentでカスタムメトリクスもログも収集できるので便利でした。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
AWS CloudWatch LogsエージェントでAmazon EC2上のNginxのaccess.log , error.log , php-fpm error.log , Linuxのmessages , secureログを収集する
参考ページ クイックスタート: 実行中の EC2 インスタンスに CloudWa …
-
EC2インスタンスを必要最小限のパラメータでCLIとSDKから起動する
EC2インスタンスをCLIとSDKから起動するデモで、パラメータを必要最小限にし …
-
Active Directory認証でAWSマネジメントコンソールにSSO
こちらの2つのサイトを参考にすすめました。 Active Directory資産 …
-
Lucidchart AWSアカウントからインポート機能で自動作図
SNSでLucidchartというサービスが話題になってました。 AWSの環境を …
-
Amazon Linux にnodejsとmongoDBをインストールする
EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …
-
AWS Database Migration Service(DMS)チュートリアル
公式ユーザーガイドのAWS Database Migration Service …
-
VyOSにSSMエージェントをインストールしました
VyOSにSSHでログインするのも面倒なので、SSMエージェントをインストールし …
-
Amazon Location Service入門ワークショップの前提環境準備
Amazon Location Service入門ワークショップの前提環境を構築 …
-
Developers Summit 2018 「AWSのフルマネージドな環境でCI/CDをやってみよう!AWS Cloud9からAWS Fargateへの継続的デプロイをご紹介」を聞きました
※写真は展示のAmazon Echoです。 以下は、思ったことや気になったことを …
-
Amazon InspectorによるLambda関数の脆弱性検出結果を確認しました
AWS re:Invent 2022期間内に発表されましたAmazon Insp …