CloudWatch エージェントを利用して、ネットワークパフォーマンスメトリクスを取得してみた 【Linux 編】

CloudWatch エージェントを利用して、ネットワークパフォーマンスメトリクスを取得してみた 【Linux 編】

Clock Icon2025.03.18

はじめに

テクニカルサポートの 片方 です。
今回は、Linux OS 上で実行され、Elastic Network Adapter (ENA) を使用する EC2 インスタンスのネットワークパフォーマンスメトリクスを取得してみました。収集可能なメトリクスについては、以下ドキュメントをご確認ください。
なお、ドキュメント記載の通り古い CloudWatch エージェント Ver をご利用の場合は未対応なので注意してください。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-network-performance.html

やってみた

今回は 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」 名前空間を選択します。
ありました、成功です!

001

002

まとめ

本ブログが誰かの参考になれば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.