AWSのメモリ使用量のモニタリング
EC2のメモリ使用量を継続的に監視するために、cloudwatchに転送するAWS公式で出しているスクリプトを利用した。new_rericが入ったんだけれども、みれる状況じゃなかった。(諸事情)
前提
方針
EC2のメモリ・スワップ使用量は、EC2のモニタリングでは確認できないので、perlのスクリプトをEC2上で実行・5分感覚でスケジュールする。 かつ、障害の問題になったプロセス・タスクは特定できたので、その実行頻度を毎分から毎日1回に変更した。
これにより原因が解消されているかを監視して、事象が発生した場合に検知できる仕組みとして、CPU使用率が75%以上で5分継続した場合にアラートメールを配信するようにSNSに連絡先のメールアドレスを設定した。
EC2への設定
Amazon Linux AMI Amazon Linux AMI バージョン 2014.03 以降を実行している場合は、追加の Perl モジュールをインストールする必要があります。
上記に当てはまるので、この手順に従います。
$ ssh ec2-user@example.com $ sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https -y
モニタリングスクリプトをダウンロードする
$ curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
モニタリングスクリプトのインストール
unzip CloudWatchMonitoringScripts-1.2.2.zip rm CloudWatchMonitoringScripts-1.2.2.zip cd aws-scripts-mon
IAMをユーザに
cloudwatch:PutMetricData # このロールはなし ec2:DescribeTags # このロールはなし
スクリプトのフォルダ内の認証情報を入力する。
ファイルをリネームする。
$ cp awscreds.template awscreds.conf
IAMユーザのaccess keyとsecret keyを入力する。
# awscreds.conf AWSAccessKeyId=my-access-key-id AWSSecretKey=my-secret-access-key
テストラン(Cloud Watchにデータは送らない)
./mon-put-instance-data.pl --mem-util --verify --verbose
CloudWatchにレポートするメトリクスをのcronスケジュールを設定する
crontab -e */5 * * * * /home/user_name/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron
これでAWS consoleからサービス「CloudWatch」から「メトリクス」を選択する
--disk-space-util --disk-space-used --disk-space-avail
今回は外していますが、ディスクの情報についてもレポートでみたいので、オプションもつけています。
確認できるようになる。
続いて、「アラート」を選択する
CPUUtilization (CPUUtilization)閾値値が75%以上で、5分継続
名前: [ec2 name] CPUUtilization ALERT
説明:CPUUtilization ALERT
>= 75
欠落データの処理方法: 見つかりません
アラートが次の時: 警告
通知の送信先: SNS(トピックに登録し、メールアドレスにメールが配信されるので許可する)
アラートを作成する。
以上。
課題
- ロードアベレージについてもみたい。
- 監視ツールに寄せたい。
参考
Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング - Amazon Elastic Compute Cloud