CloudWatchでEC2のメトリクスをcwreport.pyを利用して集計し出力してみる

この記事を書いたメンバー:

SAITO Keita

CloudWatchでEC2のメトリクスをcwreport.pyを利用して集計し出力してみる

目次

はじめに

Amazon CloudWatch メトリックスを CSV ファイルに発行する

AWS 規範的ガイダンスに対応しているサービスに制限はありますがCloudWatchのメトリクスを集計してcsvファイルへ出力するPythonスクリプト(cwreport.py)が紹介されています。

本記事ではこちらのスクリプトをインストールしてレポートを取得し、どのようなレポートになっているか確認していきます。

今回試している環境

  • Windows 11 24H2
  • PowerShell  7.5.0
  • Python 3.13
  • aws-cli v 2.27.7

必要条件

  • Python 3.x
  • AWS コマンドラインインターフェイス (AWS CLI)

制限事項について

2024年11月現在、下記の制限が記載されています。

  • AWS Lambda
  • Amazon Elastic Compute Cloud (Amazon EC2)
    • デフォルトでは、スクリプトは Amazon Elastic Block Store (Amazon EBS) ボリュームメトリクスを収集しません。Amazon EBSメトリクスを収集するには、添付ファイルを変更する必要がありますmetrics.yaml
  • Amazon Relational Database Service (Amazon RDS)
  • ただし、このスクリプトは Amazon Aurora をサポートしていません。
  • Application Load Balancer
  • Network Load Balancer
  • Amazon API Gateway


インストール

スクリプトのダウンロード

添付ファイル

ページ下部にスクリプトファイルが添付ファイル(attachment.zip)として置いてあるので、こちらをダウンロードし解凍して任意の場所に配置します。

本記事ではc:\beex\cwreport\ といったディレクトリ作成して、そこに配置しています。

前提条件のインストール

エピック


手順では上記画像のように前提条件のインストールをしていますが、本環境ではpythonやpipにPATHを通しておらず、py.exeから利用しているのと、仮想環境を作ってインストールしたかったので下記のように読み替えてインストールしています。

# 仮想環境作成
py -m venv .venv_cwreport
# 仮想環境をアクティベート
.\.venv_cwreport\Scripts\activate
# 前提条件のインストール
pip3 install -r requirements.txt











2024年11月現在、こんな感じで前提条件がインストールされています。











資格情報を設定する

エピック

ドキュメントではaws configureでデフォルトプロファイルに資格情報を設定していますが、適宜、cwreportで情報を取得するAWSアカウントへアクセスする資格情報を設定してください。

Pythonスクリプトの設定を行う

metrics.yamlで取得するメトリクスを取得する間隔、時間、統計値を設定できるようです。

ここではデフォルト値がどうなっているか確認してみます。

metrics.yamlを開くと上の方にコメントで説明があり。

また設定はそれぞれ下記となっている事がわかります。

  • period  300秒
  • hour 24時間
  • statistics: "Average"



今回はデフォルト値のままで変更しないでおきます

Pythonスクリプトを実行する

対象サービスec2で東京リージョン(ap-northeast-1)を指定実行してみます。

python cwreport.py ec2 --region ap-northeast-1

実行した所、ec2.csvが出力されました




出力されたcsvを確認してみる

EC2が3台起動している起動しておりメトリクスが取得できる状態のアカウントに対して取得した結果としては下記画像のようになっていました。(NameとInstance項目についてはxxxで塗りつぶし)




取得する項目としては

  • Name: インスタンスの名前。
  • Instance: インスタンスID。
  • Type: インスタンスタイプ。
  • Hypervisor: 使用されているハイパーバイザー。
  • Virtualization Type: 仮想化タイプ。
  • Architecture: CPUアーキテクチャ。
  • EBS Optimized: EBS最適化が有効かどうか。
  • CPUUtilization (Percent): CPU使用率(パーセンテージ)。
  • DiskReadOps (Count): ディスク読み取り操作の回数。
  • DiskWriteOps (Count): ディスク書き込み操作の回数。
  • DiskReadBytes (Bytes): 読み取られたデータのバイト数。
  • DiskWriteBytes (Bytes): 書き込まれたデータのバイト数。
  • NetworkIn (Bytes): 受信したネットワークデータのバイト数。
  • NetworkOut (Bytes): 送信したネットワークデータのバイト数。
  • NetworkPacketsIn (Count): 受信したネットワークパケットの数。
  • NetworkPacketsOut (Count): 送信したネットワークパケットの数。

となっており、EC2インスタンス1台につき、yaml設定ファイルで指定したperiod 、hour、statisticsで取得した情報を1行に集計して出力するようです。


本スクリプトでec2サービスにて取得できるスクリプトについては、スクリプト実行時点を起点として指定したperiodとhourtでメトリクスを取得してインスタンス毎に一行に集計するため。

何か問題が発生した際に、直近のCPU使用率はディスクの傾向がどうだったのかをまとめて確認したいといった用途では便利かと思います。

あとは定期的にスクリプトを実行して情報をためておくなどの使い方もありかもしれません。

総評

最初はスクリプトを実行すると、CloudWatachのマネジメントコンソール上で取得できるような形でcsvを出力してくるツールなのかな? と思いましたが、そんな事はなく、EC2サービスの場合はインスタンスに着目して集計してレポーティングするスクリプトとなっていました。


カテゴリー
タグ

この記事を書いたメンバー

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)