とほほのZabbix入門

トップ > Zabbix

目次

Zabbixとは

Zabbix関連用語

Zabbixサーバ
監視を行うサーバ。
Zabbixエージェント
監視される側にインストールされるプログラム。
Zabbixエージェント2
Zabbixエージェントの次世代版。Go言語で開発されており、いくつかの教化ポイントがあります。
Zabbixプロキシ
ZabbixサーバとZabbixエージェントの中間に位置し、複数のZabbixエージェントから収集したデータをまとめてZabbixサーバに転送する機能を持ちます。
パッシブチェック
Zabbixエージェントが受信側となり、Zabbixサーバからの要求にZabbixエージェントが応える方式です。
アクティブチェック
Zabbixエージェントが送信側となり、ZabbixエージェントからZabbixサーバに対して通知を行う方式です。
ホスト
監視対象。例えば、192.168.0.4 のホストなどのIPアドレスを持つホスト。
アイテム
監視項目。例えば、死活状況、CPU負荷状況、メモリ状況など。
トリガ
監視項目の値によってアラートを発生させる条件。例えば、CPU負荷が90%を超えると高レベルのアラートを上げるなど。

バージョン

過去の主なバージョン履歴は下記の通りです。

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日

サポート終了予定日は下記を参照してください。

インストール

CentOS 8(Rocky Linux)に Podman(Docker) を用いてインストールする例を示します。

# CentOS 8(Rocky Linux) に Podman(Docker)をインストール
# dnf -y install podman podman-docker
# touch /etc/containers/nodocker

Dockerネットワークを作成します。

# Dockerネットワークを作成
# docker network create --subnet 192.168.0.0/24 zabbix-net

DBコンテナを起動します。

# MariaDBを起動
# docker run -d -it --name zabbix-db -h zabbix-db -e MYSQL_ROOT_PASSWORD=root123 \
  --net zabbix-net --ip 192.168.0.2 docker.io/mariadb
# cat <<EOF | docker exec -i zabbix-db mysql -h 192.168.0.2 -u root -proot123
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@'%' identified by 'zabbix123';
grant all privileges on zabbix.* to zabbix@'%';
EOF

Zabbixサーバコンテナを起動します。

# Zabbixサーバ用コンテナを起動
# docker run -d -it --name zabbix-server -h zabbix-server \
  --net zabbix-net --ip 192.168.0.3 -p 80:80 docker.io/rockylinux/rockylinux /sbin/init

# Zabbixサーバコンテナにログイン
# docker exec -it zabbix-server /bin/bash

# Zabbixサーバをインストール
# 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 glibc-langpack-en glibc-langpack-ja mariadb \
  zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

# DBを構築
# zcat /usr/share/doc/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h 192.168.0.2 -u zabbix -pzabbix123 zabbix

# コンフィグファイル修正
# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org
# sed -i 's/# DBHost=localhost/DBHost=192.168.0.2/' /etc/zabbix/zabbix_server.conf
# sed -i 's/# DBPassword=/DBPassword=zabbix123/' /etc/zabbix/zabbix_server.conf
# cp /etc/nginx/conf.d/zabbix.conf /etc/nginx/conf.d/zabbix.conf.org
# sed -i 's/^# *listen/        listen/' /etc/nginx/conf.d/zabbix.conf
# sed -i 's/^# *server_name.*/        server_name     192.168.56.116;/' /etc/nginx/conf.d/zabbix.conf

# Zabbixサーバ起動
# systemctl restart zabbix-server zabbix-agent nginx php-fpm
# systemctl enable zabbix-server zabbix-agent nginx php-fpm
# exit

Zabbixエージェントコンテナを起動します

# Zabbixエージェント用コンテナを起動
# docker run -d -it --name zabbix-agent -h zabbix-agent \
  --net zabbix-net --ip 192.168.0.4 docker.io/rockylinux/rockylinux /sbin/init

# Zabbixエージェント用コンテナにログイン
# docker exec -it zabbix-agent /bin/bash

# Zabbixエージェントをインストール
# 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 zabbix-agent

# コンフィグファイル修正
# cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf.org
# 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 となり、[監視データ]-[ダッシュボード] や [監視データ]-[障害] にアラートが表示されます。

利用可能なトリガー関数は下記を参照してください。

ホストグループを追加する

ホストグループは、複数のホストをグルーピングするものです。ホストグループを追加するには [設定]-[ホストグループ]-[ホストグループの作成] から下記を指定して [追加] します。

ホストをホストグループに追加するには、[設定]-[ホスト] でホストをクリックし、[グループ] にホストグループを追加します。

テンプレートを追加する

テンプレートはアイテムやトリガーを含みます。ホストにテンプレートを適用することで、あらかじめ用意しておいたアイテムやトリガーをホストに対して適用することができます。テンプレートを追加するには、[設定]-[テンプレート]-[テンプレートの作成] から下記を指定して [追加] します。

テンプレートに対して、アイテムやトリガーを作成することができます。

テンプレートをホストに適用するには、[設定]-[ホスト] から対象ホストをクリックし、[テンプレート] にテンプレートを追加します。

主な監視項目

Ping

ICMP-ECHO(Ping)を用いて死活監視を行います。Zabbixエージェントがインストールされていなくても監視できます。アイテムには icmpping を指定します。生きていれば 1、ダウンしていれば 0 が記録されます。トリガーには 1回でも応答が無ければアラートとする場合は、 last(/ホスト名/icmpping)=0 を、直近5回連続して応答が無い時にエラーとする場合は、直近5回中0と等しいデータが4個より大きいという意味で count(/ホスト名/icmpping,#5,"eq",0)>4 を指定します。

エージェントPing

ICMP-ECHO(Ping) ではなく、Zabbix エージェントに対して接続可能か否かで死活監視します。アイテムには agent.ping を指定します。icmpping では、生きていれば 1、ダウンしていれば 0 でしたが、agent.ping は生きていれば 1、死んでいればデータなしとなるため、トリガーの条件式は last(...)=0 ではなく、nodata(/ホスト名/agent.ping,5m)=1 の様に設定します。

CPU使用率

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} を指定しています。他にもスワップの頻度などを監視しています。

Web監視

Web監視するには、[設定]-[ホスト] で対象ホストの [Web]-[Webシナリオの作成] から Web監視シナリオを作成します。[ステップ] タブの [追加] から Web監視の対象とする URL を入力してください。

ツール

Zabbix get

Zabbixサーバから、Zabbixエージェントに対してコマンドラインから要求を行うツールです。

# dnf -y install zabbix-get
# zabbix_get -s 192.168.0.4 -p 10050 -k "agent.ping"
Zabbix sender

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:    文字列

Copyright (C) 2022 杜甫々
初版:2022年4月17日 最終更新:2022年4月17日
http://www.tohoho-web.com/ex/zabbix.html