Edited at

GrowthForecast+FluentdでWeb管理を素敵にしよう!① 〜まずはGrowthForecastでCloudWatchのログを溜めてみよう〜

More than 5 years have passed since last update.


GrowthForecast+FluentdでWeb管理を素敵にしよう!のゴール


  1. GrowthForecast導入とCloudWatch連携理解


  2. GrowthForecastの情報が生で見えるのは精神衛生上悪いので認証プロクシ化

  3. Fluentd導入とログ連携理解

  4. Apacheベースでnginx理解

  5. 各種OSリソース情報等の出力

  6. GrowthForecast+FluentdでWeb管理を素敵にしよう!

段階的にnginxやGrowthForecast、Fluentdを理解して、Zabbix無しでも軽くて素敵な運用が出来ることがゴール。


GrowthForecastのインストール

まんま、CloudWatchをGrowthForecastでロングスパングラフ化するを参考に。

ちょいと引っかかったり、普段使いの鯖がSingaporeなので微妙に違う部分があったりしたので、そこらも抑えられれば。

OSは、Amazon Linuxを使用。(AMIはAmimotoです)

Amazon LinuxはCentOSカスタマイズなので、基本CentOSの手順でOK。


yum updateとタイムゾーンの設定

パッケージ導入するのでお約束のyum updateとタイムゾーンの設定というのは、GrowthForecastで表示したい時間軸がどこのタイムゾーンかを設定する。

$ sudo yum update

$ rm /etc/localtime
$ sudo ln -s /usr/share/zoneinfo/Japan /etc/localtime

AWSのSingaporeリージョンだったので、/etc/localtimeが/usr/share/zoneinfo/Singaporeのシンボリックリンクだったので、cpしちゃうとSingaporeをTokyoで上書きしちゃうので、シンボリックリンク貼り替え。

どこの手順を見ても、cpで元のタイムゾーン上書きしちゃうので気持ち悪かった。


GrowthForecastで必要なパッケージを黙々と導入

$ sudo yum groupinstall "Development Tools"

$ sudo yum install pkgconfig glib2-devel gettext libxml2-devel pango-devel cairo-devel
$ sudo yum install libyaml-devel
$ sudo yum install *YAML*
$ sudo yum install cpan
$ sudo cpan App::cpanminus


GrowthForecastの導入

cpanmを使用してGrowthForecastを導入します。

$ cpanm -n GrowthForecast

何度かEnter叩いて導入完了。


GrowthForecastの起動

まず、perl等のライブラリにパスを通す。

で、sourceコマンドで~/.bashrcの読み直し。

$ vi ~/.bashrc

export PERL_CPANM_OPT="--local-lib=~/perl5"
export PERL5LIB="/home/ec2-user/perl5/lib/perl5"
export PATH="~/perl5/bin:$PATH"

$ source ~/.bashrc

$ /home/ec2-user/perl5/bin/growthforecast.pl --data-dir /home/ec2-user/growthforecast &

で起動。

デフォだと5125/tcpで通信するので、SecurityGroup等も手当すること。


CloudWatchのデータをGrowthForecastへ連携

参考にしたサイトのスクリプトがjqを使用しているので、導入。

$ sudo yum install jq

連携スクリプトは以下の内容。

オリジナルからは、

TokyoリージョンがSingaporeリージョンなので、ap-northeast-1をap-southeast-1に変更。

とりあえず1台構成なので、GFSERVERのIPをループバックアドレスに。


cloudwatch_push.sh

#!/bin/bash

GFSERVER="127.0.0.1:5125"
INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id`
START_DATE=`date -u -d '10 minutes ago' +%Y-%m-%dT%TZ`
END_DATE=`date -u +%Y-%m-%dT%TZ`

CPU=`aws cloudwatch get-metric-statistics --metric-name CPUUtilization --namespace AWS/EC2 --region ap-southeast-1 --statistics Average --start-time $START_DATE --end-time $END_DATE --period 60 --dimensions Name=InstanceId,Value=$INSTANCE_ID | jq '.Datapoints[0] | .Average' | sed s/\.[0-9,]*$//g`
NIN=`aws cloudwatch get-metric-statistics --metric-name NetworkIn --namespace AWS/EC2 --region ap-southeast-1 --statistics Average --start-time $START_DATE --end-time $END_DATE --period 60 --dimensions Name=InstanceId,Value=$INSTANCE_ID | jq '.Datapoints[0] | .Average' | sed s/\.[0-9,]*$//g`
NOUT=`aws cloudwatch get-metric-statistics --metric-name NetworkOut --namespace AWS/EC2 --region ap-southeast-1 --statistics Average --start-time $START_DATE --end-time $END_DATE --period 60 --dimensions Name=InstanceId,Value=$INSTANCE_ID | jq '.Datapoints[0] | .Average' | sed s/\.[0-9,]*$//g`

if [ -n "$CPU" ]; then
curl -F number=$CPU http://$GFSERVER/api/$INSTANCE_ID/cpu/cpu
fi

if [ -n "$NIN" ]; then
curl -F number=$NIN http://$GFSERVER/api/$INSTANCE_ID/networkin/networkin
fi

if [ -n "$NOUT" ]; then
curl -F number=$NOUT http://$GFSERVER/api/$INSTANCE_ID/networkout/networkout
fi


(2014/02/14追記)

※ スクリプトの以下を変更

 http://$GFSERVER/api/$INSTANCE_ID/cpu/registerhttp://$GFSERVER/api/$INSTANCE_ID/cpu/cpu

こいつをcronに登録。(10分置きに稼働)

$ crontab -e

*/10 * * * * /home/ec2-user/cloudwatch_push.sh


このままだとエラーになったのでトラブルシュート

以下のようなエラーが出るので、

Unable to locate credentials. You can configure credentials by running "aws configure".

以下のコマンドを実行。

$ aws configure

AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-southeast-1
Default output format [None]:

Security CredentialsのAccess Key IDとSecret Access Keyを入力。

自分は鯖がSingaporeリージョンなので、ap-southeast-1を入力。

outputフォーマットはデフォルトのまま。


アクセスしてみる

GrowthForecastを導入したサーバのグローバルアドレスの5125ポートにアクセス。

以下は、CloudWatchのCPU使用率を表示したグラフ。


ex

http://www.hoge.com:5125


GrowthForecastのグラフ

今回はこのくらいで。