GrowthForecast+FluentdでWeb管理を素敵にしよう!のゴール
- GrowthForecast導入とCloudWatch連携理解
- GrowthForecastの情報が生で見えるのは精神衛生上悪いので認証プロクシ化
- Fluentd導入とログ連携理解
- Apacheベースでnginx理解
- 各種OSリソース情報等の出力
- 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をループバックアドレスに。
#!/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/register
→ http://$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使用率を表示したグラフ。
http://www.hoge.com:5125
今回はこのくらいで。