GrafanaでCloudWatch見る（接続設定編）

Grafana2.5がリリースされ、CloudWatchが正式にサポートされたので設定を行ってみる。

## インストール
インストールの説明は割愛。
http://docs.grafana.org/installation/

データストアを持たないので、インストールして起動できさえすればOK。
デフォルトポートは`3000`
ユーザー/パスワードは`admin`

## CloudWatch設定
基本的にはこの設定通り
http://docs.grafana.org/datasources/cloudwatch/

CloudWatch部分のコードは[cloudwatch.go](https://github.com/grafana/grafana/blob/5d64568f3e2488abd66d1295fa80232a6dfd231e/pkg/api/cloudwatch/cloudwatch.go)で見ることができる。
AWS SDK for Goが使われている。
※PRにProfileの設定を追加したものが取り込まれたので、今後はマルチアカウントに対応できそう。(2015/11/01時点)

CloudWatch接続の為の認証はGrafanaの設定ではなく、サーバ側で行えるようにする必要がある。
方法は2種類。
#### IAM Roles
EC2で使用する場合はこの方法が一番セキュアで楽。
デメリットとして
* インスタンス起動時に設定しないといけない
* マルチアカウントに対応された時でも、1アカウント分の認証設定しかできない 

#### AWS credentials file
サーバ内に${HOME}/.aws/credencialsを置き、
下記の形式でアクセスキー/シークレットアクセスキーを記載。

```${HOME}/.aws/credencials
[default]
aws_access_key_id = asdsadasdasdasd
aws_secret_access_key = dasdasdsadasdasdasdsa
region = us-west-2
```

今回はこの方法で少し詰まったのでメモとして残す。

## AWS credentials fileの置き場所について
[公式の設定情報](http://docs.grafana.org/datasources/cloudwatch/)では下記の様に書いてある。
> Create a file at ~/.aws/credentials. That is the HOME path for user running grafana-server.

grafana-serverを動かしているuserの${HOME}/.aws/credentialsに置けと。

#### grafana-serverを動かしているuser?
yum / aptでインストールしている場合は`grafana`ユーザーで起動しているはず。
initスクリプトでも確認ができる。

```/etc/init.d/grafana-server
PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=grafana-server
DESC="Grafana Server"

GRAFANA_USER=grafana
GRAFANA_GROUP=grafana
GRAFANA_HOME=/usr/share/grafana
CONF_DIR=/etc/grafana
WORK_DIR=$GRAFANA_HOME
DATA_DIR=/var/lib/grafana
LOG_DIR=/var/log/grafana
CONF_FILE=$CONF_DIR/grafana.ini
MAX_OPEN_FILES=10000
PID_FILE=/var/run/$NAME.pid
DAEMON=/usr/sbin/$NAME
```

psコマンドで確認

```
[root@localhost grafana]# ps aux |grep grafana
grafana   7032  0.0  3.3 498112 15560 ?        Sl   12:20   0:02 /usr/sbin/grafana-server --pidfile=/var/run/grafana-server.pid --config=/etc/grafana/grafana.ini cfg:default.paths.data=/var/lib/grafana cfg:default.paths.logs=/var/log/grafana
```

この場合は`USER:grafana GROUP:grafana`で起動させている
その為、当然ファイルの権限も`USER:grafana GROUP:grafana`とする必要がある。

### 結局どうする？
/usr/share/grafana/.aws/credentialsにgrafanaユーザー/グループの権限でファイルを置く
* ファイルの置き場所 :
`/usr/share/grafana/.aws/credentials`
* ファイルの権限 : `-rw-------. 1 grafana grafana  140 Oct 29 17:15 credentials`

```bash
[root@localhost grafana]# pwd
/usr/share/grafana
[root@localhost grafana]# ls -al
total 24
drwxr-xr-x.  6 root    root    4096 Oct 29 16:43 .
drwxr-xr-x. 67 root    root    4096 Oct 29 16:29 ..
drwxr-xr-x.  2 grafana grafana 4096 Oct 29 17:15 .aws
drwxr-xr-x.  2 root    root    4096 Oct 29 17:12 conf
drwxr-xr-x. 12 root    root    4096 Oct 29 16:28 public
drwxr-xr-x.  3 root    root    4096 Oct 29 16:28 vendor
[root@localhost grafana]# ls -al .aws/
total 16
drwxr-xr-x. 2 grafana grafana 4096 Oct 29 17:15 .
drwxr-xr-x. 6 root    root    4096 Oct 29 16:43 ..
-rw-------. 1 grafana grafana   34 Oct 29 16:34 config
-rw-------. 1 grafana grafana  140 Oct 29 17:15 credentials
```


## 結果

Test Connectionを押して下記画面のようになれば接続完了
### ![grafana2.5_cw_success.png](https://qiita-image-store.s3.amazonaws.com/0/38286/254c9d78-81ab-0943-1f21-0c24413a1fd4.png "grafana2.5_cw_success.png")