Install ZABBIX5.0 + TimescaleDB(PostgreSQL) on CentOS8

備忘録も兼ねて。。

ZABBIX5.0LTSがリリースされたのでお試しで入れてみました。

流れとしては

1. PostgreSQL12のインストール
2. TimescaleDBのインストール
3. ZABBIX5.0インストール

基本的にrootユーザで実行します。

# PostgreSQL12

[この記事](https://computingforgeeks.com/how-to-install-postgresql-12-on-centos-7/)を参考にインストール。

#### リポジトリ情報をもってくる

```bash
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
```

#### dnfコマンドでインストール、する前にデフォルトのものをdisableに。

CentOS8から、dnfってのが使えるようで。
これが面倒な事に元々あるpostgresモジュールをdisableにしておかないとエラーを吐くらしい。

```bash
dnf -qy module disable postgresql
```

#### postgresql12をインストール

yumと一緒。

```bash
dnf install postgresql12-server postgresql12-contrib
```

#### initdbで初期化

お馴染みのやつ。知ってる人なら。
自分はいつも忘れる。

**※potgresユーザに切り替えてから**

```bash
/usr/pgsql-12/bin/initdb 
```

`/usr/pgsql-12/bin/postgresql-12-setup initdb`でもいいかも。
(`/etc/init.d/postgresql initdb`とか昔あったよね。うろ覚え）


# TimescaleDBのインストール

[公式ドキュメント](https://docs.timescale.com/latest/getting-started/installation/rhel-centos/installation-yum)をもとにインストール

#### yumリポジトリ設定

公式ドキュメントにある通りに進める。

```bash
tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL
```

#### TimescaleDBをインストール

これも公式通り。

```bash
yum update -y
yum install -y timescaledb-postgresql-12
```

#### TimeScale用に設定ファイルを書き換える

`timescaledb-tune`コマンドを使って`/var/lib/pgsql/12/data/postgresql.conf`の内容をTimeScaleDB用に書き換える。
自分はとりあえず、YesYesで進めた。よぉ分からん。
差分情報は適宜出るので、ちゃんと確認しながら進めるのが正しい。
不安なようなら、とりあえず今のコンフィグファイルをどこかに退避させると良い。

```bash
timescaledb-tune -pg-config /usr/pgsql-12/bin/pg_config
```

簡単に書き換えてくれるのは本当ありがたい。

#### PostgreSQLの起動

設定ファイルが書き換わったので、PostgreSQLを再起動する。

```bash
systemctl restart postgresql-12
```

# ZABBIX5.0インストール

[公式ドキュメント](https://www.zabbix.com/download?zabbix=5.0&os_distribution=centos&os_version=8&db=postgresql&ws=apache)をもとにインストール。

#### ZABBIXのリポジトリをインストール

この辺は公式ドキュメント通り。

```bash
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
dnf clean all
```


#### ZABBIXのインストール

ここも公式ドキュメント通り。

```bash
dnf install -y zabbix-server-pgsql zabbix-web-pgsql zabbix-apache-conf zabbix-agent
```

日本語化も忘れずに。

```bash
dnf install -y zabbix-web-japanese
```


#### ZABBIX用のユーザとDBを作成

公式ドキュメント通り。
ユーザとかデータベース名とか変えたい時は適宜変更すること。

```bash
sudo -u postgres createuser --pwprompt zabbix
# パスワード設定
# ごにょごにょ
sudo -u postgres createdb -O zabbix zabbix
```


#### ZABBIX用のデータ投入

```
zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix
```

COMMITまで出ればOK。
ちょっと前は3つほど、**順番通りに**SQL文を読み込ませていたけど、本当便利になった笑


#### TimescaleDBを適用する

ZABBIX4.2から使えるようになったそうです。
パフォーマンスが向上するとかしないとか。
そんな訳で、TimescaleDB(実態はExtentsion)を適用する

[公式ドキュメント](https://www.zabbix.com/documentation/current/manual/appendix/install/timescaledb)も参考に。

```bash
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
```

[2021/04/17 追記]
実行すると下記のエラーが出る。

```
could not change directory to "/home/vagrant": Permission denied
ERROR:  extension "timescaledb" has no installation script nor update path for version "2.2.0"
```

そういう時は、バージョン指定をしてインストールしてあげると良いらしい。

```
echo "CREATE EXTENSION timescaledb VERSION '1.7.5'" | sudo -u postgres psql zabbix
```

`create_hypertable`を使って、ハイパーなテーブルを作成する（らしい）

```bash
zcat /usr/share/doc/zabbix-server-pgsql*/timescaledb.sql.gz | sudo -u zabbix psql zabbix
```

#### 設定ファイルを更新

ZABBIX Serverの設定ファイルを更新する。
特にチューニングとかは考えていないので、最低限の修正。

```bash
vi /etc/zabbix/zabbix_server.conf
```

```config:/etc/zabbix/zabbix_server.conf
DBPassword=<ZABBIXユーザで設定したパスワード>
```

`pg_hba.conf`を覗いたら、全部`trust`になっていたので`md5`に変更する
でも、お試しならこのままでもOK。
`trust`のままなら、`zabbix_server.conf`は修正しなくても動きはする、かも。


```bash
vi /var/lib/pgsql/12/data/pg_hba.conf
```

```conf:/var/lib/pgsql/12/data/pg_hba.conf
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust
```


PHPのタイムゾーン設定を更新。
前は`/etc/httpd/conf.d/`の配下にある、`zabbix.conf`を修正したけど、今回は`/etc/php-fpm.d/zabbix.conf`という設定ファイルを更新する

```bash
vi /etc/php-fpm.d/zabbix.conf
```

コメントアウトを外すのを忘れずに。

```conf:/etc/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Tokyo
```

#### SELinux無効化

本来はやりたくないのだけど、ドキュメント通りにやってもうまくZabbixが起動してくれなかったので。。


```bash
setenforce 0
```

恒久対処なら、`/etc/selinux/config`を修正。

#### 自動起動設定

```bash
systemctl enable zabbix-server zabbix-agent httpd postgresql-12 
```

#### 起動！！！


```bash
systemctl restart zabbix-server zabbix-agent httpd php-fpm
```

# FrontEndの設定をする

http://localhost/zabbix にブラウザでアクセス！

たぶん、はいはいとやってるだけで終わる。

気になる人は[公式をみてね](https://www.zabbix.com/documentation/current/manual/quickstart/login)