はじめに
Network を設計・構築した後、長い運用が始まる. Network 機器は機械だから当然に壊れる. 想定していないTraffic が流れる、通信品質が劣化する。何かの方法で観測し続け、監視する必要がある。
Cisco でもどこでも自前の監視システムを提供しているが、下手にそれを入れるとベンダロックに繋がる。
Network 機器ベンダから独立していて、ソースコードが公開されていて、どこかが保守を提供してくれるものが望ましい。 というわけで Zabbix.
Zabbix サーバの構築
基本的には Zabbix の公式サイト に従えば良い。ただ、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にこだわるべきでなかったかもしれない。
構築に必要な関連ソフトウェアのインストール
sudo apt install postgresql postgresql-contrib
sudo apt install apache2 libapache2-mod-php
PostgreSQL/Apache HTTP Serverをインストール。実体として入るのは下記になる。
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 本体のインストール
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を作成
sudo -u postgres createuser --pwprompt zabbix
Zabbix が利用するDatabaseを作成する。--pwprompt
はパスワードを作成するためのオプションで、このコマンドを実行すると、Databaseを利用する際のPasswordを決めるよう要求される。ので、適当に設定。
sudo -u postgres createdb -O zabbix zabbix
zabbixユーザ権限で、zabbixという名前のDatabase を作成する。
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ではファイルのパスが以下のように変わっていた。
zcat /usr/share/doc/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix
Zabbix 起動に必要な設定
/etc/zabbix/zabbix_server.conf
### Option: DBPassword
# Database password.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
# DBPassword= ← コメントアウトを解除し、先に設定したZabbix DB の Password を入力。
/etc/zabbix/apache.conf
<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 の起動
sudo systemctl restart zabbix-server zabbix-agent apache2
sudo systemctl enable zabbix-server zabbix-agent apache2
これでhttp://サーバのアドレス/zabbix/
へアクセスすると、Zabbixのsetup wizardが立ち上がる。
デフォルトのログインアカウントはAdmin/zabbix.
初期カスタマイズ
【前準備】Linuxサーバ自体の日本語対応
Zabbixの日本語対応を行う場合、Zabbixが動いているサーバ自体が日本語対応しているかの確認を実施する。
$ locale -a |grep JP
ja_JP.utf8
もしコメントアウトされていた場合、/etc/locale.gen
を編集し、コメントアウトを解除する。
$ 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表示用フォントが日本語に対応していないことが問題。
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 を扱うのは結構大変で実装方法はかなり複雑。別の記事に整理した。