ホーム 導入事例 サービス一覧 プロダクト一覧 会社概要 ブログ
お問い合わせ プロダクト特設サイト ↗

Communications for the next AGE — 株式会社ageet

やりたい事

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

参考

最終更新:

← ブログ一覧へ戻る