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


# GrowthForecast+FluentdでWeb管理を素敵にしよう！のゴール
1. GrowthForecast導入とCloudWatch連携理解  
1. GrowthForecastの情報が生で見えるのは精神衛生上悪いので認証プロクシ化
1. Fluentd導入とログ連携理解
1. Apacheベースでnginx理解
1. 各種OSリソース情報等の出力
1. GrowthForecast+FluentdでWeb管理を素敵にしよう！

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


# GrowthForecastのインストール

まんま、[CloudWatchをGrowthForecastでロングスパングラフ化する](http://dev.classmethod.jp/cloud/aws/cloudwatch-to-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に変更。
とりあえず１台構成なので、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/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使用率を表示したグラフ。

```:ex
http://www.hoge.com:5125
```
![GrowthForecastのグラフ](http://www.kou16.net/wp-content/uploads/2014/02/スクリーンショット-2014-02-03-19.38.15.png)


今回はこのくらいで。