AmazonLinux2にインストールしたGraphiteの設定を更新する 

# はじめに
この記事は前回投稿した以下の記事の続きになります。
[AmazonLinux2にDockerを使わずGraphite+Grafanaを構築する](https://qiita.com/t7km101/items/1bfa11f66e56cb3b85ba)
前回はすべてデフォルト設定でインストールしたので、もう少し設定を見直してみるという趣旨の記事です。

# 設定概要
1. Graphite DB を SQLite から PostgreSQL に変更
1. local_settings.py(Graphiteの構成) を変更
1. carbon保持期間を変更
1. carbonをサービス化


# 環境

| 項目 | 値 |
|:-----|:-----|
| OS | AmazonLinux2 |
| インスタンスタイプ | t3.micro |
| Python | 3.7.9 (デフォルトでインストール済み) |
| PostgreSQL | 11.5 |
| Graphite | 1.1.8 |

# Graphite設定

## WebアプリDB変更
デフォルトのSQLiteからPostgreSQLに変更します。

PostgreSQL11のインストール

```sh
# インストール
amazon-linux-extras enable postgresql11
yum install postgresql-server postgresql-devel postgresql-contrib

# DBセットアップ
postgresql-setup initdb

# 起動
systemctl start postgresql.service
systemctl enable postgresql.service

# ユーザパスワード設定
sudo passwd postgres

# pythonからPostgreSQLに接続するためのライブラリをインストール
pip3 install psycopg2
```

PostgreSQLでパスワード認証を許可させます。
IPv4 local connections を **ident** から **md5** に変更します。

```sh:/var/lib/pgsql/data/pg_hba.conf
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 ident
```

変更後、postgresqlを再起動します。

```sh
systemctl restart postgresql.service
```

次に、Graphiteが使用するためのデータベースを作成します。

```sh
# PostgreSQLにログイン
sudo -u postgres psql

# graphiteユーザを作成
postgres=# CREATE USER graphite WITH PASSWORD 'password';

# graphiteデータベースを作成
postgres=# CREATE DATABASE graphite WITH OWNER graphite;
```

Graphiteの構成を変更して、PostgreSQLを参照するようにします。
以下のファイルを新規作成し設定します。

https://graphite.readthedocs.io/en/latest/config-local-settings.html

```sh:/opt/graphite/webapp/graphite/local_settings.py
DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '5432'
    }
}
```

データベースをセットアップします。

```
PYTHONPATH=/opt/graphite/webapp django-admin.py migrate --settings=graphite.settings --run-syncdb

# apacheも再起動
systemctl restart httpd.service
```

## その他Webアプリの構成
最終的に、今回構成した設定ファイルは以下のようになりました。

```sh:/opt/graphite/webapp/graphite/local_settings.py
SECRET_KEY = 'MY_SECRET_KEY'
TIME_ZONE = 'Asia/Tokyo'

DASHBOARD_REQUIRE_AUTHENTICATION = True
DASHBOARD_REQUIRE_PERMISSIONS = True

DATABASES = {
    'default': {
        'NAME': 'graphite',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '5432'
    }
}
```

設定を反映させます。

```sh
PYTHONPATH=/opt/graphite/webapp django-admin.py migrate --settings=graphite.settings --run-syncdb

# apacheも再起動
systemctl restart httpd.service
```


## Carbonの構成
メトリクスの保存期間を変更してみます。

- 60秒のデータ - 30日
- 5分のデータ　- 90日
- 1時間のデータ - 3年

```sh:/opt/graphite/conf/storage-schemas.conf
[default]
pattern = .*
retentions = 60s:30d,5m:90d,1h:3y
```

## Carbonのサービス化
systemdを使用して、Carbonをサービス化します。
標準で用意されていないので、色々調べて作成しました。
以下のserviceファイルを新規作成します。

```sh:/etc/systemd/system/carbon-cache.service
[Unit]
Description=Graphite Carbon Cache
After=network.target

[Service]
Type=forking
StandardOutput=syslog
StandardError=syslog
ExecStart=/opt/graphite/bin/carbon-cache.py --config=/opt/graphite/conf/carbon.conf --pidfile=/var/run/carbon-cache.pid start
ExecReload=/bin/kill -USR1 $MAINPID
PIDFile=/var/run/carbon-cache.pid

[Install]
WantedBy=multi-user.target
```

起動してみてエラーにならないことを確認します。

```sh
systemctl enable carbon-cache.service
systemctl start carbon-cache.service
```


# おわりに
まだまだ設定は不足していそうですが、
最低限ここまで設定しておけば、Graphiteを使用できそうです。




# 参考URL
- [AWS(Amazon Linux2)にPostgreSQLをインストールする](https://hds-coop.com/archives/21)
- [19.1. pg_hba.confファイル](https://www.sraoss.co.jp/PostgreSQL/Manual/document/9.2/auth-pg-hba-conf.html)
- [Ubuntuに監視ツール『Graphite』をインストールして構成する方法](https://qiita.com/MetricFire/items/7dce2e236970651a502f)
- [ネットワークメトリクスを視覚化してみた（collectd + Graphite + Grafana）](https://qiita.com/kooshin/items/cbab9dd3fc7b1f4eed81)
- [/opt/graphite/bin/carbon-cache.py start systemd service?](https://answers.launchpad.net/graphite/+question/667805)