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


site

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をループバックアドレスに。

```

!/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/register fi

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

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


こいつを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

GrowthForecastのグラフ

今回はこのくらいで。