CloudWatch エージェントを利用して、ネットワークパフォーマンスメトリクスを取得してみた 【Linux 編】
はじめに
テクニカルサポートの 片方 です。
今回は、Linux OS 上で実行され、Elastic Network Adapter (ENA) を使用する EC2 インスタンスのネットワークパフォーマンスメトリクスを取得してみました。収集可能なメトリクスについては、以下ドキュメントをご確認ください。
なお、ドキュメント記載の通り古い CloudWatch エージェント Ver をご利用の場合は未対応なので注意してください。
やってみた
今回は Amazon Linux 2023 を利用します。CloudWatchAgentServerPolicy をアタッチしたロールで起動しました。
お好みの方法で SSH 接続します。
利用可能なネットワークインターフェースを確認します。ens5 として確認できましたので、こちらを取得対象にします。
※ ip a コマンドとその出力例
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 0a:c5:7b:d2:49:fd brd ff:ff:ff:ff:ff:ff
altname enp0s5
altname eni-0e5c42eed6d349837
altname device-number-0.0
inet 10.0.22.9/20 metric 512 brd 10.0.31.255 scope global dynamic ens5
valid_lft 2940sec preferred_lft 2940sec
inet6 fe80::8c5:7bff:fed2:49fd/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
ENAドライバーが正しくインストールされているか確認します。
※ modinfo ena コマンドとその出力例
$ modinfo ena
filename: /lib/modules/6.1.129-138.220.amzn2023.x86_64/kernel/drivers/amazon/net/ena/ena.ko
version: 2.13.2g
license: GPL
description: Elastic Network Adapter (ENA)
author: Amazon.com, Inc. or its affiliates
(略)
CloudWatch エージェントをインストールします。
$ sudo yum install amazon-cloudwatch-agent -y
CloudWatch エージェント設定ファイルの作成と編集します。
$ sudo vim /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}",
"tag:Name": "${aws:tag:Name}"
},
"metrics_collected": {
"ethtool": {
"interface_include": [
"ens5" ← メトリクスを収集するネットワークインターフェイス名を記載
],
"metrics_include": [
"bw_in_allowance_exceeded",
"bw_out_allowance_exceeded",
"conntrack_allowance_exceeded",
"linklocal_allowance_exceeded",
"pps_allowance_exceeded",
"ena_srd_mode",
"ena_srd_tx_pkts",
"ena_srd_rx_pkts",
"ena_srd_resource_utilization"
]
}
}
}
}
※ 適宜修正し、:wq コマンドで保存終了してください。
設定ファイルを適用して CloudWatch エージェントを起動します。
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
エージェントのステータスを確認します。Active: active (running) と出力されていれば OK です。
$ sudo systemctl status amazon-cloudwatch-agent
実装は終了です。お疲れ様でした!
EC2 インスタンス起動時、ユーザーデータで実施する場合は以下をご参考ください。
※ 適宜修正してください
#!/bin/bash
# システムの更新
yum update -y
# CloudWatchエージェントのインストール
yum install -y amazon-cloudwatch-agent
# CloudWatchエージェント設定ファイルの作成
cat << 'EOF' > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
"metrics": {
"append_dimensions": {
"InstanceId": "${aws:InstanceId}",
"tag:Name": "${aws:tag:Name}"
},
"metrics_collected": {
"ethtool": {
"interface_include": [
"ens5"
],
"metrics_include": [
"bw_in_allowance_exceeded",
"bw_out_allowance_exceeded",
"conntrack_allowance_exceeded",
"linklocal_allowance_exceeded",
"pps_allowance_exceeded",
"ena_srd_mode",
"ena_srd_tx_pkts",
"ena_srd_rx_pkts",
"ena_srd_resource_utilization"
]
}
}
}
}
EOF
# CloudWatchエージェントの起動と有効化
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
systemctl enable amazon-cloudwatch-agent
systemctl start amazon-cloudwatch-agent
# ログファイルの作成(トラブルシューティング用)
touch /var/log/cloudwatch-agent-setup.log
# セットアップ完了ログの記録
echo "CloudWatch Agent setup completed at $(date)" >> /var/log/cloudwatch-agent-setup.log
# セットアップ状態の確認とログ記録
systemctl status amazon-cloudwatch-agent >> /var/log/cloudwatch-agent-setup.log
確認してみた
CloudWatch のマネジメントコンソール画面へ行き、メトリクスセクションで 「CWAgent」 名前空間を選択します。
ありました、成功です!
まとめ
本ブログが誰かの参考になれば幸いです。
参考資料
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。