日常を淡々と綴ります。CLIでCloudwatchの情報を取得するAWSを使っていると、Cloudwatchの情報を外部に取り出したくなるのが人情だと思います。CLIでの取得方法の情報はあまり見かけません。CLIは、旧来のツールで必要なJavaのインストールの必要がなく、また、1つのツールを導入するだけで、Cloudwatchを含む、すべてのAWSのサービスが操作可能というメリットがあり、比較的手軽に使うことができます。そのため、できればこちらで済ませたいところ。CLIでのCloudwatchは、いくつか癖があり、実際に使えるようになるまでハマったので、使い方をまとめておきたいと思います。今回の例を実行するために必要な初期設定方法は、以下の通りです。こちらは、ネット上に多くの情報が多くあるので、説明はざっくりで。aws必須ではないですが、これをやっておくとawsコマンド利用時にサブコマンドをタブ補完できるようになるので便利。CLIのgithubリポジトリ参照。configureawsコマンド利用時に必要なアクセスキーなどの初期設定を行う。アクセスキーはAWSコンソール事前に取得しておき、指示にしたがって入れる。CLIコマンドの出力を整形し、時系列で並べるために利用する。CentOSを使っている場合は、EPELにある"jq"パッケージを利用可能そのほかの環境でも"jq"のサイトからダウンロードすればOKBilling情報監視の有効化Billing情報をCloudwatchから取得する場合は、その機能の有効化の設定を行う。説明するよりは、例があった方がわかりやすいと思うので、例を2つ。6にて動作確認しています。平均値を取得するスクリプトスクリプト中の"instance_id"には自分のインスタンスのIDを入れてください。コマンドの出力は以下のようなJSONになります。}]オプションの中身スクリプトで指定しているコマンドとオプションの意味は以下の通りです。CLIコマンドとサブコマンド。サブコマンドの1つ目に、AWSのサービス名を入れ、2つ目にそのサービスに対する操作を入れます。aws"を実行していれば、サブコマンドはタブ補完が効きます。help"のように、コマンドに続けて"help"を入力すると、それぞれのリファレンスマニュアルを見ることができます。--region取得対象リージョンの指定。Billing情報を取得する際には、必ず「us-east-1」を指定する必要がある。そのほかの場合は、自分が使っているリージョンを指定。"configure"時にデフォルト指定していれば、省略可能。--namespaceどのAWSのサービスのメトリクスを取得するのかを指定する。Billingなら「AWS/Billing」、EC2のメトリクスなら「AWS/EC2」を指定。指定可能なNamespaceの一覧はこちら。http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/aws-namespaces.html--metric-name取得するメトリックを指定。Billingのメトリックは「EstimatedCharges」のみ。EC2は、「CPUUtilization」や「DiskReadOps」など複数のメトリックがある。各サービスで取得可能なメトリックは以下から確認できる。Dateの形式で指定する。日付だけ、日付+時間の両方の指定が可能。指定された期間÷データ間隔で決まるデータ件数(Datapoint数)が1440以下である必要あり。--periodメトリックのデータ間隔を秒間隔で指定する。指定する値は、60の倍数である必要がある。Cloudwatchでは、デフォルトでは5分間間隔でデータが取得されているため、ここでは、300を指定。--statistics平均値や最大値など、メトリックをどの断面で取り出すかの指定。」--dimensionsメトリックにサブカテゴリがある場合、指定するパラメータ。Billingでは上記の指定が必須。各サービスで取得可能なDimensionはメトリックと合わせて確認できる。CLIのコマンドではなく、コマンドラインのJSON解析コマンド、jqコマンドと、そのオプション。CLIで取得した生のJSONはなぜかデータが時系列順に並んでいないため、jqコマンドを通して、時系列順にデータが並ぶようにする。この点はいずれ修正されるかもしれませんが、現在のところは、jqと組み合わせてデータを整形するのがベストプラクティスだと思います。これらのオプションの組み合わせだけで、おおよそのAWSの利用状況は取得できると思います。CLIの公式のコマンドリファレンス*3には、ほかのサービスのメトリック取得方法やCloudwatch以外のサブコマンドの使い方も載っています。ここで例示したもの以外の使い方を知りたい方は、そちらを見てみてください。夜も更けてきたので、今日はここまでで。*1:MacとLinuxでは、dateコマンドの中身が異なっているので、両方で動くように調整*2:パラメータの指定が間違っていた場合は、エラーではなく空のリストが返ってきます。正しいパラメータの確認をしにくいんですよね。*3:各コマンド・サブコマンドに続けて"help"を入力した時に見られるマニュアルと同等の内容です。サーバ擬人化エヴァンジェリスト。昼間は実家の猫たちのために働くITインフラエンジニア。最近は工場長としてインフラエンジニア双六やかるたを作ったり。【免責】このブログに書かれていることは、私の個人的な見解であり、所属企業・組織の意見を代表するものではありません。読者になるサークルの新作ゲーム新作『汝はエンジニアのような名状しがたい何かなりや?』デスマーチ末期を舞台にした人狼ゲーム。運用を開始して半月経ったのでメモ月別アーカイブ広告キムワイプはてなブログをはじめよう!sechiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。