Amazon CloudWatchにカスタムメトリクスをプッシュするにはどうすればよいですか?
簡単な説明
AWS のサービスはデフォルトでデータポイントを CloudWatch にプッシュします。ただし、AWS のサービスでサポートされていないメトリクスに基づいて、リソースのパフォーマンスを調整する必要がある場合があるかもしれません。このような場合、統合 CloudWatch エージェントまたは API を使用して、カスタムメトリクスを CloudWatch にプッシュできます。
重要: カスタムメトリクスは、ストレージと API の使用状況に応じて課金されます。
解決方法
CloudWatch エージェントを使用してカスタムメトリクスをプッシュする
統合 CloudWatch エージェントは、システムレベルのメトリクスを収集し、カスタムメトリクスとして CloudWatch に送信します。エージェントを使用して、次から取得したカスタムメトリクスをプッシュできます。
- Linux サーバーまたは Windows サーバー
- Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたはオンプレミスサーバー
Linux の場合は、サポートされているメトリクスのリストを参照してください。
ディスクメトリクスのエージェント設定ファイルメトリクスブロックの例 (Linux):
"disk":
{
"measurement": [
"used_percent"
],
"resources": [
"*"
],
"drop_device":
true
}
Windows の場合、エージェント設定ファイルの Windows Performance Monitor に記載されている任意のカウンターを参照できます。
Processor Counter のエージェント設定ファイルメトリクスブロックの例 (Windows):
"Processor": {
"measurement": [
{"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"},
"% Interrupt Time",
"% User Time",
"% Processor Time"
],
"resources": [
"*"
],
"append_dimensions": {
"d1": "win_foo",
"d2": "win_bar"
}
}
また、「StatsD」および「collectd」プロトコルを使用して、アプリケーションやサービスからカスタムメトリクスを取得することもできます。次に、メトリクスがエージェントを介してプッシュされます。StatsD は Linux サーバーと Windows サーバーの両方でサポートされていますが、collectd は Linux サーバーでのみサポートされています。これらのプロトコルを使用するには、次の手順を実行します。
1. CloudWatch 統合エージェントをインストールします。
2. CloudWatch の許可を持つインスタンスにロールまたは認証情報を割り当てます。
3. CloudWatch エージェント設定ファイルを作成します。
4. エージェントを起動します。
PutMetricData を使用してカスタムメトリクスをプッシュする
ユースケースで CloudWatch 統合エージェントの使用がサポートされていない場合は、PutMetricData API を使用して CloudWatch にカスタムメトリクスをプッシュできます。
例えば、特定のポートの接続をカスタムメトリクスとしてプッシュするには、値をローカルに取得して API で転送できます。
total_conn=$(netstat -an | grep <port> | wc -l)
aws cloudwatch put-metric-data --namespace "totalconn" --metric-name <port> --dimensions Instance=<InstanceId> --value $ total_conn
同様に、AWS SDK を使用して PutMetricData API を使用し、カスタムメトリクスを CloudWatch に送信できます。カスタムメトリクスを送信するために定期的に実行されるローカルスクリプトを作成します。API は、以下の理由から、さまざまなメトリクスと複数の値をプッシュするのに最適です。
- 1 つの API で最大 1000 のさまざまなメトリクスを使用できます。
- 値およびカウント数メソッドを使用すると、1 つの PutMetricData リクエストで、メトリクスごとに最大 150 の値を公開できます。
- メトリクスごとに最大 30 個のディメンションを使用できます。
- 各 PutMetricData リクエストは、HTTP POST リクエストに対して 1 MB に制限されます。
例えば、メトリクスごとに個別の API コールを行う代わりに、1 つの API 呼び出しを使用して複数のメトリクスをプッシュできます。
aws cloudwatch put-metric-data --namespace "Usage Metrics" --metric-data file://metric.json
metric.json の場所:
[
{
"MetricName": "DiskMetric",
"Value": <value_derived_by_some_calculation>,
"Unit": "Count"
},
{
"MetricName": "MemoryMetric",
"Value": <value_derived_by_some_calculation>,
"Unit": "Count"
}
]
このアプローチでは、API とストレージの数に基づいてカスタムメトリクスが課金されるため、通常はコストを削減できます。このアプローチは、PutMetricData API のスロットリングを減らすのにも役立ちます。