Zabbix7.0でサーバーを監視する(インストール編)

Zabbix7.0でサーバーを監視する(インストール編)

サーバー監視とは

私たちが普段使うデバイスは目の前にある。そのため、必要な時に電源を入れ、目に見えるところで使う。そのため、ちゃんと動いているかどうかはすぐに判断できる。

それとは違って、ネットワーク機器やサーバーは基本的には目に見えないところにある。一度サーバールームやデータセンターのラックに設置されてしまえば、あとは動かしっぱなしで直接目に触れることはない。

しかし、これらの機器が不調になったり止まってしまうと、多くの人が仕事ができなくなったり、大きな経済損失を生む。

例えば、アメリカにYoutubeのサーバーがあるとして、日中は不具合が発生したらGoogleのスタッフが対応してくれるだろう。しかし、アメリカ時間の深夜にサーバーが止まればどうなるか。アメリカの人はねているので関係ないが、日本にいるユーザーは日中ずっと使えないことになる。そのため、誰かが監視していて、不具合が発生したらすぐに対応しなければならない。

では、誰が監視するのか?

答えは「監視システムが監視する」である。あらかじめ設定された監視システムが定期的に監視対象をチェックし、不具合が発生したらアラートをメールやその他の方法で発報し、連絡を受けたメンテナンス要員が対応に当たるのだ。

Zabbixとは何か

サーバー監視のためのサービスやツールは世界にたくさんあるが、多くが有料で高額だ。

その中でも、オープンソースで無料で使えて、エンタープライズレベルでも使用できる機能を持ったものは少ない。

有名なところはGrafana-PrometheusとZabbixだろう。

Prometheusはメトリクスサーバーといって、監視対象からの情報を収集するサービスだ。Grafanaはデータ可視化ツールで、セットで使われることが多い。Kubenetes監視などでよく使われるが、様々なツールと組み合わせて拡張して使用するリソース監視ツールだ。

Zabbixはそれ一つでSNMP監視から、リソース監視、可視化、アラート発報までオールインワンの機能を持っている高機能リソース管理ツールだ。

今回は、Zabbixに焦点をあてて、ざっくり説明とインストールについて説明する。

なお、サーバー監視(リソース監視ともいう)は、インフラ業界の中でもとても重要な位置づけで、構築した後の運用保守フェースで必要になる。しかし、思いのほか複雑で、専門のエンジニアはとても重宝される。

Zabbixシステムの仕組み

システム概要

Zabbixのシステムは、Zabbix serverとZabbix agentで構成される。

サーバーはデータベースを持っており、メトリクスといわれる毎分、毎時変換する監視対象の様々なデータをすべて集約し保存する。また、Webサーバーの管理画面からグラフで情報を可視化したり、閾値を超えたらメールを送信するなどの機能も持っている。また、SNMPというプロトコルも対応しており、リソース監視のための強力なツールだ。

一方の監視対象にはエージェントというツールを仕込んで置き、そのエージェント経由で監視対象の中から様々な情報(監視データ)を収集し、サーバーに送信することができる。このエージェントはインストールする必要があるのでLinuxやWindowsなどのサーバーが対象になる。サーバーの中に入り込んでいるので、場合によってはエージェントにサービスやサーバーを再起動させたりすることもできる。

もちろん、サーバー側から監視対象に対してPING監視(ネットワーク疎通確認)など、外からの監視を行うこともできる。

では、エージェントをインストールできない機器、例えばルーターとかスイッチなどはどうするのか。こちらは、SNMP(Simple Network Management Protocol)というネットワーク機器やサーバーなどの状態を監視・管理するためのプロトコルに対応している。Zabbixはこの標準規格に対応しているので、機器側でSNMPサーバーを指定すれば、Zabbixに対して障害の発生などを通知することができる。また、Zabbixサーバー側からもSNMPの情報を取得しに行くことができる。

とかにも、Zabbix Proxyやほかのコンポーネントも存在するが、ややこしくなるのでここではサーバーとエージェントのみを説明しておく。

様々な用語があるが、以下のものを押さえておけばよい。

  • ホスト:監視対象の機器(必ずどこかのホストグループに所属する)
  • アイテム:収集する監視データ
  • アクション:メール通知や、サービス再起動などの障害発生時の対応
  • トリガー:障害発生、解消の判断をする閾値などの基準
  • テンプレート:アイテム、アクション、トリガーなどを種類別に集めたもの

詳しくは、Zabbixの公式サイトが英語だけでなく日本語で公開されており、ドキュメントも豊富に準備されいている。そのため、公式のドキュメントをぜひ参照してほしい。

https://www.zabbix.com/jp

監視の種類

監視の方法や種類には様々なものがあるが、ここでは概要を理解するために標準的なものだけを簡単に説明する。

エージェント監視

エージェントを仕込んでおいておこなう監視で、サーバーの中から監視を行う。

リソース監視

CPU使用率、メモリ使用量、ネットワークトラフィック、ファイルシステム(ストレージの空き領域)などを監視する。

プロセス/サービス監視

データベースのサービスが止まっていないかや、アプリケーションのプロセスが止まらずに上がっているのかなどを監視する。

ポート監視

Webの80番や443番が空いているのか、SIPの5060番が空いているのかを監視する。ポートが閉まっていたり、応答を返さない場合はサービスが上がっていても何らかの問題が発生している可能性がある。

ログ監視

増え続けるログの中身を監視し、「ERROR」などの指定した文字がないかを監視する。

エージェントレス監視

ICMP監視

PINGを使って、ネットワークの疎通状態に問題がないかを定期的に監視する。ただ通信しているかだけでなく、遅延が発生していないかなど様々な情報を監視できる。

SNMP監視

SNMPプロトコルを使って、SNMP対応機器の監視を行う。トラップといわれる障害発生時に機器が投げてくるものや、サーバー側からOIDを指定して情報を取りに行く(ポーリング)方法がある。

障害通知の方法

メール通知

担当者が気付けるようにメールを送信する。障害発生、障害解消などを通知することができる。

コマンド実行

サーバーのプロセスの再起動などを実施できる。さらに、IP-PBXと連携しておけば電話を掛けたり、SMSを送信したりすることもできる。データセンターなどではパトライトを点灯させるシステムと連携させたりすることもある。

Webhook

外部アプリと連携させることができる。有名なところでは、MicrosoftTeamsやSlackに通知を送ったり、GitlabやRedmineにIssueを投稿したりすることもできる。

可視化の方法

グラフ

折れ線グラフや円グラフなどで、現在の情報やデータ推移を可視化する。期間で絞り込んでクローズアップしたり、年や月での推移をみることもできる。

ダッシュボード

機器のリストや、現在の監視状態などを並び替えて、自分が普段から見たい形で並び替えて、自分だけのダッシュボードを作れる。

ネットワークマップ

あまり使われないが、画像を読み込んで機器のつながりなどを図にして状態を視覚化する機能。

インストール方法

バージョンとサポート期間

通常版とLTS(Long Term Support)版が存在する。

新しい機能を試すにはLTSの記載がない通常版を使用するとよい。しかし、半年ごとにマイナーバージョンが変わってしまい、長期間のサポートもされない。

業務使用するならLTSをお勧めする。LTSは1年半ごとのリリースが行われるが、有償でフルサポートが3年間、その後リミテッドサポートが2年間設定されており、リリースから5年間は十分なサポートが受けられる。さらに2年間の延長サポートの提供されるため、企業仕様に向いているといえる。

サポート契約をしなくても、5年間はバグフィックスが提供される。また、困ったことがあれば活発に活動しているコミュニティに相談すれば、たいていの問題は解決できる。

https://www.zabbix.com/jp/life_cycle_and_release_policy

環境に合わせたインストール方法のサポート

Zabbixは公式ページで様々なOSにどのコンポーネントをインストールするのか選べば、インストール方法が詳しく説明される。

https://www.zabbix.com/jp

トップページの右上のダウンロードボタンをクリックした先でメニューが準備されている。

アプライアンス(検証用)のisoファイルが準備されている。こちらは、LinuxにZabbixServer、ZabbixAgent、Web管理画面、データベースがインストールされるパッケージで、インストーラーに従って進めばすぐに使えるものを準備できる。しかし、ちょっと使いづらいし、うまく動かないこともあるので、基本的にはLinuxを準備してインストールすることをお勧めする。

Dockerでも準備されているが、こちらは友人のサイトですでに記事があるのでそちらを参照してほしい。

https://cedarvalley.info/docker-zabbix/

OSとデータベースの選定

基本的な選定方法は、本家のインストール要件を参照するとよい。残念ながら、2024年11月現在では、7.0LTSのドキュメントは日本語では準備が完了していない。

https://www.zabbix.com/documentation/current/en/manual/installation/requirements

OSは基本的には、RedHat系をお勧めする。個人的にはRockyLinuxを使っている。ちなみに、最新のアプライアンス版ではAlmaLinuxを使っているようだ。

次に、どのくらいの監視対象とアイテムがあるかで3種類のサーバー要件の中から選ぶとよい。大規模環境用の場合はPostgreSQL(データベースをスケールする前提)がよい。しかし、中規模以下または小規模か検証環境であればMySQLまたはMariaDBで構わない。

本家のインストール方法はMySQLかPostgreSQLしか選べないが、MariaDBはmysqlコマンドを使用できる。

Rockyは9から推奨のMariaDB10.5を採用しているため、できればRockyLinux8ではなく、RockyLinux9をお勧めする。MySQLで使用したい場合はOracleLinux9であれば、MySQL8.0を標準採用している。

データベースを入れ替えても構わないが、標準で使える安心感は大きいので、データベースに合わせてOSを選択するのもよいかと思う。

データベースのインストール

OSはRockyLinux9をベースに、MariaDB10.5に、Zabbix7.0LTSの条件でインストールを進める。OSはインストール済みということにする。IPアドレスはスタティックにすることをお勧めする。

なお、SELinuxはあらかじめOFFにしておくこと。

MariaDB10.5が今回はOSの標準サポートなので、そのままインストールする。

$ sudo dnf install -y mariadb-server

データベースのセキュアセットアップをしておく。rootユーザーのパスワードは必ず設定しておく。参考までに今回のオプションを記載しておく。

$ sudo mysql_secure_installation

Enter current password for root (enter for none):[rootユーザー用のパスワードを入力]

You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] n

You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] n

Remove anonymous users? [Y/n] y

Disallow root login remotely? [Y/n] y

Remove test database and access to it? [Y/n] y

Reload privilege tables now? [Y/n] y

Zabbix本体のインストール

今回のインストールの参考にしたのは公式ページになる。

公式マニュアルは以下のものを参照

https://www.zabbix.com/documentation/7.0/en

まずは、リポジトリの設定

$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/7.0/rocky/9/x86_64/zabbix-release-latest.el9.noarch.rpm
$ sudo dnf clean all

本体をインストール

$ sudo dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent

次にデータベースのセットアップを行う。Zabbix用のデータベースは「zabbix」だが、パスワードも「zabbix」にしておく。

$ mysql -uroot -p

MariaDB [(none)]> create database zabbix character set utf8mb4 collate utf8mb4_bin;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.160 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
Query OK, 0 rows affected (0.094 sec)

MariaDB [(none)]> set global log_bin_trust_function_creators = 1;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> quit;
Bye

次に、rootユーザーになって、データベース内の構造と初期データを流し込む。

# zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

この時に聞かれるパスワードは、先ほど設定したZabbix用のデータベースのパスワードだ。

CPUが4コア、メモリが8GBのサーバーで、流し込みに20分から30分かかる。動いていないように見えるが、トランザクションが組まれて、内部でゆっくり動いているので気長に待つ。

データベースの設定を変更する。

# sudo mysql -uroot -p

MariaDB [(none)]> set global log_bin_trust_function_creators = 0;
Query OK, 0 rows affected (0.000 sec)

Zabbixの設定ファイルを変更して、データベース用パスワードを設定する。

「/etc/zabbix/zabbix_server.conf」

DBPassword=zabbix

Nginxの設定ファイルを変更する。

「/etc/nginx/conf.d/zabbix.conf」

以下の2行がコメントになっているので、コメントを外す。

listen 8080;
server_name example.com;

サービスを起動する

# systemctl restart zabbix-server zabbix-agent nginx php-fpm
# systemctl enable zabbix-server zabbix-agent nginx 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/nginx.service → /usr/lib/systemd/system/nginx.service.
Created symlink /etc/systemd/system/multi-user.target.wants/php-fpm.service → /usr/lib/systemd/system/php-fpm.service.

ファイヤーウォールに穴をあける

# sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens18
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 8080/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

ブラウザからアクセスしてみる。

もし「192.168.1.82」がZabbixのスタティックIPアドレスであれば、 http://192.168.1.100:8080 となる。

アクセスすると「setup.php」に遷移して、インストール画面が表示されるはずだ。

この時点では英語しかないので、日本語に対応させる。

日本語パッケージがないか確認し、インストールする。

# dnf install zabbix-web-japanese

表示しなおすと、日本語が選択できるようになった。

セットアップを日本語で進める。

全部OKになっていることを確認する。

データベースの接続設定を入れて次へ進む。この時接続チェックが走る。

追加の設定を行う。

確認して問題なければ次へ進む。

以上でインストールは完了

ログイン画面が表示されたので、初期認証情報のAdmin/zabbixでログインする。

ログインできた。

サーバー用のポートも忘れずに開けておく。

[root@zabbix-np ~]# firewall-cmd --zone=public --add-port=10051/tcp --permanent
success
[root@zabbix-np ~]# firewall-cmd --reload
success
[root@zabbix-np ~]# firewall-cmd --zone=public --list-ports
8080/tcp 10051/tcp

追加のツールも念のため入れておく。

# dnf install zabbix-get

お疲れさまでした。以上でインストールは完了です。

総括

本家のドキュメントは詳しいのだが、Zabbix初心者には少し難しいように思う。

また、Amazonなどで売られているZabbixの説明本も4.0くらいの古いものしか見当たらない。6.0に対応した本は超初心者向けで感想を見ると評価がかなり低い。

今回はZabbix7.0LSTをインストールしたが、次はオートディスカバリーでホストを自動登録したり、監視項目を設定したりしてみようと思う。

こちらの記事が、これからZabbixを始める人たちの参考になれば幸いだ。