Cloudwatchで EC2 の 帯域情報を確認したい

やりたい事
Cloudwatch 上で EC2上サーバーに負荷かけ、どの程度の帯域が発生しているか統計情報を出力するための方法を調べました。 Cloudwatch の agentを利用することで ethtool のカスタムメトリックスを表示することが出来ます。
Agentのインストール
CloudWatch Agentのインストール
CloudWatchをインストールしていない場合、下記をインストールします。
sudo yum install amazon-cloudwatch-agent
Amazon Linux2を利用しており下記でウィザードを実行しテンプレートを作成する下記でウィザードを実行しテンプレートを作成できます。詳細まで設定可能ですが、今回は記載の項目以外はデフォルトで回答しました。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
※ 変更した回答
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
wizardで作成したJSONファイルは下記に出力されます /opt/aws/amazon-cloudwatch-agent/bin/config.json `bw_in_allowance_exceeded` 等を追加したいので、collectd に ethtool のカスタムメトリックスを追加する
"ethtool":
{
"interface_include":
[
"eth0"
],
"metrics_include":
[
"rx_packets",
"tx_packets",
"bw_in_allowance_exceeded",
"bw_out_allowance_exceeded",
"conntrack_allowance_exceeded",
"linklocal_allowance_exceeded",
"pps_allowance_exceeded"
]
}
最終的な JSONファイルは下記になります。この内容を /opt/aws/amazon-cloudwatch-agent/bin/config.json に反映します。
{
"agent":
{
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics":
{
"aggregation_dimensions":
[
[
"InstanceId"
]
],
"append_dimensions":
{
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected":
{
"collectd":
{
"metrics_aggregation_interval": 60
},
"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": 10,
"service_address": ":8125"
},
"ethtool":
{
"interface_include":
[
"eth0"
],
"metrics_include":
[
"rx_packets",
"tx_packets",
"bw_in_allowance_exceeded",
"bw_out_allowance_exceeded",
"conntrack_allowance_exceeded",
"linklocal_allowance_exceeded",
"pps_allowance_exceeded"
]
}
}
}
}
scpを利用する場合は下記で実行可能です。
scp ./config.json <Copy先Host>:/opt/aws/amazon-cloudwatch-agent/bin/config.json
IAMロール設定
EC2のIAMロールに必要な下記 Policy をアタッチします。 * CloudWatchAgentServerPolicy
Agentの実行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
カスタムメトリックスの動作確認
実際に動作するか負荷をかけてみます。iperfコマンドを利用するのが簡単です。
iperfのインストール
yum -y install iperf
サーバー側
sudo iperf -s -p 30000
クライアント側
iperf -c <サーバーIP> -p 30000 --parallel 40 -i 1 -t 2
参考
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html
https://cloudedponderings.medium.com/enhanced-performance-monitoring-on-ec2-instances-64670be6930b
https://qiita.com/Brutus/items/b07df93ebfa4a56f6bd8