【活用事例】『AWS のリソース使用状況レポートを自動生成しインスタンスタイプの最適化を図る』

 ~A-AUTO 50とCloudWatch Command Line Tools、Embulk
を連携させた自動化~

背景

EC2の基本的な課金体系は、インスタンスの稼働時間とインスタンスタイプによって決まります。
そのため、適切なインスタンスタイプを選択することが、課金コストの最適化に繋がると言えます。

では、どのようにして「適切なインスタンスタイプ」を選択するのかが問題になりますが、以下のような手段が考えられます。
①AWSで提供されている『※CloudWatch』でリソースの利用状況をモニタリングする
②『※CloudWatch』+『Auto Scaling』でインスタンスを自動増減し、負荷分散する
③Zabbixなどの監視ツールを導入する

※CloudWatchについては、ページ下部に補足として説明しています。

それぞれの手段の利用について考えてみます。

①は、AWSでは2週間分しかメトリクスのデータを保持しません。短期的なリソース状況の確認には利用できますが、長期的なリソース推移の確認には不向きと言えます。
なお、Amazonからは長期的なリソース推移の確認方法として『CloudWatch Command Line Tools』により、CloudWatchに保持されたデータをエクスポートし、蓄積させる方法が推奨されています。

②は、Webサービスでは有用なサービスだと考えます。ただし、すべてのシステムで有効というわけではないので、用途を検討することが必要となります。また、Auto Scalingでリソースが過剰に確保される恐れもあるため負荷予想ができるのであれば、手動で必要なリソースを確保することも手だと言えます。

③は、社内にスキルを持っている人がいれば良いのですが、スキルを持った人がいなければ、イニシャルコストが必要となる恐れがあります。

以上のように、リソースの最適化という点では、既に③で管理されているお客様であれば、それを活用していただくのが良いと考えますが、そうでないお客様であれば、②とそれ以外の仕組みを併用することがよいと考えます。

では、併用するものをどうするかということですが、ここでは、『CloudWatch Command Line Tools』+『Embulk』+『A-AUTO 50』を組み合わせ、AWSのメトリクス収集・レポート作成を自動で行うことで、長期的なリソース使用状況の分析を行い、設定変更を計画的に実施する仕組みについてご紹介します。

※『Embulk』はデータ転送のOSSで、データの整形などに利用できます。A-AUTO 50ブログで紹介しているので、そちらをご参照ください。

A-AUTO 50を利用したシステムリソース実績レポート構築例

システムのリソースを利用状況を把握することを目的として、以下のリソース実績を自動でレポートします。
今回レポート出力するリソースレポートは、以下のものとなります。

メトリクス 単位 メトリクスの種類
CPU使用率 % 標準メトリクス
空メモリー容量 Mbyte カスタムメトリクス
メモリー使用率 % カスタムメトリクス
ロードアベレージ カスタムメトリクス
仮想メモリー使用率 % カスタムメトリクス
ネットワーク受信バイト数 Mbyte 標準メトリクス
ネットワーク受信バイト数 Mbyte 標準メトリクス

システムの構成を図示すると、以下のようになります。
cloudwatch2

4つのバッチジョブによってAWSのメトリクスを自動で収集・レポート作成を自動化します。
それぞれのバッチジョブの役割は以下のようになっています。

バッチ名 処理内容 実行周期
バッチ1 インスタンス内でデータを取得し、カスタムメトリクスとしてCloudWatchへ送信します。
取得するカスタムメトリクスデータは次の4つです。
・空きメモリー容量
・メモリー使用率
・仮想メモリー使用率
・ロードアベレージ
1分ごと
シェル1 バッチ1のシェル版です。Linuxのカスタムメトリクスを取得・送信したい場合は、こちらを利用します。 1分ごと
バッチ2 前日分の標準メトリクス・カスタムメトリクスのデータを取得します。 日次
バッチ3 バッチ2で取得したデータをまとめ、OSSのEmbulkを利用して整形します。 月次
バッチ4 バッチ3で整形されたデータから、レポートとしてExcelのグラフを作成します。 月次

バッチを用いた仕組み作りについては、順次ブログ でご紹介しますので是非ご覧ください。 ・AWSのリソース使用状況レポートを自動生成しインスタンスタイプの最適化を図る【カスタムメトリクスデータ送信編】AWSのリソース使用状況レポートを自動生成しインスタンスタイプの最適化を図る【メトリクスデータ収集・整形編】AWSのリソース使用状況レポートを自動生成しインスタンスタイプの最適化を図る【Excelレポート生成編】

レポートイメージ

cloudwatch3 バッチ4によって出力するレポートは、上記画像のように一ヵ月分のデータ+グラフをメトリクスごとに表示します。 初期表示するグラフでは、長期間のリソース使用状況の大まかな傾向を見ていただけます。 リソースが多く使用されている傾向にある日時に絞ってグラフで細かく表示して詳細な変動を見ていただければよいと考えます。 もちろんcsvファイルおよびExcelのファイルとして出力しているので、データの再利用やグラフの編集なども自由にしていただけます。

CloudWatchについて

CloudWatchとは、「CPU使用率」や「ネットワーク状況」などのリソースの利用状況を監視し、その値を参照できるAWSの提供するサービスです。(「CPU使用率」や「ネットワーク状況」などの監視項目は「メトリクス」と呼びます) cloudwatch1
AWS マネジメントコンソールからリソース使用状況の表示イメージ
また、インスタンス作成と同時に、以下の10個の標準メトリクスが自動で作成・監視され、いつでも確認することができます。
  • CPUUtilization(CPU使用率)
  • DiskReadOps(ディスク読み取り回数)
  • DiskWriteOps(ディスク書き込み回数)
  • DiskReadBytes(ディスク読み取りバイト数)
  • DiskWriteBytes(ディスク書き込みバイト数)
  • NetworkIn(ネットワーク受信バイト数)
  • NetworkOut(ネットワーク送信バイト数)
  • StatusCheckFailed_Instance(過去1分のインスタンスステータスチェックの成功可否)
  • StatusCheckFailed_System(過去1分のシステムステータスチェックの成功可否)
  • StatusCheckFailed(「StatusCheckFailed_Instance」と「StatusCheckFailed_System」の組み合わせ)
メトリクスの利用例としては、CPU使用率が平均して90%を超えているような状態であれば、よりCPUの良いインスタンスタイプに変更したり、逆にCPU使用率が平均して30%程度であれば、より安価なインスタンスタイプに変更するなど、適切なインスタンスタイプ選択の一助にすることができます。 ※Auto Scaling機能と連動させることが可能です また、『CloudWatch Command Line Tools』を利用して、標準メトリクス以外にユーザが独自のメトリクスを定義し、データを記録させることができます。

記事掲載:2015年5月29日