過去の主なバージョン履歴は下記の通りです。
Zabbix 1.0 2004年 Zabbix 1.1 2006年 Zabbix 1.4 2007年 Zabbix 1.6 2008年 Zabbix 1.8 2009年 Zabbix 2.0 LTS 2012年 Zabbix 3.0 LTS 2016年 Zabbix 4.0 LTS 2018年10月1日 Zabbix 5.0 LTS 2020年5月12日 Zabbix 6.0 LTS 2022年2月15日
サポート終了予定日は下記を参照してください。
インストールは下記の手順に従います。例として Rocky Linux 8 上のコンテナに Zabbix Server 6.0 をインストールする手順を示します。
Podman をインストールします。
# dnf -y install podman podman-docker # touch /etc/containers/nodocker
下記の環境変数を使用します。
NET_NAME=zabbix_net NET_ADDR=192.168.0.0/24 DB_ADDR=192.168.0.2 DB_IMAGE=docker.io/mysql DB_SERVER=zabbix_db DB_NAME=zabbix DB_USER=zabbix DB_PASS=zabbix123 DB_ROOT_PASS=root123 DB_VERSION=8.0.32 ZABBIX_SERVER=zabbix_server ZABBIX_ADDR=192.168.0.3 ZABBIX_PORT=80 AGENT_NAME=zabbix_agent AGENT_ADDR=192.168.0.4
Dockerネットワークを作成します。
# docker network create --subnet ${NET_ADDR} ${NET_NAME}
DBコンテナを起動します。
# docker run -d --name ${DB_SERVER} -h ${DB_SERVER} --net ${NET_NAME} --ip ${DB_ADDR} \ -e MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS} ${DB_IMAGE}:${DB_VERSION}
DBに接続できることを確認します。接続できるようになるまで数分かかることもあります。
# docker exec -it ${DB_SERVER} mysql -u root -p${DB_ROOT_PASS} .... mysql> quit
Zabbixサーバコンテナを起動します。
# docker run -d --name ${ZABBIX_SERVER} -h ${ZABBIX_SERVER} \ --net ${NET_NAME} --ip ${ZABBIX_ADDR} -p ${ZABBIX_PORT}:80 docker.io/rockylinux/rockylinux:8 /sbin/init
Zabbixサーバにログインします。
# docker exec -it ${ZABBIX_SERVER} /bin/bash
ログイン後は上記の環境変数を再度設定してください。
DB_ADDR=192.168.0.2 DB_ROOT_PASS=root123 DB_USER=zabbix DB_PASS=zabbix123 DB_NAME=zabbix ZABBIX_SERVER=zabbix_server ZABBIX_ADDR=192.168.0.3
必要なものをインストールします。
# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm # dnf clean all # dnf -y install glibc-langpack-en glibc-langpack-ja mysql \ zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
MySQLサーバを初期化します。server.sql.gz の読込には時間がかかります。
# cat <<EOF | mysql -h ${DB_ADDR} -uroot -p${DB_ROOT_PASS} create database ${DB_NAME} character set utf8mb4 collate utf8mb4_bin; create user ${DB_USER}@'${ZABBIX_ADDR}' identified with mysql_native_password by '${DB_PASS}'; grant all privileges on ${DB_NAME}.* to ${DB_USER}@'${ZABBIX_ADDR}'; set global log_bin_trust_function_creators = 1; EOF # zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h ${DB_ADDR} -u${DB_USER} -p${DB_PASS} ${DB_NAME} # echo "set global log_bin_trust_function_creators = 0" | mysql -h ${DB_ADDR} -uroot -p${DB_ROOT_PASS} ${DB_NAME}
/etc/nginx/nginx.conf ファイルを編集し、デフォルトサーバをコメントアウトして無効化します。
# server { # listen 80 default_server; # listen [::]:80 default_server; # server_name _; # root /usr/share/nginx/html; # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # location / { # } # error_page 404 /404.html; # location = /40x.html { # } # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # }
/etc/nginx/conf.d/zabbix.conf を編集します。server_name にはブラウザからアクセスする際の http://server_name/ に指定するサーバ名を設定してください。
server { listen 80; server_name zabbix.example.com;
/etc/zabbix/zabbix_server.conf を編集します。
DBHost=192.168.0.2 # ${DB_ADDR}の値 DBName=zabbix # ${DB_NAME}の値 DBUser=zabbix # ${DB_USER}の値 DBPassword=zabbix123 # ${DB_PASS}の値
プロセスを起動します。
# systemctl start zabbix-server zabbix-agent nginx php-fpm # systemctl enable zabbix-server zabbix-agent nginx php-fpm
初期設定を行うため、ブラウザから下記を行ってください。
下記のログを見ると Zabbix サーバの状況が分かります。
問題なさそうであれば、Zabbixサーバコンテナから抜けます。
# exit
Zabbixエージェントコンテナを起動します
# Zabbixエージェントコンテナを起動 # docker run -d -it --name ${AGENT_NAME} -h ${AGENT_NAME} \ --net ${NET_NAME} --ip ${AGENT_ADDR} docker.io/rockylinux/rockylinux:8 /sbin/init # Zabbixエージェント用コンテナにログイン # docker exec -it ${AGENT_NAME} /bin/bash # Zabbixエージェントをインストール # rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm # dnf clean all # dnf -y install zabbix-agent # コンフィグファイル修正 # sed -i 's/^Server=.*/Server=192.168.0.3/' /etc/zabbix/zabbix_agentd.conf # sed -i 's/^ServerActive=.*/ServerActive=192.168.0.3/' /etc/zabbix/zabbix_agentd.conf # Zabbixエージェント起動 # systemctl restart zabbix-agent # systemctl enable zabbix-agent # exit
まずは監視対象のホストを登録します。Zabbix画面の [設定]-[ホスト]-[ホストの作成] から下記を指定して [追加] します。
host-4 に最もシンプルな icmpping アイテムを追加してみます。[設定]-[ホスト] で対象ホスト host-4 の横の [アイテム]-[アイテムの作成] から下記を指定して [適用] します。
[監視データ]-[最新データ] でホスト host-4 を選択ししばらくすると、最新の値として 1 が表示されます。icmpping は ping で死活監視を行い、監視対象が生きていれば 1、ダウンしていれば 0 を記録します。
利用可能なアイテムタイプは下記を参照してください。
[設定]-[ホスト] で対象ホスト host-4 の横の [トリガー]-[トリガーの作成] から下記を指定して [追加] します。
host-4 を停止すると icmpping の結果が 0 となります。上記の条件式は、最近3回分の結果の最大値が0である(つまりすべて0である)ことをチェックしています。この条件が満たされると重度の障害となり、[監視データ]-[ダッシュボード] や [監視データ]-[障害] にアラートが表示されます。利用可能なトリガー関数は下記を参照してください。
ホストグループは、複数のホストをグルーピングするものです。ホストグループを追加するには [設定]-[ホストグループ]-[ホストグループの作成] から下記を指定して [追加] します。
ホストをホストグループに追加するには、[設定]-[ホスト] でホストをクリックし、[グループ] にホストグループを追加します。
テンプレートはアイテムやトリガーを含みます。ホストにテンプレートを適用することで、あらかじめ用意しておいたアイテムやトリガーをホストに対して適用することができます。テンプレートを追加するには、[設定]-[テンプレート]-[テンプレートの作成] から下記を指定して [追加] します。
テンプレートに対して、アイテムやトリガーを作成することができます。
テンプレートをホストに適用するには、[設定]-[ホスト] から対象ホストをクリックし、[テンプレート] にテンプレートを追加します。
ICMP-ECHO(Ping)を用いて死活監視を行います。Zabbixエージェントがインストールされていなくても監視できます。アイテムには icmpping を指定します。生きていれば 1、ダウンしていれば 0 が記録されます。トリガーには 1回でも応答が無ければアラートとする場合は、 last(/ホスト名/icmpping)=0 を、直近3回連続して応答が無い時にエラーとする場合は、max(/ホスト名/icmpping,#3)=0 を指定します。
ICMP-ECHO(Ping) ではなく、Zabbix エージェントに対して接続可能か否かで死活監視します。アイテムには agent.ping を指定します。icmpping では、生きていれば 1、ダウンしていれば 0 でしたが、agent.ping は生きていれば 1、死んでいればデータなしとなるため、トリガーの条件式は last(...)=0 ではなく、nodata(/ホスト名/agent.ping,5m)=1 の様に設定します。
CPUの使用率を監視するにはアイテムに system.cpu.util を指定します。直近5分間のCPU使用率がいずれも80%を上回った場合にアラートを発生させる場合、トリガーには min(/ホスト名/system.cpu.util,5m)>80 を指定します。
メモリ使用率を監視する手段は対象OSによって微妙に異なります。既存のテンプレートを参考にするのがよさそうです。例えば、Windows memory by Zabbix agent というテンプレートでは、アイテムに last(//vm.memory.size[used]) / last(//vm.memory.size[total]) * 100 という式から計算される vm.memory.util という名前のキーを定義し、トリガーに min(/ターゲット/vm.memory.util,5m)>{$MEMORY.UTIL.MAX} を指定しています。また、Linux memory by Zabbix agent というテンプレートでは、メモリの空き率 vm.memory.size[pavailable] の値を 100 から引いた値を vm.memory.utilization という依存アイテムとして定義し、トリガーに min(/ターゲット/vm.memory.utilization,5m)>{$MEMORY.UTIL.MAX} を指定しています。他にもスワップの頻度などを監視しています。
アイテムでタイプに SNMPv* agent、キーには任意の識別名、SNMP OID に .1.3.6.1.2.1.25.1.1.0 などのOID、SNMPコミュニティに public などのSNMPコミュニティ名を指定します。トリガーはMIB値の型(整数や文字列など)によって適切に指定してください。
Web監視するには、[設定]-[ホスト] で対象ホストの [Web]-[Webシナリオの作成] から Web監視シナリオを作成します。[ステップ] タブの [追加] から Web監視の対象とする URL を入力してください。
Zabbixサーバから、Zabbixエージェントに対してコマンドラインから要求を行うツールです。
# dnf -y install zabbix-get # zabbix_get -s 192.168.0.4 -p 10050 -k "agent.ping"
Zabbixエージェントから、Zabbixサーバーに対して通知を送信するツールです。
# dnf -y install zabbix-sender # zabbix_sender -z 192.168.0.3 -s "Sender Test" -k db.connections -o 43
Zabbix Proxy は Zabbix Server と Zabbix Agent の中間に位置し、Server から設定情報を受け取り Agent に設定したり、Agent からの情報をキャッシュして Server に一括転送したりします。Server と Agent が直接通信できない場合に Server と Proxy、Proxy と Agent 間の通信さえ確保すれば監視できること、Server の負荷を Proxy に分散できること、通信負荷を減らせることなどのメリットがあります。
Zabbix Proxy から見て、Proxy が Server に接続して設定情報を読み取りに行く アクティブモード と、Server が Proxy に接続して設定情報を受け取る パッシブモード があります。
# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm # dnf clean all # dnf -y install mariadb zabbix-proxy-mysql zabbix-sql-scripts # cat <<EOF | docker exec -i zabbix-db mysql -h 192.168.0.2 -u root -proot123 create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin; create user zabbix_proxy@'%' identified by 'zabbix_proxy123'; grant all privileges on zabbix_proxy.* to zabbix_proxy@'%'; EOF # cat /usr/share/doc/zabbix-sql-scripts/mysql/proxy.sql | \ mysql -h 192.168.0.2 -u zabbix_proxy -pzabbix123 zabbix_proxy # vi /etc/zabbix/zabbix_proxy.conf
コンフィグファイルには下記を設定します。取得周期はお試し用に短い時間(60秒)を指定していますが、本番環境では負荷に応じた適切な値に設定してください。
ProxyMode=0 # プロキシモード(0:アクティブ、1:パッシブ) Server=192.168.0.3 # Zabbixサーバのアドレス Hostname=proxy-6 # プロキシ名 DBHost=192.168.0.2 # DBサーバのアドレス DBName=zabbix_proxy # DBのデータベース名 DBUser=zabbix_proxy # DBユーザ名 DBPassword=zabbix123 # DBパスワード ConfigFrequency=60 # アクティブモードの際の設定情報取得周期
準備ができたらプロキシを起動します。
# systemctl start zabbix-proxy # systemctl enable zabbix-proxy
問題がある場合はログにエラーメッセージが出力されます。
# tail -f /var/log/zabbix/zabbix_proxy.log
Web画面の [管理]-[プロキシ]-[プロキシの作成] からプロキシを登録します。アクティブ、パッシブの選択はプロキシの設定に合わせてください。また、プロキシ名はプロキシ側のコンフィグファイルの Hostname で指定した名前に合わせてください。
また、[設定]-[ホスト] でホストを作成する際に、上記で作成したプロキシを指定してください。
エージェント側は、/etc/zabbix/zabbix_agentd.conf の Server の値を Zabbix Server ではなく Zabbix Proxy のアドレスを指定してください。
監視のための通信負荷を減らすこと、また、整合性の観点から同時に取得すべきデータをまとめて取得することを目的として依存アイテムがサポートされています。マスターとなるアイテムを一度だけ取得し、その値を複数の依存アイテムに分解することで、一度に複数の値を取得することが可能となります。まず、マスターとなるアイテムをひとつアイテムに追加します。もうひとつアイテムを作成する際に、[タイプ] に 依存アイテム を選択し、[キー] には自由なキー名を命名し、[マスターアイテム] にマスターとなるアイテムを指定します。また、[保存前処理] でマスターアイテムの値から依存アイテムの値を取り出す処理を設定します。例えば、JSON から "name" の値を取り出すには JSON Path $.name を指定します。
サーバ・エージェント間は比較的簡単なプロトコルで実装されています。要求側も応答側も、4バイトの固定値("ZBXD")と、1バイトのバージョン番号、8バイトのデータ長、データから構成されます。データ部は "agent.ping" のような文字列でやりとりされます。
Header: 0x5a 0x42 0x58 0x44 ... "ZBXD" Version: 0x01 ... Version 1 Length: 8バイト(BIGエンディアン)のデータ長 Data: 文字列
CentOS 7 に Zabbix Server 4.0 をインストールする際に /usr/share/doc/zabbix-server-mysql*/create.sql.gz ファイルが無い場合、/etc/yum.conf の nodocs を削除するとよいようです。
tsflags=nodocs # 修正前 tsflags= # 修正後