Amazon CloudWatch カスタムメトリクス

今回は、カスタムメトリクス作成する手順をご紹介します。

メトリクスは CloudWatch での基本的な概念です。メトリクスは、CloudWatch に発行された時系列のデータポイントのセットを表します。

CloudWatchは、ユーザの利便性向上のため、AWSサービス全体について300以上の基本(Built-in)メトリクスを提供しています。

一般的なシステムモニタリングは基本メトリクスで十分ですが、メモリや各マウントされたディスクの使用率を確認しようとするときは、カスタマイズされたメトリクス(Custom Metric)を生成する必要があります。

カスタムメトリクス基本CLIコード

1$ aws cloudwatch put-metric-data --metric-name PageViewCount --namespace "MyService" --value 2 --timestamp 2022-01-25T12:00:00.000Z

put-metric-dataを利用して値をメトリクスに入れることができます。
実行の為にはCloudWatchに対するロールがついているかCLIの「aws configure」に「access key」と「secret key」の設定が必要と思います。

下記のエラーは「aws configure」リージョンを設定してください。

1You must specify a region. You can also configure your region by running "aws configure".

ロール

{
  "Version": "2012-10-17",
  "Statement": [
    {
       "Sid": "VisualEditor0",
       "Effect": "Allow",
       "Action": "cloudwatch:PutMetricData",
       "Resource": "*"
    }
  ]
}

カスタムメトリクスディメンションCLIコード

1$ aws cloudwatch put-metric-data --metric-name "FileSystem Utilization" --namespace "OurService" --value 16 --unit Percent --dimensions FileSystem="dev/xvda1",HostId="ami-249b554a",MountPath="/" --timestamp 2022-01-25T12:00:00.000Z

ディメンションは、メトリクスのアイデンティティの一部である名前と値のペアです。1 メトリクスあたり最大 10 ディメンションを割り当てることができます。

各メトリクスには、それを表す固有の特徴があります。ディメンションはその特徴のカテゴリーと考えることができます。

参考ソース説明:

タイムスタンプを習得

get_time_stamp() {
  time_stamp=$(date -u +%Y-%m-%dT%R:%S.000Z)
  echo "$time_stamp"
}

「-u」オプションでUTF基準のタイムスタンプが作られます。

インスタンスのID習得

get_instance_id() {
  instance_id=$(curl http://169.254.169.254/latest/meta-data/ami-id)
  echo $instance_id
}

「169.254.169.254」はEC2のインスタンスメタ情報を持って来るIPv4アドレスです。IPv6 アドレスは「fd00:ec2::254」でNitro System 上に構築されたインスタンスしか習得できません。

AWK(オーク)とは
ユニックスで初めて開発された一般スクリプト言語。 AWKの基本機能はテキストの形になっている入力データを行と単語別に処理して出力。

メモリー情報習得

used_mem_ratio=$(awk '/MemTotal:/{total=$2} \
    /MemFree:/{free=$2} \
    END{ \
     print ((total-free)*100/total) \
    }' /proc/meminfo )

/proc/meminfoファイル情報を読んできて、awkに加工する方法を使います。

ディスク情報習得

1declare -a fs_list=$(df -h | awk '$1 ~ /^ *\/dev\//{print $1, "\t", $2, "\t", $3, "\t", $4, "\t", $5, "\t", $6}')

dfはマウントされたファイルシステムの大きさと容量を示すコマンドこれをメモリーと同じくawkに加工する方法を使います。

sedとは
テキストを分解したり変換したりするプログラムのこと。

要らない文字削除

1fs=$(echo $f_info | sed 's/[G%]//g' | awk '{ print $1}' )

G、%のような文字はsedを利用して削除します。

スクリプト実行権限付加

Crontabに登録 1分に1回カスタムメトリクスを登録

CloudWatchから確認

Smallitのサービス