【AWS】カスタムメトリクスを使ったプロセス監視(Linux編)【CloudWatch】

  • 30
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

こんにちは。
CloudWatchでプロセスの監視を行おうとした時、デフォルトの設定だけではできずかなり困りました。
色々な方の記事を参考にプロセス監視設定をしたときのメモを残します。

(20160911 追記)
WIndows編も記載しました!
【AWS】 カスタムメトリクスを使ったプロセス監視(Windows編) 【Cloudwatch】

概要

今回の記載内容は、主に下記となります。
監視するプロセスは、[chrony] です。

  1. カスタムメトリクス用IAM作成
  2. CloudWatch用ツールダウンロード
  3. カスタムメトリクス作成

前提

・Red Hat Enterprise Linux 7.1 (HVM), SSD Volume Type - ami-b1b458b1
 Amazon Linuxを利用しない手順を記載します。
・コンソールにログインできるアカウント

①カスタムメトリクス用IAM作成

カスタムメトリクスをCloudWatchに送るには、PutMetricDataという権限をもったIAMのアクセスキーとシークレットアクセスキーが必要になります。
まず、その権限をもったIAMを作ります。

今回権限は下記のようにしました。

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

作成したIAMでアクセスキー IDとシークレットアクセスキーを発行します。

②CloudWatch用ツール準備

CloudWatch用のツールを準備します。

・SSHでEC2に接続します。

・wgetコマンドが使えないので、wgetをインストール
sudo yum install wget

・CloudWatchコマンドツール用のフォルダ作成
mkdir bin

・CloudWatchコマンドツールのダウンロード
cd bin
wget http://ec2-downloads.s3.amazonaws.com/CloudWatch-2010-08-01.zip

・unzipも入ってなかった・・・

unzip CloudWatch-2010-08-01.zip
-bash: unzip: コマンドが見つかりません

・unzipのインストール
sudo yum install unzip

・改めて、zip解凍及びzipファイルの削除
sudo unzip CloudWatch-2010-08-01.zip
rm CloudWatch-2010-08-01.zip

・CloudWatchにアクセスするために、CloudWatch証明書情報のテンプレートをコピー
cd CloudWatch-1.0.20.0/
sudo cp credential-file-path.template credentials

・証明書情報情報の書き換え
 先ほど、作成した アクセスキーID と シークレットキー を入力

sudo vi credentials 
AWSAccessKeyId=<アクセスキー ID入力>
AWSSecretKey=<シークレットキー入力>

③カスタムメトリクス作成

ClooudWatchにカスタムメトリクスを送るシェルを作成します。

・CloudWatchコマンドツールを利用するには、javaが必要なので、インストール
sudo yum install java-1.7.0-openjdk

・シェル作成
chronydが動いている場合は、1を返します。
chronydが停止している場合は、0を返します。

custom_metrics.sh
#!/bin/bash

export AWS_CLOUDWATCH_HOME=/home/ec2-user/bin/CloudWatch-1.0.20.0
export AWS_CREDENTIAL_FILE=$AWS_CLOUDWATCH_HOME/credentials
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/lib/jvm/jre

InstanceId=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)

chrony=`ps cax | grep chronyd | wc -l`

if [ "$chrony" -gt "0" ]; then
 Processes=1
else
 Processes=0
fi

mon-put-data --metric-name "chrony Processes" --namespace "System/Linux" --dimensions "InstanceId=$InstanceId" --value "$Processes" --unit "Count" --region ap-northeast-1

・シェルに実行権限を付与
cronからも実行できるようになります。
sudo chmod 755 custom_metrics.sh

・シェルを実行
CloudWatchにカスタムメトリクスが送られます!
sh custom_metrics.sh

・[AWSコンソール] - [CloudWatch-メトリック] - [Linuxシステム>InstanceId]で動作確認
chronyが起動している場合 1を返しています。 #見にくくてごめんなさい...
スクリーンショット 2015-12-12 16.25.04.png

chronyが停止している場合 0を返しています。
スクリーンショット 2015-12-12 17.29.27.png

ちゃんと動作していますね。
定期的に実行したい場合は、先ほど作成したシェルをcronに登録してください。

また、カスタムメトリクスの値をトリガーにアラームの設定をすれば、
プロセスの監視を色々とカスタマイズできますね。

修正が必要な部分などありましたら、ご連絡お願いします!
それでは、失礼します!

参考サイト

http://stk-inc.co.jp/2013/01/aws-cloudwatch-ec2/
http://qiita.com/hilotter/items/5d5c7cddb5e580bd7aa5