AWS CLIを使用して、CloudWatchのメトリクスを発行してみる
クラウド環境でシステム開発を行う際、仮想マシンなどから標準で出力されるメトリクス以外に、各種ミドルウェアやアプリケーションのメトリクスをCloudWatchに蓄積させたいケースがあると思います。
そういったケースに対応するために、今回はCloudWatchのAWS CLIのコマンドを利用して、カスタムメトリクスを発行してみようと思います。
目次
はじめに
こんにちは。
クラウドソリューション第二グループのimai.kです。
この記事は アイソルート Advent Calendar 2023 の 10日目の記事です。
前述の通り、Amazon CloudWatchにメトリクス発行を行います。発行の方法としては、以下2パターンを試してみます。
- AWS CLIを利用して、単一のメトリクスを発行する
- AWS CLIを利用して、複数のメトリクスを発行する
では、やっていきます。
AWS CLIを利用して、単一のメトリクスを発行する
AWS CLIを利用したメトリクス発行は、AWS CLI CloudWatch コマンド の put-metric-data コマンドを利用して行います。
※公式のコマンドリファレンスはこちらになります。詳細なオプションなどはリンク先をご確認ください。
それでは、早速メトリクスを発行してみます。
単一のメトリクスを発行するために最低限必要なオプションとして「ネームスペース( –namespace )」「メトリクス名( –metric-name )」「メトリクスの値( –value )」の3つを指定してみます。
今回は、簡単にメトリクス発行を行うためにAWS Cloudshellからコマンドを実行していきます。
サンプルとして、ネームスペースには「CustomMetrics」 メトリクス名には「ServerConnectionCount」という名称を設定してみます。
$ aws cloudwatch put-metric-data --namespace CustomMetrics --metric-name ServerConnectionCount --value 1
CloudShell上で実行するとこんな感じです。
上記では最低限のオプションだけを設定していますが、「タイムスタンプ( --timestamp )」「単位( --unit )」「高解像度のメトリクスかどうか( --storage-resolution )」あたりには気をつける必要があります。
まず、タイムスタンプを設定しない場合、AWS側にメトリクス発行が届いた時間がタイムスタンプになります。(左記について、リファレンス上、以下のように説明されています。)
If not specified, the default value is set to the time the metric data was received.
単位を設定しない場合、そのメトリクスは「単位なし」のメトリクスになります。また、設定可能な単位は以下となります。
Seconds | Microseconds | Milliseconds | Bytes | Kilobytes | Megabytes | Gigabytes | Terabytes | Bits | Kilobits | Megabits | Gigabits | Terabits | Percent | Count | Bytes/Second | Kilobytes/Second | Megabytes/Second | Gigabytes/Second | Terabytes/Second | Bits/Second | Kilobits/Second | Megabits/Second | Gigabits/Second | Terabits/Second | Count/Second | None
例えば、 "Count/Second" を設定する場合は以下のようなコマンド形式になります。
$ aws cloudwatch put-metric-data --namespace CustomMetrics --metric-name ServerConnectionCount --value 1 --unit Count/Second
最後に「--storage-resolution」には、1もしくは60の値を設定します。設定しない場合は、デフォルトで60となります。また、1が設定されている場合、高解像度のメトリクスとして扱われます。
高解像度のメトリクスについては、こちらの公式ドキュメントを参照ください。
AWS CLIを利用して、複数のメトリクスを発行する
上記では単一のメトリクス発行を試しましたが、次に複数のメトリクス発行を行ってみます。
複数のメトリクス発行を一度のコマンド実行で行うには、「--metric-data」オプションにJSON形式のメトリクスデータを渡すことで実現可能です。
ただし、複数のメトリクス発行を行う場合は単一の「ネームスペース( --namespace )」しか指定できない点、ご注意ください。
では、実際にサンプルのコマンドを実行してみます。
$ aws cloudwatch put-metric-data --namespace CustomMetrics --metric-data '[{"MetricName": "ServerConnectionCount", "Value": 1},{"MetricName": "TransactionCount", "Value": 20, "Unit":"Count/Second"}]'
CloudShell上で実行するとこんな感じです。
先ほどの例では、コマンド上でJSON形式のデータを表現しましたが、JSONファイルを読み込むことも可能です。
先ほどの例を踏襲して、以下のようなJSONファイルを用意し、
[
{
"MetricName": "ServerConnectionCount",
"Value": 1
},
{
"MetricName": "TransactionCount",
"Value": 20,
"Unit": "Count/Second"
}
]
以下のようにコマンドを実行することで、同等のメトリクス発行が可能です。
$ aws cloudwatch put-metric-data --namespace CustomMetrics --metric-data file://./metrics.json
さいごに
以上、AWS CLIを使用してCloudWatchのメトリクスを発行してみました。
今回は最低限のオプションのみを利用しましたが、実際のワークロードは --dimensions や --statistic-values などを活用する必要があると思います。
また、個人的な感想ですが、メトリクスを自分自身で発行してみるとCloudWatchのコンソールを見ているだけでは分かりずらい部分がクリアになりました。
以上です。