zabbixによるサーバ監視

更新日:2021/12/29

前提など

zabbixでサーバー監視をやってみます。
基本的に公式サイト(https://www.zabbix.com/jp)の手順(画面右上の「ダウンロード」ボタンあたりから見える)を参考にインストールしてみます。
※ダウンロードするバージョンなどを選択すると、下にインストール手順が表示されます。
その他、やってみて必要だと思ったことも手順として記載しています。

zabbixは、無料で使えます。
基本的な機能は一式揃っているので、こちらでサーバー監視を試してみたいと思います。
なお、対象はCentOS8.4、そしてzabbixは、これを記載しているときの最新バージョン5.4を対象とします。
ちなみに、zabbixは、CentOSの標準リポジトリ外のソフトウェアとなります。

zabbixの監視サーバーを1台、そして、監視される側のサーバーをN台・・・という構成とします。
監視サーバーにはzabbixの管理ソフトをインストールし、監視される側のサーバーにはzabbixのAgentのインストールを行うことで、情報を収集します。

監視サーバーの設定

監視サーバーの設定が、若干手順が多いです。
以下の手順を実施すれば、動くようになります。
(正確に言うと、監視サーバー+自信のサーバーを監視するAgentがインストールされた状態となります)

「SELinuxの設定変更」で、SELinuxに例外設定を行う手順は必ず実施してください。
忘れると、audit.logがすごい勢いで出たままになります・・・。

  1. dnfのリポジトリ追加
  2. zabbixに必要なソフトウェアを一式インストールする
  3. MariaDBをインストールし、セットアップする
  4. MariaDBにZabbix用のテーブルなどを作成する
  5. zabbixにMariaDBのパスワードを設定する
  6. ファイヤーウォールの設定変更
  7. SELinuxの設定変更

dnfのリポジトリ追加

「https://www.zabbix.com/jp/download」から、リポジトリ追加をするためのrpmのパスを取得します。
画面上部で、自分の環境に合った条件のボタンをポチポチ選択していくと、画面下にインストール手順などが表示されます。
今回はZabbix5.4、CentOS8で、データベースはMySQL、WebServerはApacheを選択します。

まずは、zabbixのリポジトリを、以下のコマンドで追加します。
以下を実行すると、zabbixのリポジトリが追加されます。

標準以外のリポジトリの参照が常にONになるのが気になる場合は、「/etc/yum.repos.d/zabbix.repo」が追加されるので、zabbixのインストール作業が終わったら、この設定ファイルのenableを0にしてしまえばよいと思います。

[root@localhost ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm ←リポジトリを追加
Retrieving https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
warning: /var/tmp/rpm-tmp.fBJX0Z: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-release-5.4-1.el8         ################################# [100%]
[root@localhost ~]# dnf clean all ←dnfのキャッシュをクリア
21 files removed

zabbixに必要なソフトウェアを一式インストールする

続いて、zabbixと、依存するソフトウェアをインストールします。
zabbixは、zabbixの本体と、それを動かすためのWebServer、データ保存用にDBが必要となります。
なので、以下のコマンドでzabbixの本体と、Apacheをインストールします(Apacheは、依存解決で自動でインストールされる)。

[root@localhost ~]# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-agent 

zabbixのWeb画面で、日本語で表示したい場合、以下もインストールしておく。
また、ロケールとして日本語が選べることを事前に確認しておくこと。
 →  「localectl list-locales」のコマンドを実行し、一覧に「ja_JP.utf8」が出てくることを確認。
   出てこない場合は「dnf install langpacks-ja」で日本語ロケールをインストールしておく

dnf install zabbix-web-japanese

MariaDBをインストールし、セットアップする

続いて、DB(mariaDB)をインストールします。
MySQL用っぽいですが、mariaDBをインストールすることとします。

[root@localhost ~]# dnf install mariadb-server mariadb mariadb-devel

上記のコマンドで、MariaDBのインストールが出来たので、続いて、MariaDBを使うための設定から行っていきます。
まずは、MariaDBがOS起動時に自動起動するようにする+インストール直後は起動していないので、起動させます。

[root@localhost ~]# systemctl enable mariadb ←MariaDBの自動起動をON
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
[root@localhost ~]# systemctl start mariadb ←MariaDBを起動
[root@localhost ~]# systemctl status mariadb ←MariaDBの状態を表示
● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2021-12-26 20:29:23 JST; 4s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 36222 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 36087 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
  Process: 36062 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 36191 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 11264)
   Memory: 83.4M
   CGroup: /system.slice/mariadb.service
           mq36191 /usr/libexec/mysqld --basedir=/usr

続いて、MariaDBの初期設定を行います。
「mysql_secure_installation」という便利コマンドがあり、ウィザード形式で、質問に答えると設定を行ってくれます。
このコマンドを使って、MariaDBのrootパスワードを設定などを行います。

[root@localhost ~]# 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): ←パスワードは未設定なので、enterキーを押す
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 ←インストール直後なのでパスワードが未設定。なのでYと回答し、パスワードをセットする
New password: ←MariaDBのrootユーザーのパスワードを入力(好きな文字列を入力)
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 ←anonymousユーザーは不要なので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 ←MariaDBのrootユーザーはローカルからしか接続出来ないようにするのが正しいので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 ←testというテスト用のDBは、使わないので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 ←権限情報をリロードさせるために、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!
[root@localhost ~]#

続いて、文字コードの設定をしておきます(これをやらないと文字化けするらしい)
「/etc/my.cnf.d/mariadb-server.cnf」を開き、 [mariadb]の箇所に以下を追記します。 character-set-server = utf8mb4

~省略~
# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]
character-set-server = utf8mb4 ←追加
~省略~

さらには、「/etc/my.cnf.d/client.cnf」も、念のため修正しておく。

~省略~
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options
[client-mariadb]
default-character-set = utf8mb4 ←追加

ここまで出来たら、MariaDBを再起動して、正常に起動することを確認する。

[root@localhost ~]# systemctl restart mariadb
[root@localhost ~]# systemctl status mariadb
● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2021-12-26 20:59:48 JST; 3s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 36749 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 36680 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
  Process: 36654 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 36718 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 11264)
   Memory: 71.8M
   CGroup: /system.slice/mariadb.service
           mq36718 /usr/libexec/mysqld --basedir=/usr

MariaDBにZabbix用のテーブルなどを作成する

続いて、MariaDBに、zabbixが使用するデータベースの作成と、zabbixというユーザーを追加します(+zabbixというユーザーがzabbixというDBへのアクセス権も追加)。

[root@localhost ~]# mysql -u root -p ←mysqlのクライアントを起動
Enter password: ←MariaDBのrootユーザーのパスワードを入力する
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.3.28-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; ←DBの作成
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create user zabbix@localhost identified by 'password'; ←ユーザーの作成(パスワードはとりあえず「password」とする)
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost; ←権限の付与
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> quit; ←終了する
Bye
[root@localhost ~]#

DBの作成が出来たので、そこにテーブルを作成するクエリを実行します。

[root@localhost ~]# zcat /usr/share/doc/zabbix-sql-scripts/mysql/create.sql.gz | mysql -u zabbix -p zabbix ←コマンドを実行
Enter password: ←MariaDBのrootユーザーのパスワードを入力
[root@localhost ~]#

zabbixにMariaDBのパスワードを設定する

続いて、MariaDBのrootユーザーに設定したパスワードを、Zabbixの設定ファイルに書き込みます。
「/etc/zabbix/zabbix_server.conf」を開いて、以下の部分を修正します。

~省略~
### Option: DBPassword
#       Database password.
#       Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword=password ←コメントアウト状態になっているので、「#」をはずし、パスワードを入力
~省略~

zabbixやWebServerなどを再起動し、かつ、OS起動時に自動起動するように設定します。

[root@localhost ~]# systemctl restart zabbix-server zabbix-agent httpd php-fpm
[root@localhost ~]# systemctl enable zabbix-server zabbix-agent httpd php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-server.service → /usr/lib/systemd/system/zabbix-server.service.
Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.

ファイヤーウォールについての説明

以下で、Linuxのファイヤーウォール設定を、httpのアクセスを許可します。
その後、「http://(サーバーのIPアドレス)/zabbix/」でブラウザからアクセスして、アクセスできればOKです。
webの画面からセットアップが行えます。

[root@localhost ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]#

SELinuxの設定変更

一見、動いたように見えるのですが、SELinuxがらみで、まだ正常に動いていません。
現在、zabbixのアクセスがことごとくSELinuxにより拒否され「/var/log/audit/audit.log」に大量のログが書き込まれている状態になっているはずです。
なので、以下の設定を行います。
この設定を忘れると、大変なことになります・・・。

まず、SELinuxで、zabbix用に許可するルールに何があるか表示します。
「httpd_can_connect_zabbix」「zabbix_can_network」があるはずなので、これらをONにします

[root@localhost ~]# getsebool -a | grep zabbix ←selinuxのルール一覧を表示し、そこからzabbix関連のものをぬきだす
httpd_can_connect_zabbix --> off
zabbix_can_network --> off
zabbix_run_sudo --> off
[root@localhost ~]# setsebool -P httpd_can_connect_zabbix on ←許可する設定を行う
[root@localhost ~]# setsebool -P zabbix_can_network on ←許可する設定を行う
[root@localhost ~]#

上記設定をして「tail -f /var/log/audit/audit.log」をしても、まだ大量のログが出てくるので「audit2allow」を頼ることとします。

[root@localhost ~]# grep zabbix_server /var/log/audit/audit.log | audit2allow -M zabbix-policy ←調査ツールにログを見させて助けをアドバイスをもらう
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i zabbix-policy.pp

[root@localhost ~]# semodule -i zabbix-policy.pp ←調査ツールから提案されたコマンドを実行
[root@localhost ~]# systemctl restartt zabbix-server ←念のため、zabbixを再起動する
[root@localhost ~]#

ここまでやれば、「tail -f /var/log/audit/audit.log」をしても、ログはでなくなりますし、ZabbixのWebの画面も表示される情報が増えているはずです。

監視される側のサーバー設定

監視サーバーと同じように、リポジトリを追加します。

[root@localhost ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm ←リポジトリを追加
Retrieving https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
warning: /var/tmp/rpm-tmp.fBJX0Z: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:zabbix-release-5.4-1.el8         ################################# [100%]
[root@localhost ~]# dnf clean all ←dnfのキャッシュをクリア
21 files removed

そして、zabbixのAgentをインストールします。
Agentには、1と2で分かれているらしい。
1はLinux/Windows以外にも、色々なOS対応しているらしい。
2については、Linux/Windowsだけ対応だけど、1より出来ることが増えているらしい。
Linuxを使っている場合は、素直に2の方を入れておくのが無難かなと思います。
以下のコマンドでインストールを行う。

# dnf install zabbix-agent2

Agentの設定ファイルの修正を行います。
修正する対象ファイルは、「/etc/zabbix/zabbix_agent2.conf」です。
このファイルを開き、以下の項目に値を設定します。

  • Server → Zabbixの監視サーバーのIPアドレスを記入
  • ServerActive → Zabbixの監視サーバーのIPアドレスを記入
  • Hostname → 自信のホストの名前を記入

設定ファイルの変更が終わったら、agentの再起動を行います。

# systemctl restart zabbix-agent2

監視サーバーと、監視される側のポート開放

続いて、通信ポートの穴あけを行います。
zabbixの管理サーバーは10051ポート、監視される側は10050ポートを解放する必要があります(デフォルトのポート設定の場合)。
firewalldにはすでに、zabbixの管理サーバーとAgentの定義ファイルが作成済みです。
/usr/lib/firewalld/services/zabbix-server.xml
/usr/lib/firewalld/services/zabbix-agent.xml
なので、firewalldのコマンドでは、ポート番号ではなく、名前を指定するだけでOKです。

監視サーバー側では以下のコマンドを実行し、ポートを解放する。

# firewall-cmd --add-service=zabbix-server --zone=public --permanent
# firewall-cmd --reload

監視される側のサーバーでは以下のコマンドを実行し、ポートを解放する。

# firewall-cmd --add-service=zabbix-agent --zone=public --permanent
# firewall-cmd --reload

これで、「監視サーバー」→「監視される側のサーバー」、「監視される側のサーバー」→「監視サーバー」と、双方で通信が出来る状態になりました。

監視サーバーのWebコンソールに、監視対象のサーバを追加

監視対象のサーバーの設定と、ポートの解放が完了したら、すでに監視が行える状態です。
なので、その監視情報を、管理コンソール上から閲覧できるよう、設定を行います。
管理コンソール上から。、監視対象のホスト追加を行います。

以下の設定は1例です。





「グループ」は、「選択」ボタンを押すと、一覧から選択できるようになっています。
適当になにか入力してください。
「インターフェイス」の箇所は、最初「追加」をクリックします。
すると、選択肢が出てくるのでその中から「エージェント」を選択してください。
以下のように、IPアドレスなどの入力項目が表示されます。

どんなものを監視するのかテンプレートの選択を行います。
ここまで入力できたら「追加」ボタンを押下し、ホストの追加を行います。 とりあえず「Linux by Zabbix agent」「Zabbix server health」の二つを選択してみました。

これにて、監視対象ホストが追加された状態となります。
「ダッシュボード」などで、ホストの監視項目を追加してみると、見えるようになっているはずです。

ページの一番上へ