LoginSignup
0
0

More than 3 years have passed since last update.

Cloudwatch Agentによるカスタムメトリックの取得方法

Last updated at Posted at 2020-05-03

目的

プライベートサブネットに存在するEC2インスタンスから、Cloudwatch Agent(以下、CW Agentとします。)経由でカスタムメトリックを取得する方法を解説します。

何が取れるのか?

こちらを参照するとわかる通り、Cloudwatchで取得できるメトリックは3種類(Basic、Standard、Advanced)存在します。もっとも、多くのメトリックが取得できるのはAdvancedです。Advancedで取得可能なメトリックの種類について、以下に載せます。

確認可能な闘鶏項目(Advancedの場合)
CPU: cpu_usage_guest、cpu_usage_idle、cpu_usage_iowait、 cpu_usage_steal、cpu_usage_user、cpu_usage_system
Disk: disk_used_percent、disk_inodes_free
Diskio: diskio_io_time、diskio_write_bytes、diskio_read_bytes、diskio_writes、diskio_reads
Mem: mem_used_percent
Net: net_bytes_sent、net_bytes_recv、net_packets_sent、net_packets_recv
Netstat: netstat_tcp_established、netstat_tcp_time_wait
Swap: swap_used_percent

手順

以下の手順でCW Agentを設定します。

  1. IAMロールの作成(for EC2 Instance)
  2. SSM Agentインストール
  3. VPCエンドポイントの作成(for Private Subnet)
  4. CW Agentのインストール(via SSM)
  5. CW Agentの設定ファイル作成(using インストールウィザード)
  6. CW Agebntの実行(via SSM)
  7. CloudWatchからカスタムメトリックを取得

1. IAMロールの作成(for EC2 Instance)

  • Cloudwatch Agentをインストールする前にIAMロールをEC2インスタンスに設定する必要あり。
  • CW Agentが使用できるように、CloudWatchAgentServerPolicyか、loudWatchAgentAdminPolicy。
    • CloudWatchAgentAdminPolicyは、パラメータストアの書き込み許可を有しているもので通常は使用しない
    • 一般的な監視をする限りはCloudWatchAgentServerPolicyを利用するだけで十分。
  • SSMで触れるように、AmazonSSMManagedInstanceCore
  • IAMロールの設定方法は以下を参照する。
  • https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html

2. SSM Agentインストール

SSM Agentをインストールする事で、SSM経由で設定CWAgentをインストール&設定する事ができる(SSM使った方が運用効率がいい)。

SSMAgentのインストール
sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
SSMAgentのステータス確認
sudo status amazon-ssm-agent

3. VPCエンドポイントの作成(for Private Subnet)

  • こちらを参照して、プライベートサブネット内のEC2インスタンス(CW Agent)からアクセスできるようにVPCエンドポイントを作成
  • EC2インスタンスと同一のセキュリティグループ&サブネットに所属させるように設定させる

4. CW Agentのインストール(via SSM)

SSMのRun Command を使用して CloudWatch をダウンロードするには、こちらを参照して、設定します。

CloudWatchAgentのインストール方法
1. Open the Systems Manager console at https://console.aws.amazon.com/systems-manager/.
2. [Run command] を選択します。
3. [Command document] リストで、[AWS-ConfigureAWSPackage] を選択します。
4. [ターゲット] 領域で、CloudWatch エージェントをインストールするインスタンスを選択します。特定のインスタンスが表示されない場合、Run Command 用に設定されていない可能性があります。詳細については、AWS Systems Manager ユーザーガイドの「ハイブリッド環境での AWS Systems Manager セットアップ」を参照してください。
5. [アクション] リストで、[インストール] を選択します。
6. [名前] ボックスに、「AmazonCloudWatchAgent」と入力します。
7. エージェントの最新バージョンをインストールには、[Version (バージョン)][latest (最新)] に設定したままにします。
8. [Run] を選択します。
9. 必要に応じて、[ターゲットと出力] 領域で、インスタンス名の横のボタンを選択して [View output (出力の表示)] を選択します。Systems Manager に、エージェントが正常にインストールされたことが表示されます。
cloudwatch実行状態の確認
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

5. CW Agentの設定ファイル作成(using インストールウィザード)

  • インストールウィザード経由でCW Agentの設定ファイル(json)を作成
  • Jsonファイルはパラメータストアとして配置する事で、のちにSSMから設定ファイルとして選択する事が可能。
  • この設定ファイル内でBasic,Standard,Advancedを選択する(ログの粒度を決める)
  • パラメータストアに書き込むためには、EC2インスタンスにAWS認証情報を設定する必要あり
cloudwatchAgent設定ウィザードの実行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= 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]:
1
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]:
1
Which user are you planning to run the agent?
1. root
2. cwagent
3. others
default choice: [1]:
1
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
1
Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:
3
What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
4
Do you want to monitor metrics from CollectD?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:
1
Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:
1
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
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]:
4
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
1
Current config as follows:
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "metrics": {
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 60,
                                "service_address": ":8125"
                        }
                }
        }
}
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]:
1
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]:
2
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
1
Log file path:
/var/log/messages
Log group name:
default choice: [messages]

Log stream name:
default choice: [{instance_id}]

Do you want to specify any additional log files to monitor?
1. yes
2. no
default choice: [1]:
2
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
Current config as follows:
{
        "agent": {
                "metrics_collection_interval": 60,
                "run_as_user": "root"
        },
        "logs": {
                "logs_collected": {
                        "files": {
                                "collect_list": [
                                        {
                                                "file_path": "/var/log/messages",
                                                "log_group_name": "messages",
                                                "log_stream_name": "{instance_id}"
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "append_dimensions": {
                        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
                        "ImageId": "${aws:ImageId}",
                        "InstanceId": "${aws:InstanceId}",
                        "InstanceType": "${aws:InstanceType}"
                },
                "metrics_collected": {
                        "disk": {
                                "measurement": [
                                        "used_percent"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "mem": {
                                "measurement": [
                                        "mem_used_percent"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 60,
                                "service_address": ":8125"
                        }
                }
        }
}
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]:
1
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]
TestAgent2
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: [ap-northeast-2]

Which AWS credential should be used to send json config to parameter store?
1. *****************(From SDK)
2. Other
default choice: [1]:
1
Successfully put config to parameter store TestAgent2.
Program exits now.

6. CW Agebntの実行(via SSM)

SSMのRun Command を使用して CloudWatch を開始するには、こちらを参照して、設定します。

CloudwatchをSSM経由で実行する方法
1. Open the Systems Manager console at https://console.aws.amazon.com/systems-manager/.
2. [Run command] を選択します。
3. [Command document] リストで、[AmazonCloudWatch-ManageAgent] を選択します。
4. [ターゲット] 領域で、CloudWatch エージェントをインストールしたインスタンスを選択します。
5. [Action] リストで、[configure] を選択します。
6. [Optional Configuration Source] リストで、[ssm] を選択します。「CloudWatch エージェント設定ファイルを作成する」で説明されているとおり、[Optional Configuration Location (オプションの設定場所)] ボックスに、作成して Systems Manager Parameter Store に保存したエージェント設定ファイルの名前を入力します。
7. これらのステップを完了した後、[Optional Restart] リストで、[yes] を選択してエージェントを開始します。
8. [Run] を選択します。
9. 必要に応じて、[ターゲットと出力] 領域で、インスタンス名の横のボタンを選択して [View output (出力の表示)] を選択します。Systems Manager に、エージェントが正常に開始されたことが表示されます。
cloudwatchAgentの起動確認
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "running",
  "starttime": "2020-05-03T06:35:02+0000",
  "version": "1.237768.0"
}

7. CloudWatchからカスタムメトリックを取得

Cloudwatch AgentからCloudWatchへのメトリック送信にはEC2インスタンスにIAMロール付与をお願いする必要がある。

8. CloudWatchからカスタムメトリックを取得

取得成功すると、設定ファイルのカスタムメトリクス上に表示されたら、無事取得できた事が確認できます。

スクリーンショット 2020-05-03 18.08.15.png

以上

0
0
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
0
0