先日「Zabbix」の新版「同 5.0」をリリースしたと発表したとありましたね。サーバ管理ツールはなくてはならないツールですので早速簡単に導入の手順を記載してみます。今更ですが、Zabbixとは、Linux / Windows / 各種商用UNIX / SNMP対応ネットワーク機器と幅広く対応したオープンソース・ソフトウェア(OSS)の統合監視ツールです。今回はCentOS8を使用してZabbix4.4を構築し、主にSNMPを用いて機器を監視する方法を掲載します。
手順では、初めての方でも簡単に構築できるように出来るだけ手順を簡素化して基本パッケージのみで構成していますよ。
CentOS8の準備
まずはCentOS8のマシンを用意します。
CentOS8からはインストールのデフォルトセット(ソフトウェアの選択)はGUIとなっていますが、Zabbix-Serverのコンソールは別マシンからアクセスすることを前提としますので「最小限のインストール」とします。
インストールが完了したら、updateを実行して最新のパッケージに更新しておきます。
Zabbixパッケージのインストール
Zabbixをインストールするためには事前に httpd / php / mysql-server がインストールされている必要があります。
1 |
# dnf –y install httpd php mysql-server |
パッケージがインストールされたら、続いてZabbix本体と関連パッケージをインストールします。
これらのパッケージはZABBIX社よりレポジトリが用意されていますので、まずはレポジトリをインストールします。
1 |
# dnf -y install https://repo.zabbix.com/zabbix/4.4/rhel/8/x86_64/zabbix-release-4.4-1.el8.noarch.rpm |
レポジトリをインストールしたら、zabbix-server-mysql / zabbix-web-mysql / zabbix-web-japanese / zabbix-apache-conf の4つのパッケージをインストールします。
1 |
# dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-apache-conf |
これで全パッケージのインストールは完了です。
Zabbix構築の事前設定
まずはZabbixで使用するデータベースを作成するためMySQLを起動してOS起動時に自動起動するよう設定します。
1 2 |
# systemctl start mysqld # systemctl enable mysqld |
MySQLが起動したら、最初にmysql_secure_installationを実行してMySQLの初期設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# mysql_secure_installation Press y|Y for Yes, any other key for No: y ←パスワードを変更する Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 ←LOWにするため0 New password:(設定したいrootパスワードを入力) Re-enter new password:(設定したいrootパスワードを再入力) Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y ←入力したパスワードで確定 Remove anonymous users? (Press y|Y for Yes, any other key for No) : y ←匿名ユーザー削除 Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y ←rootでのリモートログイン停止 Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y ←テスト用のデータベース削除 Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y ←設定を反映 |
引き続きMySQLにrootでログインしてZabbix用のユーザーとデータベースを作成します。
1 2 3 4 5 6 7 8 9 |
# mysql –u root –p <ENTER PASSWORD>にて前述で設定したrootパスワード入力 create database zabbix character set utf8 collate utf8_bin; ←zabbixという名前のデータベースを文字コードUTF8、Collateをutf8_binにて作成 create user zabbix@localhost identified by '<Zabbixユーザー用パスワード>'; ←zabbix@localhostというユーザーをパスワードを付けて作成 grant all on zabbix.* to zabbix@localhost; ←作成したzabbixデータベースに対してzabbix@localhostにアクセス権を追加 quit; ←MySQLからログアウト |
続いてZabbix-Serverに関連する設定ファイルに修正を加えます。
一つ目は/etc/php-fpm.d/zabbix.confファイルです。
エディタで/etc/php-fpm.d/zabbiz.confを開き、”php_value[date.timezone] = “ を ”Asia/Tokyo” に変更します。
1 2 3 |
# vi /etc/php-fpm.d/zabbix.conf php_value[date.timezone] = Asia/Tokyo |
二つ目は/etc/zabbix/zabbix-server.confファイルです。
エディタで/etc/zabbix/zabbix-server.confを開き、”DBPassword=”の部分にzabbix@localhostのパスワードを記述します。
1 2 3 |
# vi /etc/zabbix/zabbix_server.conf DBPassword=<zabbix@localhostのパスワード |
Zabbix用SQLスクリプトを使用してzabbixデータベースにテーブルを作成します。
1 |
# zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -u zabbix -p zabbix<ENTER PASSWORD>にてzabbix@localhostのパスワード入力 |
テーブル作成スクリプトが正常終了すればZabbixの準備は完了です。
Zabbix-Serverへのアクセスはブラウザを通じて行いますので、Firewallに対してhttp通信ポートを開放しておきます。
1 2 3 |
# firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd –-reload |
httpd、php-fpm、zabbix-serverのそれぞれのサービスを起動して自動起動に設定しておきます。
1 2 3 4 5 6 7 8 9 10 11 |
# systemctl start httpd # systemctl enable httpd # systemctl start php-fpm # systemctl enable php-fpm # systemctl start zabbix-server # systemctl enable zabbix-server |
Zabbixの構築
パソコンでブラウザを起動してhttp://<Zabbix-ServerのIPアドレス>/zabbix/ にアクセスします。Zabbixのインストール初期画面が表示されますので メッセージを確認しながら<NextStep>をクリックしていきます。
途中でデータベースアクセス用のユーザー名とパスワードを入力する場所があります。ユーザー名はzabbix、パスワードは設定した<パスワード>を入力してください。
インストールが正常に終了するとZabbix-Serverコンソールへのログイン画面が表示されます。コンソールログインの初期はAdmin/zabbixです。大文字小文字の区別がありますのでご注意ください。
ログインしたら最初に画面右上のユーザーマーク(人型の影)をクリックして、設定の中にロケール変更がありますからJapaneseを選択すればコンソールが日本語に切り替わります。
Zabbix-Serverの運用①-SNMPを用いた機器情報収集
Zabbixは専用のAgent(エージェント)を対象機器にインストールすることで、その機器の詳細な状態情報を収集し管理することができます。しかしAgentはLinux/Windowsなど所謂サーバー用途のOSにはインストールできますが、インテリジェントスイッチなどの通信機器にはインストールできません。そこで最初に掲載したとおりSNMPを実装した機器類であればある程度の状態情報を収集可能なので、まずは最初にSNMPを利用した運用について説明します。
今回例としてターゲットにするのはWindows Serverです。まずはターゲットとするWindows ServerにSNMPサービスを導入します。Windows Serverのサーバーマネージャーの「管理」から「役割と機能の追加」を選択してウィザードを起動します。「機能の追加」ページまで進めて、「機能」の中の「SNMPサービス」を選択し、追加します。
SNMPサービスが追加されると自動的に「セキュリティが強化されたWindows Defenderファイアウォール」内のSNMPサービスに関連する受信ポート(161番ポート)が許可されます。サーバーマネージャーの「ツール」から「サービス」を選択して「SNMPサービス」を開きます。
「受け付けるコミュニティ名」に対して「追加」をクリックしてコミュニティ名を登録します。ここでは一応「public」にしておきますが、一般的には「public」を用いることが多いように見受けますが別に名称はなんでもOKです。
また「すべてのホストからSNMPパケットを受け付ける」に変更してもいいのかもしれませんが、どこからでもパケットを受け付けるというのはセキュリティ上好ましくないので、Zabbix-ServerのIPアドレスからのみ受け付けることにしてIPを追加します。
これでWindows Server側のSNMP設定は完了です。Zabbix-Serverコンソールに戻り、監視対象を追加します。
コンソール上部のメニューから「設定」「ホスト」を選択し、画面右上にある「ホストの作成」をクリックします。
新規ホスト登録画面の中で*の付いた項目は必須です。「ホスト名」は適当に、「グループ」は「選択」から「Templates/Operating Sytems」を選択します。「エージェントのインターフェース」欄の設定は標準で設定されているものを「削除」します。今回エージェントは使用していません。逆に「SNMPインターフェース」を「追加」し、ターゲットとなるWindows ServerのIPアドレスを入力します。
続いて「テンプレート」を選択して「新規テンプレートをリンク」にて「追加」をクリックし、「Templates OS Windows SNMPv2」を選択します。
続いて「マクロ」を選択して「マクロ」に「{$SNMP_COMMUNITY}」を入力し、「値」にWindows ServerのSNMPサービスに登録したコミュニティ名を入力して、最後に「追加」をクリックしてホストを登録します。
追加されたホストが画面下部に表示されます。このホスト名をクリックして更に修正を加えます。
メニューの「ディスカバリルール」を選択すると追加したテンプレート(Templates OS Windows SNMPv2)によって登録された複数のルールが表示されます。この「監視間隔」をよくみると「1h」となっています。Zabbix-Serverのデフォルトテンプレートは情報収集するための間隔が1時間となっています。このままでは1時間おきの状態しか収集しませんので、この監視間隔を1m(1分)から5m(5分)程度に変更します。ここでは例として「Memory Discovery」の監視間隔を1mに変更します。
「名前」欄の「Memory Discovery」をクリックしてプロパティを開き、「監視間隔」を1hから1mに変更して「更新」をクリックします。
同様に他のディスカバリルールも1mに変更します。この例では3つのルール(メモリ、CPU、ストレージ)をすべて1mに変更しました。「ZABBIX」マークをクリックすると最初のダッシュボード画面に戻ります。
ちょっと時間を置いてから「グラフ」メニューを開き、「ホスト」から登録したホストを選択し、「グラフ」からPhisical Memory」を選択するとメモリ使用量のグラフが表示されます。
他にもDiskSpageUsage(ディスク使用容量)などのグラフが表示されることを確認します。
これでWindows ServerのSNMPを使用した監視が登録できました。Windowsの場合SNMPで収集できる情報はこの程度ですが、ServerにAgentをインストールして情報収集すればかなりの情報を収集することができます。が…個人的にはサーバーの種類にも依りますがCPU使用率、メモリ使用率、通信トラフィック量、ディスク使用容量あたりの情報が収集できれば大抵は十分ではないかと思います。もしサーバー内部の温度など他にも詳細が必要なら(マザーボードに温度センサーが付いていることが前提ですが)Agentをインストールして(その場合ファイアウォールで10051番ポートを許可する必要があります)ホストの作成時にエージェントのインターフェースを設定すればより詳細な情報を収集可能です。
サーバーやパソコンのようにAgentをインストールできる機器はAgentでもいいのですが、通信機器の場合はそもそもAgentがインストールできませんのでSNMPを使用するしかありません。
ZabbixではテンプレートとしてCISCOやBrocade、HPE、Juniperなど各社のMIB情報が用意されています。もし製品が一覧に無い場合は一般的な通信機器のSNMPv2のテンプレートもありますのでそれらを試して必要な情報を収集してみてください。
なお、通信機器のSNMPコミュニティ名の設定方法については各社のページにてご確認ください。
障害や警告の対処
監視対象を登録して監視を開始するとなんらかのトラブルが発生した際にはコンソール上にメッセージが表示されます。
実はこのZabbix-Serverでも最初から1件トラブルが表示されています。それはZabbix-Server自身のアラートです。これは「Zabbix-Server」を構築する際にデフォルトで自分自身をAgent管理するよう組み込まれているためです。そのため多くのZabbix関連の構築手順を記した公開ページではZabbix構築時にAgent2のパッケージも自分自身にインストールして稼働させています。
本資料ではそもそもAgentを使用しないでZabbixを運用することを前提に書いています。そのためZabbix-ServerにはAgentをインストールしていませんので当然ながら自身の情報を収集できないために最初からアラートが表示されているのです。そこでZabbix-Server自身の監視は対象から削除してしまいましょう。
コンソールメニューの「設定」「ホスト」を開き、自分自身であるZabbix-serverのチェックボックスをONにして、「削除」ボタンをクリックして削除してしまいましょう。これでダッシュボードの障害通知からZabbix-Serverのアラートが消去します。
それ以外の障害・警告メッセージは実際にターゲット機器に起きているトラブルの可能性もありますが、本当にトラブルなのか、テンプレートで読み込まれた各ディスカバリルールがうまくマッチしていない可能性もあります。
特に通信機器を監視する場合、Zabbixが用意している各製品別のテンプレート情報に若干の相違があって最初から情報収集できないことや障害として警告を出力するしきい値(例えばCPU使用率が85%を超えると警告を出す)の設定が問題でアラートが表示されてしまうということもあります。
警告のしきい値はデフォルトで用意されています。これを変更することでアラートを出さないようにすることもできますが、そもそもその警告が報告として必要か(監視対象にすべきかどうか)を検討してみるのも解決のひとつかと思います。