ZABBIXの設定



●インストール前の準備

 CentOS 8(または、CentOS Stream 8)の場合、「●PacemakerでZabbix-Serverを制御する(DRBD利用)」を参照し、MariaDBを設定してください。

 MariaDBのインストール

 参考URL:Zabbix 5.4 インストールメモ(CentOS Stream 8)

 ZABBIXの監視記録を保管するMariaDBサーバとMariaDB用開発パッケージをインストールします。
 rootユーザでログインして次のコマンドを実行します。
(CentOS Stream 8の場合)
# dnf install -y mariadb-server mariadb-devel
# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!


(CentOS 7の場合)
# yum install -y mariadb-server mariadb-devel

(CentOS 6の場合)
# export LANG=C
# yum install -y mysql-server mysql-devel
 MySQLデータベースサーバの設定ファイルを以下のように修正します。
(CentOS Stream 8の場合)
# vi /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
# 下記4行を追記
character-set-server = utf8
collation-server     = utf8_bin
skip-character-set-client-handshake
innodb_file_per_table

(CentOS 7の場合)
# vi /etc/my.cnf
[mysqld]
character-set-server=utf8 ← コメントアウトし有効化

※
上記を設定せずに後述するZABBIX用のデータベースを作成した場合、
監視画面上部のヒストリ情報が以下のように文字化けしています。

ヒストリ:????????>>???????>>????????

(CentOS 6の場合)
# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

default-character-set=utf8 ← この行を追加
skip-character-set-client-handshake ← この行を追加

※
default-character-setを設定せずに後述するZABBIX用のデータベースを作成した場合、
監視画面上部のヒストリ情報が以下のように文字化けしています。

ヒストリ:????????>>???????>>????????

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 MariaDBデータベースサーバを起動します。
(CentOS Stream 8の場合)
# systemctl enable --now mariadb

(CentOS 7の場合)
# systemctl start mariadb
# systemctl enable mariadb

(CentOS 6の場合)
# service mysqld start
# service mysqld enable


●Zabbix 5.4のインストール

 Zabbix 5.4をインストールします。
# dnf install https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
# dnf install zabbix-server-mysql zabbix-web-service zabbix-sql-scripts zabbix-agent zabbix-web-mysql zabbix-apache-conf zabbix-web-japanese zabbix-get
 必要に応じて、TIMEZONEを編集します。
# vi /etc/php-fpm.d/zabbix.conf
php_value[date.timezone] = "Asia/Tokyo"


●Zabbix 5.4のデータベース設定(CentOS Stream 8)

 MariaDBにログインし、Zabbix用のデータベース「zabbix」と、ユーザ「zabbix」を作成します。
# mysql -uroot -p
Enter password: 
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'password';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit
 Zabbix用のデータベーススキーマとデータをインポートします(少し時間がかかります)。
# zcat /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz | mysql -uzabbix zabbix -p
Enter password:  ← 上記で設定したパスワードを入力
 zabbix-serverの設定ファイルを編集します。
# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=yourpassword

# systemctl enable --now zabbix-server
 Apache及びPHPをインストールしていない場合、インストールします。
php-fpm、Apacheをインストール済みの場合
# systemctl restart php-fpm httpd
# systemctl enable --now httpd ← 必要に応じて実施
# systemctl enable --now php-fpm ← 必要に応じて実施


 ZABBIX用データベースの設定(CentOS 6、7)

 ZABBIX用のデータベースを作成します。
mysql> create database zabbix character set utf8;
 接続ユーザ「zabbix」を作成し、パスワードを設定します。下記の場合、接続ユーザzabbixは、zabbixデータベースに対してすべての権限を有するように設定しています。
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '(パスワード)';
mysql> flush privileges;
  • 注意
  • 上記の設定例で示しているパスワードは「zabbix」となっていますが、適切なパスワードを設定して利用するようにしてください。これより後の入力例に出てくるパスワード「zabbix」も同様に、ここで設定したパスワードを入力します。
 MySQLデータベースからログアウトします。
mysql> exit
 OS起動時に自動的にMySQL(MariaDB)データベースサーバが起動するように設定します。
(CentOS 7の場合)
# systemctl enable mariadb

(CentOS 6の場合)
# chkconfig mysqld on

 ApacheとPHPのインストール

 ZABBIXサーバのWebインターフェイスを利用できるようにするために、ApacheとPHPをインストールします。
(CentOS Stream 8の場合)
# dnf install httpd php-fpm -y

必要に応じて、TIMEZONEを編集します。
# vi /etc/php-fpm.d/zabbix.conf
php_value[date.timezone] = "Asia/Tokyo"

# systemctl enable --now httpd php-fpm

(CentOS 6,7共通)
# yum install -y httpd php php-gd php-bcmath php-mysql php-mbstring

(CentOS 7の場合)
# systemctl start httpd php-fpm
# systemctl enable httpd php-fpm
 PHPをソースからインストールしている場合、ZABBIX用に以下のようにconfigureオプションをつけます。
# ./configure --with-apxs2 --with-gd --with-bcmath --with-mysql --with-mbstring --with-sockets


●Zabbixエージェントの起動及び動作確認(CentOS Stream 8)

 Zabbixエージェントを起動してます。
# systemctl enable --now zabbix-agent
 Zabbixエージェントが正常に動作しているか確認します(Zabbixのバージョンが表示されればOKです)。
$ zabbix_get -s 127.0.0.1 -k agent.version
5.4.8
 リモートのZabbix Serverから監視される場合、下記のように設定します。
# vi /etc/zabbix/zabbix_agentd.conf
Hostname=hostA ← Zabbix Serverで監視ホストして登録した時のホスト名を指定
ListenIP=127.0.0.1,192.168.0.44 ← 192.168.0.44はzabbix_agentがインストールされているIPアドレス
AllowRoot=1 ← zabbixがroot権限で動作する場合のみ

# systemctl restart zabbix-agent ← zabbix-agentの起動


●Firewalldの設定

 Firewallを導入済みの場合、下記のサービス(または、ポート)を開けるようにします。
  • http(80/tcp)
  • https(443/tcp)
  • mysql(3306/tcp)
  • zabbix-agent(10050/tcp)
  • zabbix-server(10051/tcp)
# firewall-cmd --add-service={http,https,mysql,zabbix-agent,zabbix-server} --permanent
# firewall-cmd --reload
 http://(ZabbixサーバのIPアドレス)/zabbix/ へアクセスし、Zabbixのセットアップを進めてください。

 Zabbix 5.4インストール時の初期設定画面はこちらです。

●開発ツールのインストール(ソースからインストールする場合)

 ※必要に応じて・・・

 ソースコードをコンパイルしてビルドするために必要な、Cコンパイラなどの開発ツールをインストールします。yumのgroupinstallコマンドで「Development Tools」グループをインストールすると、必要な開発ツールを一括してインストールできます。
# yum groupinstall -y "Development Tools"

●ZABBIXの機能を利用するために必要なパッケージのインストール(ソースからインストールする場合)

 ZABBIXサーバが有している監視機能をすべて利用するためには、以下のソフトウェアやライブラリが必要です。

ライブラリ名 説明
fping pingによる死活監視を利用する場合に必要なソフトウェア
iksemelライブラリ Jabberによる障害通知を行うために必要なライブラリ
curlライブラリ Web監視を行うために必要なライブラリ
LDAPライブラリ LDAP監視を行うために必要なライブラリ
OpenIPMIライブラリ IPMI監視を行うために必要なライブラリ
netsnmpライブラリまたはucdsnmpライブラリ SNMP監視を行うために必要となるライブラリ
unixodbcライブラリまたはiodbcライブラリ ODBCによるデータベース監視を行うために必要となるライブラリ
表1 ZABBIXの機能を利用するために必要なパッケージ

 fpingとiksemelライブラリに関しては、日本のZABBIXコミュニティである「ZABBIX-JP」でパッケージが公開されています。そこで、ZABBIX-JPのリポジトリをyumコマンドで利用できるように設定ファイルをインストールするか、直接yumコマンドでインストールします。
# rpm -Uvh http://www.zabbix.jp/rpms/rhel5/i386/zabbix-jp-release-5-1.noarch.rpm
 次に、yumコマンドで必要なパッケージをインストールします。
(CentOS 6,7共通)
# yum install -y fping iksemel iksemel-devel curl curl-devel openldap openldap-devel /
OpenIPMI OpenIPMI-devel net-snmp net-snmp-devel unixODBC unixODBC-devel
 この時、以下のように表示されることがあります。
パッケージ fping は利用できません。
パッケージ iksemel は利用できません。
パッケージ iksemel-devel は利用できません。
 この場合、EPELリポジトリからダウンロードできるように設定します。
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
# sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo
# yum --enablerepo=epel -y update epel-release
# yum --enablerepo=epel install fping iksemel iksemel-devel
 この場合、rpmfindからダウンロードする。
# wget ftp://rpmfind.net/linux/epel/6/i386/iksemel-1.4-2.el6.i686.rpm
# wget ftp://rpmfind.net/linux/epel/6/x86_64/iksemel-devel-1.4-2.el6.i686.rpm
# rpm -ivh iksemel-1.4-2.el6.i686.rpm
# rpm -ivh iksemel-devel-1.4-2.el6.i686.rpm
 以上で、ZABBIXをビルドするための環境が整いました。

●ZABBIXサーバのビルドとインストール

 ZABBIX 1.6.7のソースコードをダウンロードして展開します。
# cd /usr/local/src
# tar zxvf zabbix-1.6.7.tar.gz
 ZABBIXサーバのすべての機能を有効にするため、次のオプションを指定してconfigureコマンドを実行します。

オプション名 説明
--enable-server ZABBIXサーバのバイナリをコンパイルします
--enable-ipv6 IPv6のサポートを有効にします
--with-mysql ZABBIXサーバのデータ保存にMySQLデータベースを利用します
--with-jabber Jabberチャットプロトコルによる通知を利用する場合に指定します
--with-libcurl Web監視の機能を利用する場合に指定します
--with-unixodbcまたは--with-iodbc データベース監視を行う場合に、unixODBCまたはiODBCのどちらを利用するかを指定します
--with-net-snmpまたは--with-ucd-snmp SNMP監視を行う場合に、net-snmpまたはucd-snmpのどちらを利用するかを指定します
--with-ldap LDAP監視を行う場合に指定します
--with-openipmi IPMI監視を行う場合に指定します
表2 ZABBIXのconfigureオプション
# cd zabbix-1.6.5
# ./configure --enable-server --enable-ipv6 --with-mysql --with-net-snmp --with-jabber --with-libcurl --with-ldap --with-openipmi --with-unixodbc
 makeを実行し、コンパイルを行います。
# make
 特にエラーが出力されずに終了すれば成功です。以下のコマンドを実行してインストールを行います。デフォルトでは/usr/local以下にバイナリファイルがインストールされます。
# make install
 以上で、ZABBIXサーバの動作に必要な実行ファイルがインストールされました。

●ZABBIXサーバのyumコマンドによるインストール

 データベースにMySQLを使用することを前提とし、下記パッケージをインストールします。
(CentOS 7の場合)
yum -y install zabbix zabbix-get zabbix-agent zabbix-server zabbix-server-mysql zabbix-web-japanese zabbix-web-mysql
(CentOS 6の場合)
yum -y install zabbix zabbix-agent zabbix-proxy zabbix-proxy-mysql zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-web-japanese

●データベースへの初期データのインポート(ソースからのインストールの場合)

 ZABBIXサーバが利用するデータベースに初期データをインポートします。以下のコマンドを実行し、zabbixデータベースにスキーマと初期データをインポートします。
# mysql -uzabbix -p zabbix < ./create/schema/mysql.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < ./create/data/data.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < ./create/data/images_mysql.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

●データベースへの初期データのインポート(rpmパッケージからのインストールの場合)

 ZABBIXサーバが利用するデータベースに初期データをインポートします。以下のコマンドを実行し、zabbixデータベースにスキーマと初期データをインポートします。
(CentOS 7の場合)
Zabbix 2.4の場合
# mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-*.*.*/create/schema.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-*.*.*/create/images.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-*.*.*/create/data.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

Zabbix 2.2の場合
# mysql -uzabbix -p zabbix < /usr/share/zabbix-mysql/schema.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < /usr/share/zabbix-mysql/images.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < /usr/share/zabbix-mysql/data.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

(CentOS 6の場合)
# mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-*.*.* /create/schema/mysql.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-*.*.* /create/data/data.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

# mysql -uzabbix -p zabbix < /usr/share/doc/zabbix-server-mysql-*.*.* /create/data/images_mysql.sql
Enter password: ← データベースユーザzabbixのパスワードを入力
(応答があるまでに時間がかかります)

●ユーザ追加と設定ファイルのインストール

 続いて、ユーザの追加と設定ファイルのインストールを行います。
 OSのアカウントにZABBIXサーバを動作させるためのユーザとグループ「zabbix」を作成します。ZABBIXのサーバを稼働させるためだけに使用するユーザであるため、以下のコマンドにより、セキュリティを考慮してログインシェルなどは与えないように設定しています(rpmからインストールした場合作業不要。)。
# groupadd zabbix
# useradd -g zabbix -d /etc/zabbix -s /sbin/nologin -M zabbix
 設定ファイルについては、ソースファイルのmisc/confディレクトリにサンプルファイルが置かれています。/etc/zabbixディレクトリを作成し、ファイルをコピーします(rpmからインストールした場合作業不要。ただし、DBPasswordだけは要設定。)。
# mkdir /etc/zabbix
# cp misc/conf/zabbix_server.conf /etc/zabbix/
 /etc/zabbix/zabbix_server.confの以下の設定を修正します。
PidFile=/var/run/zabbix/zabbix_server.pid
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
 DBPasswordを設定し忘れた場合、ログに下記のようなエラーが記録される場合があります。
21807:20170530:131806.323 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: NO)
21807:20170530:131806.323 database is down: reconnecting in 10 seconds
 PIDファイル、ログファイルに必要なディレクトリを作成し、ディレクトリの所有者をzabbixユーザに設定します(rpmからインストールした場合作業不要)。
# mkdir /var/run/zabbix
# chown zabbix:zabbix /var/run/zabbix
# mkdir /var/log/zabbix
# chown zabbix:zabbix /var/log/zabbix
 ZABBIXサーバの起動スクリプトのサンプルファイルは、ソースファイルのmisc/init.dディレクトリに置かれています。起動スクリプトを/etc/init.d/にコピーします(rpmからインストールした場合作業不要)。
# cp misc/init.d/redhat/8.0/zabbix_server /etc/init.d/zabbix-server
# chmod 755 /etc/init.d/zabbix-server
 起動スクリプトの必要な個所を修正します。特に注意する必要があるのは、バイナリファイルが置かれている場所の指定と、chkconfigで指定するZABBIXの起動順序をMySQLデータベースサーバよりも後に設定しておくことです(rpmからインストールした場合作業不要)。
# vi /etc/init.d/zabbix-server

# chkconfig: - 85 15 ← このように修正
# description: zabbix-server
progdir="/usr/local/sbin/" ← このように修正
prog="zabbix_server"
 ここで、起動スクリプトのrestartコマンドが正常に動作しないためstop()の中で実行しているkillコマンドを、killprocに変更します(rpmからインストールした場合作業不要)。
kill -TERM $pid
 ↓ 次のように変更
killproc $progdir$prog
 以上でZABBIXサーバのインストールは完了です。以下のようにコマンドを実行するとZABBIXサーバを起動、停止、再起動することができます。
(CentOS 7の場合)
Zabbix 2.4の場合
# systemctl start zabbix-server : 起動
# systemctl stop zabbix-server : 停止
# systemctl restart zabbix-server : 再起動
# systemctl enable zabbix-server : 自動起動有効

Zabbix 2.2の場合
# systemctl start zabbix-server : 起動
# systemctl stop zabbix-server : 停止
# systemctl restart zabbix-server : 再起動
# systemctl enable zabbix-server-mysql : 自動起動有効

(CentOS 6の場合)
# service zabbix-server start : 起動 ← ソース版、RPM版共に実行する
# service zabbix-server stop : 停止
# service zabbix-server restart : 再起動
 OS起動時にZABBIXサーバを自動的に起動するためには、以下のコマンドを実行します。
# chkconfig zabbix-server on


●Webインターフェイスのインストール

 ZABBIXのWebインターフェイスのPHPプログラムは、ソースファイルのfrontend/php以下に置かれています。PHPプログラム一式を、Apacheサーバからアクセスできる場所にコピーします。下記の例では/var/www/html/zabbixディレクトリを作成し、その下にコピーを行います(rpmからインストールした場合作業不要)。
# mkdir /var/www/html/zabbix
# cp -r frontends/php/* /var/www/html/zabbix/
 続いて、ZABBIX Webインターフェイス用にPHPの設定を行います。/etc/httpd/conf.d/zabbix.confを以下のように修正します(rpmからインストールした場合も作業必要)。
php_value max_execution_time = 600
php_value memory_limit = 256M
php_value post_max_size = 32M
php_value upload_max_filesize = 16M
php_value max_input_time = 600
php_value date.timezone = Asia/Tokyo
 Apacheがすでに起動している場合は再起動を行い、設定を反映させます(ソース版、RPM版共に実行する)。
(CentOS 7の場合)
# systemctl restart httpd
# systemctl enable httpd

(CentOS 6の場合)
# service httpd restart
# chkconfig httpd on

●Webインターフェイスのインストーラ実行

 SELinuxの無効化

 SELinuxのデフォルトの設定では、/var/www/html/zabbix/conf/zabbix.conf.php(rpmからインストールした場合は/etc/zabbix/web/zabbix.conf.php)に書き込みを行えないため、SELinuxの設定を無効にします。「セキュリティレベルとファイアウォールの設定」ツールでの設定変更の手順は次のとおりです。

 1. メニューから「システム」-「管理」-「セキュリティレベルとファイアウォールの設定」を実行します。
 2. 「SELinux」タブをクリックします。
 3. SELinux設定を「無効」にして「OK」ボタンをクリックします。

画面1
画面1 ZABBIXのWebインターフェイス

 /var/www/html/zabbix/confのパーミッション変更(ソースからインストールした場合)

 /var/www/html/zabbix/conf/zabbix.conf.phpに書き込みができるように、直上のディレクトリに書き込み権限を付与します。
# chmod o+w /var/www/html/zabbix/conf

 /etc/zabbix/webのパーミッション変更(rpmパッケージからインストールした場合)

 /etc/zabbix/web/zabbix.conf.phpに書き込みができるように、直上のディレクトリに書き込み権限を付与します。
# chmod o+w /etc/zabbix/web

 Webインターフェイスのインストーラを実行

 ZABBIXのWebインターフェイスは、設定が存在しない状態でアクセスするとインストーラが起動するようになっています。ZABBIXサーバが起動しているマシン上のブラウザで、以下のURLを開きます。
http://localhost/zabbix
 ここで、PHP5.3の場合、将来使えなくなるereg()関数などでエラー(警告)が表示されてしまいます。これを回避するため下記のようにします。
# vi /usr/share/zabbix/include/config.inc.php
//set_error_handler(‘zbx_err_handler’);95行目をコメントアウト
 問題が無ければインストーラが表示されるため、次の手順でインストールを進めてください。

画面2
画面2 Introduction画面

 Nextをクリックします。

画面3
画面3 Introduction画面

 「I agree」にチェックを入れてNextをクリックします。

画面4
画面4 Check of pre-requisites画面

 すべてOKになっていることを確認してNextをクリックします。1つでもOKになっていない場合は、該当するPHP関連パッケージがインストールされているか確認してください。

画面5
画面5 Configure DB connection画面

 先に設定したMySQLの設定を入力し「Test connection」をクリックします。表示がOKになればNextをクリックします。

画面6
画面6 ZABBIX Server details画面

 WebインターフェイスがZABBIXサーバの動作を確認するための設定を行います。ZABBIXサーバのホスト名とポート番号を入力して、Nextをクリックします。

画面7
画面7 Pre-Installation Summary画面

 確認のために入力した設定が表示されるため、問題がなければNextをクリックします。

画面8
画面8 Install画面

 設定ファイルのインストールを行います。

 ここで、「Configuration file : OK」の文字が表示されれば、設定ファイルのインストールは完了です。以下のコマンドを実行してディレクトリと設定ファイルに適切な所有者と権限を設定してください。
ソースからインストールした場合
# chmod 755 /var/www/html/zabbix/conf
# chown root:root /var/www/html/zabbix/conf/zabbix.conf.php
# chmod 644 /var/www/html/zabbix/conf/zabbix.conf.php

rpmからインストールした場合
# chmod 755 /etc/zabbix/web
 そして、Nextをクリックします。

画面9
画面9 Finish画面でFinishをクリック

 Nextをクリックします。以下のログイン画面が表示されれば、Webインターフェイスのインストールは終了です。

画面4
画面10 ログイン画面

 Webインターフェイスのデフォルトのアカウント

 ZABBIX Webインターフェイスのデフォルトのアカウントは、次のように設定されています。
Login name : admin
Password : zabbix
 再度、上記により再設定を行う場合は下記のようにしてください。
ソースからインストールした場合
# rm -f /var/www/html/zabbix/conf/zabbix.conf.php

rpmからインストールした場合
# rm -f /etc/zabbix/web/zabbix.conf.php


●ZABBIXエージェントのビルドとインストール

 ZABBIXエージェントをコンパイル、インストールする手順を解説します。ZABBIXエージェントのすべての機能を有効にするため、次のオプションを指定してconfigureを実行します。

メソッド名 説明
--enable-agent ZABBIXエージェントのバイナリをコンパイルします
--enable-ipv6 IPv6のサポートを有効にします
--with-ldap LDAP監視を行う場合に指定します
表3 ZABBIXエージェントのconfigureオプション
# ./configure --enable-agent --with-ldap
 makeを実行し、コンパイルを行います。
# make
 特にエラーが出力されずに終了すれば成功です。以下のコマンドを実行してインストールを行います。デフォルトでは/usr/local以下にバイナリファイルがインストールされます。
# make install
 以上でZABBIXエージェントの動作に必要な実行ファイルがインストールされました。

●ZABBIXエージェントの設定方法(ソースからインストールした場合)

 ZABBIXエージェントの設定ファイルのサンプルファイルは、ソースファイルのmisc/confディレクトリに置かれています。/etc/zabbixディレクトリを作成し、ファイルをコピーします。
# mkdir /etc/zabbix
# cp misc/conf/zabbix_agentd.conf /etc/zabbix/
 /etc/zabbix/zabbix_agentd.confの以下の設定を修正します。Server=ZABBIXサーバのIPアドレスを設定します。ZABBIXエージェントはこのIPアドレスからの監視にしか応答せず、ZABBIXエージェントが能動的に監視データを送る場合も、このアドレスに送付されます。
Hostname=ZABBIXエージェントが導入されているサーバのホスト名を設定します。
ListenIP=ZABBIXエージェントがListenするIPアドレスを設定します。

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
 ZABBIXエージェントの起動スクリプトとサンプルファイルはソースファイルのmisc/init.dディレクトリに置かれています。起動スクリプトを/etc/init.d/に置き、必要な個所を修正します。
# cp misc/init.d/redhat/8.0/zabbix_agentd /etc/init.d/zabbix-agent
# chmod 755 /etc/init.d/zabbix-agent
# vi /etc/init.d/zabbix-agent

# chkconfig: - 85 15 ← このように修正
# description: zabbix-agent
progdir="/usr/local/sbin/" ← このように修正
prog="zabbix_agentd"
 起動スクリプトのrestartコマンドが正常に動作しないためstop()の中で実行しているkillコマンドをkillprocに変更します。
kill -TERM $pid
  ↓ 次のように変更
killproc $progdir$prog
 以上でZABBIXエージェントのインストールは完了です。以下のようにコマンドを実行するとZABBIXエージェントを起動、停止、再起動することができます。
# service zabbix-agent start : 起動
# service zabbix-agent stop : 停止
# service zabbix-agent restart : 再起動
 OS起動時にZABBIXエージェントを自動的に起動するためには、以下のコマンドを実行します。
# chkconfig zabbix-agent on


●ZABBIXエージェントのインストール

 Rocky Linux 9にZABBIXエージェント6.4をインストールする方法

 サーバにEPELリポジトリをインストールしている場合、同リポジトリ提供のパッケージとZabbixリポジトリのパッケージが競合しないように事前に設定が必要です。
 変更内容は以下の通りです。zabbixから始まるパッケージをepelから取得しないようにします。
 viなどのテキストエディタで、Yumリポジトリの設定ファイルを開きます。
# vi /etc/yum.repos.d/epel.repo
[epel]
...
excludepkgs=zabbix*
 次に、Zabbix 6.4の公式リポジトリをインストールします。
# dnf install -y https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-6.4-1.el9.noarch.rpm
 zabbix-agentをインストールします。
# dnf install zabbix-agent zabbix-get -y
# systemctl enable --now zabbix-agent
 firewalldを有効化している場合、下記の作業を実施します。
# firewall-cmd --add-service=zabbix-agent --permanent
# firewall-cmd --reload
 以上で、インストール作業は完了です。

 CentOS Stream 8にZABBIXエージェント5.4をインストールする方法

 zabbix-agentをインストールします。
# rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
# dnf install zabbix-agent zabbix-get -y
# systemctl enable --now zabbix-agent
 firewalldを有効化している場合、下記の作業を実施します。
# firewall-cmd --add-service=zabbix-agent --permanent
# firewall-cmd --reload
 以上で、インストール作業は完了です。

●ZABBIXエージェントの設定方法(rpmパッケージからインストールした場合)

 下記のようにします。

 {AllowRoot=1」によりzabbix-agentをroot権限で動作させることが出来るようになります。
 これはログ監視やディスク監視をする場合、root権限で読み取る場合の設定です。
 ログ監視やディスク監視をroot権限で読み取る必要がない場合(監視対象ファイルのグループをzabbixに変更する等)、設定不要です。
 各ログやディレクトリにzabbixで読み取れるように権限を変更することでも対応可能ですが、その数が多い場合、作業数が多くなり面倒となります。
 このためにzabbix-agentをroot権限で動作させること容易に監視できるようになります。
 ※ただし、zabbixにroot権限を付与する形になりますので、セキュリティ上危険になることを理解する必要があります。
# vi /etc/zabbix/zabbix_agentd.conf
Hostname=zabbix_server ← Zabbix Serverで監視ホストして登録した時のホスト名を指定
ListenIP=127.0.0.1,192.168.0.44 ← 192.168.0.44はzabbix_agentがインストールされているIPアドレス
AllowRoot=1 ← zabbixがroot権限で動作する場合のみ

# systemctl restart zabbix-agent ← zabbix-agentの起動


●ZABBIXの設定

 「●インストール前の準備」「●ZABBIXサーバのビルドとインストール」ではZABBIXのインストール方法を解説しました。今回は実際の監視を行う際に必要となる基本的な設定項目であるホストの登録、アイテムの設定、トリガーの設定、グラフの設定について解説していきます。
  ZABBIXでは、監視対象のマシンをホストと呼び、監視対象のマシンのCPU使用率やメモリ使用率などの個別の監視項目をアイテムと呼んでいます。そして、各アイテムの情報に基づいて、どのような状態になっている場合に警告や障害と判断するかを定義するものがトリガーになります。さらに、各アイテムの数値を基にグラフを描画することができます。
 まず今回の設定を行う前に、前回設定したZABBIXサーバとZABBIXエージェントのサービスが起動していることを確認しておきましょう。起動していない場合には、以下のコマンドで起動してください。
# service zabbix-server start
zabbix_server を起動中:                                    [ OK ]
# service zabbix-agent start
zabbix_agentd を起動中:                                    [ OK ]

●Webインターフェイスの言語設定

 Webインターフェイスの言語設定を日本語に変更します。WebインターフェイスにAdminユーザとしてログインした後、[Administration]-[Users]の画面を開き、[Admin]ユーザを選択します。

画面11
画面11 [Admin]ユーザを選択

[Language]の設定を[Japanese(JP)]に設定し、[save]を選択すると、画面が日本語表示になります。

画面12
画面12 [Language]の設定を[Japanese(JP)]に設定

 または、adminでログイン後、右上の[Profile]を選択して、言語を日本語に変更すると日本語表示になります。

●ホストの登録

 [設定]-[ホスト]を選択すると、初期設定では、すでに監視対象としてZABBIXサーバ自身が「ZABBIX Server」というホスト名で登録されています。ただし初期設定では[ステータス]が[無効]になっているので、[無効]をクリックし[有効]に変更してください。

画面13
画面13 [ステータス]を[有効]に変更する

 次に、新規にほかのホストを登録しますが、監視対象ホストには事前にZABBIXエージェントがインストールされていることとします。ここでは、各ホストのIPアドレスが以下のように設定されていると仮定します。

ZABBIXサーバのIPアドレス :192.168.0.45
LinuxホストのIPアドレス :192.168.0.44
WindowsホストのIPアドレス :192.168.0.41

 LinuxホストへのZABBIXエージェントのインストールは「●インストール前の準備」「●ZABBIXサーバのビルドとインストール」「●ZABBIXエージェントのビルドとインストール」および「●ZABBIXエージェントの設定方法」を参照してください。WindowsホストへのZABBIXエージェントのインストール方法については、後述します。
 なお、ZABBIXエージェントをインストールしていないホストを登録することも可能ですが、監視可能な項目が限られるため、ここではZABBIXエージェントをインストールしたホストを登録します。各ホストとも、 zabbix_agentd.confのServerにはZABBIXサーバのIPアドレスである192.168.0.45を設定しておいてください。
Server=192.168.0.45 ← この行をZABBIXサーバのIPアドレスを指すよう修正
 ここでもう1点注意しておきたいのが、前回紹介したLinux版のエージェントのように、configureオプションに「--enable-ipv6」を付けてZABBIXエージェントをコンパイルした場合は、IPv6アドレスでのみZABBIXエージェントのポートが開くため、そのままではIPv4アドレスで監視できないことです。
 IPv4アドレスで監視するためには、監視対象ホストの zabbix_agentd.confで「ListenIP=」を記述して、IPv4アドレスを使用することを明示的に指定しておく必要があります。今回はIPv4のアドレスで監視設定をしていくため、監視対象のLinuxホスト上(IPアドレス:192.168.0.44)の zabbix_agentd.confにて、「ListenIP=192.168.0.44」を設定してください。
# IP address to bind agent
# If missing, bind to all available IPs

ListenIP=192.168.0.44 ← この行を追加
 [設定]-[ホスト]の画面から[ホストの作成]をクリックします。

画面14
画面14 [設定]-[ホスト]の画面から[ホストの作成]をクリックする

 Linuxホストを登録する場合

 画面に従い、以下の項目を設定し[保存]をクリックします。

  項目   設定例 説明
名前 centos-32-zbx 任意の名前を付けることが可能ですが、アクティブチェックを利用する際にはzabbix_agentd.confのHostnameで設定したホスト名と同一である必要があるため、zabbix_agentd.confで設定したホスト名を使用することをお勧めします。
グループ Linux servers グループを指定します。新規にグループを設定したい場合には[新規グループ作成]からグループを作成可能です。
DNS名 (空) [接続方法]にて[DNS名]を選択する場合には、マシンのDNS名を設定する必要があります。
IPアドレス 192.168.0.44 マシンのIPアドレスを設定します。
接続方法 IPアドレス マシンの監視時に[DNS名]を使用して接続するか、[IPアドレス]を使用して接続するか選択します。今回は[IPアドレス]を使用します。
表4 Linuxホストを登録する際の登録項目

画面15
画面15 各項目を設定し、[保存]をクリック

 Windowsホストを登録する場合

 画面に従い、以下の項目を設定し[保存]をクリックします。

  項目   設定例 説明
名前 winxp-zbx 任意の名前を付けることが可能ですが、アクティブチェックを利用する際にはzabbix_agentd.confのHostnameで設定したホスト名と同一である必要があるため、zabbix_agentd.confで設定したホスト名を使用することをお勧めします。
グループ Windows servers グループを指定します。新規にグループを設定したい場合には[新規グループ作成]からグループを作成可能です。
DNS名 (空) [接続方法]にて[DNS名]を選択する場合には、マシンのDNS名を設定する必要があります。
IPアドレス 192.168.0.41 マシンのIPアドレスを設定します。
接続方法 IPアドレス マシンの監視時に[DNS名]を使用して接続するか、[IPアドレス]を使用して接続するか選択します。今回は[IPアドレス]を使用します。
表5 Windowsホストを登録する際の登録項目

画面16
画面16 Linuxホストの場合と同様、各項目を設定し、[保存]をクリック

 ホスト登録完了後に、[設定]-[ホスト]の画面で[グループ]を[全て]に設定すると、centos-32-zbxとwinxp-zbxが登録されていることが確認できます。

画面17
画面17 [設定]-[ホスト]の画面で登録されたホストを確認

●アイテムの設定

 参考URL:第 2 回 Zabbix のさまざまな監視機能を試してみよう

 ホストの登録が完了したので、各ホストでアイテムを設定していきます。最初にも説明しましたが、ZABBIXではCPU使用率やメモリ使用率などの個別の監視項目を「アイテム」と呼んでいます。
 [設定]-[アイテム]の画面で[ホスト]として[centos-32-zbx]を選択します。この画面でLinuxマシンcentos-32-zbxに登録されているアイテムの確認および登録ができるようになります。現時点ではアイテムは何も登録されていない状態になっています。

画面18
画面18 アイテムが何も登録されていない状態

 アイテムの登録

 今回は例として、ディスクデバイス「hda」への読み込み頻度と書き込み頻度を調べるためのアイテム[hda device read]と[hda device write]を追加してみます。アイテム登録時には、マニュアルの[4.10 Items]から、登録するキーの情報を参照しながら設定することをお勧めします。

図1
図1 アイテムを登録することにより、どのマシンに対しどのような監視をするかを設定できる

関連リンク:
参考 ZABBIXマニュアル
http://www.zabbix.com/documentation.php

 [設定]-[アイテム]の画面で[アイテムの作成]ボタンをクリックします。画面に従い、以下の項目を設定し[保存]をクリックします。

項目 設定例 説明
名前 hda device read アイテムの名前です。任意の名前を付けることが可能です。
タイプ ZABBIXエージェント ここで監視方法を設定します。このタイプによって利用できる監視のキーが決まってきます。どのアイテムがどのタイプを必要とするかは、マニュアルの[4.10 Items]で、登録しようとしているキーがどのセクションに属しているか確認してください。今回登録しようとしているキー:vfs.dev.read[hda]は[4.10.3 ZABBIX Agent]に属しているため、ここでは[ZABBIXエージェント]を指定します。
キー vfs.dev.read[hda] 監視のキーを設定します。[選択]ボタンから選択することができますが、設定可能なアイテムとそのオプションの詳細はマニュアルの[4.10.1 Item key]から確認可能です。
データ型 数値(浮動小数) 表示される値の単位が「sector/sec」なので、数値(浮動小数)に設定します。
単位 sector/sec 単位を設定します。
乗数を使用 使用しない。  
更新間隔(秒) 30 監視の更新間隔。
例外の更新間隔の作成   例外の更新間隔はありません。業務時間外など、一定の期間のみ更新間隔を変更したい場合に設定します。
ヒストリの保存期間(日) 7 ヒストリ(監視履歴データ)の保存期間を指定します。
トレンドの保存期間(日) 31 トレンドの保存期間を指定します。トレンドはヒストリからデータを間引いたものであり、主にグラフの表示などに使用されます。
ステータス 有効 監視を有効にするかどうかを設定します。
保存時の計算 なし 保存時に、取得値を計算してから保存するかどうかを設定します。
表5 アイテム登録時の設定項目

画面19
画面19 表5の各項目を設定し、[保存]をクリック

 同様に、以下を設定し[保存]をクリックします。

項目 設定例 >説明
名前 hda device write アイテムの名前です。任意の名前を付けることが可能です。
タイプ ZABBIXエージェント ここで監視方法を設定します。このタイプによって利用できる監視のキーが決まってきます。どのアイテムがどのタイプを必要とするかは、マニュアルの[4.10 Items]で、登録しようとしているキーがどのセクションに属しているか確認してください。今回登録しようとしているキーvfs.dev.write[hda]は[4.10.3 ZABBIX Agent]に属しているため、ここでは[ZABBIXエージェント]を指定します。
キー vfs.dev.write[hda] 監視のキーを設定します。[選択]ボタンから選択することができますが、設定可能なアイテムとそのオプションの詳細はマニュアルの[4.10.1 Item key]から確認可能です。
データ型 数値(浮動小数) 表示される値の単位が「sector/sec」なので、数値(浮動小数)に設定します。
単位 sector/sec 単位を設定します。
乗数を使用 使用しない。  
更新間隔(秒) 30 監視の更新間隔。
例外の更新間隔の作成   例外の更新間隔はありません。業務時間外など、一定の期間のみ更新間隔を変更したい場合に設定します。
ヒストリの保存期間(日) 7 ヒストリ(監視履歴データ)の保存期間を指定します。
トレンドの保存期間(日) 31 トレンドの保存期間を指定します。トレンドはヒストリからデータを間引いたものであり、主にグラフの表示などに使用されます。
ステータス 有効 監視を有効にするかどうかを設定します。
保存時の計算 なし 保存時に、取得値を計算してから保存するかどうかを設定します。
表6 アイテム[hda device write]の設定項目

画面20
画面20 表6の各項目を設定し、[保存]をクリック

 登録完了後、アイテムの値が取得できていることを確認します。[監視データ]-[最新データ]の画面で[ホスト]として[centos-32-zbx]を選択した状態で、[その他]を開き、値が取得できていることを確認します。

画面21
画面21 アイテムの値が取得できていることを確認

●グラフの登録

 アイテムのデータ型が数値の場合、アイテムを登録すると特に設定を行わなくともグラフを表示できるようになります。[監視データ]-[最新データ]から[その他]を開き、[グラフ]をクリックすることで、アイテム[hda device write]のグラフを表示することができます。

画面22
画面22 [監視データ]-[最新データ]から[その他]を開き、[グラフ]をクリックする

 ZABBIXでは、このように自動的に作成されるグラフのほかに、複数の監視項目を組み合わせたグラフを作成できます。グラフの種類も折れ線グラフのほか、積算グラフ、円グラフ、分解円グラフといった複数のグラフを使用できます。
 今回は「アイテムの登録」で作成した、アイテム[hda device read]、アイテム[hda device write]を使用して、2つのデータを組み合わせたグラフを作成します。[設定]-[グラフ]から[ホスト]として[centos-32-zbx]を選んだ状態で[グラフの作成]をクリックします。以下を設定し[保存]をクリックして、グラフ[hda device read/write]を登録します。

名前    :hda device read/write
幅      :900
高さ    :200
グラフのタイプ:ノーマル
アイテム:[centos-32-zbx: hda device write]
[centos-32-zbx: hda device read]


画面23
画面23 [centos-32-zbx: hda device write]を追加

画面24
画面24 [centos-32-zbx: hda device read]を追加

画面25
画面25 [追加]ボタンからアイテムを設定

 グラフ登録後、[監視データ]-[グラフ]の画面で[ホスト]として[centos-32-zbx]を選択した状態で、[グラフ]として[hda device read/write]を選択すると、登録したグラフを表示することが可能になります。

画面26
画面26 [グラフ]として[hda device read/write]を選択し、登録したグラフを表示

 グラフのズームアップ、移動

 グラフをマウスでドラッグすると、表示する時間帯を変更できます。ただし、最小の表示幅は1時間になります。

画面27
画面27 マウスでドラッグすれば、表示する時間帯を変更できる

 また、グラフ下部のバーをずらせば、時間軸を前後に移動することが可能です。

画面28
画面28 グラフ下部のバーをずらすと、時間軸を前後に移動できる

●トリガーの登録

 トリガーとは、各アイテムの情報に基づいて、どのような状態になっている場合に警告や障害と判断するかを定義するものです。今回は「アイテムの登録」で作成した、アイテム[hda device read]、アイテム[hda device write]を使用してトリガーを作成します。

図2
図2 トリガーを登録することにより、監視の結果得られる取得値と設定したトリガーの条件から、どのような状況を警告や障害の発生とするかを定義できる

 [設定]-[トリガー]の画面から[ホスト]として[centos-32-zbx]を選んだ状態で[トリガーの作成]をクリックします。hdaへの読み込み負荷が上がった際に警告を発生させるため、以下設定を入力し、トリガー[High read access to hda device]を登録します。

名前    :High read access to hda device
条件式  :{centos-32-zbx:vfs.dev.read[hda].last(0)}>20000
                [挿入]ボタンから設定します。
アイテム:centos-32-zbx: hda device read
機能    :Last value > N
N       :20000
イベント生成:ノーマル
深刻度  :警告


画面29
画面29 トリガーの設定項目を選択する

画面30
画面30 トリガー[High read access to hda device]を登録する

 同様に、hdaへの書き込み負荷が上がった際に警告を発生させるため、以下の設定を入力し、トリガー[High write access to hda device]を登録します。なお、ここでは警告を発生させる値Nを「20000」にしていますが、どんな値を設定するかは環境ごとに異なります。なお、一般的には1セクタのサイズは512バイトになっており、今回の環境では「秒間約10MBytes以上の書き込みがあった場合」に警告になります。

名前    :High write access to hda device
条件式  :{centos-32-zbx:vfs.dev.write[hda].last(0)}>20000
                [挿入]ボタンから設定します。
アイテム:centos-32-zbx: hda device write
機能    :Last value > N
N       :20000
イベント生成:ノーマル
深刻度  :警告


画面31
画面31 警告を発生させる値Nを「20000」に設定

 トリガー設定後に[監視データ]-[トリガー]を見れば、書き込み負荷を掛けると障害ステータスに変化することを確認できます。
 今回の環境では、以下のようなコマンドで確認が行えます。ただし、このコマンドは/root/zeroに1GBのサイズのファイルを作成するものなので、空き容量に気を付けて実行してください。また実行後は/root/zeroのファイルを削除してください。なお、負荷の上昇の仕方は環境により異なるので、場合によってはステータスが変化しないかもしれません。
# dd if=/dev/zero of=/root/zero bs=512K count=2000
画面32
画面32 負荷を掛けるとステータスが「障害」に変化する

 なお、トリガーの設定で「障害イベントを継続して生成」にチェックが入ったままの場合、アイテムで設定した更新間隔でイベントが実行されることになりますので注意してください。

 以上のとおり、ホストの登録を行い、アイテム、グラフ、トリガーを設定することにより、ZABBIXを利用した基本的な監視設定ができるようになります。

 下記はZabbix 5.0となります(20210824追記)

 参考URL:2. トリガー条件式(復旧条件)

 トリガー設定項目に「正常イベントの生成」という設定項目があります。トリガーを解除する条件の指定方法の設定です。

正常イベントの生成

項目 動作
条件式 トリガー発行時の条件式に合致しなければ解除します。
復旧条件式 トリガー発行とは別に復旧条件を設定し、その条件に一致した場合に解除します。
なし 一度トリガーを発行すると自動的に復旧はしません。手動でクローズすることが必要です。


 参考URL:使ってみよう Zabbix⑤ : トリガー設定編

 トリガー設定項目に「障害イベント生成モード」という設定項目があります。「障害」画面で「障害」と表示する条件の指定方法の設定です。

障害イベント生成モード

項目 動作
単一 トリガーが「正常」から「障害」に変化した時(最初の1回)のみ「障害」画面で「障害」が表示されます。
障害表示を解除(手動によるクローズ等)しない限り、新たに表示されることはありません。
複数 トリガーが「障害」と判定される度に「障害」画面で「障害」が表示されます。


 
 

●WindowsへのZABBIXエージェントのインストール

 最新版はこちらからダウンロードできます。
 ダウンロード後、展開し、「confフォルダ」内のzabbix_agentd.win.confをコピーしてファイル名をzabbix_agentd.confに変更します。zabbix_agentd.confと「binフォルダ」内のzabbix_agentd.exe、 zabbix_get.exe、zabbix_sender.exeをCドライブ直下に移動します。
 zabbix_agentd.confを環境に合わせて修正します。
Server=(Zabbix server IP)
ServerActive=(Zabbix server IP)
#Hostname=[Hostname] (コメントアウトもしくはZabbixで表示するホスト名を設定)
HostnameItem=system.hostname(Hostnameをコメントアウトする場合はコメントアウト外す)

※HostnameとHostnameItemを同時に設定することは出来ません。
 zabbix_agentd.exeを選択し右クリック押下、プロパティの「互換性」タブの特権レベル「管理者としてこのプログラムを実行する」にチェックを入れ「適用」します(設定し忘れるとこの後のコマンド実行時にエラーが出力されます)
 コマンドプロンプトでC:\>zabbix_agentd.exe --installと入力します。
 「サーバーマネージャー」->「ツール」->「サービス」を開くと、サービスが並んでいる中に「Zabbix Agent」という項目があるはずですので、これを右クリックして「開始」を選択し、状態の表示が「開始」になればエージェントとしての起動は成功です。

 同様に、サービスから削除する場合は以下のコマンドを実行します。
> zabbix_agentd.exe --uninstall
 zabbix_agentd.exeにはその他にもオプションがあります。各オプションの利用方法は以下のコマンドで表示することができます。
> zabbix_agentd.exe -h 
画面33
画面33 [ZABBIX Agent]が登録されていることを確認し、サービスを起動する
 「サーバーマネージャー」->「Windowsファイアウォール」->「詳細設定」->「受信の規制」から、右側のペインの「新しい規則」でポート10050を追加します。

●スキルに依存しない運用を支援

 ZABBIXは、最初のセットアップ作業にこそある程度Linuxの知識が必要になりますが、セットアップ後は基本的にWebインターフェイスだけで操作ができるため、Linux/OSSに関する知識がなくとも運用できるのが特徴になっています。
 いままでのOSSの監視ソフトウェアのように、コンソールにログインしてテキストベースの監視設定をエディタで行う必要があるソフトウェアでは、運用手順が複雑化していくことがありました。それに対し、ZABBIXではWebインターフェイスだけでほとんどの監視に関する操作ができるため、手順を明確化しやすくなっています。
 システムの運用管理は、長期間にわたりシステムを安定的に稼働させることが重要です。しかし運用の半ばで、管理者の異動やLinux/OSSの知識がない人への作業の移管などが発生することがあります。あらかじめ作業の分担やスキルトランスファーを簡単に行うことができるソフトウェアを選択しておくことで、特定管理者へのスキル依存を発生させず、運用をスムーズに行える仕組みを構築できるようになります。

●テンプレートを使った効率的な監視設定

 「●ZABBIXの設定」ではホストの登録から基本的な監視までの手順を説明しました。ですが、監視対象ごとに1つ1つ監視設定をしていくのには、膨大な手間と時間がかかります。そこで今回は「テンプレート」という機能を使って、効率的に監視を行う方法を紹介します。
 テンプレートとは、複数のアイテム、トリガー、グラフの設定をまとめた監視設定の集まりです。テンプレートを利用することで、複数の監視対象にまとめて同一の設定をすることができます。
 また、1つの監視対象に複数のテンプレートを適用したり、複数のテンプレートを取りまとめて1つのテンプレートとすることもできます。例えば、LinuxのテンプレートとApacheのテンプレートを適用することで、Webサーバの監視をすぐに開始することができます。
 テンプレートを利用することで以下のような利点が生まれます。
  • 複数ホストに対して容易に同一の設定を行うことができる
  • 監視項目の追加や無効化を容易に行うことができる
  • 異なるZABBIXサーバへの設定の移し替えができる
 テンプレートを作成する際は、後からの修正や、ホストに適用した後の調整を最小限に抑えられるよう、監視対象ごとの共通部分と、OSの種類やハードウェア、サービス内容といった環境によって異なる部分とを分けて作成すると、効率的な監視設定を作ることができます。

図3
図3 テンプレートの役割

 例えばOSと、Webサーバ、DBサーバ、ファイルサーバなどのアプリケーションの監視設定を1つのテンプレートにまとめたとしましょう。すると、各ホストにテンプレートを適用した後、起動していないサービスなど、不要な監視項目を無効化する必要が生じます。OS基本部分のテンプレート、各アプリケーション単位のテンプレート……という形で階層的にテンプレートを作成していくと、使い回しもでき、より効率的でしょう。

●オリジナルテンプレートの作成

 ZABBIXでは、インストール直後でもいくつかのテンプレートが利用できます。ですが、既存のテンプレートは監視対象となるアプリケーションも限られており、必ずしも監視要件と合うわけではないので、監視要件に合わせて新しくテンプレートを作成する方がよいでしょう。
 ここでは、新たにテンプレートを作成し、ホストに適用させる方法について紹介します。
 テンプレートの作成は、前回紹介したホストの作成とほぼ同じ方法で行うことができます。例として、LinuxでWebサーバとして一般的に使われているApache用のテンプレートを作成してみましょう。
 なお、既存のLinux用テンプレートであるTemplate_LinuxにはApacheの監視設定が一部含まれています。このため、Template_Linuxがリンクされているホストには以下で紹介するテンプレートは適用できないことに注意してください。
 [設定]→[ホスト]の画面から、右上のプルダウンメニューより[テンプレート]を選択します。テンプレートの設定画面が表示されたら画面右上の[テンプレートの作成]をクリックします。

画面34
画面34 テンプレートの作成画面

項目 設定例 説明
名前 Template_App_httpd テンプレートの名称です。任意のものを設定します。
グループ Template テンプレートが所属するホストグループです。
新規グループ 空白 新たにホストグループを作成し、同時にテンプレートを作成したグループに作成させます。
テンプレートとのリンク 空白 作成したテンプレートに別のテンプレートを関連付けます。
表7 テンプレートを作成する際の登録項目

 以上を設定し、右下の[保存]をクリックすると、テンプレートが作成されます。

●アプリケーションの作成

 テンプレートを作成したら、アプリケーションも作成しましょう。アプリケーションとは、一般的な意味合いとは異なり、ここでは監視項目を分類する機能を指します。監視対象に登録されている監視項目が増え過ぎると、監視結果を一覧表示した際に視認性が悪くなってしまいます。
 アプリケーションを作成するには、まず[設定]→[ホスト]の右上のプルダウンメニューより[アプリケーション]を選択します。プルダウンメニューより先ほど作成したTemplate_App_httpdを選択し、[アプリケーションの作成]をクリックします。

画面35
画面35 アプリケーションの作成

項目 設定例 説明
名前 Apache 監視項目の分類名
ホスト Template_App_httpd アプリケーションを作成するホスト(テンプレート)
表8 アプリケーションを作成する際の登録項目

 上記のように設定し、[保存]をクリックするとアプリケーションが作成されます。

●監視項目の追加

 ただテンプレートを作成しただけでは、何も監視設定が登録されていない状態のままです。作成したテンプレートに対し、アイテム、トリガー、グラフを登録します。登録方法は前回紹介した監視設定と同様です。
 [設定]→[アイテム]のホストプルダウンメニューより、先ほど作成したTemplate_App_httpdを選択します。[アイテムの作成]ボタンを押し、アイテムを作成します。
 ここでは、プロセス監視、ポート監視、ログ監視の3つを登録します。
 まずはプロセス監視の設定を行います。プロセス監視で監視をするプロセスは、psコマンドから調査します。
# ps ax
PID     TTY     STAT    TIME    COMMAND
〜〜省略〜〜
2694    ?       Ss      0:00    /usr/sbin/httpd
〜〜省略〜〜
 上記がApacheのプロセスです。上記で得られたPIDからプロセス名称を調査します。ZABBIXで監視対象として設定できるプロセス名称は/proc/PID番号/statに書かれています。

# cat /proc/2694/stat
2694 (httpd) S 1 2694 2694 0 -1 4202560 1511 0 5 0 3 64 0 0 18 0 1 0 161816 23224320 1665 4294967295 10731520 11037288 3215055136 3215054284 2536450 0 0 16781312 134235755 0 0 0 17 0 0 0 8

 上記ファイルの括弧内に書かれているものがプロセス名称です。これを基にアイテムを登録します。
 [アイテムの作成]をクリックし、以下のように設定します。

項目      設定例

名前    :Number of processes of $1
タイプ  :ZABBIXエージェント
キー    :proc.num[httpd]
データ型:数値(整数)
乗数    :使用しない
アプリケーション:Apache


 以上で、起動中のhttpdプロセスの数を監視できます。
 アイテムの名前中にある$1は、設定内容によって動的に値の変わる変数となります。アイテム名称に$1と書くと、キーに登録されている[]内の1番目の値、ここではhttpdが挿入されます。上記設定では、アイテム名称はNumber of processes of httpdと表示されます。
 次に、ポート監視を行います。現在開放されているポートを調査するには、netstatコマンドを使用します。
# netstat -anp
Proto   Recv-Q   Send-Q    Local Address    Foreig Address   State       PID/Program name
〜〜省略〜〜
tcp     0        0         :::80            :::*             LISTEN            2694/httpd
〜〜省略〜〜
 ZABBIXで監視を行う際には、Local Addressに記載されているポート番号を指定します。上図ではhttpdのポート番号は80番となります。

項目      設定例

名前    :status of port $3
タイプ  :ZABBIXエージェント
キー    :net.tcp.service[tcp,,80]
データ型:数値(整数)
乗数    :使用しない
値のマッピング:Service state
アプリケーション:Apache


 上記設定では80番ポートが開放されていれば、監視結果が1として得られます。

●値のマッピングの設定

 先ほど紹介したポート監視は、監視結果として「0(ポートが閉じている)」もしくは「1(ポートが開いている)」という値を返します。ZABBIXではこの値を利用して障害判定を行いますが、人間の目で見た場合、即座に現在の状態を把握することが困難です。
 ZABBIXでは、このポート監視のように、現在のステータスとして数値を返すアイテムも多く存在します。そのようなアイテムを利用するときは、値のマッピングという機能を利用すると、状態を一目で把握しやすくなります。値のマッピングは数字に意味を与える機能です。
 例えば、ポートが開いている場合は1、閉じている場合は0を返すような監視設定では、
    1→UP
    0→Down
のように、より分かりやすく表示させることができます。

画面36
画面36 マッピングした際の表示

 値のマッピングは、インストール直後でも複数のマッピングが登録されています。ポート監視では初期状態から登録されているService stateを利用します。
 最後にログ監視の設定を行います。Apacheの標準のログファイルは/var/log/httpdに置かれます。ここではerror_logを監視します。
 ログ監視を行う際は、監視対象となるログファイルをOS上のzabbixユーザが読み取ることができる必要があります。そこで、監視を行う前にerror_logの権限を確認します。
# ls -l /var/log/httpd/error_log
-rw-r--r-- 1 root root 529 10月 27 15:42 /var/log/httpd/error_log
 上記ログファイルはzabbixユーザから読み取ることができるため、特に変更は必要ありません。また、zabbix_agentd.confにパラメータDisableActiveが設定されていないことを確認してください。
 ログ監視を行う際は以下のように設定をします。

項目      設定例

名前    :Log of $1
タイプ  :ZABBIXエージェント(アクティブ)
キー    :log[/var/log/httpd/error_log]
データ型:ログ
アプリケーション:Apache


 この結果、/var/log/httpd/error_logが更新されると、更新内容をZABBIXで取得することができます。
 以上でアイテムの設定は終了です。

 トリガーの設定

 次にトリガーを設定します。[設定]→[トリガー]のホストプルダウンメニューより作成した[Template_App_httpd]を選択します。[トリガーの作成]ボタンを押し、先ほど登録したアイテムに対して障害判定の設定を行います。
 トリガーは以下のように設定します。

・プロセス監視

名前    :httpd process is not running on {HOSTNAME}
条件式  :{Template_App_httpd:proc.num[httpd].last(0)}<1


 上記設定では起動中のhttpdプロセスが1個未満になった場合に障害と判断します。トリガー名中の{HOSTNAME}はマクロと呼ばれる変数で、トリガーが登録されているホスト名を動的に挿入します。

・ポート監視

名前    :httpd service is down on {HOSTNAME}
条件式  :{Template_App_httpd:net.tcp.service[tcp,,80].last(0)}=0


 上記設定では、80番ポートが開放されていない状態(アイテムで0を取得した場合)に障害と判定します。

・ログ監視

名前    :error found in /var/log/httpd/error_log on {HOSTNAME}
条件式  :{Template_App_httpd:log[/var/log/httpd/error_log].str(error)}=1


 上記設定では/var/log/httpd/error_logに「error」が含まれる行が追加された際に障害と判断します。

 以上でトリガーの登録は終了です。

画面37
画面37 テンプレートとホストを関連付ける

 テンプレートに監視設定をしたら、実際にホストと関連付けていきます。
 [設定]→[ホスト]より右上のプルダウンメニューから[ホスト]を選択します。テンプレートとのリンクの項目にある[追加]ボタンを押し、新たに設定したTemplate_App_httpdを選択し、保存します。
 以上でテンプレートとのリンク設定は完了です。同様の手順で複数サーバに対してTemplate_App_httpdをリンクさせ、監視することができます。

●アクションの設定

 まず、アクションの設定内容を決定する必要があります。
 次に、どのトリガーに対しアクションを設定するか決定します。
 なお、この項目はzabbix 2.0を元に記載しています。
 今回は、該当障害発生時に特定ユーザのメールアドレスに送信するように設定したいと思います。

 特定ユーザのアカウントを作成します。
 [管理]-[ユーザ]をクリック。ユーザグループの一覧が表示されます。
 右側のドロップダウンリストで[ユーザ]を選択、その右の[ユーザの作成]をクリックします。

zabbix-action01

 表示画面([ユーザ]タブ)にしたがって設定します。言語は[日本語(ja_JP)]を選択します。
 [メディア]タブでメディアタイプで事前に作成したものを選択します。
 [権限]タブのユーザの種類で[Zabbix特権管理者]を選択します。これが[Zabbixユーザ]のままの場合、すべての設定が[拒否]項目に属すためメールを送信することができませんので注意してください。
 ユーザの設定が終了したら[保存]を押します。

 メディアタイプを作成するには以下のようにします。
 [管理]-[メディアタイプ]をクリック。
 右上にある[メディアタイプの作成]をクリック。
 [説明]に分かりやすい文字列を記入。[タイプ]は、今回メール送信を目的としているので[メール]を選択。
 [SMTPサーバ]及び[SMTP helo]にメールサーバのIPアドレス(またはFQDN)を記載。
 [送信元メールアドレス]にFrom:となるメールアドレスを記載します。
 [有効]にチェックを入れて[保存]をクリックします。
 メディアタイプの一覧に作成されていることが分かります。
 これを先ほどの[管理]-[ユーザ]-[メディア]タブで[追加]をクリックします。

zabbix-action02

 新規メディアのウィンドウで、[タイプ]で先ほど[説明]で記載したものを選択。
 [送信先]に送信先メールアドレスを記載。
 [有効な時間帯]はデフォルトで毎日24時間有効となっています。必要に応じて変更してください。
   (1 - 月曜日、2 - 火曜日、…、7 - 日曜日)
 [指定した深刻度のときに使用]では、どの深刻度のときにアクションを実行するかを選択可能です。
 [ステータス]で有効を選択します。
 設定が完了したら、[追加]をクリックします。その後、[保存]をクリックして保存します。
 これで、ユーザとメディアタイプのリンク付けが完了しました。

 どのような時にアクションを実行させるのか条件を決める必要があります。
 [設定]-[アクション]をクリック。
 イベントソースが[トリガー]になっていることを確認し、[アクションの作成]をクリックします。

zabbix-action03

 設定するアクションの名称、実行条件、実行内容を設定して保存します。

 作成したアカウントに対しきちんと権限を与えないとメール送信ができません。
 [管理]→[ユーザ]で、右上のプルダウンから[ユーザ]を選択します。ユーザを一覧表示後、該当アカウントをクリックして[権限]タブをクリックし障害が発生したホストまたはホストグループが「読書可能」または「読込専用」のいずれかに表示されるのか確認します。
 もし、拒否にしか表示されない場合、該当アカウントのユーザグループの設定でそのユーザグループがアクセスできるように権限を追加するか、[ユーザの種類]で「Zabbix特権管理者」に変更してください。

●/var/log/messagesを監視する方法

 参考URL:Zabbixでログ監視

 /var/log/messagesに記録されるあるキーワードを検知できるように設定します。その他任意ログ監視に応用できます。
 /var/log/messagesは通常root権限でしか読み込めません。ここではZabbixがroot権限で実行できるように/etc/zabbix/zabbix_agentd.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.conf

# AllowRoot=0
 ↓
AllowRoot=1 ← 変更

# systemctl restart zabbix-agent
 再起動後、/var/log/zabbix/zabbix_agentd.log に started [active checks #1]と記録されていれば問題ありません。


 上記に記載した設定方法はセキュリティ上問題となることから実施しないこと。

 /var/log/messagesを監視するには権限を与える必要があります。
# chgrp zabbix /var/log/messages
 ログローテーション時に権限が元に戻ってしまうため/etc/logrotate.d/rsyslogを変更します。
# vi /etc/logrotate.d/rsyslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/slapd.log
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
    endscript
    create 0640 root zabbix ← 追加
}

 Zabbix監視画面(GUI)にログインし、テンプレート、アイテム、トリガー、アクションの順に設定します。
 テンプレートは既存のテンプレートに追加する形でアイテム等を作成しても構いません。ここではテンプレートの管理上、新規に作成することとします。

 「設定」ー「テンプレート」ー「テンプレートの作成」で新規テンプレートを作成します。
  テンプレート名:Template Log Monitor
  グループ 所属グループ:Template
  ホスト/テンプレート 利用中:監視対象のサーバ名

 作成したテンプレート(「設定」ー「テンプレート」ー「Template Log Monitor」を選択)の上部にある「アイテム」をクリック、その後、右上にある「アイテムの作成」をクリックします。

  名前:syslog
  タイプ:Zabbixエージェント(アクティブ)
  キー:log[/var/log/messages]
  データ型:ログ
  更新間隔(秒):30
  ヒストリ保存期間(日):90
  ログの時間の形式:未入力
  アプリケーションの作成:Syslog
  説明:未入力
  有効:チェックを入れる

 設定が完了したら「追加」をクリックします。設定に問題が無ければステータスが有効になります。作成したアイテムが問題なく動作しているか確認します。
 「監視データ」ー「最新データ」でアプリケーション欄に「Syslog」を記載し選択します。この時、「ヒストリがないアイテムを表示」にチェックを入れておいてください。問題なく監視できていれば「最新のチェック時刻」等に情報を表示されます。
 情報が表示されない場合、zabbix_agentd.conf内のホスト名が間違っていないか、Firewall機能で10050番ポート(Zabbixサーバ側)、10051番ポートが塞がれていないかどうか確認してください。

  ・エージェント側の設定ファイルでServerが正しく設定されている
  ・エージェント側でアクティブチェックが有効になっている
  (設定ファイル内のDisableActiveがコメントアウトされているか0に設定)
  ・エージェント側からサーバ側にポート番号10051で接続可能
  (Firewall等で制限していないか?)
  ・エージェント側の対象となるログファイルがzabbixアカウントで読み取り可能
  ・アイテムの設定でタイプがZABBIXエージェントのアクティブになっている

 確認方法は下記のとおりです。
$ telnet (Zabbixサーバが動作しているマシン) 10050

$ telnet (Zabbixエージェントが動作しているサーバ) 10051

※例(Zabbixサーバの場合)
$ telnet localhost 10050
Trying 192.168.0.1...
Connected to Aserver.
Escape character is '^]'.
(ポートがオープンしている場合、自動的に切断されます。)
Connection closed by foreign host.

※例(Zabbixエージェントの場合)
$ telnet localhost 10051
Trying 192.168.0.1...
Connected to Aserver.
Escape character is '^]'.
(リターンキーを押下すると切断されます。)
Connection closed by foreign host.

※接続不可時の応答例
telnet: Unable to connect to remote host: Connection refused

 作成したテンプレート(「設定」ー「テンプレート」ー「Template Log Monitor」を選択)の上部にある「トリガー」をクリック、その後、右上にある「トリガーの作成」をクリックします。 

  名前:[Syslog] RSYNC : rsync error
  条件式:{Template Log Monitor:log[/var/log/messages].iregexp("rsync error")}<>0
      上記のように設定するには、条件式の空欄横の「追加」をクリック。
      アイテム:右上の「グループ」「ホスト」で適用したいサーバを選択し、「syslog」をクリック。
      関数:「最新(T秒前/T個前)の値が正規表現Vに一致する場合N=1、
         その他の場合N=0(#条件、大文字小文字を区別しない)」を選択。
      V:rsync error(上記の場合、大文字小文字を区別なしに検知可能となります。)
      最新の(T):未入力
      N:0(デフォルトのまま)
  障害イベントを継続して生成:チェックを入れない
  説明:未入力
  URL:未入力
  深刻度:「軽度の障害」を選択
  有効:チェックを入れる

 「更新」をクリックします。
 このまま暫くして/var/log/messagesに「rsync error」を含んだ一文が記録されるとZabbixで検知するようになります。

 「監視データ」-「最新データ」でアクティブチェックの情報が表示または更新されない場合、「●Active Checkが機能しない場合の対処方法」を確認してください。


 または、下記のようにloggerコマンドを実行して/var/log/messagesに書き出すことにより試験することも可能です。
$ logger -p user.warn -t [TEST] "(Error)rsync error"
 必要に応じて、アクションを設定します。アクションの設定で「リカバリメッセージ」をチェックしてしまうと、トリガーで設定した「rsync error」文字列を検知し通知した後、問題のないログが記録されるとリカバリメッセージが通知されてしまいます。この場合のリカバリメッセージは不要ですので「リカバリメッセージ」をチェックする必要はありません。

 「障害イベントを継続して生成」に「チェックを入れない」としたことには理由があります。
 例えば、監視対象ログが/var/log/messagesで、ある文字列を監視し、それを検知した場合、メールを送信すると言うアクションが設定されているとします。
 /var/log/messagesは何かしらの不具合により監視対象となっている文字列等が大量に記録されることがあります。
 「障害イベントを継続して生成」に「チェックを入れる」設定となっている場合、アイテムの「更新間隔」の設定内容にもよりますが、大量のメールが送信される可能性があるためです。

●Active Checkが機能しない場合の対処方法

 ▼エージェント側(/etc/zabbix/zabbix_agentd.conf)の確認
  SourceIP:エージェントのIPアドレスが記載されているか?
  Server:ZabbixサーバのIPアドレスが記載されているか?
  ServerActive:アクティブチェックを実施するZabbixサーバのIPアドレスが記載されているか?
  Hostname:アクティブチェックを実施するZabbixサーバのWeb監視画面で「設定」-「ホスト」を開く。
       該当ホストをクリックし、設定画面の一番上の「ホスト名」で設定されている名称が記載されているか?

 サーバとエージェントが問題なく通信出来ていて、アクティブチェックが正常に動作しない原因は「Hostname」が間違っている可能性が高いです。

●ログファイルから数値を取得する

 ZABBIX3.0の設定の「ログファイルから数値を取得する」を参照してください。

●Webページを監視する

 参考URL:AZabbix 3-13. WEBサイトのレスポンスタイム 監視テンプレートの設定
 参考URL:ZabbixWeb監視で2回以上のレスポンス異常で発火するトリガーを作る。

 作業の手順としては下記のような流れになります。
  • ホストの作成
  • ホストのマクロの設定
  • テンプレートの作成
  • アプリケーションの作成
  • Web監視の設定
  • トリガーの作成
 ホストの作成

 [設定]→[ホスト]→[ホストの作成]をクリックします。
 ホスト名、IPアドレス、DNS名を記載します。

web-page-check-host01.png

 ホストのマクロの設定

 マクロをクリックし、マクロに「{$URL}」、値にURLを記載し「更新」をクリックします。

web-page-check-host02.png

 テンプレートの作成

 [設定]→[テンプレート]→[テンプレートの作成]をクリックします。
 テンプレート名に「Template Web Check」を記載、グループは選択ボタンをクリックし「Templates」を選択します。その後、「追加」をクリックし確定させます。 <

web-page-check-host03.png

 アプリケーションの作成

 作成された「Template Web Check」を開き、名前に「Web Check」を入力します。

web-page-check-host04.png

 Web監視の設定

 「Webシナリオ」をクリックします。
 名前に「html check」を入力、アプリケーションは「Web Check」を選択、更新間隔は5分のため「5m」を入力、試行回数は「1」回、エージェントは「Zabbix」を選択します。

web-page-check-host05.png

 次に「ステップ」をクリック、「追加」をクリックし、Webシナリオステップを作成します。
 名前に「{$URL}」、URLに「{$URL}」、要求ステータスコードに「200」を入力し「追加」ボタンをクリックします。その後「追加」をクリックし、
 この設定により{$URL}には、ホストで設定したURLが挿入されます。

web-page-check-host06.png

 ここまで来ると[監視データ]→[最新データ]でホストを絞り込み「適用」をクリックするとデータが表示されるようになります。

 トリガーの作成

 作成したテンプレート「Template Web Check」を開き、名前に「Webレスポンスコード」、深刻度は「警告」を選択、条件式に「{Template Web Check:web.test.rspcode[web check,{$URL}].count(#3,200,ne)}=3」、手動でのクローズを許可にチェックを入れ、「追加」をクリックします。

web-page-check-host07.png

 この設定により、直近の3回でレスポンスコードが200以外の値がの3回を超えたらトリガーが発生します。


●UPSを監視する

 参考URL:APC社UPSの状態をzabbixで監視する

 APC製の中古UPSをZABBIXで監視するように設定します。
 apcupsdは既に導入済みという前提とさせていただきます。apcupsdの導入については「APCUPSDの設定方法」を参照してください。
 apcupsdを動作させているサーバ上のZABBIXバージョンはserver、agentとともに2.4.8です。
 サーバ上でapcaccessコマンドを実行し、UPSの状態を取得できるか確認します。

# apcaccess
APC : 001,040,1012
DATE : 2017-03-03 13:22:35 +0900
HOSTNAME : hoge.bigbang.mydns.jp
VERSION : 3.14.13 (02 February 2015) redhat
UPSNAME : UPS-1500
CABLE : Ethernet Link
DRIVER : NETWORK UPS Driver
UPSMODE : Stand Alone
STARTTIME: 2017-03-02 21:30:15 +0900
MASTERUPD: 2017-03-03 13:22:35 +0900
MASTER : 192.168.100.1:3551
MODEL : Smart-UPS 1500 DLJ2
STATUS : ONLINE SLAVE
LINEV : 100.8 Volts
LOADPCT : 39.6 Percent
BCHARGE : 100.0 Percent
TIMELEFT : 33.0 Minutes
MBATTCHG : 7 Percent
MINTIMEL : 5 Minutes
MAXTIME : 300 Seconds
OUTPUTV : 100.8 Volts
SENSE : High
LOTRANS : 90.0 Volts
HITRANS : 110.0 Volts
RETPCT : 0.0 Percent
ITEMP : 20.7 C
BATTV : 27.5 Volts
LINEFREQ : 50.0 Hz
LASTXFER : Automatic or explicit self test
NUMXFERS : 0
TONBATT : 0 Seconds
CUMONBATT: 0 Seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x05000408
SERIALNO : AS0502210145
BATTDATE : 2017-02-11
NOMOUTV : 100 Volts
NOMBATTV : 24.0 Volts
FIRMWARE : 601.1DLJ2.A USB FW:
END APC : 2017-03-03 13:22:55 +0900


 確認できたらZABBIXで必要な値を検知できるようにzabbix-agentd.confを設定します。検知する値は下記のとおりです。
  • LINEV : 入力(商用電源)電圧(V)
  • OUTPUTV : 出力電圧(V)
  • BATTV : バッテリー電圧(V)
  • LOADPCT : 負荷(%)
  • BCHARGE : バッテリー残容量(%)
  • TIMELEFT : バッテリー稼働時間(分)
  • ITEMP : 内部温度(℃)
  • CORE0 : CPU0温度(℃)  ※lm_sensorsを利用
  • CORE1 : CPU1温度(℃)  ※lm_sensorsを利用
※lm_sensorsに関するページ
 CentOS 6で動作温度を取得するlm_sensorsをインストールする
 lm_sensorsによるCPU温度チェック
 @IT:CPUの温度やファンの回転数などをモニタするには
 取得するデータを渡すことができるように/etc/zabbix/zabbix_agentd.confでUserParameteを設定します。
 ただし、/etc/zabbix/zabbix_agentd.confの設定は、データを取得したい対象サーバ上のzabbix-agentd.confに対し設定する必要がありますので注意してください。
  • UserParameter=UPS.LINEV,apcaccess -u|grep LINEV|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=UPS.OUTPUTV,apcaccess -u|grep OUTPUTV|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=UPS.BATTV,apcaccess -u|grep ^BATTV|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=UPS.LOADPCT,apcaccess -u|grep LOADPCT|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=UPS.BCHARGE,apcaccess -u|grep BCHARGE|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=UPS.TIMELEFT,apcaccess -u|grep TIMELEFT|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=UPS.ITEMP,apcaccess -u|grep ITEMP|cut -d ':' -f2|cut -d ' ' -f2
  • UserParameter=CPU.CORE0,sensors|grep "Core 0"|cut -d ':' -f2|cut -d ' ' -f8|cut -c2-5
  • UserParameter=CPU.CORE1,sensors|grep "Core 1"|cut -d ':' -f2|cut -d ' ' -f8|cut -c2-5
 設定完了後、zabbix-agentを再起動します。
 ZABBIXのGUI画面でアイテムを設定します。設定の都合上、テンプレートは新規作成し、その中でアイテム等を定義することとします。
 アプリケーション名はUPSとしました。設定するパラメータは下記のとおりです。

UserParameterで設定したキー名 名前 データ型 単位
UPS.LINEV UPS Line Voltage 数値(浮動小数) V
UPS.OUTPUTV UPS Output Voltage 数値(浮動小数) V
UPS.BATTV UPS Battery Voltage 数値(浮動小数) V
UPS.LOADPCT UPS Load Percent 数値(浮動小数) %
UPS.BCHARGE UPS Battery Capacity 数値(浮動小数) %
UPS.TIMELEFT UPS Time Left 数値(浮動小数) min
UPS.ITEMP UPS Internal Temperature 数値(浮動小数)
CPU.CORE0 CPU0 Temperature 数値(浮動小数)
CPU.CORE1 CPU1 Temperature 数値(浮動小数)


 アイテム作成後、データが取得できているかどうか確認します(「監視データ」-「最新データ」)。

※アプリケーション名:apcupsd
zabbix-ups01.png

※アプリケーション名:CPU
zabbix-ups02.png

 グラフ(カスタムグラフ)を作成します。

※グラフ名:UPS Load
zabbix-ups03.png

※グラフ名:UPS Voltage
zabbix-ups04.png

※グラフ名:Temperature
zabbix-ups05.png

 あとは必要に応じてトリガーを設定すれば、トリガーにしたがいGUIの画面で監視出来るようになります。例えば、商用電圧があるしきい値を下回った場合(3分間継続して90Vを下回った場合)、トリガーで検知できるようにする場合は下記のような感じです。
{Template Apcupsd:UPS.LINEV.last(#3)}<90

 さらに、アクションを指定することによりメールの送信等が出来るようになります。

 UPSが接続されているサーバにzabbix-agentがインストールされていない場合の対処

 UPSが接続されているサーバにzabbix-agentがインストールされている場合、上記と同様にUserParameterを設定します。zabbix-agentd.confでzabbix-serverのIPアドレスを指定することによりデータを収集することが出来ます。データ収集出来ない場合、該当テンプレートでデータ収集したいサーバをリンクさせてください。
 しかし、UPSが接続されているサーバにzabbix-agentがインストールされていない場合、zabbix-agentがインストールされているサーバでapcaccessの結果を取得できるようにする必要があります。
 そこで、定期的に結果を取得できるようシェルスクリプトを作成します。
#!/bin/bash

APC=`which apcaccess`

if [ -e $APC ]; then
  echo '`which apcaccess`' > script.sh
  ssh root@$1 'bash -s' < script.sh > /tmp/apcaccess_$1.txt
  rm -f script.sh
else
  exit
fi
 apcaccess.sh hogeと実行すると、結果が/tmp/apcaccess_hoge.txtに出力されます。
 あとはテキストファイルから必要なデータを抜き出せば監視出来るようになります。

 30秒毎にcronを動作させる

 30秒毎にcronを実行させるには、seqコマンドで待機(sleep)する秒数を指定して、その分をsleepさせてからスクリプトを実行しするようにさせます。

; 10秒おきに実行
* * * * * for i in `seq 0 10 59`;do (sleep ${i} ; /path/to/script prm1 prm2) & done;

; 15秒おきに実行
* * * * * for i in `seq 0 15 59`;do (sleep ${i} ; /path/to/script prm1 prm2) & done;

; 毎分15秒と45秒に実行
* * * * * for i in 15 45;do (sleep ${i} ; /path/to/script prm1 prm2) & done;
 

●HDDの温度監視

 参考URL:ZabbixでHDDの温度を監視する
 参考URL:Zabbix Agentの「リモートコマンド」を使って監視対象のOSコマンドを実行する

 Zabbix 5.0でHDDの温度監視が出来るように設定します。
# dnf --enablerepo=epel install hddtemp -y
 温度は下記コマンドで確認できます。
# hddtemp
/dev/sda: WDC WD20EFAX-68FB5N0: 37°C
/dev/sdb: WDC WD20EFAX-68FB5N0: 34°C
 温度の値のみを表示させるには下記のようにします。
# hddtemp -n /dev/sd[a,b]
37
34
 Zabbix Agent 5.0より前のバージョンは下記のように設定します。
# vi /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 
 zabbixにroot権限を与えます。
# vi /etc/zabbix/zabbix_agentd.conf
# AllowRoot=0
 ↓ 下記のように変更
AllowRoot=1

# systemctl restart zabbix-agent

または

# visudo
# allows 'zabbix' user to run all commands without password.
zabbix ALL=NOPASSWD: ALL

# systemctl restart zabbix-agent
 Zabbix Agent 5.0以降のバージョンでは下記のように設定します。
 コマンドの実行を許可させるため、/etc/zabbix/zabbix_agentd.confを編集します。
 Zabbix 5.0では、EnableRemoteCommands=1は非推奨になり、AllowKeyを利用します。
# vi /etc/zabbix/zabbix_agentd.conf
 ↓ 末尾に追加
AllowKey=system.run[/bin/hddtemp /dev/sda -n]
AllowKey=system.run[/bin/hddtemp /dev/sdb -n]

# systemctl restart zabbix-agent
 Zabbixエージェントでコマンドを実行し、値を取得できるか確認します。
# zabbix_agentd -t "system.run[/bin/hddtemp /dev/sda -n]"
system.run[/bin/hddtemp /dev/sda -n]          [t|42]
 問題なく"42"という値が取れています。"t"というのはテキスト形式のことを表しますが、今のZabbixではアイテムでデータ型を数値などにしても問題なく数値として取り込んでくれるようです。
 テンプレート及びアイテムを作成します。
##### テンプレートの作成
[設定]ー[テンプレート]ー[テンプレートの作成]を押下
テンプレート名:Template HDD Temperature(任意)
グループ名:Template(任意)
[追加]を押下。

##### アイテムの作成
[設定]ー[テンプレート]ー名前の欄に[HDD]と入力後、適用を押下)ー[Template HDD Temperature]をクリック。
[アイテム]ー[アイテムの作成]を押下。
名前:/dev/sda temperature(任意)
タイプ:Zabbixエージェント
キー:system.run[/bin/hddtemp /dev/sda -n]
データ型:数値 (浮動小数)
単位:℃
更新間隔:1m
アプリケーションの作成:HDD temperature(任意)
[更新]を押下。
監視するHDDの数だけ、作業を繰り返します。
 グラフを作成します。
[設定]ー[テンプレート]ー名前の欄に[HDD]と入力後、適用を押下)ー[Template HDD Temperature]をクリック。
[グラフ]ー[グラフの作成]を押下。
名前:HDD Temperature(任意)
幅:(任意)
高さ:(任意)
アイテムの[追加]をクリック。
表示された一覧から、該当のアイテムを選択。
監視対象アイテムを複数選択すると、一つのグラフに複数のデータが表示されます。
[追加]を押下。
 HDD温度を監視するサーバ(ホスト)に作成したテンプレートを関連付けます。
[設定]ー[ホスト]ー[監視対象ホスト]を選択。
[テンプレート]を選択。
新規テンプレートをリンク:「Template HDD Temperature」と入力後、[選択]を押下。
「Template HDD Temperature」が表示されない場合、ホストグループで「Template」を入力し、[選択]を押下。
「Template HDD Temperature」にチェックを入れ、[選択]を押下。
[更新]を押下。
 作成されたグラフを確認します。
[設定]ー[ホスト]ー[監視対象ホスト]を選択。
[グラフ]をクリック。
「Template HDD Temperature: HDD Temperature」を選択。
[プレビュー]をクリック。
 グラフが表示されます。

●監視設定のエクスポート/インポート

 監視サーバを複数使用して複数の監視システムを構築する場合、同じような監視設定を何度も行う必要があります。ZABBIXでは、一度作成したテンプレートをXMLファイルで出力し、別のZABBIXサーバにインポートすることで設定を移植できます。その設定のエクスポート/インポートの方法を紹介しましょう。
 エクスポート/インポートは、テンプレートもしくはホスト単位で行うことができます。対象は、テンプレート、ホストに含まれるアイテム、トリガー、グラフです。
 設定をエクスポートするには[設定]→[エクスポート/インポート]より行います。右上のプルダウンメニューよりエクスポートを選択します。設定のエクスポート画面では、現在登録されているすべてのホスト・テンプレートが表示されます。エクスポート対象となるテンプレート名称、関連付けられたテンプレート、アイテム、トリガー、グラフを選択し、画面下の[エクスポート]をクリックすることでエクスポートが行われ、ブラウザを利用しているPC上に zabbix_export.xmlとして保存されます。

画面38
画面38 設定のエクスポート

 エクスポートした設定情報をインポートするには[設定]→[エクスポート/インポート]より行います。右上のプルダウンメニューよりインポートを選択します。[ファイルをインポート]にインポートしたいXMLファイルを指定し、[インポート]をクリックします。

画面39
画面39 設定のインポート

 以上で、設定情報がインポートされます。

●SNMPトラップの監視設定(SNMPTT)

 SNMPトラップを受信してZabbixで監視をするための設定方法です。Zabbix公式マニュアルで推奨しているSNMPTT(snmptthandler-embedded)を使って設定します。

 参考URL:CentOS 8 + Zabbix 5.0の環境にSNMPTTを導入してSNMP Trap監視をできるようにする
 参考URL:CentOS8系でperl-Net-SNMPをインストールする
 参考URL:Zabbix 2.4 SNMPトラップの監視設定メモ(SNMPTT)
 参考URL:SNMPTRAPの発報方法(v1~v3)

 参考URL:SNMP Trapの受信について
 参考URL:SNMPTTを利用してSNMPトラップを監視する その1
 参考URL:SNMPTTを利用してSNMPトラップを監視する その2

 Zabbixでトラップを受信するには、下記のような手順となります。

 監視対象機器からトラップを送信する。
  ↓
 snmptrapdでトラップ受信し、snmpttに渡す。
  ↓
 snmpttはトラップを整形し、SNMPTrapperFile(テキストファイル)に出力する。
  ↓
 snmpttが出力したファイルを、Zabbixが読み込む。

 firewalldでの除外設定

 SNMPトラップはUDP162番ポートを使用します。iptablesやfirewalldなどでパケットフィルタリングを実施している場合は、ポートを開けます。
# firewall-cmd --add-service=snmptrap --permanent
# firewall-cmd --reload
# firewall-cmd --list-service
http https snmp snmptrap ssh
 snmptrapが表示されれば、該当ポートが開放されています。

 インストール

 ※CentOS Stream 8の場合

 NET-SNMPをインストールします。
# dnf -y install net-snmp*
 perl-Net-SNMPをインストールしようとすると、perl-Digest-SHA1を要求されます。
 更に、perl-Digest-SHA1はPowerToolsというリポジトリに格納されています。
 デフォルトではPowerToolsというリポジトリは無効化されています。
# dnf repolist PowerTools
repo id                                               repo の名前                                                             状態
powertools                                            CentOS Stream 8 - PowerTools                                            無効化
 まず、PowerToolsというリポジトリを有効化します。
# dnf config-manager --enable powertools

# dnf repolist PowerTools
repo id                                               repo の名前                                                             状態
powertools                                            CentOS Stream 8 - PowerTools                                            有効化
 perl-Net-SNMPをインストール後、snmptt-1.4.2-1.el7.noarch.rpmをインストールします。
# dnf install --enablerepo=epel perl-Net-SNMP perl-Config-IniFiles

# dnf install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/snmptt-1.4.2-1.el7.noarch.rpm


 ※CentOS 7の場合

 NET-SNMPをインストールします。
# yum -y install net-snmp net-snmp-perl net-snmp-sysvinit
 SNMPTTをインストールためにEPELリポジトリの追加が必要です。
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm 
# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6

# yum -y install snmptt

インストール後、EPELリポジトリを無効化する場合、下記を実施
# vi /etc/yum.repos.d/epel.repo
---(下記を変更)---------------------------
[epel]
name=Extra Packages for Enterprise Linux 6 – $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
↓
enabled=0


 snmptrapdの設定

 SNMPTTでOIDのフィルタリングをしますので、OIDをそのまま渡すようsnmptrapdの起動オプションを追加します。

 ※CentOS Stream 8の場合
# vi /etc/sysconfig/snmptrapd
OPTIONS="-Ls6 -p /var/run/snmptrapd.pid"
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"

 ※CentOS 7の場合
# vi /etc/rc.d/init.d/snmptrapd
OPTIONS="-m +ALL -Lsd -On -p /var/run/snmptrapd.pid"


 snmptrapd.confの設定

 authCommunityという設定を使って、どのSNMPトラップの受信を許可するかを設定します。

 ※CentOS Stream 8の場合
# vi /etc/snmp/snmptrapd.conf
authCommunity log,execute,net COMMUNITY名
traphandle default /usr/sbin/snmptthandler
disableAuthorization yes

 ※CentOS 7の場合
# vi /etc/snmp/snmptrapd.conf
authCommunity log,execute,net COMMUNITY名
traphandle default /usr/sbin/snmptthandler
disableAuthorization yes


 SNMPTTの設定

 日付のフォーマットをわかりやすくしたり、誤ったフォーマットのトラップの受信時に別途ログに出力するようにしておきます。ここで指定した日付フォーマットとアイテム登録時の「ログの時間の形式」(下記の場合であれば「yyyy/MM/dd hh:mm:ss」)を合わせるようにしてください。
# vi /etc/snmp/snmptt.ini
mode = daemon
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 2
date_time_format = %Y/%m/%d %H:%M:%S
sleep = 1
unknown_trap_log_enable = 0
syslog_enable = 0
 仮で全てのトラップを未定義扱いでとりあえず処理するために、以下の内容のファイルをパッケージでインストールしたときには作成されていないと思いますので、新規作成しておきます。
# vi /etc/snmp/snmptt.conf
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $ar にて未定義のイベント受信 $-*
 トリガー設定時にある文字列を検知することによりトラップを検知させたい場合があります。この時、引数はsnmptt.confで設定したFORMATの文字列内(上記の緑字)で検索したい文字列を指定します。
 例えば、下記の場合
FORMAT ZBXTRAP $aA $ar A linkDown trap signifies that the SNMPv2 entity, $-*
 「linkDown」や「A linkDown trap signifies」等で検索できるようになります。
 トリガーの設定時になかなか正常に動作(検知)しないという羽目に会いましたので参考にしてください。

 Zabbixサーバの設定

 /etc/zabbix/zabbix_server.confを変更します。
# vi /etc/zabbix/zabbix_server.conf
SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1


 設定変更の反映

 変更したファイルを有効にするためsnmptrapdサービスの再起動、snmpttサービスの再起動、zabbix_serverを再起動します。
# systemctl restart snmptrapd
# systemctl restart snmptt
# systemctl restart zabbix-server


 Trapの試験

 Trapの送信試験をします。

# snmptrap -v 2c -c コミュニティ名 ZABBIXサーバのIPアドレス '' .1.3.6.1.4.1.8072.9999 'TEST'
※ローカルホストで実行
# snmptrap -v 2c -c コミュニティ名 192.168.0.44 '' netSnmpExperimental netSnmpExperimental.1 s "TEST1" netSnmpExperimental.2 s "from localhost"

# snmptrap -v 1 -c bigbang 192.168.0.44 '' 192.168.0.44 6 99 '' netSnmpExperimental.1 s "TEST1" netSnmpExperimental.2 s "from localhost"

※リモートホストから実行
snmptrap -v 2c -c コミュニティ名 192.168.0.44 '' netSnmpExperimental netSnmpExperimental.1 s "TEST1" netSnmpExperimental.2 s "from remotehost"

 /var/log/snmptt/snmptt.log及び/var/log/messagesに下記のように記録されます。

2016/06/27 09:53:31 .1.3.6.1.4.1.8072.9999 Normal "General event" serverA - ZBXTRAP 192.168.20.2 192.168.20.2 にて未定義のイベント受信 netSnmpExperimental ():TEST

※ローカルホストでの実行後
 /var/log/snmptt/snmptt.log
2021/08/13 13:24:22 .1.3.6.1.4.1.8072.9999 Normal "General event" 192.168.0.44 - ZBXTRAP 192.168.0.44 192.168.0.44 にて未定義のイベント受信 netSnmpExperimental.1 ():TEST1 netSnmpExperimental.2 ():from localhost
 /var/log/messages
Aug 13 13:24:22 zabbix-sever snmptrapd[3726043]: 2021-08-13 13:28:25 zabbix-sever [UDP: [192.168.0.44]:48392->[192.168.0.44]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (62620556) 7 days, 5:56:45.56#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.8072.9999#011.1.3.6.1.4.1.8072.9999.1 = STRING: "TEST1"#011.1.3.6.1.4.1.8072.9999.2 = STRING: "from localhost"

※リモートでの実行後
 /var/log/snmptt/snmptt.log
2021/08/13 13:37:29 .1.3.6.1.4.1.8072.9999 Normal "General event" 192.168.0.78 - ZBXTRAP 192.168.0.78 192.168.0.78 にて未定義のイベント受信 netSnmpExperimental.1 ():TEST1 netSnmpExperimental.2 ():from remotehost
 /var/log/messages
Aug 13 13:37:29 zabbix-sever snmptrapd[3726043]: 2021-08-13 13:37:29 192.168.0.78 [UDP: [192.168.0.78]:51289->[192.168.0.44]:162]:#012.1.3.6.1.2.1.1.3.0 = Timeticks: (77190064) 8 days, 22:25:00.64#011.1.3.6.1.6.3.1.1.4.1.0 = OID: .1.3.6.1.4.1.8072.9999#011.1.3.6.1.4.1.8072.9999.1 = STRING: "TEST1"#011.1.3.6.1.4.1.8072.9999.2 = STRING: "from remotehost"


 なお、Zabbix Server上で設定するアイテムやトリガーに検知させるためには、下記に記載している「ホストの設定」で、Trapを検知するホストのSNMPインターフェースを設定しておく必要があります。
 また、Trap送信試験はTrapを検知させたいサーバ(ローカルホスト)上で実施する必要があります。
 ローカル上でTrap送信試験を実施しなかった場合、/var/log/zabbix/zabbix_server.logに下記のように「unmatched trap received」が記録され、Zabbix Server上(最新データでの表示やトリガーで)で正常に検知できません。

※他ホスト上(Trapを検知させたいサーバ以外)からTrap送信を実行
 下記の場合、192.168.0.78からTrap送信を実行

snmptrap -v 2c -c コミュニティ名 192.168.0.44 '' netSnmpExperimental netSnmpExperimental.1 s "TEST1" netSnmpExperimental.2 s "from remotehost"

2653251:20210813:133731.419 unmatched trap received from "192.168.0.78": 2021/08/13 13:37:29 .1.3.6.1.4.1.8072.9999 Normal "General event" mail.bigbang.mydns.bz - 192.168.0.78 にて未定義のイベント受信 netSnmpExperimental.1 ():TEST1 netSnmpExperimental.2 ():from remotehost


 Trap用テンプレートの作成

 ZabbixでTrapをトラップを監視するため新規にSNMP Trap用templateを作成します。「設定」 -> 「テンプレート」をクリックし、右上の「テンプレートの作成」をクリックします。

trap-template01.png

 下部にある「追加」をクリックし作成します。

trap-template02.png

 「Template SNMP Trap」が新規作成されていることを確認します。

trap-template03.png

 Trap監視用アイテムの作成

 「Template SNMP Trap」の「アイテム」をクリックします。

 右上の「アイテムの作成」をクリックします。

trap-template-item01.png

 下記を入力または選択し下部の「追加」をクリックします。
名前:SNMPトラップ(テスト用)
タイプ:SNMPトラップ
キー:snmptrap["General"]
データ型:文字列
アプリケーションの作成:SNMP Trap
 ※キー:snmptrap の引数は必ずダブルクオート「"」で括ってください。シングルクオート「'」で括ると正しく動作しません。

 キー設定時に「General event」を指定する場合、snmptrap["General event"]とせず、snmptrap[General event]に設定しないと検知してくれませんでした。

trap-template-item02.png

 下記のように作成されます。

trap-template-item03.png

 ホストの設定

 [設定] → [ホスト] からSNMPインターフェースを設定するホストをクリックします。「ホスト」タブを選択して、SNMPインターフェースの「追加」をクリック、IPアドレスを入力します。

 ※SNMPインターフェースの追加設定をしていない場合、アイテムやトリガー作成時にエラーが表示されてしまいますので注意してください。

trap-template-host01.png

 [テンプレート]タブを選択し、[選択]をクリックします。作成したトラップ監視テンプレートにチェックを入れて[選択]をクリックします。

trap-template-host02.png

 [追加]をクリックします。

trap-template-host03.png

 「テンプレートとのリンク」にトラップ監視テンプレートが表示されていることを確認し「更新」ボタンをクリックすればホストの設定完了です。

trap-template-host04.png

 トリガーの設定

 参考URL:Zabbix 2.4 でRTXルーターのsnmptrap監視がしたい

 バージョン2.2.11では下記斜字体の設定は必要で、バージョン2.4.8では下記斜字体の設定をしなくてもトリガーが動作することが判明しました。
 SNMPTTの設定に記載されているとおりの記載でない場合、トラップを検知することができませんので注意してください。
 例えば、●SNMPトラップの監視設定2に記載しているとおり、Cisco1812のリンアクアップ/リンクダウン用のMIBファイルをsnmpttconvertmibコマンドを使用して変換しましたが、正常にトラップの検知が出来ませんでした。
 rfc2233.confの内容を確認したら記載が異なっており、下記のとおり修正したところ上手く動作しました。

# vi /etc/snmp/rfc2233.conf
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
#FORMAT A linkDown trap signifies that the SNMPv2 entity, $*
 ↓
EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar A linkDown trap signifies that the SNMPv2 entity, $-*

EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
#FORMAT A linkDown trap signifies that the SNMPv2 entity, $*
 ↓
EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal
FORMAT ZBXTRAP $aA $ar A linkUp trap signifies that the SNMPv2 entity, $-*


 ZBXTRAP $aAまたはZBXTRAP $arの記載があればバージョン2.2でのトリガは動作します。
 なお、上記の設定はホスト「cisco1812」を作成し、更にテンプレート「Template SNMPTrap cisco1812」を作成し関連付けて、アプリケーション、アイテム、トリガーを作成しています。


 設定 -> ホストでZabbix server(下図の場合、neko)のトリガーを選択し、右上の「トリガーの作成」をクリックします。

trigger01.png

 名前:SNMP Trap TEST
 条件式:{neko.bigbang.dyndns.org:snmptrap["General"].iregexp(*)}=1
 条件式:{neko.bigbang.dyndns.org:snmptrap[General].iregexp(*)}=1
  ※トリガー関数にiregexp(*)を使い、収集したアイテムをすべて検知させます。
  ※文字列で絞り込みたい場合は*部分を文字列にします。

trigger02.png

 Trapを送信し、Zabbixで検知されればOKです。[監視データ]->[概要]をクリック、フィルタをかけて表示させます。
 グループ:すべて
 タイプ:データ
 アプリケーションによるフィルター:SNMP Trap
 表示された時刻をクリックし「最新の値」をクリックすると内容が表示されます。

trigger03.png

 「最新の値」をクリックしても内容が表示されない場合、[ズーム]で「すべて」をクリックすると表示されます。

trigger04.png

●SNMPTrapperFileのログローテーション

 最後に、SNMPTrapperFileはSNMPトラップを受信するたびに増加していきますので、logrotateを設定します。
/etc/logrotate.d/snmptt
/var/log/snmptt/snmptt*.log /var/log/snmptt/snmptthandler.debug {
 weekly
 notifempty
 missingok
}

/var/log/snmptt/snmptt.debug {
 weekly
 notifempty
 missingok
 postrotate
 /etc/init.d/snmptt reload >/dev/null 2>/dev/null || true
 endscript
}


●SNMP MIBファイルの追加

 参考URL:CentOS snmptrapd へ MIBファイルを追加する

 snmptrapdが含まれるnet-snmpのMIBファイルは、/usr/share/snmp/mibsに保存されていて、標準的なMIBファイルのみとなっています。
 したがって、スイッチ、ルータ及びサーバなどのベンダー機器が出力するSNMPTRAPを受信した場合、snmptrapdが受信したOIDを解釈できない為、意味不明な数字の羅列になってしまいます。

 下記はルーターのあるポートのリンクダウン・リンクアップを検知した時のログの一部です。

# tail -f /var/log/snmptt/snmptt.log
2016/06/30 13:55:33 .1.3.6.1.6.3.1.1.5.3 Normal "General event" cisco1812.bigbang.dyndns.org - ZBXTRAP 192.168.0.254 192.168.0.254 にて未定義のイベント受信 ifIndex.13 (INTEGER32):13 ifDescr.13 (OCTETSTR):FastEthernet9 ifType.13 (INTEGER):ethernetCsmacd enterprises.9.2.2.1.1.20.13 ():down
2016/06/30 13:55:37 .1.3.6.1.6.3.1.1.5.4 Normal "General event" cisco1812.bigbang.dyndns.org - ZBXTRAP 192.168.0.254 192.168.0.254 にて未定義のイベント受信 ifIndex.13 (INTEGER32):13 ifDescr.13 (OCTETSTR):FastEthernet9 ifType.13 (INTEGER):ethernetCsmacd enterprises.9.2.2.1.1.20.13 ():up


 そこで、ベンダーが提供するMIBファイルを追加することで、解釈可能な文字列へ変換して表示するようになります。
 ここでは、/usr/share/snmp/vendormibsディレクトリへベンダーMIBファイルを追加する例を記載します。
# mkdir /usr/share/snmp/vendormibs
# cp xxx.mib /usr/share/snmp/vendormibs
 次に snmptrapd デーモンへ追加したMIBファイルが存在するディレクトリパスを認識させるため、オプションを指定します。
# vi /etc/sysconfig/snmptrapd
 ファイル中のOPTIONS=で始まる行を変更します。デフォルトは、コメントになっていますので、コメントアウトを行うか、行をコピー後に以下の設定を追加(-M、-m を追加)します。

OPTIONS="-Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/vendormibs -m all"

-M: MIBファイルが存在するディレクトリを指定します。
  複数ディレクトリを指定する場合は、":"(コロン)を区切り文字として複数指定します。

-m: 読み込む MIBファイルを指定します。"all" を指定すると、検索したすべての MIB ファイルを読み込みます。


 ファイルの設定が完了した後は、snmptrapd を再起動し設定を反映します。
# /etc/init.d/snmptrapd restart 
 まずは、SNMPサービスに読み込まれているMIB全体のツリーを取得します。
# snmptranslate -Tp > MIBs.txt


●SNMPトラップの監視設定2

 参考URL:SNMPTTの設定 補足(訂正)
 参考URL:SNMPTT その2 ← かなり詳しい

 SNMPTTの設定の設定方法では、想定されるsnmptrapに対し全て定義を記載しない限り「・・・にて未定義のイベント受信・・・」というログとして記録されてしまいます。
 これでは到底対応しきれないので、snmpttconvertmibコマンドを使用してmibを/etc/snmp/snmptt.ini内で定義し読み込める形式に変換して保存します。
 ネットワーク機器であるCisco 1812を例に設定する方法を記載します。
 Cisco 1812のトラップに関係しそうなファイルを捜し出し、変換します。

# grep OLD-CISCO-INTERFACES-MIB /usr/share/snmp/vendormibs/cisco1812/*
/usr/share/snmp/vendormibs/cisco1812/CISCO-GENERAL-TRAPS.my: FROM OLD-CISCO-INTERFACES-MIB
/usr/share/snmp/vendormibs/cisco1812/CISCO-IF-EXTENSION-MIB-V1SMI.my:-- This MIB replaces the OLD-CISCO-INTERFACES-MIB.
/usr/share/snmp/vendormibs/cisco1812/CISCO-IF-EXTENSION-MIB.my: This MIB replaces the OLD-CISCO-INTERFACES-MIB.
/usr/share/snmp/vendormibs/cisco1812/OLD-CISCO-INTERFACES-MIB.my:-- OLD-CISCO-INTERFACES-MIB.my: Cisco Interfaces MIB file
/usr/share/snmp/vendormibs/cisco1812/OLD-CISCO-INTERFACES-MIB.my: OLD-CISCO-INTERFACES-MIB DEFINITIONS ::= BEGIN

# snmpttconvertmib --in=/usr/share/snmp/vendormibs/cisco1812/CISCO-GENERAL-TRAPS.my --out=/etc/snmp/cisco1812/CISCO-GENERAL-TRAPS.conf
# snmpttconvertmib --in=/usr/share/snmp/vendormibs/cisco1812/CISCO-IF-EXTENSION-MIB-V1SMI.my --out=/etc/snmp/cisco1812/CISCO-IF-EXTENSION-MIB-V1SMI.conf
# snmpttconvertmib --in=/usr/share/snmp/vendormibs/cisco1812/CISCO-IF-EXTENSION-MIB.my --out=/etc/snmp/cisco1812/CISCO-IF-EXTENSION-MIB.conf
# snmpttconvertmib --in=/usr/share/snmp/vendormibs/cisco1812/OLD-CISCO-INTERFACES-MIB.my --out=/etc/snmp/cisco1812/OLD-CISCO-INTERFACES-MIB.conf


 生成したファイルを/etc/snmp/snmptt.iniに追記し、snmpttを再起動します。
# vi /etc/snmp/snmptt.ini
snmptt_conf_files =<<END
/etc/snmp/snmptt.conf
/etc/snmp/cisco1812/CISCO-GENERAL-TRAPS.conf
/etc/snmp/cisco1812/CISCO-IF-EXTENSION-MIB-V1SMI.conf
/etc/snmp/cisco1812/CISCO-IF-EXTENSION-MIB.conf
/etc/snmp/cisco1812/OLD-CISCO-INTERFACES-MIB.conf
END

# systemctl restart snmptt
 その後、サーバを再起動しインターフェースをダウンさせましたがログに変化はなく下記のとおりでした。今回生成したファイルに該当するものが無かったようです。

2016/07/07 13:20:25 .1.3.6.1.6.3.1.1.5.3 Normal "LOGONLY" cisco1812.bigbang.dyndns.org - ZBXTRAP 192.168.0.254 192.168.0.254 にて未定義のイベント受信 ifIndex.13 (INTEGER32):13 ifDescr.13 (OCTETSTR):FastEthernet9 ifType.13 (INTEGER):ethernetCsmacd OLD-CISCO-INTERFACES-MIB::locIfReason.13 (unknown):down
2016/07/07 13:20:29 .1.3.6.1.6.3.1.1.5.4 Normal "LOGONLY" cisco1812.bigbang.dyndns.org - ZBXTRAP 192.168.0.254 192.168.0.254 にて未定義のイベント受信 ifIndex.13 (INTEGER32):13 ifDescr.13 (OCTETSTR):FastEthernet9 ifType.13 (INTEGER):ethernetCsmacd OLD-CISCO-INTERFACES-MIB::locIfReason.13 (unknown):up
2016/07/07 13:20:44 .1.3.6.1.6.3.1.1.5.3 Normal "LOGONLY" cisco1812.bigbang.dyndns.org - ZBXTRAP 192.168.0.254 192.168.0.254 にて未定義のイベント受信 ifIndex.13 (INTEGER32):13 ifDescr.13 (OCTETSTR):FastEthernet9 ifType.13 (INTEGER):ethernetCsmacd OLD-CISCO-INTERFACES-MIB::locIfReason.13 (unknown):down
2016/07/07 13:20:46 .1.3.6.1.6.3.1.1.5.4 Normal "LOGONLY" cisco1812.bigbang.dyndns.org - ZBXTRAP 192.168.0.254 192.168.0.254 にて未定義のイベント受信 ifIndex.13 (INTEGER32):13 ifDescr.13 (OCTETSTR):FastEthernet9 ifType.13 (INTEGER):ethernetCsmacd OLD-CISCO-INTERFACES-MIB::locIfReason.13 (unknown):up


 再度、ログから複数個の文字列で検索して探してみます。

# grep -rl "locIfReason" /usr/share/snmp/vendormibs/cisco1812/* | xargs grep -r "ifIndex"
/usr/share/snmp/vendormibs/cisco1812/CISCO-GENERAL-TRAPS.my: sysUpTime, ifIndex, ifDescr, ifType, egpNeighAddr,
/usr/share/snmp/vendormibs/cisco1812/CISCO-GENERAL-TRAPS.my: VARIABLES { ifIndex, ifDescr, ifType, locIfReason }
/usr/share/snmp/vendormibs/cisco1812/CISCO-GENERAL-TRAPS.my: VARIABLES { ifIndex, ifDescr, ifType, locIfReason }
/usr/share/snmp/vendormibs/cisco1812/OLD-CISCO-INTERFACES-MIB.my: DisplayString, ifIndex
/usr/share/snmp/vendormibs/cisco1812/OLD-CISCO-INTERFACES-MIB.my: INDEX { ifIndex }
/usr/share/snmp/vendormibs/cisco1812/OLD-CISCO-INTERFACES-MIB.my: to its ifIndex"


 手持ちのMIBファイルには該当するものがないようです。インターネットから探します。
 ログを見るとLinkkDownは.1.3.6.1.6.3.1.1.5.3、LinkUpは.1.3.6.1.6.3.1.1.5.4です。これを定義してあるMIBを探します。
 第8回 SNMPによる異常値検出テクニック (2/7)によるとRFC1215で定義されているようです。
 また、CISCO-GENERAL-TRAPS.myの中身を見ると下記のような記載があり、関連するMIBは変換し設定したほうが良さそうです。
    CISCOTRAP-MIB DEFINITIONS ::= BEGIN

          IMPORTS
              sysUpTime, ifIndex, ifDescr, ifType, egpNeighAddr, 
              tcpConnState
                   FROM RFC1213-MIB
              cisco
                   FROM CISCO-SMI
              whyReload, authAddr
                   FROM OLD-CISCO-SYSTEM-MIB
              locIfReason
                   FROM OLD-CISCO-INTERFACES-MIB
              tslineSesType, tsLineUser
                   FROM OLD-CISCO-TS-MIB
              loctcpConnElapsed, loctcpConnInBytes, loctcpConnOutBytes
                   FROM OLD-CISCO-TCP-MIB
              TRAP-TYPE
                   FROM RFC-1215;

 RFC1215を変換し設定しましたがログに変化はありませんでした。
 いろいろ調べた結果、RFC2233を利用すれば良いことがわかりました。
 下記がその時の作業及びログです。

# snmpttconvertmib --in=/usr/share/snmp/mibs/rfc2233.mib --out=/etc/snmp/rfc2233.conf
# vi /etc/snmp/snmptt.ini
# systemctl restart snmptt
# tail -f /var/log/snmptt/snmptt.log
2016/07/07 17:48:20 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" cisco1812.bigbang.dyndns.org - A linkDown trap signifies that the SNMPv2 entity, 13 FastEthernet9 ethernetCsmacd down
2016/07/07 17:48:22 .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" cisco1812.bigbang.dyndns.org - A linkDown trap signifies that the SNMPv2 entity, 13 FastEthernet9 ethernetCsmacd up
2016/07/07 17:48:37 .1.3.6.1.6.3.1.1.5.3 Normal "Status Events" cisco1812.bigbang.dyndns.org - A linkDown trap signifies that the SNMPv2 entity, 13 FastEthernet9 ethernetCsmacd down
2016/07/07 17:48:41 .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" cisco1812.bigbang.dyndns.org - A linkDown trap signifies that the SNMPv2 entity, 13 FastEthernet9 ethernetCsmacd up


 綺麗に表示されるようになりました。

●SNMPトラップの監視設定3

 参考URL:ESXi Shellを使って、コマンドでESXiのSNMP Trapの設定を行う方法

 VMware ESXiでTrap送信を設定後、VMを再起動すると下記のようなトラップを受信していることが分かりました。

2021/09/24 22:30:36 .1.3.6.1.4.1.6876.4.1.0.4 Normal "General event" vmware.bigbang.mydns.jp - ZBXTRAP 1.0.0.98 1.0.0.98 にて未定義のイベント受信 vmwVmID.0 (INTEGER32):18 vmwVmConfigFilePath.0 (OCTETSTR):/vmfs/volumes/60d183bb-55497644-e659-************/rocky8-2/rocky8-2.vmx vmwVmDisplayName.18 (OCTETSTR):rocky8-2


 トラップの設定が未定義であったため「・・・にて未定義のイベント受信・・・」というログとして記録されています。
 snmpttconvertmibコマンドを使用して、mibを/etc/snmp/snmptt.ini内で定義し読み込める形式に変換して保存します。
 VMwareのmibファイルは、「SNMP MIB モジュール ファイルのダウンロード (1013445)」内の「VMware Downloads」からダウンロードできます。
 今回はダウンロードしたファイルを展開後、/usr/share/snmp/mibs/vmwフォルダ内に保存します。
 フォルダの内容は下記のとおりでした。
# ls /usr/share/snmp/mibs/vmw/
BRIDGE-MIB.mib                       Q-BRIDGE-MIB.mib                     VMWARE-PRODUCTS-MIB.mib
BRIDGE-MIB.txt                       README                               VMWARE-RESOURCES-MIB.mib
ENTITY-MIB.mib                       RMON-MIB.mib                         VMWARE-ROOT-MIB.mib
HOST-RESOURCES-MIB.mib               RMON2-MIB.mib                        VMWARE-SRM-EVENT-MIB.mib
HOST-RESOURCES-TYPES.mib             SNMP-FRAMEWORK-MIB.mib               VMWARE-SYSTEM-MIB.mib
IANA-ADDRESS-FAMILY-NUMBERS-MIB.mib  SNMP-MPD-MIB.mib                     VMWARE-TC-MIB.mib
IANA-ENTITY-MIB.mib                  SNMPv2-CONF.mib                      VMWARE-TUNNEL-SERVER-AGENTCAP-MIB.mib
IANA-RTPROTO-MIB.mib                 SNMPv2-MIB.mib                       VMWARE-TUNNEL-SERVER-MIB.mib
IANAifType-MIB.mib                   SNMPv2-SMI.mib                       VMWARE-VA-AGENTCAP-MIB.mib
IEEE8021-BRIDGE-MIB.mib              SNMPv2-TC.mib                        VMWARE-VC-EVENT-MIB.mib
IEEE8021-Q-BRIDGE-MIB.mib            TCP-MIB.mib                          VMWARE-VCHA-MIB.mib
IEEE8021-TC-MIB.mib                  TOKEN-RING-RMON-MIB.mib              VMWARE-VCOPS-EVENT-MIB.mib
IEEE8023-LAG-MIB.mib                 UDP-MIB.mib                          VMWARE-VMINFO-MIB.mib
IF-MIB.mib                           UUID-TC-MIB.mib                      VMWARE-VRNI-AGENTCAP-MIB.mib
INET-ADDRESS-MIB.mib                 VMWARE-CIMOM-MIB.mib                 VMWARE-VRNI-MIB.mib
IP-FORWARD-MIB.mib                   VMWARE-ENV-MIB.mib                   VMWARE-VROPS-AGENTCAP-MIB.mib
IP-MIB.mib                           VMWARE-ESX-AGENTCAP-MIB.mib          VMWARE-VROPS-MIB.mib
IPV6-FLOW-LABEL-MIB.mib              VMWARE-HEARTBEAT-MIB.mib             incompatible
LLDP-V2-MIB.mib                      VMWARE-NSX-MANAGER-AGENTCAP-MIB.mib  list-ids-diagnostics.txt
LLDP-V2-TC-MIB.mib                   VMWARE-NSX-MANAGER-MIB.mib           notifications.txt
P-BRIDGE-MIB.mib                     VMWARE-OBSOLETE-MIB.mib              vc-alarms-65.csv
 この中から「・・・にて未定義のイベント受信・・・」を解消させるために、どのmibファイルをSNMPTTに読み込ませるかを探す必要があります。
# grep "vmwVmConfigFilePath" /usr/share/snmp/mibs/vmw/*.mib
/usr/share/snmp/mibs/vmw/VMWARE-OBSOLETE-MIB.mib:       	vmwVmID, vmwVmConfigFilePath
/usr/share/snmp/mibs/vmw/VMWARE-OBSOLETE-MIB.mib:    OBJECTS     { vmwVmID, vmwVmConfigFilePath }
/usr/share/snmp/mibs/vmw/VMWARE-OBSOLETE-MIB.mib:    OBJECTS     { vmwVmID, vmwVmConfigFilePath }
/usr/share/snmp/mibs/vmw/VMWARE-OBSOLETE-MIB.mib:    OBJECTS     { vmwVmID, vmwVmConfigFilePath }
/usr/share/snmp/mibs/vmw/VMWARE-OBSOLETE-MIB.mib:    OBJECTS     { vmwVmID, vmwVmConfigFilePath }
/usr/share/snmp/mibs/vmw/VMWARE-OBSOLETE-MIB.mib:    OBJECTS     { vmwVmID, vmwVmConfigFilePath }
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:vmwVmConfigFilePath OBJECT-TYPE
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:   OBJECTS     { vmwVmID, vmwVmConfigFilePath, vmwVmDisplayName }
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:   OBJECTS     { vmwVmID, vmwVmConfigFilePath, vmwVmDisplayName }
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:   OBJECTS     { vmwVmID, vmwVmConfigFilePath, vmwVmDisplayName }
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:   OBJECTS     { vmwVmID, vmwVmConfigFilePath, vmwVmDisplayName }
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:   OBJECTS     { vmwVmID, vmwVmConfigFilePath, vmwVmDisplayName }
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib:    vmwVmConfigFilePath,
 2つのファイルが該当しましたが、今回は「VMWARE-VMINFO-MIB.mib」を選択しました。
 選択したmibファイルをsnmpttconvertmibコマンドを使用して、/etc/snmp/snmptt.ini内で定義し読み込める形式に変換して保存します。

# snmpttconvertmib --in=/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib --out=/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.txt


***** Processing MIB file *****

snmptranslate version: NET-SNMP version: 5.8
severity: Normal

File to load is: /usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib
File to APPEND TO: /usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.txt

MIBS environment var: /usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.mib
mib name: VMWARE-VMINFO-MIB


Processing MIB: VMWARE-VMINFO-MIB
#
skipping a TRAP-TYPE / NOTIFICATION-TYPE line - probably an import line.
#
Line: 580
NOTIFICATION-TYPE: vmwVmPoweredOn
Variables: vmwVmID vmwVmConfigFilePath vmwVmDisplayName
Enterprise: vmwESXNotifications
Looking up via snmptranslate: VMWARE-VMINFO-MIB::vmwVmPoweredOn
OID: .1.3.6.1.4.1.6876.4.1.0.1
#
Line: 592
NOTIFICATION-TYPE: vmwVmPoweredOff
Variables: vmwVmID vmwVmConfigFilePath vmwVmDisplayName
Enterprise: vmwESXNotifications
Looking up via snmptranslate: VMWARE-VMINFO-MIB::vmwVmPoweredOff
OID: .1.3.6.1.4.1.6876.4.1.0.2
#
Line: 602
NOTIFICATION-TYPE: vmwVmHBLost
Variables: vmwVmID vmwVmConfigFilePath vmwVmDisplayName
Enterprise: vmwESXNotifications
Looking up via snmptranslate: VMWARE-VMINFO-MIB::vmwVmHBLost
OID: .1.3.6.1.4.1.6876.4.1.0.3
#
Line: 613
NOTIFICATION-TYPE: vmwVmHBDetected
Variables: vmwVmID vmwVmConfigFilePath vmwVmDisplayName
Enterprise: vmwESXNotifications
Looking up via snmptranslate: VMWARE-VMINFO-MIB::vmwVmHBDetected
OID: .1.3.6.1.4.1.6876.4.1.0.4
#
Line: 623
NOTIFICATION-TYPE: vmwVmSuspended
Variables: vmwVmID vmwVmConfigFilePath vmwVmDisplayName
Enterprise: vmwESXNotifications
Looking up via snmptranslate: VMWARE-VMINFO-MIB::vmwVmSuspended
OID: .1.3.6.1.4.1.6876.4.1.0.5


Done

Total translations: 5
Successful translations: 5
Failed translations: 0

 生成したファイルを/etc/snmp/snmptt.iniに追記し、snmpttを再起動します。
# vi /etc/snmp/snmptt.ini
 :
[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file).  The COMPLETE path
# and filename.  Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/usr/share/snmp/mibs/vmw/VMWARE-VMINFO-MIB.txt ← 追記
END
 :
# systemctl restart snmptt
 これで綺麗にログに記録されるようになりました。

2021/09/24 22:36:18 .1.3.6.1.4.1.6876.4.1.0.4 Normal "Status Events" vmware.bigbang.mydns.jp - 18 /vmfs/volumes/60d183bb-55497644-e659-************/rocky8-2/rocky8-2.vmx rocky8-2

 想定されるトラップは全て上記の作業を繰り返す必要があります。

●スクリーンのデフォルト表示時間の変更

 参考URL:[1.6.2]グラフ表示期間の規定値
 参考URL:グラフ表示時に時間指定が可能かについて

 デフォルトのグラフ表示時間はdefines.inc.phpのZBX_PERIOD_DEFAULTで設定されています。デフォルトは3600秒(1時間)です。
# vi /usr/share/zabbix/include/defines.inc.php
# service zabbix-server restart
 スクリーンで12時間表示されているグラフをクリックするとグラフも12時間表示となります。

●Apacheの監視設定

 Apacheを監視するには下記の設定を実施します。
# httpd -M 2>/dev/null | grep status_module
 status_module (shared)

# vi /etc/httpd/conf.d/status.conf
ExtendedStatus On
 
<Location /server-status>
    SetHandler server-status
    Require all denied
    Require ip 127.0.0.1 ::1
    Require ip 1.0.0.0/24
    Require ip 192.168.0.0/24
</Location>

# systemctl restart httpd
 ブラウザでhttp(s)://<サーバ名>//server-status?autoにアクセスできることを確認します。
 常時SSL化に伴ってApache監視時のマクロを設定変更する必要があります。
 テンプレート名は「Template App Apache by HTTP」と「Template App Apache by Zabbix agent」です。
 該当テンプレートを選択し、マクロをクリックします。
 表示されているマクロのうち「{$APACHE.STATUS.PORT}」と「{$APACHE.STATUS.SCHEME}」を下記のように変更し保存します。
{$APACHE.STATUS.PORT}:80 → 443
{$APACHE.STATUS.SCHEME}:http → https
 これによりエラーとなっていたデータ(タイプ:依存アイテム)を取得することが出来るようになります。

●MariaDBの監視設定

 参考URL:Zabbix 2.2系 で MySQL監視(Template App MySQL)を導入する手順
 参考URL:Zabbix 2.2でMySQLを監視する

 Zabbix 2.4でデフォルトで設定されているMySQL監視用テンプレートを利用してMySQLを監視させます。
 アイテムとして下記が設定済みとなっていました。
MySQL bytes received per second	 	mysql.status[Bytes_received]
MySQL bytes sent per second	 	mysql.status[Bytes_sent]
MySQL begin operations per second	mysql.status[Com_begin]
MySQL commit operations per second	mysql.status[Com_commit]
MySQL delete operations per second	mysql.status[Com_delete]
MySQL insert operations per second	mysql.status[Com_insert]
MySQL rollback operations per second	mysql.status[Com_rollback]
MySQL select operations per second	mysql.status[Com_select]
MySQL update operations per second	mysql.status[Com_update]
MySQL queries per second	 	mysql.status[Questions]
MySQL slow queries	 		mysql.status[Slow_queries]
MySQL uptime	 			mysql.status[Uptime]
MySQL version	 			mysql.version
 MySQLをZabbixで監視するためには、MySQLにZabbix用アカウントを作成する必要があります。ZabbixのテーブルをMySQLに設定するときに作成していた場合、そのアカウントを流用することもできます。作成していない場合は、新たにアカウントを作成します。今回は、分かり易いように「zabbix」というアカウントを作成することにします。

$ mysql -u root -p

mysql> grant process on *.* to 'zabbix'@'localhost' identified by 'hogehoge';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user from mysql.user where user='zabbix';
+-----------+--------+
| host | user |
+-----------+--------+
| localhost | zabbix |
+-----------+--------+
1 row in set (0.00 sec)

mysql>

※パスワードは適切な文字列で設定してください。


 次に、作成したアカウントを、Zabbixエージェントが利用できるように「-–defaults-extra-file」で指定するファイルに記載します。「.my.cnf」という名称で/var/lib/zabbixに作成します。
# mkdir /var/lib/zabbix
# chown zabbix. /var/lib/zabbix
# chmod 750 /var/lib/zabbix
# vi /var/lib/zabbix/.my.cnf
[client]
host=localhost
user=zabbix
password=hogehoge
socket=/var/lib/mysql/mysql.sock
# chmod 600 /var/lib/zabbix/.my.cnf

※パスワードは適切な文字列で設定してください。
※上記ではMySQLにZabbixデータベースがある場合に、そのアカウントして設定しています。
※MySQLのrootのアカウントしかない場合は、そのアカウント名とパスワードを設定してください。
 -–defaults-extra-fileが使える事を確認するため、ローカルサバ上でmysqladminコマンドを実行してみます。以下、1回目は個別でパスワードを打ち込むパターン、2回目は–defaults-extra-fileを指定するパターンです。
$ mysqladmin -u zabbix -p ping
Enter password:
mysqld is alive
$ su -
パスワード:
# su - zabbix -s /bin/bash
$ mysqladmin --defaults-extra-file=/var/lib/zabbix/.my.cnf ping
mysqld is alive
 問題なく–-defaults-extra-fileが使える事が確認できました。
 Zabbixエージェントのインストール時にデフォルトで保存されている「/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf」を一部変更します。

※変更前
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive<
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version

※変更後
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | \
        HOME=/var/lib/zabbix mysql --defaults-extra-file=/var/lib/zabbix/.my.cnf -N | awk '{print $$2}'
UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin --defaults-extra-file=/var/lib/zabbix/.my.cnf ping | grep -c alive
UserParameter=mysql.version[*], mysql -V

  keyが mysql.status[*]とmysql.pingはアカウント情報が必要なので、–defaults-extra-fileを設定しています。
  keyが mysql.version はアカウント情報は不要なので、-–defaults-extra-file は設定していません。

 設定後は、Zabbixエージェントを再起動してください。

 ※zabbix 5.0.13(on CentOS Stream 8)では、正常に監視できるようになりました。

 ※zabbix 4.0.0(on CentOS 7)では、正常に監視できるようになりました。

 ※zabbix 2.4(on Fedora 22)では、デフォルトの設定では監視できませんでした。そのため、下記のとおり追加設定します。
# vi /etc/zabbix_agentd.conf
Include=/etc/userparameter_mysql.conf
 ↑ userparameter_mysql.confを保存したディレクトリを指定したがエージェントが動作しなかった。
 ↑ そのためuserparameter_mysql.confを直接指定した。

# systemctl restart zabbix-agent
 ※zabbix 2.2(on CentOS 7)では、デフォルトの設定では監視できませんでした。なので、下記のとおり追加設定します。
# vi /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/ ← userparameter_mysql.confを保存したディレクトリ

# systemctl restart zabbix-agent

 Zabbixサーバ側からzabbix_getコマンドを実行して値が取得できるか、確認してみます。
 ※以下、「xxx.xxx.xxx.xxx」はZabbixエージェントをインストールし、MySQLサーバが動作しているホストのIPアドレスに置き換えてください。
$ zabbix_get -s xxx.xxx.xxx.xxx -k mysql.version
mysql  Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1

$ zabbix_get -s xxx.xxx.xxx.xxx -k mysql.status[Uptime]
454640

$ zabbix_get -s xxx.xxx.xxx.xxx -k mysql.status[Questions]
335453058
 templateを適用して 問題なく動作していれば、監視画面の[監視データ]->[概要]で確認することができます。

 zabbix_getコマンドの実行結果で下記のようなエラーが表示されることがあります。
$ zabbix_get -s xxx.xxx.xxx.xxx -k mysql.ping
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'
0
 これは、/var/lib/zabbix/.my.cnfに記載されているMySQL接続時のアカウントまたはパスワードが間違っている可能性がありますので、確認してください。

●PostgreSQLの監視設定

 参考URL:ザビクスを使用して PostgreSQL を監視する

 現在(2022.07)、Zabbix 5.4.12を使用して監視を実施しています。
 Zabbixを使用してPostgreSQL 10.21を監視するための設定を行います。
 Zabbix 5.4.12をインストールすると、テンプレート名「Template DB PostgreSQL Agent 2」が用意されます。
 アイテムやマクロを一部確認したところ、PostgreSQL 12を監視するためのものなのかなと思いました。
 そこで該当テンプレートをコピーし、使えそうな設定は使い、変更する必要がある設定は変更して使う、こととしました。

 監視用アカウントの作成

 PostgreSQLに接続し、Zabbix監視用ユーザを作成します。
# su - postgres
$ psql
postgres=# create user zbx_monitor with password 'password' inherit;
postgres=# grant pg_monitor to zbx_monitor;

-- To collect WAL metrics, the user must have a `superuser` role.
alter user zbx_monitor with superuser;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_ls_dir(text) TO zbx_monitor;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stat_file(text) TO zbx_monitor;
 該当ユーザが作成されていることを確認します。
postgres=# \du
                                      List of roles
  Role name  |                         Attributes                         |  Member of   
-------------+------------------------------------------------------------+--------------
 postgres    | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 redmine     |                                                            | {}
 zbx_monitor |                                                            | {pg_monitor}

postgres=# \q
$ exit
 pg_hba.conf 構成ファイルを見つけて編集します。
# vi /var/lib/pgsql/data/pg_hba.conf
※下記3行を追記
host    all             zbx_monitor     127.0.0.1/32            trust
host    all             zbx_monitor     0.0.0.0/0               md5
host    all             zbx_monitor     ::0/0                   md5

# systemctl restart postgresql
 zbx_monitorアカウントを使用して、パスワードの要求無しで、ローカルのPostgreSQLサーバーに接続できるかどうかをテストします。
# psql -h 127.0.0.1 --username=zbx_monitor postgres
psql (10.21)
Type "help" for help.

postgres=> \q
 正常に接続できました。

 監視用SQLファイルのダウンロード

 (一部のSQLを活用または流用したいため)監視用SQLファイルを保存するディレクトリを用意します。なお、不足分はその都度、SQL文を作成することとします。
# mkdir /var/lib/zabbix
# chown zabbix. /var/lib/zabbix
# chmod 750 /var/lib/zabbix
 次に、監視用SQLファイルだけをダウンロードして配置したいのですが、Gitではソースツリーの一部だけをクローンすることができません。そこで、https://git.zabbix.com/scm/zbx/zabbix.gitをクローンして必要なディレクトリだけをコピーします。
# cd /tmp
# git clone https://git.zabbix.com/scm/zbx/zabbix.git --depth 1
# cp -pr zabbix/templates/db/postgresql/postgresql /var/lib/zabbix/
# chown -R zabbix: /var/lib/zabbix/postgresql

※保存されたSQLファイル
pgsql.bgwriter.sql              pgsql.connections.sum.sql  pgsql.locks.sql                      pgsql.replication.status.sql
pgsql.cache.hit.sql             pgsql.dbstat.sql           pgsql.ping.time.sql                  pgsql.scans.sql
pgsql.config.hash.sql           pgsql.dbstat.sum.sql       pgsql.query.time.sql                 pgsql.transactions.sql
pgsql.connections.prepared.sql  pgsql.discovery.db.sql     pgsql.replication.lag.sql            pgsql.uptime.sql
pgsql.connections.sql           pgsql.frozenxid.sql        pgsql.replication.recovery_role.sql  pgsql.wal.stat.sql
 同様にユーザパラメーター設定も配置します。
# cp -p zabbix/templates/db/postgresql/template_db_postgresql.conf /etc/zabbix/zabbix_agentd.d/
# chown root: /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
# chmod 644 /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
# cd
 zabbix_agentd.confには/etc/zabbix/zabbix_agentd.d/*.confをIncludeする設定が含まれていますので、zabibix-agentサービスを再起動すればユーザパラメーターの反映は完了です。
# grep ^Include= /etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
# systemctl restart zabbix-agent


 認証用ファイルの作成

 認証用のファイルを作成します。テンプレートのドキュメントではデータベース部分にpostgresを指定していますが、今回、ホスト名とデータベース名部分を"*"にしています。具体的な値はテンプレート適用後にマクロで設定します。 ユーザ名はパスワードは先ほど作成したモニター用のユーザを指定してください。
# tee -a /var/lib/zabbix/.pgpass <<EOF
*:5432:*:zbx_monitor:<PASSWORD>
EOF
# chown zabbix: /var/lib/zabbix/.pgpass
# chmod 600 /var/lib/zabbix/.pgpass


 マクロの設定

 (Zabbixでマクロを使用する場合)コピー先のテンプレートでマクロを設定します。マクロが既に設定済みの場合、変更してください。
マクロ			値
{$PG.HOST}		localhost
{$PG.PASSWORD}		<PASSWORD>
{$PG.PORT}		5432
{$PG.USER}		zbx_monitor


 Ping監視

 Ping監視のため、template_db_postgresql.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
UserParameter=pgsql.ping[*], pg_isready -h "$1" -p "$2"
 ↓
UserParameter=pgsql.ping[*], pg_isready -h "$1" -p "$2" > /dev/null 2>&1;echo $?
 コピーしたテンプレートのアイテム及びトリガーを変更します。
アイテム(PostgreSQL: Ping)の変更
pgsql.ping["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
 ↓
pgsql.ping["{$PG.HOST}","{$PG.PORT}"]

トリガーの変更
PostgreSQL: Service is down
last(/Template DB PostgreSQL Agent 2/pgsql.ping["{$PG.HOST}","{$PG.PORT}"])=0
 ↓
last(/Template DB PostgreSQL Agent 2/pgsql.ping["{$PG.HOST}","{$PG.PORT}"])>0


 Uptime監視

 Uptime監視のため、template_db_postgresql.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
UserParameter=pgsql.uptime[*], psql -qtAX postgresql://"$3":"$4"@"$1":"$2"/"$5" -f "/var/lib/zabbix/postgresql/pgsql.uptime.sql"
 ↓
UserParameter=pgsql.uptime[*], psql -h "$1" -U "$2" -d "$3" -f "/var/lib/zabbix/postgresql/pgsql.uptime.sql"|sed -n 3P
 コピーしたテンプレートのアイテムを変更します。
pgsql.uptime["{$PG.URI}","{$PG.USER}","{$PG.PASSWORD}"]
 ↓
pgsql.uptime["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]


 ping.time監視

 Uping.time監視のため、template_db_postgresql.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
UserParameter=pgsql.ping.time[*], LANG=C.UTF-8 psql -qtAX postgresql://"$3":"$4"@"$1":"$2"/"$5" -f "/var/lib/zabbix/postgresql/pgsql.ping.time.sql"
 ↓
UserParameter=pgsql.ping.time[*], LANG=C.UTF-8  psql -h "$1" -U "$2" -d "$3" -f "/var/lib/zabbix/postgresql/pgsql.ping.time.sql"|sed -n 7P
 コピーしたテンプレートのアイテムを変更します。
pgsql.ping.time["{$PG.HOST}","{$PG.PORT}","{$PG.USER}","{$PG.DB}"]
 ↓
pgsql.ping.time["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"


 Version監視

 Version情報の監視のため、template_db_postgresql.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
UserParameter=pgsql.version[*], psql -qtAX postgresql://"$3":"$4"@"$1":"$2"/"$5" -c "SELECT version();"
 ↓
UserParameter=pgsql.version[*], psql -h "$1" -U "$2" -d "$3" -c "SELECT version();"|grep "PostgreSQL"
 コピーしたテンプレートでアイテムを新規作成します。
名前:Status: Version
タイプ:Zabbixエージェント
キー:pgsql.db.size["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:文字列
監視間隔:15m
ヒストリの保存期間:7d
タグ:Application PostgreSQL
保存前処理:
 名前:指定秒内に変化がなければ破棄
 パラメータ:1d


 統計情報pg_stat_activityビューの監視

 統計情報pg_stat_activityビューの監視のため、
 /var/lib/zabbix/postgresql/pgsql.connections.sql
 /var/lib/zabbix/postgresql/pgsql.connections.prepared.sql
 /var/lib/zabbix/postgresql/pgsql.connections.sum.sql
を利用し、template_db_postgresql.confを下記のように追加します。

# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf

# 各データベースの情報
UserParameter=pgsql.connections[*], psql -h "$1" -U "$2" -d "$3" -f "/var/lib/zabbix/postgresql/pgsql.connections.sql"|sed -n 4P|tr -d {}\"|sed -e "s/ //g"|sed -e "s/, /\n/g" # connection数(合計)
UserParameter=pgsql.connections.sum[*], psql -h "$1" -U "$2" -d "$3" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"
# activeなセッション数(合計)
UserParameter=pgsql.connections.sum.active[*], /usr/local/bin/zabbix_pgsql.connections.sum.active.sh
# idle数(合計)
UserParameter=pgsql.connections.sum.idle[*], /usr/local/bin/zabbix_pgsql.connections.sum.idle.sh
# idle_in_transaction数(合計)
UserParameter=pgsql.connections.sum.idle_in_transaction[*], /usr/local/bin/zabbix_pgsql.connections.sum.idle_in_transaction.sh
# preparedの情報
UserParameter=pgsql.connections.prepared[*], psql -h "$1" -U "$2" -d "$3" -f "/var/lib/zabbix/postgresql/pgsql.connections.prepared.sql"|sed -n 3P
# total数(合計)
UserParameter=pgsql.connections.sum.total[*], /usr/local/bin/zabbix_pgsql.connections.sum.total.sh
# total%(合計)
UserParameter=pgsql.connections.sum.total_pct[*], /usr/local/bin/zabbix_pgsql.connections.sum.total_pct.sh
# waiting数(合計)
UserParameter=pgsql.connections.sum.waiting[*], /usr/local/bin/zabbix_pgsql.connections.sum.waiting.sh

 作成するファイル等は下記のとおりです。
# vi /usr/local/etc/pgsql_funcs.conf
PGHOST=127.0.0.1
PGPORT=5432
PGUSER=zbx_monitor
PGDATABASE=postgres
# vi /usr/local/bin/zabbix_pgsql.connections.sum.active.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"|awk -F"," '{print $1}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.connections.sum.idle.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"|awk -F"," '{print $2}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.connections.sum.idle_in_transaction.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"|awk -F"," '{print $3}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.connections.sum.total.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"|awk -F"," '{print $4}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.connections.sum.total_pct.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"|awk -F"," '{print $5}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.connections.sum.waiting.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.connections.sum.sql"|sed -n 4P|tr -d {}\ \"|awk -F"," '{print $6}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


 コピーしたテンプレートでアイテムを新規作成(一部記載)します。
例:キーがpgsql.connections

名前:Connections
タイプ:Zabbixエージェント
キー:pgsql.connections["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:文字列
監視間隔:5m
ヒストリの保存期間:7d
タグ:Application PostgreSQL

例:キーがpgsql.connections.sum.active

名前:Connections sum: Active
タイプ:Zabbixエージェント
キー:pgsql.connections.sum.active["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:数値(整数)
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL

例:キーがpgsql.connections.sum.idle

名前:Connections sum: Idle
タイプ:Zabbixエージェント
キー:pgsql.connections.sum.idle["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:数値(整数)
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL

例:キーがpgsql.connections.sum.idle_in_transaction

名前:Connections sum: Idle in transaction
タイプ:Zabbixエージェント
キー:pgsql.connections.sum.idle_in_transaction
データ型:数値(整数)
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL

例:キーがpgsql.connections.sum.total

名前:Connections sum: Total
タイプ:Zabbixエージェント
キー:pgsql.connections.sum.total
データ型:数値(整数)
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL

例:キーがpgsql.connections.sum.total_pct

名前:Connections sum: Total %
タイプ:Zabbixエージェント
キー:pgsql.connections.sum.total_pct["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:数値(整数)
単位:%
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL


 統計情報pg_stat_databaseビューの監視

 統計情報pg_stat_databaseビューの監視のため、template_db_postgresql.confを下記のように追加します。
# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
# Status: DB Status Sum Numbackends
UserParameter=pgsql.dbstat.sum.numbackends[*], /usr/local/bin/zabbix_pgsql.db.status.sum.numbackends.sh
# Status: DB Status Sum Xact_commit
UserParameter=pgsql.dbstat.sum.xact_commit[*], /usr/local/bin/zabbix_pgsql.db.status.sum.xact_commit.sh
# Status: DB Status Sum Xact_rollback
UserParameter=pgsql.dbstat.sum.xact_rollback[*], /usr/local/bin/zabbix_pgsql.db.status.sum.xact_rollback.sh
# Status: DB Status Sum Blks_read
UserParameter=pgsql.dbstat.sum.blks_read[*], /usr/local/bin/zabbix_pgsql.db.status.sum.blks_read.sh
# Status: DB Status Sum Blks_hit
UserParameter=pgsql.dbstat.sum.blks_hit[*], /usr/local/bin/zabbix_pgsql.db.status.sum.blks_hit.sh
# Status: DB Status Sum Tup_returned
UserParameter=pgsql.dbstat.sum.tup_returned[*], /usr/local/bin/zabbix_pgsql.db.status.sum.tup_returned.sh
# Status: DB Status Sum Tup_fetched
UserParameter=pgsql.dbstat.sum.tup_fetched[*], /usr/local/bin/zabbix_pgsql.db.status.sum.tup_fetched.sh
# Status: DB Status Sum Tup_inserted
UserParameter=pgsql.dbstat.sum.tup_inserted[*], /usr/local/bin/zabbix_pgsql.db.status.sum.tup_inserted.sh
# Status: DB Status Sum Tup_updated
UserParameter=pgsql.dbstat.sum.tup_updated[*], /usr/local/bin/zabbix_pgsql.db.status.sum.tup_updated.sh
# Status: DB Status Sum Tup_deleted
UserParameter=pgsql.dbstat.sum.tup_deleted[*], /usr/local/bin/zabbix_pgsql.db.status.sum.tup_deleted.sh
# Status: DB Status Sum Conflicts
UserParameter=pgsql.dbstat.sum.conflicts[*], /usr/local/bin/zabbix_pgsql.db.status.sum.conflicts.sh
# Status: DB Status Sum Temp_files
UserParameter=pgsql.dbstat.sum.temp_files[*], /usr/local/bin/zabbix_pgsql.db.status.sum.temp_files.sh
# Status: DB Status Sum Temp_bytes
UserParameter=pgsql.dbstat.sum.temp_bytes[*], /usr/local/bin/zabbix_pgsql.db.status.sum.temp_bytes.sh
# Status: DB Status Sum Deadlocks
UserParameter=pgsql.dbstat.sum.deadlocks[*], /usr/local/bin/zabbix_pgsql.db.status.sum.deadlocks.sh
 作成するファイル等は下記のとおりです。
# vi /usr/local/etc/pgsql_funcs.conf
PGHOST=127.0.0.1
PGPORT=5432
PGUSER=zbx_monitor
PGDATABASE=postgres

※例:numbackendsの値を取得する場合
# vi /usr/local/bin/zabbix_pgsql.db.status.sum.numbackends.sh
#!/bin/bash PGHOST=$1 PGUSER=$2 PGDATABASE=$3 # Load the pgsql connection option parameters. #source $PGSHELL_CONFDIR/pgsql_funcs.conf source /usr/local/etc/pgsql_funcs.conf STR="" STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.dbstat.sum.sql" |sed -n 3p|sed -e "s/ {//g"|sed -e "s/}//g"|sed -e "s/\"//g"|awk -F"," '{print $1}'|awk -F":" '{print $2}'` # Zabbixに数値として認識させるため expr $STR + 0
※他の値を取得したい場合、「awk -F"," '{print $1}'」の「$1」部分を変更すればよい。 # chmod +x /usr/local/bin/zabbix_pgsql.db.status.sum.numbackends.sh
 コピーしたテンプレートでアイテムを新規作成します。
名前:Status: DB Status Sum Numbackends
タイプ:Zabbixエージェント
キー:pgsql.dbstat.sum.numbackends["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:数値(整数) ※取得するデータの型に合わせる
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL


 データベースサイズ監視

 データベースサイズ監視のため、template_db_postgresql.confを下記のように追加します。
設定方法:その1

# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
# Status: DB Size
UserParameter=pgsql.db.size[*], psql -h "$1" -U "$2" -d "$3" -c "SELECT SUM(pg_database_size(datname)) AS cluster_size FROM pg_database;"|sed -n 3P
 コピーしたテンプレートでアイテムを新規作成します。
名前:Status: DB Size
タイプ:Zabbixエージェント
キー:pgsql.db.size["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:数値(浮動小数)
単位:byte
監視間隔:10m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL

※この設定方法の場合、表示される値は10進法となります。

設定方法:その2

# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
# Status: DB Size 2
UserParameter=pgsql.db.size2[*], psql -h "$1" -U "$2" -d "$3" -c "SELECT pg_size_pretty(SUM(pg_database_size(datname))) AS cluster_size FROM pg_database;"|sed -n 3P
 コピーしたテンプレートでアイテムを新規作成します。
名前:Status: DB Size 2
タイプ:Zabbixエージェント
キー:pgsql.db.size["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:テキスト
監視間隔:10m
ヒストリの保存期間:7d
タグ:Application PostgreSQL

※この設定方法の場合、表示される値は2進法となります。


 Bgwriter監視

 Bgwriter監視のため、/var/lib/zabbix/postgresql/pgsql.bgwriter.sqlを利用し、template_db_postgresql.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.d/template_db_postgresql.conf
# Bgwriter: Info
UserParameter=pgsql.bgwriter.info[*], psql -h "$1" -U "$2" -d "$3" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"
# Bgwriter: checkpoints_timed
UserParameter=pgsql.bgwriter.checkpoints_timed[*], /usr/local/bin/zabbix_pgsql.bgwriter.checkpoints_timed.sh
# Bgwriter: checkpoints_req
UserParameter=pgsql.bgwriter.checkpoints_req[*], /usr/local/bin/zabbix_pgsql.bgwriter.checkpoints_req.sh
# Bgwriter: checkpoint_write_time
UserParameter=pgsql.bgwriter.checkpoint_write_time[*], /usr/local/bin/zabbix_pgsql.bgwriter.checkpoint_write_time.sh
# Bgwriter: checkpoint_sync_time
UserParameter=pgsql.bgwriter.checkpoint_sync_time[*], /usr/local/bin/zabbix_pgsql.bgwriter.checkpoint_sync_time.sh
# Bgwriter: buffers_checkpoint
UserParameter=pgsql.bgwriter.buffers_checkpoint[*], /usr/local/bin/zabbix_pgsql.bgwriter.buffers_checkpoint.sh
# Bgwriter: buffers_clean
UserParameter=pgsql.bgwriter.buffers_clean[*], /usr/local/bin/zabbix_pgsql.bgwriter.buffers_clean.sh
# Bgwriter: maxwritten_clean
UserParameter=pgsql.bgwriter.maxwritten_clean[*], /usr/local/bin/zabbix_pgsql.bgwriter.maxwritten_clean.sh
# Bgwriter:buffers_backend
UserParameter=pgsql.bgwriter.buffers_backend[*], /usr/local/bin/zabbix_pgsql.bgwriter.buffers_backend.sh
# Bgwriter: buffers_backend_fsync
UserParameter=pgsql.bgwriter.buffers_backend_fsync[*], /usr/local/bin/zabbix_pgsql.bgwriter.buffers_backend_fsync.sh
# Bgwriter: Buffers allocated
UserParameter=pgsql.bgwriter.buffers_alloc.rate[*], /usr/local/bin/zabbix_pgsql.bgwriter.buffers_alloc.rate.sh

※補足:/var/lib/zabbix/postgresql/pgsql.bgwriter.sqlについて
下記4項目
 buffers_checkpoint
 buffers_clean
 buffers_backend
 buffers_alloc
は、ブロックサイズを乗算しています。

ブロクサイズの確認方法は下記のとおりです。
postgres=# select current_setting('block_size')::int;
 current_setting 
-----------------
            8192
(1 行)
 作成するファイル等は下記のとおりです。
# vi /usr/local/etc/pgsql_funcs.conf
PGHOST=127.0.0.1
PGPORT=5432
PGUSER=zbx_monitor
PGDATABASE=postgres
# vi /usr/local/bin/zabbix_pgsql.bgwriter.checkpoints_timed.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $1}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.bgwriter.checkpoints_req.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $2}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.bgwriter.checkpoint_write_time.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $3}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.bgwriter.checkpoint_sync_time.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $4}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# cat /usr/local/bin/zabbix_pgsql.bgwriter.buffers_checkpoint.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $5}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# vi /usr/local/bin/zabbix_pgsql.bgwriter.buffers_clean.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $6}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# cat /usr/local/bin/zabbix_pgsql.bgwriter.maxwritten_clean.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $7}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# cat /usr/local/bin/zabbix_pgsql.bgwriter.buffers_backend.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $8}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


# cat /usr/local/bin/zabbix_pgsql.bgwriter.buffers_backend_fsync.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $9}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


※例:buffers_alloc(割当られたバッファ数)の値を取得する場合
# vi /usr/local/bin/zabbix_pgsql.bgwriter.buffers_alloc.rate.sh

#!/bin/bash

PGHOST=$1
PGUSER=$2
PGDATABASE=$3

# Load the pgsql connection option parameters.
#source $PGSHELL_CONFDIR/pgsql_funcs.conf
source /usr/local/etc/pgsql_funcs.conf

STR=""
STR=`psql -h "$PGHOST" -U "$PGUSER" -d "$PGDATABASE" -f "/var/lib/zabbix/postgresql/pgsql.bgwriter.sql"|sed -n 3P|tr -d {}\ \"|awk -F"," '{print $10}'|awk -F":" '{print $2}'`

# Zabbixに数値として認識させるため
expr $STR + 0


 コピーしたテンプレートでアイテムを新規作成します。
例:キーがpgsql.bgwriter.buffers_alloc.rate

名前:Bgwriter: Buffers allocated
タイプ:Zabbixエージェント
キー:pgsql.bgwriter.buffers_alloc.rate
データ型:数値(整数)
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL

例:pgsql.bgwriter.info

名前:Bgwriter: Info
タイプ:Zabbixエージェント
キー:pgsql.bgwriter.info["{$PG.HOST}","{$PG.USER}","{$PG.DATABASE}"]
データ型:文字列
監視間隔:10m
ヒストリの保存期間:7d
タグ:Application PostgreSQL

例:キーがpgsql.bgwriter.checkpoint_sync_time

名前:Bgwriter: Checkpoint_sync_time
タイプ:Zabbixエージェント
キー:pgsql.bgwriter.checkpoint_sync_time
データ型:数値(整数)
監視間隔:10m
単位:ms
監視間隔:1m
ヒストリの保存期間:7d
トレンドの保存期間:365d
タグ:Application PostgreSQL


●ZabbixでESXiを監視する方法

 参考URL:vmware ESXi 6.5 を wbemcli で監視しようとしたらエラー
 参考URL:Zabbix2.04でESXiを監視する(ハードウェア編)

 仮想サーバを稼働させている物理サーバにログイン(sshまたはtelnetで)し、wbemcliで監視できる設定になっているかどうか確認します。
[root@vmware:~] esxcli system wbem get
   Authorization Model: password
   Enabled: false
   Loglevel: warning
   Port: 5989
   WSManagement Service: true
 上記の場合、下記のコマンドを実施してもエラーが表示されます。
[root@vmware ~]# wbemcli ei -noverify -nl 'https://root:パスワード@IPアドレス:5989/root/cimv2:CIM_Controller'
*
* wbemcli: Http Exception: Couldn't connect to server
*
 このため、物理サーバにログインし下記コマンドを実行します。
[root@vmware:~] esxcli system wbem set --enable true
[root@vmware:~] esxcli system wbem get
   Authorization Model: password
   Enabled: true
   Loglevel: warning
   Port: 5989
   WSManagement Service: true
[root@vmware:~] /etc/init.d/sfcbd-watchdog status
sfcbd is running
 これでsfcbdが動作しました。
 Linuxマシンから情報取得可能かどうか確認します。
[root@linux~]# wbemcli ei -noverify -nl 'https://root:パスワード@IPアドレス:5989/root/cimv2:CIM_Controller'


●VMware vSphere ESXi Hypervisorや仮想マシンを監視設定する手順

 参考URL:【VMware】ZabbixでVMware vSphere ESXi Hypervisor や仮想マシンを監視設定する手順
 参考URL:zabbixで監視する(ESX)

 上記を参照して設定しました。
# /etc/zabbix/zabbix_server.conf
※設定変更箇所のみ
StartVMwareCollectors=1 # vSphere APIと通信するプロセスの起動数
VMwareFrequency=60 # VMware 監視用ポーリングプロセスが vSphere API にアクセスをして情報を収集する時間間隔
VMwarePerfFrequency=60 # vSphere APIからデータを取得する間隔
VMwareCacheSize=8M # VMware 監視用ポーリングプロセスが収集した情報を一時的に蓄積する共有メモリ上のキャッシュサイズ
VMwareTimeout=10 # vSphere APIとの無通信タイムアウト時間

# systemctl restart zabbix_server
 ローレベルディスカバリルールを使用して、自動的に VMware vCenter Server、VMware ESXi Hypervisor、仮想マシン、を発見し、定義済みのホストのプロトタイプに基づいて、Zabbixにホストとして自動登録をします。
 また、ホストだけでなく「アイテム」や「トリガー」や「グラフ」など自動登録します。

 Zabbixには「オートディスカバリ」機能があります。
 オートディスカバリとは、自動的に「監視対象機器」や「監視項目」を追加/削除(登録)する機能のことです。
 オートディスカバリには以下の2つのディスカバリがあります。

  ネットワークディスカバリ ← IPアドレスやZabbixエージェント経由でホストを見つける
  ローレベルディスカバリ ← 監視対象機器に対してアイテム、トリガー、グラフを自動生成する

 VMwareの場合は、VMware ESXi HypervisorのvSphere APIのURL(例:https://192.168.0.1/sdk)にアクセスすることで、仮想マシンの各アイテムの情報を自動的に取得することができます(Zabbix GUIの「最新データ」ー「概要」ー「Hypervisors」)。

 Zabbixの管理画面より「設定」-「ディスカバリ」をクリックします。
 デフォルトで「Local network」のディスカバリルールがあるので、これを利用します。
 「local network」をクリックします。
 今回の環境は「192.168.0.0/24」のネットワーク環境なので、IPアドレスの範囲を「192.168.0.1-254」に設定します。
 「チェック」は「ICMP ping」を選択しました。
 「更新間隔」は「1h」(1時間)になっていますが、長すぎる場合は「10m」や「30m」に変更してもいいと思います(ディスカバリを設定したところ、1時間毎に「Zabbix discoverer processes more than 75% busy」に引っかかるようになってしまいました。気になる場合、該当アイテムまたはトリガーを無効にしても良いかもしれません。)。
 次に Zabbix 管理画面より「ホスト」の登録をします。
 ホストとして「VMware」(任意。ホスト名は名前解決が出来ること。)を登録します。
 Zabbix管理画面より「設定」-「ホスト」-「ホストの作成」をクリックします。
 ホストを登録しますが、「エージェントのインターフェース」は、デフォルトのまま(IPアドレス:127.0.0.1、DNS名:空欄、ポート:10050)で問題ありません。
 次に「テンプレート」タブへ移動して、下図のようにテンプレートとのリンクを設定します。

  Template Virt VMware(Zabbix Server 4.0の場合)
  Template VM VMware(Zabbix Server 5.0の場合)

 次に「vSphere API」へのアクセス権限の設定をします。
 「マクロ」タブに移動して、VMware ESXi Hypervisor への認証情報を入力します。

  {$URL} → http[s]://IPアドレス/sdk(例:http[s]://192.168.0.1/sdk)
  {$USERNAME} → vSphere API へのアクセスアカウント(例:root)
  {$PASSWORD} → vSphere API へのアカウントパスワード(例:rootに設定したパスワード)

 設定が完了したら「追加」ボタンをクリックしてホストを追加します。
 以上で設定完了です。
 設定に問題がなければ自動的にVMware vSphere ESXi Hypervisorに紐付く「vCenter Server」や「仮想マシン」が下図のように登録されます。

virtual-kanshi1

 Zabbix管理画面より「監視データ」-「概要」をクリックすると各項目が自動登録され、値が取得されています。
 これが「ローレベルディスカバリ」です。

●オートディスカバリで登録されたディスカバリルールの無効化

 参考URL:「アイテムのプロトタイプ」を無効にしたときの「アイテム」への反映
 参考URL:Zabbix3.4でWindowsOSの自動起動のトリガーを一部のサービスのみ除外する方法

 オートディスカバリを有効化後、Template OS Windowsにディスカバリルールが3種類登録されていました。
 このうち「Windows service discovery」の監視対象により、ほぼ常時、一部のサービスで軽度の障害として検知されるようになってしまいました。
 これを除外しようとし、「Windows service discovery」を無効化したり、トリガーのプロトタイプやプロパティのプロトタイプを無効化したりしましたが、継続して検知される状態でした。
 これらはディスカバリ前に無効化しておかないとそのまま監視対象となり検知するようです。
 対処法方は「Windows service discovery」の複製を作成し、元々の「Windows service discovery」を削除したところ監視対象から外れ、検知し無くなりました。

●オートディスカバリで登録されたディスカバリルールの設定変更後の有効化の仕方

 これはディスカバリによりTemplate OS Windowsに新たなディスカバリルールが追加され、このルールにより、Windowsのサービスのうちスタートアップの種類が自動(遅延開始)となっているSoftware Protection(サービス名:sppsvc)等が軽度の障害として検知されるようになってしまいました。これまで表示されることのなかった軽度の障害が検知されるようになったことに対しての無効化方法を下記に示します。
 該当のディスカバリルールは下記となります。

 「Template OS Windows」ー「ディスカバリルール」ー「Windows service discovery」(自動的に登録された3つのルールのうちの1つ)。

 このディスカバリルールに対し、新たな設定を適用したい場合、ディスカバリルールが含まれるテンプレートのリンクを一度削除する必要があります。
 Zabbix管理画面の「設定」ー「ホスト」をクリックし、ホストの一覧が表示されたら変更したいホストの名前をクリックします。
 「テンプレート」をクリックし、「テンプレートとのリンク」の「アクション」にある「リンクと保存データを削除」をクリックします。
 (この作業により、該当ホストはこれまで貯めていたすべてのデータが無くなりますので、注意してください。)
 リンクが無くなりますので、「更新」をクリックし更新します(「更新」をクリックしないと反映されません。)。
 再度、「設定」ー「ホスト」をクリックし、ホストの一覧が表示されたら該当ホストの「ディスカバリ」をクリック、更に「ディスカバリルール」を選択し、設定を変更します。

 「Windows service discovery」ー「フィルター」でデフォルトで設定されている内容。
 フィルターA:{#SERVICE.NAME}   一致する  @Windows service names for discovery
 フィルターB:{#SERVICE.STARTUPNAME}   一致する  @Windows service startup states for discovery

 変更作業
  「Windows service discovery」ー「フィルター」をクリック。
  デフォルトで設定されているフィルターAを変更。

  {#SERVICE.NAME}   一致する  @Windows service names for discovery
    ↓↓↓
  {#SERVICE.NAME}   一致する  (?!(sppsvc|clr_optimization_v4.0.30319_32|clr_optimization_v4.0.30319_64)).*$

 記載したサービスは自動(遅延開始)が設定されており、必ずしも起動後暫く時間が経過しても起動するサービスとは限らない。何かしらのトリガーをきっかけに起動する場合もあるため監視から除外することとしました。
 設定変更後、「更新」をクリックし、該当のディスカバリルールの名前の右をチェックし「Check now」をクリックします。
 「監視」ー「最新データ」でホスト名を絞り込みフィルターを掛け、表示させます。
 「Startup automatic delayed services」と「Startup automatic services」が新たに表示されるようになります。
 今回の変更により「Startup automatic delayed services」にsppsvc、clr_optimization_v4.0.30319_32、clr_optimization_v4.0.30319_64のサービスが監視対象外となり軽度の障害として検知されなくなります。

●Zabbixデータベースのバックアップ方法

 参考URL:Zabbix データベースをバックアップする方法

 Zabbixのデータベースをバックアップするには下記のとおりです。
# mysqldump -u<ユーザ名> -p<パスワード> --default-character-set=utf8 --database <データベース名> > <ファイル名>
(コマンド例)
# mysqldump -uroot -ppassword --default-character-set=utf8 --database zabbix > zabbix_dump.db

 リストア方法は下記のとおりです。
# service zabbix-server stop
# mysql -ppassword
mysql> CREATE DATABASE zabbix CHARACTER SET utf8;
mysql> exit

# mysql -uroot -ppassword zabbix < zabbix_dump.db
 早速試してみました。

 試験その1
 zabbix 2.4 → zabbix 2.2へのリストア。
 バックアップ元の情報。
# rpm -qa | grep zabbix | sort
zabbix-2.4.8-1.el7.x86_64
zabbix-agent-2.4.8-1.el7.x86_64
zabbix-get-2.4.8-1.el7.x86_64
zabbix-release-2.4-1.el7.noarch
zabbix-server-2.4.8-1.el7.x86_64
zabbix-server-mysql-2.4.8-1.el7.x86_64
zabbix-web-2.4.8-1.el7.noarch
zabbix-web-japanese-2.4.8-1.el7.noarch
zabbix-web-mysql-2.4.8-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64

 リストア先の情報。
# rpm -qa | grep zabbix | sort
zabbix22-2.2.14-1.el7.x86_64
zabbix22-agent-2.2.14-1.el7.x86_64
zabbix22-dbfiles-mysql-2.2.14-1.el7.noarch
zabbix22-server-2.2.14-1.el7.noarch
zabbix22-server-mysql-2.2.14-1.el7.x86_64
zabbix22-web-2.2.14-1.el7.noarch
zabbix22-web-mysql-2.2.14-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 zabbixのバージョンはバックアップ元の方が新しいです。

41678:20160817:144452.605 Starting Zabbix Server. Zabbix 2.2.14 (revision 61184).
41678:20160817:144452.606 ****** Enabled features ******
41678:20160817:144452.606 SNMP monitoring: YES
41678:20160817:144452.606 IPMI monitoring: YES
41678:20160817:144452.606 WEB monitoring: YES
41678:20160817:144452.606 VMware monitoring: YES
41678:20160817:144452.606 Jabber notifications: YES
41678:20160817:144452.606 Ez Texting notifications: YES
41678:20160817:144452.606 ODBC: YES
41678:20160817:144452.606 SSH2 support: YES
41678:20160817:144452.606 IPv6 support: YES
41678:20160817:144452.606 ******************************
41678:20160817:144452.606 using configuration file: /etc/zabbix_server.conf
41678:20160817:144452.613 The server does not match Zabbix database. Current database version (mandatory/optional): 02040000/02040000. Required mandatory version: 02020000.
43306:20160817:153004.042 Starting Zabbix Server. Zabbix 2.2.14 (revision 61184).
43306:20160817:153004.042 ****** Enabled features ******
43306:20160817:153004.042 SNMP monitoring: YES
43306:20160817:153004.042 IPMI monitoring: YES
43306:20160817:153004.042 WEB monitoring: YES
43306:20160817:153004.042 VMware monitoring: YES
43306:20160817:153004.042 Jabber notifications: YES
43306:20160817:153004.042 Ez Texting notifications: YES
43306:20160817:153004.042 ODBC: YES
43306:20160817:153004.042 SSH2 support: YES
43306:20160817:153004.042 IPv6 support: YES
43306:20160817:153004.042 ******************************
43306:20160817:153004.042 using configuration file: /etc/zabbix_server.conf
43306:20160817:153004.050 The server does not match Zabbix database. Current database version (mandatory/optional): 02040000/02040000. Required mandatory version: 02020000.


 zabbixのバージョンがバックアップ元の方が新しいためか、データベースのアップグレードは進行しませんでした。

 試験その2
 zabbix 2.2 → zabbix 2.4へのリストア。
 バックアップ元の情報。
# rpm -qa | grep zabbix | sort
zabbix22-2.2.14-1.el7.x86_64
zabbix22-agent-2.2.14-1.el7.x86_64
zabbix22-dbfiles-mysql-2.2.14-1.el7.noarch
zabbix22-server-2.2.14-1.el7.noarch
zabbix22-server-mysql-2.2.14-1.el7.x86_64
zabbix22-web-2.2.14-1.el7.noarch
zabbix22-web-mysql-2.2.14-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-devel-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 リストア先の情報。
# rpm -qa | grep zabbix | sort
zabbix-2.4.8-1.el7.x86_64
zabbix-agent-2.4.8-1.el7.x86_64
zabbix-get-2.4.8-1.el7.x86_64
zabbix-release-2.4-1.el7.noarch
zabbix-server-2.4.8-1.el7.x86_64
zabbix-server-mysql-2.4.8-1.el7.x86_64
zabbix-web-2.4.8-1.el7.noarch
zabbix-web-japanese-2.4.8-1.el7.noarch
zabbix-web-mysql-2.4.8-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 zabbixデータベースを作成しましたが、中身が空の状態です。監視画面に接続すると下記のようなエラーが表示されました。
Database error
The frontend does not match Zabbix database.
 その後、データベースをリストアし、念のためzabbix-serverを再起動しました。ログには特に問題点は見つからず、監視画面への接続も良好でした。

 試験その3
 zabbix 2.4 → zabbix 2.4へのリストア。
 バックアップ元の情報。
# rpm -qa | grep zabbix | sort
zabbix-2.4.8-1.el7.x86_64
zabbix-agent-2.4.8-1.el7.x86_64
zabbix-get-2.4.8-1.el7.x86_64
zabbix-release-2.4-1.el7.noarch
zabbix-server-2.4.8-1.el7.x86_64
zabbix-server-mysql-2.4.8-1.el7.x86_64
zabbix-web-2.4.8-1.el7.noarch
zabbix-web-japanese-2.4.8-1.el7.noarch
zabbix-web-mysql-2.4.8-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 リストア先の情報。
# rpm -qa | grep zabbix | sort
zabbix-2.4.8-1.el7.x86_64
zabbix-agent-2.4.8-1.el7.x86_64
zabbix-get-2.4.8-1.el7.x86_64
zabbix-release-2.4-1.el7.noarch
zabbix-server-2.4.8-1.el7.x86_64
zabbix-server-mysql-2.4.8-1.el7.x86_64
zabbix-web-2.4.8-1.el7.noarch
zabbix-web-japanese-2.4.8-1.el7.noarch
zabbix-web-mysql-2.4.8-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 zabbixデータベースを作成しましたが、中身が空の状態です。監視画面に接続すると下記のようなエラーが表示されました。
Database error
The frontend does not match Zabbix database.
 その後、データベースをリストアし、念のためzabbix-serverを再起動しました。ログには特に問題点は見つからず、監視画面への接続も良好でした。

 試験その4
 zabbix 2.4 → zabbix 3.0へのリストア。
 バックアップ元の情報。
# rpm -qa | grep zabbix | sort
zabbix-2.4.8-1.el7.x86_64
zabbix-agent-2.4.8-1.el7.x86_64
zabbix-get-2.4.8-1.el7.x86_64
zabbix-release-2.4-1.el7.noarch
zabbix-server-2.4.8-1.el7.x86_64
zabbix-server-mysql-2.4.8-1.el7.x86_64
zabbix-web-2.4.8-1.el7.noarch
zabbix-web-japanese-2.4.8-1.el7.noarch
zabbix-web-mysql-2.4.8-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 リストア先の情報。
# rpm -qa | grep zabbix | sort
zabbix-agent-3.0.4-1.el7.x86_64
zabbix-get-3.0.4-1.el7.x86_64
zabbix-release-3.0-1.el7.noarch
zabbix-server-mysql-3.0.4-1.el7.x86_64
zabbix-web-3.0.4-1.el7.noarch
zabbix-web-japanese-3.0.4-1.el7.noarch
zabbix-web-mysql-3.0.4-1.el7.noarch

# rpm -qa | grep mariadb | sort
mariadb-5.5.50-1.el7_2.x86_64
mariadb-libs-5.5.50-1.el7_2.x86_64
mariadb-server-5.5.50-1.el7_2.x86_64
 元々あったzabbixデータベースをいったん削除し再作成しました。その後Zabbixサーバを再起動したところ正常にデータベースがアップグレードされました。

7749:20160819:113103.286 Starting Zabbix Server. Zabbix 3.0.4 (revision 61185).
7749:20160819:113103.287 ****** Enabled features ******
7749:20160819:113103.287 SNMP monitoring: YES
7749:20160819:113103.287 IPMI monitoring: YES
7749:20160819:113103.287 Web monitoring: YES
7749:20160819:113103.287 VMware monitoring: YES
7749:20160819:113103.287 SMTP authentication: YES
7749:20160819:113103.287 Jabber notifications: YES
7749:20160819:113103.287 Ez Texting notifications: YES
7749:20160819:113103.288 ODBC: YES
7749:20160819:113103.288 SSH2 support: YES
7749:20160819:113103.288 IPv6 support: YES
7749:20160819:113103.288 TLS support: YES
7749:20160819:113103.288 ******************************
7749:20160819:113103.290 using configuration file: /etc/zabbix/zabbix_server.conf
7749:20160819:113103.295 current database version (mandatory/optional): 02040000/02040000
7749:20160819:113103.295 required mandatory version: 03000000
7749:20160819:113103.295 starting automatic database upgrade
7749:20160819:113103.631 completed 0% of database upgrade
7749:20160819:113103.639 completed 1% of database upgrade
7749:20160819:113103.676 completed 2% of database upgrade
7749:20160819:113103.725 completed 3% of database upgrade
7749:20160819:113103.769 completed 4% of database upgrade
7749:20160819:113103.814 completed 5% of database upgrade


(・・省略・・)


7749:20160819:113111.035 completed 95% of database upgrade
7749:20160819:113111.113 completed 96% of database upgrade
7749:20160819:113111.124 completed 97% of database upgrade
7749:20160819:113111.136 completed 98% of database upgrade
7749:20160819:113111.147 completed 99% of database upgrade
7749:20160819:113111.158 completed 100% of database upgrade
7749:20160819:113111.158 database upgrade fully completed


●エージェントの状態が赤い場合の対応

 Zabbixサーバの新規構築時やデータベースからのリストア時等にZabbixサーバを再起動しても[監視]->[ホスト]の画面で[エージェントの状態]が赤のままの場合があります。これはzabbix_agentd.confでzabbix_agentd.confでZabbixサーバのIPアドレスを記載していなことが原因です。
 ZabbixサーバのIPアドレスが10.0.0.1の場合、下記のように設定します。
# vi /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,192.168.20.2,10.0.0.1

# systemctl restart zabbix-agent
 設定後、エージェントを必ず再起動してください。
 もし、上記を設定しても変化がない場合はfirewallを確認してください。
 10050ポートが空いていなければ空けてください。
# firewall-cmd --list-port
10051/tcp
# firewall-cmd --add-port=10050/tcp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-port
10050/tcp 10051/tcp


●cannot send list of active checks

 zabbix_server.logに「cannot send list of active checks to "<IPアドレス>"」というログが立て続けに記録されていました。

# tail -f /var/log/zabbix/zabbix_server.log
7185:20160819:092151.173 server #26 started [self-monitoring #1]
7170:20160819:092151.215 server #19 started [discoverer #1]
7158:20160819:092251.052 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7157:20160819:092451.063 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7160:20160819:092651.074 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7160:20160819:092851.085 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7160:20160819:093051.096 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7160:20160819:093251.107 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7156:20160819:093451.118 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7160:20160819:093651.129 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7160:20160819:093851.140 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored
7157:20160819:093934.074 cannot send list of active checks to "<IPアドレス>": host [ホスト名] not monitored


 このため、zabbix_agentd.confを下記のとおり編集し再起動しました。
# vi /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1
 ↓
Server=127.0.0.1,<IPアドレス>

# systemctl restart zabbix-agent
 上記のほか、次のように対応しても良いかもしれません。
 ZabbixのWebフロントエンドを利用して登録したホストの名称と、Zabbixエージェントをインストールした監視対象上のzabbix_agentd.conf内のHostnameで指定したホスト名が大文字小文字含めて一致しているか確認してください。
 また、Zabbix 2.0以降であれば、zabbix_agentd.conf内のServerActiveにServerと同じ値を設定したかどうか、Zabbixサーバに対して監視対象のサーバから、ポート番号10051で接続できるようになっているかどうか、Firewallなどの設定も確認してください。

●cannot send list of active checks(その2)

 /var/log/zabbix/zabbix_server.logを確認したところ、下記のようなエラーが記録されていました。
  7888:20190627:114237.247 cannot send list of active checks to "192.168.0.32": host [serverA] not found
  7888:20190627:114256.299 cannot send list of active checks to "192.168.0.33": host [serverB.bigbang.dyndns.org] not found
 
# zabbix_get -s 192.168.0.32 -k agent.hostname
serverA
# zabbix_get -s 192.168.0.33 -k agent.hostname
serverB.bigbang.dyndns.org
 Zabbixサーバの/etc/zabbix/zabbix_server.confや/etc/zabbix/zabbix_agentd.confを調べましたが、おかしな点は見当たりませんでした。
 監視される側のzabbix_agentd.confを調査したところ、HostnameがそれぞれserverA、serverB.bigbang.dyndns.orgと設定されていました。
 該当個所を修正し、Zabbix Agentを再起動して問題が解消されました。

●Zabbix 1.8のグラフの文字化けの対応

 「さざなみフォント」を利用する場合と「IPAフォント」を利用する場合について記載します。
 まず、「dejavuフォント」を無効にします。
ソースからインストールした場合
# vi /var/www/html/zabbix/include/defines.inc.php

rpmからインストールした場合
# vi /usr/share/zabbix/include/defines.inc.php
//define('ZBX_FONTPATH','/usr/share/fonts/dejavu'); ← コメントアウト
//define('ZBX_GRAPH_FONT_NAME','DejaVuSans'); ← コメントアウト
//define('ZBX_FONT_NAME','DejaVuSans'); ← コメントアウト
 さざなみフォントを利用する場合は下記のようにします。
define('ZBX_FONTPATH','/usr/share/fonts/sazanami/gothic'); ← 変更
define('ZBX_GRAPH_FONT_NAME','sazanami-gothic'); ← 変更
define('ZBX_FONT_NAME','sazanami-gothic'); ← 変更
 図は下記のようになり、時間軸のフォントが小さくなって読みにくくなります。

sazanami-graph1

 IPAフォントを利用する場合は下記のようにします。
define('ZBX_FONTPATH','/usr/share/fonts/japanese/IPAfont00203'); ← 変更
define('ZBX_GRAPH_FONT_NAME','ipagui'); ← 変更
define('ZBX_FONT_NAME','ipagui'); ← 変更
 図は下記のようになり、綺麗に表示されます。

IPA-graph

●1.8から2.0へのアップグレード

 Zabbix Serverのバージョンアップには以下の手順を踏みます。
  • Zabbix Server停止
  • バックアップ
  • Zabbix2.0のインストール
  • Zabbix旧バージョン用インデックスを削除
  • データベースの更新スクリプト実行
  • Zabbix Server起動

 Zabbix Server停止

 データベースのバックアップ時に新たに監視データが登録されないよう、いったんZabbix Serverを停止します。さらに、監視設定についても変更が加えられないよう、Apacheを停止します。

 バックアップ

 Zabbix Serverの設定ファイルとデータベースのバックアップを取得します。Zabbix Server設定ファイル(zabbix_server.conf)は任意の場所にcpコマンド等でバックアップを取得してください。
$ sudo cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.18.backup
 データベースのバックアップ方法は利用しているデータベースによって異なります。以下、データベースとしてMySQLを利用している場合のバックアップ方法です(データベース名[zabbix]、MySQLユーザ[root]、バックアップ先[/usr/lib/mysql]の場合の例)。
$ sudo mysqldump --opt zabbix > /usr/lib/mysql/zabbix_db.dump

以下のように表示された場合の対応
mysqldump: Got error: 1045: Access denied for user 'root'@'localhost'
                                (using password: NO) when trying to connect

# mysqldump --opt zabbix -p> /usr/lib/mysql/zabbix_db.dump と入力してください
Enter password: 

権限が必要な場合
# mysqldump --opt zabbix -u root -p> /usr/lib/mysql/zabbix_db.dump と入力してください
Enter password: 

 Zabbix2.0のインストール

 ソースファイルを入手します。
$ cd /usr/local/src
$ wget http://sourceforge.net/projects/zabbix/files/latest/download?source=files
$ tar xvzf zabbix-2.0.3.tar.gz
$ cd zabbix-2.0.3
$ ./configure --enable-server --enable-ipv6 --with-mysql --with-net-snmp --with-jabber --with-libcurl --with-ldap --with-openipmi --with-unixodbc
$ make
# sudo make install
 configureのオプション設定は利用する機能に応じて変更してください。インストール手順に関しては、Zabbix1.8系と基本的には同じです。

 設定ファイル(zabbix_server.conf)更新します。
 設定ファイル(zabbix_server.conf)については、Zabbix2.0からの新機能であるZabbix Java Gatewayの利用設定など、変更箇所が何点かあります。
 そのため、Zabbix2.0のソースコードディレクトリ内にあるzabbix_server.confのオリジナルファイルに既存のZabbix1.8で行っていた設定項目を記述する形で対応するのがいいかと思います。
 その他既存のものと同様の設定箇所に関してはこちらを参照してください。Zabbix2.0で新たに追加された設定項目は以下になります。
JavaGateway= ← Java GatewayのIPアドレス(or ホスト名)指定
JavaGatewayPort=10052 ← Java Gatewayの稼働ポート番号指定
StartJavaPollers=0 ← Java Gatewayとの通信プロセスの起動数指定
SNMPTrapperFile=/tmp/zabbix_traps.tmp ← SNMPTrapperの書き込み先指定
StartSNMPTrapper=0 ← SNMPTrapperのプロセス起動数指定
 必要に応じて上記設定を行ってください。上記の5項目の設定は必須の設定項目ではないため、Zabbix Java GatewayやSNMPトラップ監視を利用しない場合はZabbix1.8の設定ファイルをそのまま用いることも可能です。
 ソースコードの中にあるオリジナルの設定ファイル(zabbix_server.conf)の配置場所がZabbix1.8系と異なるので注意してください。
   Zabbix1.8 → ソースコードディレクトリ/misc/conf/zabbix_server.conf
   Zabbix2.0 → ソースコードディレクトリ/conf/zabbix_server.conf

 Webインタフェースの置き換えます。
$ mv /var/www/html/zabbix /var/www/html/zabbix-18
$ cp -r /usr/local/src/zabbix-2.0.3/frontends/php/ /var/www/html/zabbix
$ cp /var/www/html/zabbix-18/conf/zabbix.conf.php /var/www/html/zabbix/conf/
$ chown -R apache:apache /var/www/html/zabbix
 既存のZabbix1.8のZabbix Webインタフェース用ファイルをいったん別の場所に移動し、Zabbix2.0のソースコードディレクトリにあるfrontends/phpを/var/www/html/zabbixにコピーします。
 その後、Zabbix Webの設定ファイルであるzabbix.conf.phpをZabbix1.8のディレクトリから2.0のディレクトリにコピーします。zabbix.conf.phpに設定すべき項目は1.8系と2.0で変更はありません。1.8系で利用していたものをそのままコピーするだけで動きます。
 最後に/var/www/html/zabbixの所有者をApacheの実行ユーザに設定します。

 Zabbix旧バージョン用インデックスを削除

 node_cksumテーブルのインデックスを削除します。以下、MySQLの場合の手順を示します。
$ mysql -uzabbix -p zabbix
mysql> SHOW INDEX FROM node_cksum;  ←node_cksumテーブルのインデックス確認
mysql> DROP INDEX node_cksum_1 ON node_cksum;  ←node_cksum_1削除
 1.8.0からバージョンアップする場合や、1.6系をアップグレードした1.8系から2.0にバージョンアップする場合には、node_cksum_cksum_1というインデックスも存在するので、そのインデックスも削除します。

 データベースの更新スクリプト実行
 データベースをZabbix2.0に対応させるためスクリプトを実行します。
 データベースアップグレード用スクリプトは、ソースコードディレクトリ内のupgrades/dbpatches/2.0以下にあります。データベースの種類毎に更新スクリプトが用意されているので、環境に合わせて選択してください。
$ cd /usr/local/src/zabbix-2.0.3/upgrades/dbpatches/2.0/mysql/
$ mysql -uzabbix -p zabbix < patch.sql
Enter password: 
(終了までにかなり時間を要します)

 Zabbix Server起動

 あとは、Zabbix Serverを起動すれば完了です。
 ここでの注意点としては、Zabbix Serverの起動スクリプト(/etc/init.d/zabbix_server)内でZabbix2.0のバイナリファイルや設定ファイルの場所を指定するのを忘れないでください。

●5.0から5.4へのアップグレード

 Zabbix Server 5.0を5.4にアップグレードします。
 Zabbix Serverを停止します。
# systemctl stop zabbix-server
 Zabbixのリポジトリを更新します。
# rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm を取得中
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:zabbix-release-5.4-1.el8         ################################# [100%]
 Zabbix Serverをアップデートします。Zabbix Agentがインストールされている場合は、一緒にアップデートされるかもしれません。
# dnf update zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-web-japanese zabbix-web zabbix-agent zabbix-get
依存関係が解決しました。
====================================================================================================================================
 パッケージ                             アーキテクチャー          バージョン                        リポジトリー              サイズ
====================================================================================================================================
アップグレード:
 zabbix-agent                           x86_64                    5.4.4-1.el8                       zabbix                    497 k
 zabbix-apache-conf                     noarch                    5.4.4-1.el8                       zabbix                     20 k
 zabbix-get                             x86_64                    5.4.4-1.el8                       zabbix                    380 k
 zabbix-server-mysql                    x86_64                    5.4.4-1.el8                       zabbix                    1.4 M
 zabbix-web                             noarch                    5.4.4-1.el8                       zabbix                    3.3 M
 zabbix-web-deps                        noarch                    5.4.4-1.el8                       zabbix                     20 k
 zabbix-web-japanese                    noarch                    5.4.4-1.el8                       zabbix                     20 k
 zabbix-web-mysql                       noarch                    5.4.4-1.el8                       zabbix                     19 k

トランザクションの概要
====================================================================================================================================
アップグレード  8 パッケージ

ダウンロードサイズの合計: 5.6 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/8): zabbix-apache-conf-5.4.4-1.el8.noarch.rpm                                                     32 kB/s |  20 kB     00:00    
(2/8): zabbix-agent-5.4.4-1.el8.x86_64.rpm                                                          405 kB/s | 497 kB     00:01    
(3/8): zabbix-get-5.4.4-1.el8.x86_64.rpm                                                            309 kB/s | 380 kB     00:01    
(4/8): zabbix-web-deps-5.4.4-1.el8.noarch.rpm                                                       174 kB/s |  20 kB     00:00    
(5/8): zabbix-web-japanese-5.4.4-1.el8.noarch.rpm                                                   150 kB/s |  20 kB     00:00    
(6/8): zabbix-web-mysql-5.4.4-1.el8.noarch.rpm                                                      164 kB/s |  19 kB     00:00    
(7/8): zabbix-server-mysql-5.4.4-1.el8.x86_64.rpm                                                   967 kB/s | 1.4 MB     00:01    
(8/8): zabbix-web-5.4.4-1.el8.noarch.rpm                                                            624 kB/s | 3.3 MB     00:05    
------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                875 kB/s | 5.6 MB     00:06     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                            1/1 
  scriptletの実行中: zabbix-web-5.4.4-1.el8.noarch                                                                              1/1 
  アップグレード中 : zabbix-web-5.4.4-1.el8.noarch                                                                             1/16 
  scriptletの実行中: zabbix-web-5.4.4-1.el8.noarch                                                                             1/16 
  アップグレード中 : zabbix-web-deps-5.4.4-1.el8.noarch                                                                        2/16 
  アップグレード中 : zabbix-web-mysql-5.4.4-1.el8.noarch                                                                       3/16 
  アップグレード中 : zabbix-apache-conf-5.4.4-1.el8.noarch                                                                     4/16 
  scriptletの実行中: zabbix-apache-conf-5.4.4-1.el8.noarch                                                                     4/16 
  アップグレード中 : zabbix-web-japanese-5.4.4-1.el8.noarch                                                                    5/16 
  scriptletの実行中: zabbix-web-japanese-5.4.4-1.el8.noarch                                                                    5/16 
  scriptletの実行中: zabbix-server-mysql-5.4.4-1.el8.x86_64                                                                    6/16 
  アップグレード中 : zabbix-server-mysql-5.4.4-1.el8.x86_64                                                                    6/16 
警告: /etc/zabbix/zabbix_server.conf は /etc/zabbix/zabbix_server.conf.rpmnew として作成されました。

  scriptletの実行中: zabbix-server-mysql-5.4.4-1.el8.x86_64                                                                    6/16 
  アップグレード中 : zabbix-get-5.4.4-1.el8.x86_64                                                                             7/16 
  scriptletの実行中: zabbix-agent-5.4.4-1.el8.x86_64                                                                           8/16 
  アップグレード中 : zabbix-agent-5.4.4-1.el8.x86_64                                                                           8/16 
警告: /etc/zabbix/zabbix_agentd.conf は /etc/zabbix/zabbix_agentd.conf.rpmnew として作成されました。

  scriptletの実行中: zabbix-agent-5.4.4-1.el8.x86_64                                                                           8/16 
  scriptletの実行中: zabbix-web-japanese-5.0.15-1.el8.noarch                                                                   9/16 
  整理             : zabbix-web-japanese-5.0.15-1.el8.noarch                                                                   9/16 
  整理             : zabbix-apache-conf-5.0.15-1.el8.noarch                                                                   10/16 
  整理             : zabbix-web-deps-5.0.15-1.el8.x86_64                                                                      11/16 
  整理             : zabbix-web-mysql-5.0.15-1.el8.noarch                                                                     12/16 
  scriptletの実行中: zabbix-web-5.0.15-1.el8.noarch                                                                           13/16 
  整理             : zabbix-web-5.0.15-1.el8.noarch                                                                           13/16 
  scriptletの実行中: zabbix-server-mysql-5.0.15-1.el8.x86_64                                                                  14/16 
  整理             : zabbix-server-mysql-5.0.15-1.el8.x86_64                                                                  14/16 
  scriptletの実行中: zabbix-server-mysql-5.0.15-1.el8.x86_64                                                                  14/16 
  整理             : zabbix-get-5.0.15-1.el8.x86_64                                                                           15/16 
  scriptletの実行中: zabbix-agent-5.0.15-1.el8.x86_64                                                                         16/16 
  整理             : zabbix-agent-5.0.15-1.el8.x86_64                                                                         16/16 
  scriptletの実行中: zabbix-agent-5.0.15-1.el8.x86_64                                                                         16/16 
  scriptletの実行中: zabbix-agent-5.4.4-1.el8.x86_64                                                                          16/16 
  scriptletの実行中: zabbix-agent-5.0.15-1.el8.x86_64                                                                         16/16 
[/usr/lib/tmpfiles.d/pesign.conf:1] Line references path below legacy directory /var/run/, updating /var/run/pesign \
 → /run/pesign; please update the tmpfiles.d/ drop-in file accordingly.

  検証             : zabbix-agent-5.4.4-1.el8.x86_64                                                                           1/16 
  検証             : zabbix-agent-5.0.15-1.el8.x86_64                                                                          2/16 
  検証             : zabbix-apache-conf-5.4.4-1.el8.noarch                                                                     3/16 
  検証             : zabbix-apache-conf-5.0.15-1.el8.noarch                                                                    4/16 
  検証             : zabbix-get-5.4.4-1.el8.x86_64                                                                             5/16 
  検証             : zabbix-get-5.0.15-1.el8.x86_64                                                                            6/16 
  検証             : zabbix-server-mysql-5.4.4-1.el8.x86_64                                                                    7/16 
  検証             : zabbix-server-mysql-5.0.15-1.el8.x86_64                                                                   8/16 
  検証             : zabbix-web-5.4.4-1.el8.noarch                                                                             9/16 
  検証             : zabbix-web-5.0.15-1.el8.noarch                                                                           10/16 
  検証             : zabbix-web-deps-5.4.4-1.el8.noarch                                                                       11/16 
  検証             : zabbix-web-deps-5.0.15-1.el8.x86_64                                                                      12/16 
  検証             : zabbix-web-japanese-5.4.4-1.el8.noarch                                                                   13/16 
  検証             : zabbix-web-japanese-5.0.15-1.el8.noarch                                                                  14/16 
  検証             : zabbix-web-mysql-5.4.4-1.el8.noarch                                                                      15/16 
  検証             : zabbix-web-mysql-5.0.15-1.el8.noarch                                                                     16/16 
インストール済みの製品が更新されています。

アップグレード済み:
  zabbix-agent-5.4.4-1.el8.x86_64              zabbix-apache-conf-5.4.4-1.el8.noarch       zabbix-get-5.4.4-1.el8.x86_64           
  zabbix-server-mysql-5.4.4-1.el8.x86_64       zabbix-web-5.4.4-1.el8.noarch               zabbix-web-deps-5.4.4-1.el8.noarch      
  zabbix-web-japanese-5.4.4-1.el8.noarch       zabbix-web-mysql-5.4.4-1.el8.noarch        

完了しました!
 Zabbix Serverを起動します。
# systemctl start zabbix-server
 特に問題なくアップデートできました。

●zabbix agentを起動するとNo active checks on serverというエラーが出力される

 zabbix agentを起動するたびにzabbix_agentd.logに下記のようなエラーが出力されます。
32381:20150820:143829.144 No active checks on server: host [ホスト名] not found
 zabbix_server.conf、zabbix_agentd.conf、/etc/hostsを確認しましたが特に問題なさそうです。
 原因は、ZabbixのWebUIで登録したホスト名をZabbix Serverで設定したためであり、これをhostsname(full)のzabbix-server.bigbang.mydns.jpに変更したところエラーは出力されなくなりました。

●tcpdumpでbad udp cksum...q: PTR?....エラーが出力される

 3秒ごとに下記のようなスキャンが実施されていることに気がつきました。DNSの設定や/etc/hostsの設定等いろいろ確認しましたが問題ありませんでした。結局のところ、ZABBIXのGUIの設定である「設定」ー「ディスカバリ」で192.168.0.1-254の範囲が設定されていたためでした。
localhost.localdomain.52399 > localhost.localdomain.domain: [bad udp cksum 30bd!] 60593+ PTR? 1.0.168.192.in-addr.arpa. (42)
localhost.localdomain.domain > localhost.localdomain.52399: [bad udp cksum de02!] 60593 NXDomain q: PTR? 1.0.168.192.in-addr.arpa. 0/1/0 /
ns: 168.192.in-addr.arpa. [3h] SOA ns5.odn.ne.jp. postmaster.odn.ne.jp.  2007090101 10800 3600 3600000 86400 (102)
localhost.localdomain.53962 > localhost.localdomain.domain: [bad udp cksum 36df!] 50319+ PTR? 2.0.168.192.in-addr.arpa. (42)
localhost.localdomain.domain > localhost.localdomain.53962: [bad udp cksum e424!] 50319 NXDomain q: PTR? 2.0.168.192.in-addr.arpa. 0/1/0 /
ns: 168.192.in-addr.arpa. [3h] SOA ns5.odn.ne.jp. postmaster.odn.ne.jp. 2007090101 10800 3600 3600000 86400 (102)
localhost.localdomain.39807 > localhost.localdomain.domain: [bad udp cksum 433e!] 40141+ PTR? 3.0.168.192.in-addr.arpa. (42)
localhost.localdomain.domain > localhost.localdomain.39807: [bad udp cksum f083!] 40141 NXDomain q: PTR? 3.0.168.192.in-addr.arpa. 0/1/0 /
ns: 168.192.in-addr.arpa. [3h] SOA ns5.odn.ne.jp. postmaster.odn.ne.jp. 2007090101 10800 3600 3600000 86400 (102)
localhost.localdomain.51313 > localhost.localdomain.domain: [bad udp cksum aee1!] 52334+ PTR? 4.0.168.192.in-addr.arpa. (42)

●Received empty response from Zabbix Agent at [IPアドレス]. Assuming that agent dropped connection because of access permissions.

 Zabbix Agentが動作しているあるクライアントの状態が緑色のアイコンではなく赤色のアイコンとなっていました。
 エラーは下記のとおりです。
Received empty response from Zabbix Agent at [IPアドレス]. Assuming that agent dropped connection because of access permissions.
 zabbix_getコマンドで確認したところ、確かに返り値がありませんでした。
# zabbix_get -k agent.ping -s IPアドレス

 通常であれば下記のような応答があるはずです。
# zabbix_get -k agent.ping -s IPアドレス
1
 この対処方法は下記であるのですが、/etc/zabbix/zabbix_agentd.confにそれらしいIPアドレスを記載しても状況が変化しません。
 The server is attempting to connect to agent to send configuration data, but the server's IP is not on the list of allowed servers. Make sure the server is allowed in the agent's configuration file.
 OSを再起動したら正常になりました。kernelをアップデートしたまま放置していた関係かもしれません。

●"/var/log/messages": [13] Permission denied

 zabbix_agentd.logに下記のログが記録されていました。
active check "log[/var/log/messages,failed|Failed|FAILED|warning|Warning|WARNING|fatal|Fatal|FATAL]" is not supported: /
Cannot open file "/var/log/messages": [13] Permission denied
 全てZabbixサーバで設定されている/var/log/messagesに関するアイテムとトリガーをすべて削除したところ記録されなくなりました。

●アイテムproc.num[]でデータ取得できるものと取得できないものがある

 参考URL:Zabbix アプリケーション監視のためのアイテムの違い

 proc.numは下記のように定義されています。
proc.num[<name>,<user>,<state>,<cmdline>]

プロセス数。<name>と<user>はproc.memアイテムと同様。<state>はall (default), run, sleep, zomb。
<cmdline>はコマンドラインでフィルタリングする(正規表現をサポート)。
例:proc.num[apache2,www-data]。Windows上では<name>と<<user>のみをサポート。
 今回、うまく監視出来なかったアイテムの定義は下記のとおりです。
proc.num[pcsd]
 この記載方法では、CentOS 7上で動作するpcsdの監視は出来るのですが、Fedora 24上で動作するpcsdは監視することができませんでした。
 何が違うかというと参考URLに記載されているとおりpsコマンドで得られる実行結果が異なる点と関係していました。
※CentOS 7の場合
# ps -ef|grep pcsd
root   681   1  0 12:13 ?    00:00:10 /usr/bin/ruby /usr/lib/pcsd/pcsd > /dev/null &

# ps -e|grep pcsd
  681 ?        00:00:10 pcsd

※Fedora 24の場合
# ps -ef|grep pcsd
root   746   1  0  2月23 ?   00:03:37 /usr/bin/ruby-mri /usr/lib/pcsd/pcsd > /dev/null &

# ps -e|grep pcsd
結果は出力されない
 Zabbixのproc.numの監視はps -eコマンドの実行結果と同様の動きらしく、下記のように設定変更することにより本来の監視をすることが出きるようになりました。
proc.num[,,,pcsd]


●ZabbixのAdminでログインできなくなった場合の対処方法

 移行作業等でGUIでAdminによるログインが出来なくなったという経験があるのではないでしょうか。
 この場合、MySQLのusersデータベースに接続し下記を実施することにより問題を解決することが出来ます。
 まず、認証方法をZabbixのDBのパスワードを使用する方式に戻します。
UPDATE config SET authentication_type=0;
 Adminのパスワードをリセット(zabbixに変更)します。
UPDATE users SET passwd='5fce1b3e34b520afeffb37ce08c7cd66' WHERE alias = 'Admin';
 Adminユーザが存在しないが、パスワードが分かっている他のZabbixユーザやZabbix管理者のアカウントをZabbix特権管理者にしたい場合は下記を実施します。
UPDATE users SET type=3 WHERE alias='アカウント';


●「Zabbix discoverer processes more than 75% busy」エラーが頻発する

 参考URL:Zabbixにてdiscoverer processes more than ~なるエラーが…
 参考URL:【連載Zabbix】Zabbix チューニング Serverプロセスの理解【Zabbix Advent Calendar 2016】

 上記URLを参考に対応しました。
# vi /etc/zabbix/zabbix_server.conf
### Option: StartDiscoverers
#       Number of pre-forked instances of discoverers.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartDiscoverers=1
StartDiscoverers = 3 ← 有効化

# systemctl restart zabbix-server
 以上で対応完了です。

●「Less than 25% free in the configuration cache」が検知された場合の対処方法

 参考URL:Zzabbixで「Less than 25% free in the configuration cache」の対処

 上記URLを参考に対応しました。
# vi /etc/zabbix/zabbix_server.conf

※下記のように変更
### Option: CacheSize
#       Size of configuration cache, in bytes.
#       Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-64G
# Default:
# CacheSize=8M
CacheSize=64M ← 有効化

# systemctl restart zabbix-server
 以上で対応完了です。

●Service Unavailable

 PacemakerでMariaDBをActive/Standbyでの構築時、Zabbixの設定完了後、http:///zabbix/にアクセスしたところ、ブラウザに下記のようなエラーが表示された。
Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
 /var/log/httpd/error_logを確認すると下記が記録されていました。
[Fri Apr 16 17:38:48.561395 2021] [proxy:error] [pid 1181749:tid 140511172085504] (2)No such file or directory: AH02454: FCGI: \
attempt to connect to Unix domain socket /run/php-fpm/zabbix.sock (*) failed
[Fri Apr 16 17:38:48.561477 2021] [proxy_fcgi:error] [pid 1181749:tid 140511172085504] [client 1.0.0.6:37556] AH01079: \
failed to make connection to backend: httpd-UDS
 CentOS 8からApacheのPHP実行環境がモジュール(mod_php)からFastCGIサーバ(PHP-FPM)に変更された、とのことです。
 そのため、PHP-FPMをインストールし、設定を変更する必要があります。
# vi /etc/php-fpm.d/zabbix.conf

##最低限の設定として、PHPのタイムゾーンを変更
# タイムゾーン行のコメントアウトを外し、Asia/Tokyoに変更
; php_value[date.timezone] = Europe/Riga
↓
php_value[date.timezone] = Asia/Tokyo
 php-fpmを起動するように設定します。
※Pacemakerの制御により起動を実施しない(通常)場合
# systemctl enable --now php-fpm

※Pacemakerの制御により起動する場合
# pcs resource create php-fpm systemd:php-fpm op monitor interval=10s timeout=10s
 上記の設定をすることにより問題が解消されました。

●zabbix-agentがroot権限で起動しない

 参考URL:zabbix-agent をroot権限で起動する方法
 参考URL:ZabbixでAllowRoot=1をせずに/var/log/messagesなどを監視する方法

 ※ただし、zabbixにroot権限を付与する形になりますので、セキュリティ上危険になることを理解する必要があります。

 /etc/zabbix/zabbix-agentd.confを下記のように変更します。
# vi /etc/zabbix/zabbix_agentd.conf
# AllowRoot=0
 ↓ 下記を追記します。
AllowRoot=1
 上記はrootで実行を許可しているだけです。
 実際にはrootで実行する設定をサービスファイルに書き込む必要があります。
 /usr/lib/systemd/system/zabbix-agent.serviceを下記のように変更します。
# vi /usr/lib/systemd/system/zabbix-agent.service
User=zabbix
 ↓ 下記のように修正
User=root

Group=zabbix
 ↓ 下記のように修正
Group=root
 変更後、下記を実行します。
# systemctl daemon-reload
# systemctl restart zabbix-agent
 以上で作業終了です。
# ps aux|grep zabbix
zabbix    439566  1.8  0.0 129800  8348 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix    440191  0.0  0.0 129800  3716 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix    440192  0.0  0.0 129800  5404 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix    440193  0.0  0.0 129800  5404 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix    440194  0.0  0.0 129800  5404 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix    440195  0.0  0.0 130060  5464 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
zabbix    440196  2.6  0.0 130036  6092 ?        S    11:01   0:00 /usr/sbin/zabbix_agentd: active checks #2 [idle 1 sec]

# ps aux|grep zabbix
root      462191  1.8  0.0 129796  8280 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
root      462812  0.0  0.0 129796  3624 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
root      462813  0.0  0.0 129796  5408 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
root      462814  0.0  0.0 129796  5408 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
root      462815  0.0  0.0 129796  5408 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
root      462816  0.0  0.0 130056  5408 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root      462817  1.2  0.0 130152  6028 ?        S    11:57   0:00 /usr/sbin/zabbix_agentd: active checks #2 [idle 1 sec]


●Pingで監視できない

 参考URL:PING監視でAddress family not supported by protocol

 あるホストに「emplate Module ICMP Ping」を使用するように設定しましたが、「/usr/sbin/fping6: can't create raw socket (must run as root?) : Address family not supported by protocol」となり、ステータスが「取得不可」となってしまいます。
 下記のように設定を変更しました。
# vi /etc/zabbix/zabbix_server.conf

# Fping6Location=/usr/sbin/fping6
 ↓ 下記のように変更
Fping6Location=/usr/sbin/fping

# systemctl restart zabbix-server


●警告「Apache: Failed to fetch status page (or no data for 30m)」が検知されてしまう

 参考URL:ZabbixでApacheのTCPコネクション数を監視したい

 Zabbix5.0でテンプレート「Template App Apache by HTTP」を設定したところ「Apache: Failed to fetch status page (or no data for 30m)」という警告が表示されるようになりました。
 これに対応するため、下記を設定します。
 なお、Apacheはバージョン2.4です。
 Apacheのmod_statusモジュールが有効になっているか確認します。
# grep "mod_status" /etc/httpd/conf.modules.d/*.conf
/etc/httpd/conf.modules.d/00-base.conf:LoadModule status_module modules/mod_status.so
 server-statusハンドラーの設定をします。
 httpd.confに記載してもいいですし、下記のようにファイルを追加してもOKです。
 ハンドラーなので、server-statusというディレクトリを作成したりする必要もありません。
# cd /etc/httpd
# grep server-status */* ← server-status の記述場所を探します。

(ファイルがあった場合)
# vi /etc/httpd/conf/extra/httpd-info.conf ← Apache2.4.9 では、このファイルに記述があるようです。
 Apache/2.4.6 Apache/2.4.37 ではありませんでしたので、httpd.confの末尾に追記します。
<Location /server-status>
    SetHandler server-status
    Require all denied
    Require ip 127.0.0.1
    Require ip 192.168.0.1 ← ZabbixサーバのIPアドレスを追加
</Location>

# systemctl restart httpd
 http://127.0.0.1/server-statusにアクセスし、表示されることを確認します。
 正常に確認できれば、しばらくすると警告表示が消えます。

●警告「Apache: Failed to fetch status page (or no data for 30m)」が検知されてしまう(その2)

 http://127.0.0.1/server-statusにアクセスすると問題なく表示されるにもかかわらす、Zabbixで異常だと検知されてしまう場合、下記の方法により解消しましたので残しておきます。
 間違って検知しているのは、「Template App Apache by HTTP」を利用している時であることが分かりました。
 (ご検知される該当ホストのアイテムのデータ取得情報を確認したところ、Template App Apache by HTTP: Apache: Get statusが「取得不可」となっていました。)
 色々試したところ「Template App Apache by Zabbix agent」に変更することによって問題が解消されました。

●重度の障害「PHP-FPM: Service is down」が検知される

 参考URL:PHP status page not working in Apache

 Zabbix 5.0で「Template App PHP-FPM by HTTP」を設定したところ「PHP-FPM: Service is down」が検知されるのようなりました。
 /etc/php-fpm.d/www.confを下記のように変更します。
# vi /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/www.sock
pm.status_path = /status-php ← #を外し、左記のように変更
ping.path = /ping ← #を外し、有効化

# systemctl restart php-fpm
 次に /etc/httpd/conf/httpd.conf の末尾に追記します。
# vi /etc/httpd/conf/httpd.conf
<Location /status-php>
  SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost"

  Require all denied
  Require local
</Location>

<Location /ping>
  SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost"

  Require all denied
  Require local
</Location>

または

<Location ~ /(status-php|ping)$>
  SetHandler "proxy:unix:/var/run/php-fpm/www.sock|fcgi://localhost"

  Require all denied
  Require local
</Location>

# systemctl restart httpd
 http://127.0.0.1/status-php にアクセスすると、ステータスが表示されます。
 しかし、障害は回復しませんでした。

 「Template App PHP-FPM by HTTP」のマクロの内容を確認します。

マクロ 説明
{$PHP_FPM.HOST} localhost Hostname or IP of PHP-FPM status host or container.
{$PHP_FPM.PING.PAGE} ping The path of PHP-FPM ping page.
{$PHP_FPM.PING.REPLY} pong Expected reply to the ping.
{$PHP_FPM.PORT} 80 The port of PHP-FPM status host or container.
{$PHP_FPM.QUEUE.WARN.MAX} 80 The maximum PHP-FPM queue usage percent for trigger expression.
{$PHP_FPM.SCHEME} http Request scheme which may be http or https
{$PHP_FPM.STATUS.PAGE} status The path of PHP-FPM status page.
 ※pm.status_pathの設定に応じて「status」を変更します。
  上記の場合、status → status-php

 エラーがいつまで立っても、回復しないのは /etc/php-fpm.d/www.conf のlistenをsocketで設定していたためです。
 エラーがいつまで立っても、回復しないのは「Template App PHP-FPM by HTTP」のマクロの内容の「{$PHP_FPM.STATUS.PAGE}」の設定値を「status」で設定していたためです。
 「status」を「status-php」に変更することにより正常となりました。

 もう一つ似たようなテンプレート「Template App PHP-FPM by Zabbix agent」がありましたので、そちらでも設定してみます。
 「Template App PHP-FPM by Zabbix agent」のマクロの内容を確認します。

マクロ 説明
{$PHP_FPM.HOST} localhost Hostname or IP of PHP-FPM status host or container.
{$PHP_FPM.PING.PAGE} ping The path of PHP-FPM ping page.
{$PHP_FPM.PING.REPLY} pong Expected reply to the ping.
{$PHP_FPM.PORT} 80 The port of PHP-FPM status host or container.
{$PHP_FPM.PROCESS_NAME} php-fpm PHP-FPM process name
{$PHP_FPM.QUEUE.WARN.MAX} 80 The maximum PHP-FPM queue usage percent for trigger expression.
{$PHP_FPM.STATUS.PAGE} status The path of PHP-FPM status page.
 ※pm.status_pathの設定に応じて「status」を変更します。
  上記の場合、status → status-php


 「status」を「status-php」に変更することにより、すべての値を正常に取得できるようになりました。

●ValueCacheがfull

 参考URL:ZabbixのValueCacheを正しく理解して、大規模な監視環境でも効率良く処理させよう

 Zabbixで「Zabbix value cache working in low memory mode」の重度の障害を検知しました。
 調べてみるとZabbixサーバのzabbix_server.logで下記のようなログが5分毎に記録されていました。
value cache is fully used: please increase ValueCacheSize configuration parameter
 ValueCacheSize(デフォルトは8M)を多くしなさい、ということなので下記のように対応しました。
# vi /etc/zabbix/zabbix_server.conf
(省略)
ValueCacheSize=128M
(省略)

# systemctl restart zabbix-server
 これで様子を見たいと思います。(2021.08.26)
 問題が解消されていました。(2021.09.02)

●milter-manager.sock: Connection refused

 参考URL:CentOS7でmilter-managerとSpamAssassin(spamass-milter)を用いてスパムメール対策

 zabbix-server.logに下記のようなエラーが記録されていました。
  5396:20210902:084231.052 failed to send email: wrong answer on MAIL FROM "451 4.7.1 Service unavailable - try again later"
maillogには下記のように記録されていました。
Sep  2 08:42:31 inu postfix/smtpd[4622]: warning: connect to Milter service unix:/var/run/milter-manager/milter-manager.sock: Connection refused
Sep  2 08:42:31 inu postfix/smtpd[4622]: NOQUEUE: milter-reject: CONNECT from localhost[127.0.0.1]: 451 4.7.1 Service unavailable - try again later; proto=SMTP
 milter-manager.sockのアクセス権は下記のとおりです。
# ls -l /var/run/milter-manager/milter-manager.sock
srw-rw----. 1 root milter-manager 0  9月  2 08:37 /var/run/milter-manager/milter-manager.sock
 アクセス権が660となっているところを666に変更することで問題が解決するようですので、下記のように対応します。
# vi /etc/milter-manager/milter-manager.conf

# manager.unix_socket_mode = 0660
 ↓ 下記に変更
manager.unix_socket_mode = 0666

# systemctl restart milter-manager
 アクセス権を確認します。
# ls -l /var/run/milter-manager/milter-manager.sock
srw-rw-rw-. 1 milter-manager milter-manager 0  9月  2 11:22 /var/run/milter-manager/milter-manager.sock
 これで無事、送信できるようになりました。

●ZabbixのDiscovery機能によりWindows Serverで検知される項目を無効にする方法

 検知されたのは下記の項目です。
・"BITS" (Background Intelligent Transfer Service) is not running (startup type automatic delayed)
・"cbdhsvc_923f45d" (クリップボード ユーザー サービス_923f45d) is not running (startup type automatic delayed)
・"CDPUserSvc_923f45d" (Connected Devices Platform ユーザー サービス_923f45d) is not running (startup type automatic)
・"edgeupdate" (Microsoft Edge の更新 サービス (edgeupdate)) is not running (startup type automatic delayed)
・"TrustedInstaller" (Windows Modules Installer) is not running (startup type automatic)
・"WpnUserService_923f45d" (Windows Push Notifications User Service_923f45d) is not running (startup type automatic)
・"WpnUserService_d80e8" (Windows Push Notifications User Service_d80e8) is not running (startup type automatic)

 これらに対処するために下記のように実施しました。
 ・該当のホスト(エラーが検知されているホスト)に対してのみ無効にする方法
  ダッシュボードに表示されている該当の「障害:深刻度」をクリック。
  小さなウィンドウが表示されるので、その中の「設定」をクリック。
  設定内容が表示されるので、一番下の「有効」のチェックを外し、「更新」をクリック。

  元に戻すには
  左ペインの「設定」ー「ホスト」をクリック。
  一覧から先程設定したホスト名を探す。
  該当ホストにある「トリガー」をクリック。
  ブラウザの検索機能を使用し「TrustedInstaller」を検索。
  ステータスが「無効」になっているので、その部分をクリックし「有効」に変更する。
  ダッシュボードで再度、表示されます。

 ・全ホストに適用する(複数のホストで検知されている項目に対し、表示されないようにする)
  2023.8.31時点、一括で無効にする方法は分かりませんでした。