Zabbix をUbuntu 20.04 で構築する

# はじめに

Network を設計・構築した後、長い運用が始まる. Network 機器は機械だから当然に壊れる. 想定していないTraffic が流れる、通信品質が劣化する。何かの方法で観測し続け、監視する必要がある。
Cisco でもどこでも自前の監視システムを提供しているが、下手にそれを入れるとベンダロックに繋がる。
Network 機器ベンダから独立していて、ソースコードが公開されていて、どこかが保守を提供してくれるものが望ましい。 というわけで Zabbix. 

# Zabbix サーバの構築
基本的には [Zabbix の公式サイト](https://www.zabbix.com/jp/download) に従えば良い。ただ、Zabbix を動作させるためには Webサーバと Database サーバを自前で用意する必要があり、その辺りの情報が書いていない。Document もあるにはあるのだが、日本語版は Zabbix 2.2までしかなく、ローカライゼーションのための情報が役に立たない。つらい。

## ターゲット環境
* Zabbix 5.0 LTS
* Ubuntu 20.04
* PostgreSQL 12.5
* Apache HTTP Server 2.4.41

PostgreSQL/Apache HTTP ServerはUbuntu 20.04の標準 Repositoryのものを利用した。
Database はMariaDB/PostgreSQLのどちらかから選べる。MariaDBを使った構築例が多かったが、ここでは PostgreSQL を採用した。

普段は PostgreSQL を使っているのでこの判断をした。のだが、構築のために調査をしていたら、Zabbix での Databaseは更新系処理が多いため、参照系処理が多い他のDatabaseとは共存させるべきでないらしい。単体で作るのならあえて PostgreSQLにこだわるべきでなかったかもしれない。

## 構築に必要な関連ソフトウェアのインストール

```shell
sudo apt install postgresql postgresql-contrib
sudo apt install apache2 libapache2-mod-php 
```

PostgreSQL/Apache HTTP Serverをインストール。実体として入るのは下記になる。

```shell
sudo apt install postgresql postgresql-contrib libpq5 postgresql-12 postgresql-client-12 postgresql-client-common postgresql-common sysstat
sudo apt install apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php libapache2-mod-php7.4 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 php7.4-cli php7.4-json php7.4-opcache php7.4-readline
```

Zabbixを動かした後の不具合対処や追加機能で他に入れるパッケージがあるが、それは後で。

## Zabbix 本体のインストール

```shell
wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
sudo dpkg -i zabbix-release_5.0-1+$(lsb_release -sc)_all.deb
sudo apt update
sudo apt -y install zabbix-server-pgsql zabbix-frontend-php php7.4-pgsql zabbix-agent zabbix-apache-conf
```

これは公式サイト通り。

## PostgreSQLに Zabbix用Databaseを作成
```shell-session
sudo -u postgres createuser --pwprompt zabbix
```
Zabbix が利用するDatabaseを作成する。`--pwprompt` はパスワードを作成するためのオプションで、このコマンドを実行すると、Databaseを利用する際のPasswordを決めるよう要求される。ので、適当に設定。

```shell-session
sudo -u postgres createdb -O zabbix zabbix
```

zabbixユーザ権限で、zabbixという名前のDatabase を作成する。

```shell-session
zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix
```
`create.sql.gz` は先にインストールした`zabbix-server-pgsql` に含まれるファイル。
解凍するとかなり長いSQLが出てくる。これをPostgreSQL の zabbix Databaseに流し込む。

Zabbix 6.0ではファイルのパスが以下のように変わっていた。
```shell-session
 zcat /usr/share/doc/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
```


## Zabbix 起動に必要な設定

### /etc/zabbix/zabbix_server.conf
```shell
### Option: DBPassword
#       Database password.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword= ← コメントアウトを解除し、先に設定したZabbix DB の Password を入力。
```

### /etc/zabbix/apache.conf
```shell
<Directory "/usr/share/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

    <IfModule mod_php5.c>
　　　　 (snip)
        # php_value date.timezone Europe/Riga ← コメントアウトを解除し、Asia/Tokyoとかにする
    </IfModule>
    <IfModule mod_php7.c>
　　　　 (snip)
        # php_value date.timezone Europe/Riga ← コメントアウトを解除し、Asia/Tokyoとかにする
    </IfModule>
</Directory>
```
ここで編集した`/etc/zabbix/apache.conf` は　パッケージ `zabbix-apache-conf` に含まれていた。

### Zabbix の起動
```shell
sudo  systemctl restart zabbix-server zabbix-agent apache2
sudo  systemctl enable zabbix-server zabbix-agent apache2
```
これで```http://サーバのアドレス/zabbix/``` へアクセスすると、Zabbixのsetup wizardが立ち上がる。
デフォルトのログインアカウントはAdmin/zabbix.

これでブラウザからZabbixへアクセスできる。 ![Zabbixの起動画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409463/9d7212e5-7241-2e44-31f1-1e6e28080270.png)

### 初期カスタマイズ
##### 【前準備】Linuxサーバ自体の日本語対応
Zabbixの日本語対応を行う場合、Zabbixが動いているサーバ自体が日本語対応しているかの確認を実施する。
```shell
$ locale -a |grep JP
ja_JP.utf8
```
もしコメントアウトされていた場合、```/etc/locale.gen``` を編集し、コメントアウトを解除する。
```shell
$ sudo local-gen
Generating locales (this might take a while)...
  en_AG.UTF-8... done
(snip)
  ja_JP.UTF-8... done
Generation complete.
```
#### Zabbixの日本語化
左下の**User Setting メニュー** から変更可能。

#### グラフの日本語化 
使用帯域を表すGraph表示の一部が正しく表示できない問題があった。Zabbix の Graph表示用フォントが日本語に対応していないことが問題。 

```shell
sudo apt install fonts-takao-pgothic
sudo update-alternatives --install /usr/share/zabbix/assets/fonts/graphfont.ttf zabbix-frontend-font /usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf 20
```

RHELの例では `ln`で直接書き換える手法も見たが、Ubuntuでは*update-alternatives*を使うのがお作法。

### SNMP Trap 受信
Zabbix でも SNMP Trapを受信できる。ただ、Zabbix自体では受信できず、snmptrapdで受信/snmpttで成形したものを表示する形で行う。Zabbix自体はsnmptrapdのラッパーとして動作。4.0/5.0でも同様で、そういうPolicyで設計されている様子。

ただ、Zabbix でSNMP Trap を扱うのは結構大変で実装方法はかなり複雑。別の記事に整理した。

https://qiita.com/Shakapon/items/aab44eaceb75dc8c312e