こんにちは。虎の穴ラボのNSSです。
Webアプリケーションでサーバーのディスク使用率が高くなったとき、
メールやSlackで通知したいという要件はよくあると思います。
EC2を使っていればCloud Watchを利用して、ディスク使用率を監視して空き容量が減少したらメールで通知できることがわかったので、
その手順をまとめたいと思います。
1. モニタリングスクリプト
CloudWatchはデフォルトの状態ではディスク使用率の監視ができないので、
EC2インスタンス上にモニタリングスクリプトというものをインストールします。
まずインスタンスにSSHで接続し、パッケージをインストールします。
sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64
次に、モニタリングスクリプトをダウンロードするフォルダを作成します。
今回はmonitoring-scripts
というフォルダにダウンロードします。
mkdir monitoring-scripts cd monitoring-scripts/ curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
ダウンロードしたzipを解凍します。 unzipがない場合はインストールします
# unzipがインストールされていない場合 sudo yum install unzip # zipを解凍後削除 unzip CloudWatchMonitoringScripts-1.2.2.zip rm CloudWatchMonitoringScripts-1.2.2.zip
これでモニタリングスクリプトがインストールできました。
2. 監視用ユーザーの設定
モニタリングスクリプトがインストールできたら、
設定ファイルにIAMユーザーのアクセスキーIDとシークレットキーを設定します。
最低限の権限さえあれば良いのでAWSコンソールにてCloudWatchのアクセス権限のみを持つ監視用IAMユーザーを追加します。
今回はアクセス権限の設定で「既存のポリシーを直接アタッチ」で「CloudWatchAgentServerPolicy」を選択しています。
IAMユーザーを作成したら、
インスタンスにて、解凍されたファイルの中にあるawscreds.template
をawscreds.conf
という名前でコピーします。
cd aws-scripts-mon
cp awscreds.template awscreds.conf
awscreds.confを編集します。 追加したIAMユーザーのアクセスキーIDとシークレットキーを設定します。
AWSAccessKeyId=[アクセスキーID] AWSSecretKey=[シークレットキー]
ここまでできたら動作確認を行います。
インスタンスにて、以下のコマンドを実行します。
--verify
オプションが設定されているとCloud Watchへはレポートされません。
./mon-put-instance-data.pl --mem-util --verify --verbose
成功していれば以下のような結果が表示されます。
Verification completed successfully. No actual metrics sent to CloudWatch.
5分ごとにディスク使用状況をCloud Watchにレポートするようにcronを設定します。
crontab -e # 以下の行を追加 */5 * * * * ~/monitoring-scripts/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron
3. Cloud Watchの設定
1~2までの手順が正常に設定されていればCloud Watchコンソール > メトリクス >すべてのメトリクスタブに
Linuxシステム
が追加されているはずです。
Linuxシステム > Filesystem, InstanceId, MountPath > 該当のインスタンスを選択すると、該当インスタンスのディスク使用率がグラフで表示されます。
このメトリクスを監視するCloud Watchのアラームを設定します。 Cloud Watchコンソール > アラーム > アラームの作成をクリックします。
メトリクス選択で先ほどのインスタンスを選択します。
メトリクスを選択したら条件の設定をします。
設定内容は以下のとおりです。
次にアクションの設定をします。閾値を超えたら、任意のメールアドレスにメールがくるように設定します。
ここでメールを送信するトピックを作成する必要があります。
トピックの作成ボタンをクリックするとAmazon SNS
にトピックが作成されます。
最後にアラーム名とアラームの説明を設定して完了です。
ここまで終了するとAWS Notification - Subscription Confirmation
という確認メールが受信されるはずなので
メール内のリンクをクリックします。
これでサブスクリプションの確認
が行われます。
Amazon SNSのコンソールに行くと、トピックとサブスクリプションが作成されています。
サブスクリプションの確認
が行われているとサブスクリプションのステータスが確認済み
になっているはずです。
Amazon SNSコンソール > トピック > 作成したトピックを選択し、
メッセージの発行
をクリックします。
件名とメッセージ本文を追加します。
件名には日本語は使えません。
最後に閾値を超えた時、設定したメールが来ることを確認したら完了です。
最後に
今回はCloud Watchでディスク使用率を監視する方法をご紹介しました。 サードパーティ製の監視サービスを利用するということも1つの手段ですが、 痒い所に手が届かない場合もあります。 今回紹介した方法で独自の監視ができるので、是非試してみてください。
P.S
虎の穴では一緒に働く仲間を絶賛募集中です! この記事を読んで、興味を持っていただけた方はぜひ弊社の採用情報をご覧下さい。 yumenosora.co.jp