kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

AWSのメモリ使用量のモニタリング

EC2のメモリ使用量を継続的に監視するために、cloudwatchに転送するAWS公式で出しているスクリプトを利用した。new_rericが入ったんだけれども、みれる状況じゃなかった。(諸事情)

前提

  • AWS EC2
  • CloudWatch
  • Cloud SNS
方針

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 

今回は外していますが、ディスクの情報についてもレポートでみたいので、オプションもつけています。

f:id:kikeda1104:20180710182911p:plain

確認できるようになる。

続いて、「アラート」を選択する

CPUUtilization (CPUUtilization)閾値値が75%以上で、5分継続

名前: [ec2 name] CPUUtilization ALERT

説明:CPUUtilization ALERT

>= 75

欠落データの処理方法: 見つかりません

アラートが次の時: 警告

通知の送信先: SNS(トピックに登録し、メールアドレスにメールが配信されるので許可する)

gyazo.com

アラートを作成する。

以上。

課題

参考

Amazon EC2 Linux インスタンスのメモリとディスクのメトリクスのモニタリング - Amazon Elastic Compute Cloud