EC2のメモリとDisk利用状態をCloudwatchのメトリクスで見てみたい(Cloudwatch Custom Metrics)

EC2インスタンスのメモリ状況やDisk容量もCloudWatchで監視して、特定の状況になったらアラートメールを飛ばすなり何かのアクションを取りたい時ありますよね。
ところがデフォルトのままではEC2インスタンスのメモリ状況やDisk容量をCloudWatchで監視出来ません。
EC2はマネージドサービスではないため、基本的にはハイパーバイザが収集出来るデータのみCloudwatchに送ります。
そしてメモリやDisk状況はハイパーバイザの管轄ではないのでメモリとDisk状況はCloudWatchには送られないわけです。
と言う事でユーザーが手動でデータを入れる必要がありますが、ここで登場するのがCustom Metrics
今回はCustom Metricsを利用してEC2のメモリとDisk利用状態をCloudwatchのメトリクスに送るようにしてみましょう。
このポストに合わせてこちらの公式文書も見てみてください。

とりあえずやってみよう

EC2インスタンスにAWS権限を与える

対象のEC2インスタンスからAWSのリソースを操作する必要があるので、まずはEC2インスタンスにそれらを操作できる権限を与えましょう。
必要な権限は下記の通り4つです。
* cloudwatch:PutMetricData
* cloudwatch:GetMetricStatistics
* cloudwatch:ListMetrics
* ec2:DescribeTags

この権限をEC2インスタンスに与える方法は二つあります。
* 上記の権限を持つIAM Roleを用意して、EC2インスタンスにRoleをアタッチする
* 上記の権限を持つIAM Userを用意して、EC2インスタンスの内部にAccessKeyとSecretKeyを定数として登録する

Script実行

対象のEC2インスタンスにSSHで入って下記を実行します。

実行するスクリプトの詳細はこちらのGistからみられます。
[Only 2 step]Monitoring Memory and Disk Metrics for AWS EC2 Linux Instances

確認

上記のスクリプトが正常に実行されると5分おきにCloudWatchにデータが入ります。
それを見るには下記のように移動します。
* Memory: AWS CloudWatch -> Metrics -> Linux System -> InstanceId
* Disk: AWS CloudWatch -> Metrics -> Linux System -> Filesystem, InstanceId, MountPath
下のようなMetrics Nameの項目が表示されたら確認完了です。
cloudwatch-metrics-ec2-memory-disk

お疲れ様でした。