●インストール前の準備
CentOS 8(または、CentOS Stream 8)の場合、「●PacemakerでZabbix-Serverを制御する(DRBD利用)」を参照し、MariaDBを設定してください。
MariaDBのインストール
参考URL:Zabbix 5.4 インストールメモ(CentOS Stream 8)
ZABBIXの監視記録を保管するMariaDBサーバとMariaDB用開発パッケージをインストールします。
rootユーザでログインして次のコマンドを実行します。
●Zabbix 5.4のインストール
Zabbix 5.4をインストールします。
●Zabbix 5.4のデータベース設定(CentOS Stream 8)
MariaDBにログインし、Zabbix用のデータベース「zabbix」と、ユーザ「zabbix」を作成します。
ZABBIX用データベースの設定(CentOS 6、7)
ZABBIX用のデータベースを作成します。
ApacheとPHPのインストール
ZABBIXサーバのWebインターフェイスを利用できるようにするために、ApacheとPHPをインストールします。
●Zabbixエージェントの起動及び動作確認(CentOS Stream 8)
Zabbixエージェントを起動してます。
●Firewalldの設定
Firewallを導入済みの場合、下記のサービス(または、ポート)を開けるようにします。
Zabbix 5.4インストール時の初期設定画面はこちらです。
●開発ツールのインストール(ソースからインストールする場合)
※必要に応じて・・・
ソースコードをコンパイルしてビルドするために必要な、Cコンパイラなどの開発ツールをインストールします。yumのgroupinstallコマンドで「Development Tools」グループをインストールすると、必要な開発ツールを一括してインストールできます。
●ZABBIXの機能を利用するために必要なパッケージのインストール(ソースからインストールする場合)
ZABBIXサーバが有している監視機能をすべて利用するためには、以下のソフトウェアやライブラリが必要です。
表1 ZABBIXの機能を利用するために必要なパッケージ
fpingとiksemelライブラリに関しては、日本のZABBIXコミュニティである「ZABBIX-JP」でパッケージが公開されています。そこで、ZABBIX-JPのリポジトリをyumコマンドで利用できるように設定ファイルをインストールするか、直接yumコマンドでインストールします。
●ZABBIXサーバのビルドとインストール
ZABBIX 1.6.7のソースコードをダウンロードして展開します。
表2 ZABBIXのconfigureオプション
●ZABBIXサーバのyumコマンドによるインストール
データベースにMySQLを使用することを前提とし、下記パッケージをインストールします。
●データベースへの初期データのインポート(ソースからのインストールの場合)
ZABBIXサーバが利用するデータベースに初期データをインポートします。以下のコマンドを実行し、zabbixデータベースにスキーマと初期データをインポートします。
●データベースへの初期データのインポート(rpmパッケージからのインストールの場合)
ZABBIXサーバが利用するデータベースに初期データをインポートします。以下のコマンドを実行し、zabbixデータベースにスキーマと初期データをインポートします。
●ユーザ追加と設定ファイルのインストール
続いて、ユーザの追加と設定ファイルのインストールを行います。
OSのアカウントにZABBIXサーバを動作させるためのユーザとグループ「zabbix」を作成します。ZABBIXのサーバを稼働させるためだけに使用するユーザであるため、以下のコマンドにより、セキュリティを考慮してログインシェルなどは与えないように設定しています(rpmからインストールした場合作業不要。)。
●Webインターフェイスのインストール
ZABBIXのWebインターフェイスのPHPプログラムは、ソースファイルのfrontend/php以下に置かれています。PHPプログラム一式を、Apacheサーバからアクセスできる場所にコピーします。下記の例では/var/www/html/zabbixディレクトリを作成し、その下にコピーを行います(rpmからインストールした場合作業不要)。
●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 ZABBIXのWebインターフェイス
/var/www/html/zabbix/confのパーミッション変更(ソースからインストールした場合)
/var/www/html/zabbix/conf/zabbix.conf.phpに書き込みができるように、直上のディレクトリに書き込み権限を付与します。
/etc/zabbix/webのパーミッション変更(rpmパッケージからインストールした場合)
/etc/zabbix/web/zabbix.conf.phpに書き込みができるように、直上のディレクトリに書き込み権限を付与します。
Webインターフェイスのインストーラを実行
ZABBIXのWebインターフェイスは、設定が存在しない状態でアクセスするとインストーラが起動するようになっています。ZABBIXサーバが起動しているマシン上のブラウザで、以下のURLを開きます。
画面2 Introduction画面
Nextをクリックします。
画面3 Introduction画面
「I agree」にチェックを入れてNextをクリックします。
画面4 Check of pre-requisites画面
すべてOKになっていることを確認してNextをクリックします。1つでもOKになっていない場合は、該当するPHP関連パッケージがインストールされているか確認してください。
画面5 Configure DB connection画面
先に設定したMySQLの設定を入力し「Test connection」をクリックします。表示がOKになればNextをクリックします。
画面6 ZABBIX Server details画面
WebインターフェイスがZABBIXサーバの動作を確認するための設定を行います。ZABBIXサーバのホスト名とポート番号を入力して、Nextをクリックします。
画面7 Pre-Installation Summary画面
確認のために入力した設定が表示されるため、問題がなければNextをクリックします。
画面8 Install画面
設定ファイルのインストールを行います。
ここで、「Configuration file : OK」の文字が表示されれば、設定ファイルのインストールは完了です。以下のコマンドを実行してディレクトリと設定ファイルに適切な所有者と権限を設定してください。
画面9 Finish画面でFinishをクリック
Nextをクリックします。以下のログイン画面が表示されれば、Webインターフェイスのインストールは終了です。
画面10 ログイン画面
Webインターフェイスのデフォルトのアカウント
ZABBIX Webインターフェイスのデフォルトのアカウントは、次のように設定されています。
●ZABBIXエージェントのビルドとインストール
ZABBIXエージェントをコンパイル、インストールする手順を解説します。ZABBIXエージェントのすべての機能を有効にするため、次のオプションを指定してconfigureを実行します。
表3 ZABBIXエージェントのconfigureオプション
●ZABBIXエージェントの設定方法(ソースからインストールした場合)
ZABBIXエージェントの設定ファイルのサンプルファイルは、ソースファイルのmisc/confディレクトリに置かれています。/etc/zabbixディレクトリを作成し、ファイルをコピーします。
●ZABBIXエージェントのインストール
Rocky Linux 9にZABBIXエージェント6.4をインストールする方法
サーバにEPELリポジトリをインストールしている場合、同リポジトリ提供のパッケージとZabbixリポジトリのパッケージが競合しないように事前に設定が必要です。
変更内容は以下の通りです。zabbixから始まるパッケージをepelから取得しないようにします。
viなどのテキストエディタで、Yumリポジトリの設定ファイルを開きます。
CentOS Stream 8にZABBIXエージェント5.4をインストールする方法
zabbix-agentをインストールします。
●ZABBIXエージェントの設定方法(rpmパッケージからインストールした場合)
下記のようにします。
{AllowRoot=1」によりzabbix-agentをroot権限で動作させることが出来るようになります。
これはログ監視やディスク監視をする場合、root権限で読み取る場合の設定です。
ログ監視やディスク監視をroot権限で読み取る必要がない場合(監視対象ファイルのグループをzabbixに変更する等)、設定不要です。
各ログやディレクトリにzabbixで読み取れるように権限を変更することでも対応可能ですが、その数が多い場合、作業数が多くなり面倒となります。
このためにzabbix-agentをroot権限で動作させること容易に監視できるようになります。
※ただし、zabbixにroot権限を付与する形になりますので、セキュリティ上危険になることを理解する必要があります。
●ZABBIXの設定
「●インストール前の準備」「●ZABBIXサーバのビルドとインストール」ではZABBIXのインストール方法を解説しました。今回は実際の監視を行う際に必要となる基本的な設定項目であるホストの登録、アイテムの設定、トリガーの設定、グラフの設定について解説していきます。
ZABBIXでは、監視対象のマシンをホストと呼び、監視対象のマシンのCPU使用率やメモリ使用率などの個別の監視項目をアイテムと呼んでいます。そして、各アイテムの情報に基づいて、どのような状態になっている場合に警告や障害と判断するかを定義するものがトリガーになります。さらに、各アイテムの数値を基にグラフを描画することができます。
まず今回の設定を行う前に、前回設定したZABBIXサーバとZABBIXエージェントのサービスが起動していることを確認しておきましょう。起動していない場合には、以下のコマンドで起動してください。
●Webインターフェイスの言語設定
Webインターフェイスの言語設定を日本語に変更します。WebインターフェイスにAdminユーザとしてログインした後、[Administration]-[Users]の画面を開き、[Admin]ユーザを選択します。
画面11 [Admin]ユーザを選択
[Language]の設定を[Japanese(JP)]に設定し、[save]を選択すると、画面が日本語表示になります。
画面12 [Language]の設定を[Japanese(JP)]に設定
または、adminでログイン後、右上の[Profile]を選択して、言語を日本語に変更すると日本語表示になります。
●ホストの登録
[設定]-[ホスト]を選択すると、初期設定では、すでに監視対象としてZABBIXサーバ自身が「ZABBIX Server」というホスト名で登録されています。ただし初期設定では[ステータス]が[無効]になっているので、[無効]をクリックし[有効]に変更してください。
画面13 [ステータス]を[有効]に変更する
次に、新規にほかのホストを登録しますが、監視対象ホストには事前にZABBIXエージェントがインストールされていることとします。ここでは、各ホストのIPアドレスが以下のように設定されていると仮定します。
なお、ZABBIXエージェントをインストールしていないホストを登録することも可能ですが、監視可能な項目が限られるため、ここではZABBIXエージェントをインストールしたホストを登録します。各ホストとも、 zabbix_agentd.confのServerにはZABBIXサーバのIPアドレスである192.168.0.45を設定しておいてください。
IPv4アドレスで監視するためには、監視対象ホストの zabbix_agentd.confで「ListenIP=」を記述して、IPv4アドレスを使用することを明示的に指定しておく必要があります。今回はIPv4のアドレスで監視設定をしていくため、監視対象のLinuxホスト上(IPアドレス:192.168.0.44)の zabbix_agentd.confにて、「ListenIP=192.168.0.44」を設定してください。
画面14 [設定]-[ホスト]の画面から[ホストの作成]をクリックする
Linuxホストを登録する場合
画面に従い、以下の項目を設定し[保存]をクリックします。
表4 Linuxホストを登録する際の登録項目
画面15 各項目を設定し、[保存]をクリック
Windowsホストを登録する場合
画面に従い、以下の項目を設定し[保存]をクリックします。
表5 Windowsホストを登録する際の登録項目
画面16 Linuxホストの場合と同様、各項目を設定し、[保存]をクリック
ホスト登録完了後に、[設定]-[ホスト]の画面で[グループ]を[全て]に設定すると、centos-32-zbxとwinxp-zbxが登録されていることが確認できます。
画面17 [設定]-[ホスト]の画面で登録されたホストを確認
●アイテムの設定
参考URL:第 2 回 Zabbix のさまざまな監視機能を試してみよう
ホストの登録が完了したので、各ホストでアイテムを設定していきます。最初にも説明しましたが、ZABBIXではCPU使用率やメモリ使用率などの個別の監視項目を「アイテム」と呼んでいます。
[設定]-[アイテム]の画面で[ホスト]として[centos-32-zbx]を選択します。この画面でLinuxマシンcentos-32-zbxに登録されているアイテムの確認および登録ができるようになります。現時点ではアイテムは何も登録されていない状態になっています。
画面18 アイテムが何も登録されていない状態
アイテムの登録
今回は例として、ディスクデバイス「hda」への読み込み頻度と書き込み頻度を調べるためのアイテム[hda device read]と[hda device write]を追加してみます。アイテム登録時には、マニュアルの[4.10 Items]から、登録するキーの情報を参照しながら設定することをお勧めします。
図1 アイテムを登録することにより、どのマシンに対しどのような監視をするかを設定できる
[設定]-[アイテム]の画面で[アイテムの作成]ボタンをクリックします。画面に従い、以下の項目を設定し[保存]をクリックします。
表5 アイテム登録時の設定項目
画面19 表5の各項目を設定し、[保存]をクリック
同様に、以下を設定し[保存]をクリックします。
表6 アイテム[hda device write]の設定項目
画面20 表6の各項目を設定し、[保存]をクリック
登録完了後、アイテムの値が取得できていることを確認します。[監視データ]-[最新データ]の画面で[ホスト]として[centos-32-zbx]を選択した状態で、[その他]を開き、値が取得できていることを確認します。
画面21 アイテムの値が取得できていることを確認
●グラフの登録
アイテムのデータ型が数値の場合、アイテムを登録すると特に設定を行わなくともグラフを表示できるようになります。[監視データ]-[最新データ]から[その他]を開き、[グラフ]をクリックすることで、アイテム[hda device write]のグラフを表示することができます。
画面22 [監視データ]-[最新データ]から[その他]を開き、[グラフ]をクリックする
ZABBIXでは、このように自動的に作成されるグラフのほかに、複数の監視項目を組み合わせたグラフを作成できます。グラフの種類も折れ線グラフのほか、積算グラフ、円グラフ、分解円グラフといった複数のグラフを使用できます。
今回は「アイテムの登録」で作成した、アイテム[hda device read]、アイテム[hda device write]を使用して、2つのデータを組み合わせたグラフを作成します。[設定]-[グラフ]から[ホスト]として[centos-32-zbx]を選んだ状態で[グラフの作成]をクリックします。以下を設定し[保存]をクリックして、グラフ[hda device read/write]を登録します。
画面23 [centos-32-zbx: hda device write]を追加
画面24 [centos-32-zbx: hda device read]を追加
画面25 [追加]ボタンからアイテムを設定
グラフ登録後、[監視データ]-[グラフ]の画面で[ホスト]として[centos-32-zbx]を選択した状態で、[グラフ]として[hda device read/write]を選択すると、登録したグラフを表示することが可能になります。
画面26 [グラフ]として[hda device read/write]を選択し、登録したグラフを表示
グラフのズームアップ、移動
グラフをマウスでドラッグすると、表示する時間帯を変更できます。ただし、最小の表示幅は1時間になります。
画面27 マウスでドラッグすれば、表示する時間帯を変更できる
また、グラフ下部のバーをずらせば、時間軸を前後に移動することが可能です。
画面28 グラフ下部のバーをずらすと、時間軸を前後に移動できる
●トリガーの登録
トリガーとは、各アイテムの情報に基づいて、どのような状態になっている場合に警告や障害と判断するかを定義するものです。今回は「アイテムの登録」で作成した、アイテム[hda device read]、アイテム[hda device write]を使用してトリガーを作成します。
図2 トリガーを登録することにより、監視の結果得られる取得値と設定したトリガーの条件から、どのような状況を警告や障害の発生とするかを定義できる
[設定]-[トリガー]の画面から[ホスト]として[centos-32-zbx]を選んだ状態で[トリガーの作成]をクリックします。hdaへの読み込み負荷が上がった際に警告を発生させるため、以下設定を入力し、トリガー[High read access to hda device]を登録します。
画面29 トリガーの設定項目を選択する
画面30 トリガー[High read access to hda device]を登録する
同様に、hdaへの書き込み負荷が上がった際に警告を発生させるため、以下の設定を入力し、トリガー[High write access to hda device]を登録します。なお、ここでは警告を発生させる値Nを「20000」にしていますが、どんな値を設定するかは環境ごとに異なります。なお、一般的には1セクタのサイズは512バイトになっており、今回の環境では「秒間約10MBytes以上の書き込みがあった場合」に警告になります。
画面31 警告を発生させる値Nを「20000」に設定
トリガー設定後に[監視データ]-[トリガー]を見れば、書き込み負荷を掛けると障害ステータスに変化することを確認できます。
今回の環境では、以下のようなコマンドで確認が行えます。ただし、このコマンドは/root/zeroに1GBのサイズのファイルを作成するものなので、空き容量に気を付けて実行してください。また実行後は/root/zeroのファイルを削除してください。なお、負荷の上昇の仕方は環境により異なるので、場合によってはステータスが変化しないかもしれません。
画面32 負荷を掛けるとステータスが「障害」に変化する
なお、トリガーの設定で「障害イベントを継続して生成」にチェックが入ったままの場合、アイテムで設定した更新間隔でイベントが実行されることになりますので注意してください。
以上のとおり、ホストの登録を行い、アイテム、グラフ、トリガーを設定することにより、ZABBIXを利用した基本的な監視設定ができるようになります。
下記はZabbix 5.0となります(20210824追記)。
参考URL:2. トリガー条件式(復旧条件)
トリガー設定項目に「正常イベントの生成」という設定項目があります。トリガーを解除する条件の指定方法の設定です。
参考URL:使ってみよう Zabbix⑤ : トリガー設定編
トリガー設定項目に「障害イベント生成モード」という設定項目があります。「障害」画面で「障害」と表示する条件の指定方法の設定です。
●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を環境に合わせて修正します。
コマンドプロンプトでC:\>zabbix_agentd.exe --installと入力します。
「サーバーマネージャー」->「ツール」->「サービス」を開くと、サービスが並んでいる中に「Zabbix Agent」という項目があるはずですので、これを右クリックして「開始」を選択し、状態の表示が「開始」になればエージェントとしての起動は成功です。
同様に、サービスから削除する場合は以下のコマンドを実行します。
画面33 [ZABBIX Agent]が登録されていることを確認し、サービスを起動する
「サーバーマネージャー」->「Windowsファイアウォール」->「詳細設定」->「受信の規制」から、右側のペインの「新しい規則」でポート10050を追加します。
●スキルに依存しない運用を支援
ZABBIXは、最初のセットアップ作業にこそある程度Linuxの知識が必要になりますが、セットアップ後は基本的にWebインターフェイスだけで操作ができるため、Linux/OSSに関する知識がなくとも運用できるのが特徴になっています。
いままでのOSSの監視ソフトウェアのように、コンソールにログインしてテキストベースの監視設定をエディタで行う必要があるソフトウェアでは、運用手順が複雑化していくことがありました。それに対し、ZABBIXではWebインターフェイスだけでほとんどの監視に関する操作ができるため、手順を明確化しやすくなっています。
システムの運用管理は、長期間にわたりシステムを安定的に稼働させることが重要です。しかし運用の半ばで、管理者の異動やLinux/OSSの知識がない人への作業の移管などが発生することがあります。あらかじめ作業の分担やスキルトランスファーを簡単に行うことができるソフトウェアを選択しておくことで、特定管理者へのスキル依存を発生させず、運用をスムーズに行える仕組みを構築できるようになります。
●テンプレートを使った効率的な監視設定
「●ZABBIXの設定」ではホストの登録から基本的な監視までの手順を説明しました。ですが、監視対象ごとに1つ1つ監視設定をしていくのには、膨大な手間と時間がかかります。そこで今回は「テンプレート」という機能を使って、効率的に監視を行う方法を紹介します。
テンプレートとは、複数のアイテム、トリガー、グラフの設定をまとめた監視設定の集まりです。テンプレートを利用することで、複数の監視対象にまとめて同一の設定をすることができます。
また、1つの監視対象に複数のテンプレートを適用したり、複数のテンプレートを取りまとめて1つのテンプレートとすることもできます。例えば、LinuxのテンプレートとApacheのテンプレートを適用することで、Webサーバの監視をすぐに開始することができます。
テンプレートを利用することで以下のような利点が生まれます。
図3 テンプレートの役割
例えばOSと、Webサーバ、DBサーバ、ファイルサーバなどのアプリケーションの監視設定を1つのテンプレートにまとめたとしましょう。すると、各ホストにテンプレートを適用した後、起動していないサービスなど、不要な監視項目を無効化する必要が生じます。OS基本部分のテンプレート、各アプリケーション単位のテンプレート……という形で階層的にテンプレートを作成していくと、使い回しもでき、より効率的でしょう。
●オリジナルテンプレートの作成
ZABBIXでは、インストール直後でもいくつかのテンプレートが利用できます。ですが、既存のテンプレートは監視対象となるアプリケーションも限られており、必ずしも監視要件と合うわけではないので、監視要件に合わせて新しくテンプレートを作成する方がよいでしょう。
ここでは、新たにテンプレートを作成し、ホストに適用させる方法について紹介します。
テンプレートの作成は、前回紹介したホストの作成とほぼ同じ方法で行うことができます。例として、LinuxでWebサーバとして一般的に使われているApache用のテンプレートを作成してみましょう。
なお、既存のLinux用テンプレートであるTemplate_LinuxにはApacheの監視設定が一部含まれています。このため、Template_Linuxがリンクされているホストには以下で紹介するテンプレートは適用できないことに注意してください。
[設定]→[ホスト]の画面から、右上のプルダウンメニューより[テンプレート]を選択します。テンプレートの設定画面が表示されたら画面右上の[テンプレートの作成]をクリックします。
画面34 テンプレートの作成画面
表7 テンプレートを作成する際の登録項目
以上を設定し、右下の[保存]をクリックすると、テンプレートが作成されます。
●アプリケーションの作成
テンプレートを作成したら、アプリケーションも作成しましょう。アプリケーションとは、一般的な意味合いとは異なり、ここでは監視項目を分類する機能を指します。監視対象に登録されている監視項目が増え過ぎると、監視結果を一覧表示した際に視認性が悪くなってしまいます。
アプリケーションを作成するには、まず[設定]→[ホスト]の右上のプルダウンメニューより[アプリケーション]を選択します。プルダウンメニューより先ほど作成したTemplate_App_httpdを選択し、[アプリケーションの作成]をクリックします。
画面35 アプリケーションの作成
表8 アプリケーションを作成する際の登録項目
上記のように設定し、[保存]をクリックするとアプリケーションが作成されます。
●監視項目の追加
ただテンプレートを作成しただけでは、何も監視設定が登録されていない状態のままです。作成したテンプレートに対し、アイテム、トリガー、グラフを登録します。登録方法は前回紹介した監視設定と同様です。
[設定]→[アイテム]のホストプルダウンメニューより、先ほど作成したTemplate_App_httpdを選択します。[アイテムの作成]ボタンを押し、アイテムを作成します。
ここでは、プロセス監視、ポート監視、ログ監視の3つを登録します。
まずはプロセス監視の設定を行います。プロセス監視で監視をするプロセスは、psコマンドから調査します。
上記ファイルの括弧内に書かれているものがプロセス名称です。これを基にアイテムを登録します。
[アイテムの作成]をクリックし、以下のように設定します。
以上で、起動中のhttpdプロセスの数を監視できます。
アイテムの名前中にある$1は、設定内容によって動的に値の変わる変数となります。アイテム名称に$1と書くと、キーに登録されている[]内の1番目の値、ここではhttpdが挿入されます。上記設定では、アイテム名称はNumber of processes of httpdと表示されます。
次に、ポート監視を行います。現在開放されているポートを調査するには、netstatコマンドを使用します。
上記設定では80番ポートが開放されていれば、監視結果が1として得られます。
●値のマッピングの設定
先ほど紹介したポート監視は、監視結果として「0(ポートが閉じている)」もしくは「1(ポートが開いている)」という値を返します。ZABBIXではこの値を利用して障害判定を行いますが、人間の目で見た場合、即座に現在の状態を把握することが困難です。
ZABBIXでは、このポート監視のように、現在のステータスとして数値を返すアイテムも多く存在します。そのようなアイテムを利用するときは、値のマッピングという機能を利用すると、状態を一目で把握しやすくなります。値のマッピングは数字に意味を与える機能です。
例えば、ポートが開いている場合は1、閉じている場合は0を返すような監視設定では、
画面36 マッピングした際の表示
値のマッピングは、インストール直後でも複数のマッピングが登録されています。ポート監視では初期状態から登録されているService stateを利用します。
最後にログ監視の設定を行います。Apacheの標準のログファイルは/var/log/httpdに置かれます。ここではerror_logを監視します。
ログ監視を行う際は、監視対象となるログファイルをOS上のzabbixユーザが読み取ることができる必要があります。そこで、監視を行う前にerror_logの権限を確認します。
ログ監視を行う際は以下のように設定をします。
この結果、/var/log/httpd/error_logが更新されると、更新内容をZABBIXで取得することができます。
以上でアイテムの設定は終了です。
トリガーの設定
次にトリガーを設定します。[設定]→[トリガー]のホストプルダウンメニューより作成した[Template_App_httpd]を選択します。[トリガーの作成]ボタンを押し、先ほど登録したアイテムに対して障害判定の設定を行います。
トリガーは以下のように設定します。
・プロセス監視
上記設定では起動中のhttpdプロセスが1個未満になった場合に障害と判断します。トリガー名中の{HOSTNAME}はマクロと呼ばれる変数で、トリガーが登録されているホスト名を動的に挿入します。
・ポート監視
上記設定では、80番ポートが開放されていない状態(アイテムで0を取得した場合)に障害と判定します。
・ログ監視
上記設定では/var/log/httpd/error_logに「error」が含まれる行が追加された際に障害と判断します。
以上でトリガーの登録は終了です。
画面37 テンプレートとホストを関連付ける
テンプレートに監視設定をしたら、実際にホストと関連付けていきます。
[設定]→[ホスト]より右上のプルダウンメニューから[ホスト]を選択します。テンプレートとのリンクの項目にある[追加]ボタンを押し、新たに設定したTemplate_App_httpdを選択し、保存します。
以上でテンプレートとのリンク設定は完了です。同様の手順で複数サーバに対してTemplate_App_httpdをリンクさせ、監視することができます。
●アクションの設定
まず、アクションの設定内容を決定する必要があります。
次に、どのトリガーに対しアクションを設定するか決定します。
なお、この項目はzabbix 2.0を元に記載しています。
今回は、該当障害発生時に特定ユーザのメールアドレスに送信するように設定したいと思います。
特定ユーザのアカウントを作成します。
[管理]-[ユーザ]をクリック。ユーザグループの一覧が表示されます。
右側のドロップダウンリストで[ユーザ]を選択、その右の[ユーザの作成]をクリックします。
表示画面([ユーザ]タブ)にしたがって設定します。言語は[日本語(ja_JP)]を選択します。
[メディア]タブでメディアタイプで事前に作成したものを選択します。
[権限]タブのユーザの種類で[Zabbix特権管理者]を選択します。これが[Zabbixユーザ]のままの場合、すべての設定が[拒否]項目に属すためメールを送信することができませんので注意してください。
ユーザの設定が終了したら[保存]を押します。
メディアタイプを作成するには以下のようにします。
[管理]-[メディアタイプ]をクリック。
右上にある[メディアタイプの作成]をクリック。
[説明]に分かりやすい文字列を記入。[タイプ]は、今回メール送信を目的としているので[メール]を選択。
[SMTPサーバ]及び[SMTP helo]にメールサーバのIPアドレス(またはFQDN)を記載。
[送信元メールアドレス]にFrom:となるメールアドレスを記載します。
[有効]にチェックを入れて[保存]をクリックします。
メディアタイプの一覧に作成されていることが分かります。
これを先ほどの[管理]-[ユーザ]-[メディア]タブで[追加]をクリックします。
新規メディアのウィンドウで、[タイプ]で先ほど[説明]で記載したものを選択。
[送信先]に送信先メールアドレスを記載。
[有効な時間帯]はデフォルトで毎日24時間有効となっています。必要に応じて変更してください。
(1 - 月曜日、2 - 火曜日、…、7 - 日曜日)
[指定した深刻度のときに使用]では、どの深刻度のときにアクションを実行するかを選択可能です。
[ステータス]で有効を選択します。
設定が完了したら、[追加]をクリックします。その後、[保存]をクリックして保存します。
これで、ユーザとメディアタイプのリンク付けが完了しました。
どのような時にアクションを実行させるのか条件を決める必要があります。
[設定]-[アクション]をクリック。
イベントソースが[トリガー]になっていることを確認し、[アクションの作成]をクリックします。
設定するアクションの名称、実行条件、実行内容を設定して保存します。
作成したアカウントに対しきちんと権限を与えないとメール送信ができません。
[管理]→[ユーザ]で、右上のプルダウンから[ユーザ]を選択します。ユーザを一覧表示後、該当アカウントをクリックして[権限]タブをクリックし障害が発生したホストまたはホストグループが「読書可能」または「読込専用」のいずれかに表示されるのか確認します。
もし、拒否にしか表示されない場合、該当アカウントのユーザグループの設定でそのユーザグループがアクセスできるように権限を追加するか、[ユーザの種類]で「Zabbix特権管理者」に変更してください。
●/var/log/messagesを監視する方法
参考URL:Zabbixでログ監視
/var/log/messagesに記録されるあるキーワードを検知できるように設定します。その他任意ログ監視に応用できます。
/var/log/messagesは通常root権限でしか読み込めません。ここではZabbixがroot権限で実行できるように/etc/zabbix/zabbix_agentd.confを下記のように変更します。
上記に記載した設定方法はセキュリティ上問題となることから実施しないこと。
/var/log/messagesを監視するには権限を与える必要があります。
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エージェントのアクティブになっている
確認方法は下記のとおりです。
作成したテンプレート(「設定」ー「テンプレート」ー「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で検知するようになります。
または、下記のようにloggerコマンドを実行して/var/log/messagesに書き出すことにより試験することも可能です。
「障害イベントを継続して生成」に「チェックを入れない」としたことには理由があります。
例えば、監視対象ログが/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回以上のレスポンス異常で発火するトリガーを作る。
作業の手順としては下記のような流れになります。
[設定]→[ホスト]→[ホストの作成]をクリックします。
ホスト名、IPアドレス、DNS名を記載します。
ホストのマクロの設定
マクロをクリックし、マクロに「{$URL}」、値にURLを記載し「更新」をクリックします。
テンプレートの作成
[設定]→[テンプレート]→[テンプレートの作成]をクリックします。
テンプレート名に「Template Web Check」を記載、グループは選択ボタンをクリックし「Templates」を選択します。その後、「追加」をクリックし確定させます。 <
アプリケーションの作成
作成された「Template Web Check」を開き、名前に「Web Check」を入力します。
Web監視の設定
「Webシナリオ」をクリックします。
名前に「html check」を入力、アプリケーションは「Web Check」を選択、更新間隔は5分のため「5m」を入力、試行回数は「1」回、エージェントは「Zabbix」を選択します。
次に「ステップ」をクリック、「追加」をクリックし、Webシナリオステップを作成します。
名前に「{$URL}」、URLに「{$URL}」、要求ステータスコードに「200」を入力し「追加」ボタンをクリックします。その後「追加」をクリックし、
この設定により{$URL}には、ホストで設定したURLが挿入されます。
ここまで来ると[監視データ]→[最新データ]でホストを絞り込み「適用」をクリックするとデータが表示されるようになります。
トリガーの作成
作成したテンプレート「Template Web Check」を開き、名前に「Webレスポンスコード」、深刻度は「警告」を選択、条件式に「{Template Web Check:web.test.rspcode[web check,{$URL}].count(#3,200,ne)}=3」、手動でのクローズを許可にチェックを入れ、「追加」をクリックします。
この設定により、直近の3回でレスポンスコードが200以外の値がの3回を超えたらトリガーが発生します。
●UPSを監視する
参考URL:APC社UPSの状態をzabbixで監視する
APC製の中古UPSをZABBIXで監視するように設定します。
apcupsdは既に導入済みという前提とさせていただきます。apcupsdの導入については「APCUPSDの設定方法」を参照してください。
apcupsdを動作させているサーバ上のZABBIXバージョンはserver、agentとともに2.4.8です。
サーバ上でapcaccessコマンドを実行し、UPSの状態を取得できるか確認します。
確認できたらZABBIXで必要な値を検知できるようにzabbix-agentd.confを設定します。検知する値は下記のとおりです。
CentOS 6で動作温度を取得するlm_sensorsをインストールする
lm_sensorsによるCPU温度チェック
@IT:CPUの温度やファンの回転数などをモニタするには
取得するデータを渡すことができるように/etc/zabbix/zabbix_agentd.confでUserParameteを設定します。
ただし、/etc/zabbix/zabbix_agentd.confの設定は、データを取得したい対象サーバ上のzabbix-agentd.confに対し設定する必要がありますので注意してください。
ZABBIXのGUI画面でアイテムを設定します。設定の都合上、テンプレートは新規作成し、その中でアイテム等を定義することとします。
アプリケーション名はUPSとしました。設定するパラメータは下記のとおりです。
アイテム作成後、データが取得できているかどうか確認します(「監視データ」-「最新データ」)。
※アプリケーション名:apcupsd
※アプリケーション名:CPU
グラフ(カスタムグラフ)を作成します。
※グラフ名:UPS Load
※グラフ名:UPS Voltage
※グラフ名:Temperature
あとは必要に応じてトリガーを設定すれば、トリガーにしたがいGUIの画面で監視出来るようになります。例えば、商用電圧があるしきい値を下回った場合(3分間継続して90Vを下回った場合)、トリガーで検知できるようにする場合は下記のような感じです。
さらに、アクションを指定することによりメールの送信等が出来るようになります。
UPSが接続されているサーバにzabbix-agentがインストールされていない場合の対処
UPSが接続されているサーバにzabbix-agentがインストールされている場合、上記と同様にUserParameterを設定します。zabbix-agentd.confでzabbix-serverのIPアドレスを指定することによりデータを収集することが出来ます。データ収集出来ない場合、該当テンプレートでデータ収集したいサーバをリンクさせてください。
しかし、UPSが接続されているサーバにzabbix-agentがインストールされていない場合、zabbix-agentがインストールされているサーバでapcaccessの結果を取得できるようにする必要があります。
そこで、定期的に結果を取得できるようシェルスクリプトを作成します。
あとはテキストファイルから必要なデータを抜き出せば監視出来るようになります。
30秒毎にcronを動作させる
30秒毎にcronを実行させるには、seqコマンドで待機(sleep)する秒数を指定して、その分をsleepさせてからスクリプトを実行しするようにさせます。
●HDDの温度監視
参考URL:ZabbixでHDDの温度を監視する
参考URL:Zabbix Agentの「リモートコマンド」を使って監視対象のOSコマンドを実行する
Zabbix 5.0でHDDの温度監視が出来るように設定します。
コマンドの実行を許可させるため、/etc/zabbix/zabbix_agentd.confを編集します。
Zabbix 5.0では、EnableRemoteCommands=1は非推奨になり、AllowKeyを利用します。
テンプレート及びアイテムを作成します。
●監視設定のエクスポート/インポート
監視サーバを複数使用して複数の監視システムを構築する場合、同じような監視設定を何度も行う必要があります。ZABBIXでは、一度作成したテンプレートをXMLファイルで出力し、別のZABBIXサーバにインポートすることで設定を移植できます。その設定のエクスポート/インポートの方法を紹介しましょう。
エクスポート/インポートは、テンプレートもしくはホスト単位で行うことができます。対象は、テンプレート、ホストに含まれるアイテム、トリガー、グラフです。
設定をエクスポートするには[設定]→[エクスポート/インポート]より行います。右上のプルダウンメニューよりエクスポートを選択します。設定のエクスポート画面では、現在登録されているすべてのホスト・テンプレートが表示されます。エクスポート対象となるテンプレート名称、関連付けられたテンプレート、アイテム、トリガー、グラフを選択し、画面下の[エクスポート]をクリックすることでエクスポートが行われ、ブラウザを利用しているPC上に zabbix_export.xmlとして保存されます。
画面38 設定のエクスポート
エクスポートした設定情報をインポートするには[設定]→[エクスポート/インポート]より行います。右上のプルダウンメニューよりインポートを選択します。[ファイルをインポート]にインポートしたいXMLファイルを指定し、[インポート]をクリックします。
画面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などでパケットフィルタリングを実施している場合は、ポートを開けます。
インストール
※CentOS Stream 8の場合
NET-SNMPをインストールします。
更に、perl-Digest-SHA1はPowerToolsというリポジトリに格納されています。
デフォルトではPowerToolsというリポジトリは無効化されています。
※CentOS 7の場合
NET-SNMPをインストールします。
snmptrapdの設定
SNMPTTでOIDのフィルタリングをしますので、OIDをそのまま渡すようsnmptrapdの起動オプションを追加します。
※CentOS Stream 8の場合
※CentOS 7の場合
snmptrapd.confの設定
authCommunityという設定を使って、どのSNMPトラップの受信を許可するかを設定します。
※CentOS Stream 8の場合
※CentOS 7の場合
SNMPTTの設定
日付のフォーマットをわかりやすくしたり、誤ったフォーマットのトラップの受信時に別途ログに出力するようにしておきます。ここで指定した日付フォーマットとアイテム登録時の「ログの時間の形式」(下記の場合であれば「yyyy/MM/dd hh:mm:ss」)を合わせるようにしてください。
例えば、下記の場合
トリガーの設定時になかなか正常に動作(検知)しないという羽目に会いましたので参考にしてください。
Zabbixサーバの設定
/etc/zabbix/zabbix_server.confを変更します。
設定変更の反映
変更したファイルを有効にするためsnmptrapdサービスの再起動、snmpttサービスの再起動、zabbix_serverを再起動します。
Trapの試験
Trapの送信試験をします。
/var/log/snmptt/snmptt.log及び/var/log/messagesに下記のように記録されます。
なお、Zabbix Server上で設定するアイテムやトリガーに検知させるためには、下記に記載している「ホストの設定」で、Trapを検知するホストのSNMPインターフェースを設定しておく必要があります。
また、Trap送信試験はTrapを検知させたいサーバ(ローカルホスト)上で実施する必要があります。
ローカル上でTrap送信試験を実施しなかった場合、/var/log/zabbix/zabbix_server.logに下記のように「unmatched trap received」が記録され、Zabbix Server上(最新データでの表示やトリガーで)で正常に検知できません。
Trap用テンプレートの作成
ZabbixでTrapをトラップを監視するため新規にSNMP Trap用templateを作成します。「設定」 -> 「テンプレート」をクリックし、右上の「テンプレートの作成」をクリックします。
下部にある「追加」をクリックし作成します。
「Template SNMP Trap」が新規作成されていることを確認します。
Trap監視用アイテムの作成
「Template SNMP Trap」の「アイテム」をクリックします。
右上の「アイテムの作成」をクリックします。
下記を入力または選択し下部の「追加」をクリックします。
キー設定時に「General event」を指定する場合、snmptrap["General event"]とせず、snmptrap[General event]に設定しないと検知してくれませんでした。
下記のように作成されます。
ホストの設定
[設定] → [ホスト] からSNMPインターフェースを設定するホストをクリックします。「ホスト」タブを選択して、SNMPインターフェースの「追加」をクリック、IPアドレスを入力します。
※SNMPインターフェースの追加設定をしていない場合、アイテムやトリガー作成時にエラーが表示されてしまいますので注意してください。
[テンプレート]タブを選択し、[選択]をクリックします。作成したトラップ監視テンプレートにチェックを入れて[選択]をクリックします。
[追加]をクリックします。
「テンプレートとのリンク」にトラップ監視テンプレートが表示されていることを確認し「更新」ボタンをクリックすればホストの設定完了です。
トリガーの設定
参考URL:Zabbix 2.4 でRTXルーターのsnmptrap監視がしたい
バージョン2.2.11では下記斜字体の設定は必要で、バージョン2.4.8では下記斜字体の設定をしなくてもトリガーが動作することが判明しました。
SNMPTTの設定に記載されているとおりの記載でない場合、トラップを検知することができませんので注意してください。
例えば、●SNMPトラップの監視設定2に記載しているとおり、Cisco1812のリンアクアップ/リンクダウン用のMIBファイルをsnmpttconvertmibコマンドを使用して変換しましたが、正常にトラップの検知が出来ませんでした。
rfc2233.confの内容を確認したら記載が異なっており、下記のとおり修正したところ上手く動作しました。
ZBXTRAP $aAまたはZBXTRAP $arの記載があればバージョン2.2でのトリガは動作します。
なお、上記の設定はホスト「cisco1812」を作成し、更にテンプレート「Template SNMPTrap cisco1812」を作成し関連付けて、アプリケーション、アイテム、トリガーを作成しています。
設定 -> ホストでZabbix server(下図の場合、neko)のトリガーを選択し、右上の「トリガーの作成」をクリックします。
名前:SNMP Trap TEST
条件式:{neko.bigbang.dyndns.org:snmptrap["General"].iregexp(*)}=1
条件式:{neko.bigbang.dyndns.org:snmptrap[General].iregexp(*)}=1
※トリガー関数にiregexp(*)を使い、収集したアイテムをすべて検知させます。
※文字列で絞り込みたい場合は*部分を文字列にします。
Trapを送信し、Zabbixで検知されればOKです。[監視データ]->[概要]をクリック、フィルタをかけて表示させます。
グループ:すべて
タイプ:データ
アプリケーションによるフィルター:SNMP Trap
表示された時刻をクリックし「最新の値」をクリックすると内容が表示されます。
「最新の値」をクリックしても内容が表示されない場合、[ズーム]で「すべて」をクリックすると表示されます。
●SNMPTrapperFileのログローテーション
最後に、SNMPTrapperFileはSNMPトラップを受信するたびに増加していきますので、logrotateを設定します。
●SNMP MIBファイルの追加
参考URL:CentOS snmptrapd へ MIBファイルを追加する
snmptrapdが含まれるnet-snmpのMIBファイルは、/usr/share/snmp/mibsに保存されていて、標準的なMIBファイルのみとなっています。
したがって、スイッチ、ルータ及びサーバなどのベンダー機器が出力するSNMPTRAPを受信した場合、snmptrapdが受信したOIDを解釈できない為、意味不明な数字の羅列になってしまいます。
下記はルーターのあるポートのリンクダウン・リンクアップを検知した時のログの一部です。
そこで、ベンダーが提供するMIBファイルを追加することで、解釈可能な文字列へ変換して表示するようになります。
ここでは、/usr/share/snmp/vendormibsディレクトリへベンダーMIBファイルを追加する例を記載します。
ファイルの設定が完了した後は、snmptrapd を再起動し設定を反映します。
●SNMPトラップの監視設定2
参考URL:SNMPTTの設定 補足(訂正)
参考URL:SNMPTT その2 ← かなり詳しい
SNMPTTの設定の設定方法では、想定されるsnmptrapに対し全て定義を記載しない限り「・・・にて未定義のイベント受信・・・」というログとして記録されてしまいます。
これでは到底対応しきれないので、snmpttconvertmibコマンドを使用してmibを/etc/snmp/snmptt.ini内で定義し読み込める形式に変換して保存します。
ネットワーク機器であるCisco 1812を例に設定する方法を記載します。
Cisco 1812のトラップに関係しそうなファイルを捜し出し、変換します。
生成したファイルを/etc/snmp/snmptt.iniに追記し、snmpttを再起動します。
再度、ログから複数個の文字列で検索して探してみます。
手持ちの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は変換し設定したほうが良さそうです。
RFC1215を変換し設定しましたがログに変化はありませんでした。
いろいろ調べた結果、RFC2233を利用すれば良いことがわかりました。
下記がその時の作業及びログです。
綺麗に表示されるようになりました。
●SNMPトラップの監視設定3
参考URL:ESXi Shellを使って、コマンドでESXiのSNMP Trapの設定を行う方法
VMware ESXiでTrap送信を設定後、VMを再起動すると下記のようなトラップを受信していることが分かりました。
トラップの設定が未定義であったため「・・・にて未定義のイベント受信・・・」というログとして記録されています。
snmpttconvertmibコマンドを使用して、mibを/etc/snmp/snmptt.ini内で定義し読み込める形式に変換して保存します。
VMwareのmibファイルは、「SNMP MIB モジュール ファイルのダウンロード (1013445)」内の「VMware Downloads」からダウンロードできます。
今回はダウンロードしたファイルを展開後、/usr/share/snmp/mibs/vmwフォルダ内に保存します。
フォルダの内容は下記のとおりでした。
選択したmibファイルをsnmpttconvertmibコマンドを使用して、/etc/snmp/snmptt.ini内で定義し読み込める形式に変換して保存します。
生成したファイルを/etc/snmp/snmptt.iniに追記し、snmpttを再起動します。
想定されるトラップは全て上記の作業を繰り返す必要があります。
●スクリーンのデフォルト表示時間の変更
参考URL:[1.6.2]グラフ表示期間の規定値
参考URL:グラフ表示時に時間指定が可能かについて
デフォルトのグラフ表示時間はdefines.inc.phpのZBX_PERIOD_DEFAULTで設定されています。デフォルトは3600秒(1時間)です。
●Apacheの監視設定
Apacheを監視するには下記の設定を実施します。
常時SSL化に伴ってApache監視時のマクロを設定変更する必要があります。
テンプレート名は「Template App Apache by HTTP」と「Template App Apache by Zabbix agent」です。
該当テンプレートを選択し、マクロをクリックします。
表示されているマクロのうち「{$APACHE.STATUS.PORT}」と「{$APACHE.STATUS.SCHEME}」を下記のように変更し保存します。
●MariaDBの監視設定
参考URL:Zabbix 2.2系 で MySQL監視(Template App MySQL)を導入する手順
参考URL:Zabbix 2.2でMySQLを監視する
Zabbix 2.4でデフォルトで設定されているMySQL監視用テンプレートを利用してMySQLを監視させます。
アイテムとして下記が設定済みとなっていました。
次に、作成したアカウントを、Zabbixエージェントが利用できるように「-–defaults-extra-file」で指定するファイルに記載します。「.my.cnf」という名称で/var/lib/zabbixに作成します。
Zabbixエージェントのインストール時にデフォルトで保存されている「/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf」を一部変更します。
設定後は、Zabbixエージェントを再起動してください。
※zabbix 5.0.13(on CentOS Stream 8)では、正常に監視できるようになりました。
※zabbix 4.0.0(on CentOS 7)では、正常に監視できるようになりました。
※zabbix 2.4(on Fedora 22)では、デフォルトの設定では監視できませんでした。そのため、下記のとおり追加設定します。
Zabbixサーバ側からzabbix_getコマンドを実行して値が取得できるか、確認してみます。
※以下、「xxx.xxx.xxx.xxx」はZabbixエージェントをインストールし、MySQLサーバが動作しているホストのIPアドレスに置き換えてください。
zabbix_getコマンドの実行結果で下記のようなエラーが表示されることがあります。
●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監視用ユーザを作成します。
監視用SQLファイルのダウンロード
(一部のSQLを活用または流用したいため)監視用SQLファイルを保存するディレクトリを用意します。なお、不足分はその都度、SQL文を作成することとします。
認証用ファイルの作成
認証用のファイルを作成します。テンプレートのドキュメントではデータベース部分にpostgresを指定していますが、今回、ホスト名とデータベース名部分を"*"にしています。具体的な値はテンプレート適用後にマクロで設定します。 ユーザ名はパスワードは先ほど作成したモニター用のユーザを指定してください。
マクロの設定
(Zabbixでマクロを使用する場合)コピー先のテンプレートでマクロを設定します。マクロが既に設定済みの場合、変更してください。
Ping監視
Ping監視のため、template_db_postgresql.confを下記のように変更します。
Uptime監視
Uptime監視のため、template_db_postgresql.confを下記のように変更します。
ping.time監視
Uping.time監視のため、template_db_postgresql.confを下記のように変更します。
Version監視
Version情報の監視のため、template_db_postgresql.confを下記のように変更します。
統計情報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を下記のように追加します。
作成するファイル等は下記のとおりです。
コピーしたテンプレートでアイテムを新規作成(一部記載)します。
統計情報pg_stat_databaseビューの監視
統計情報pg_stat_databaseビューの監視のため、template_db_postgresql.confを下記のように追加します。
データベースサイズ監視
データベースサイズ監視のため、template_db_postgresql.confを下記のように追加します。
Bgwriter監視
Bgwriter監視のため、/var/lib/zabbix/postgresql/pgsql.bgwriter.sqlを利用し、template_db_postgresql.confを下記のように変更します。
※補足:/var/lib/zabbix/postgresql/pgsql.bgwriter.sqlについて
下記4項目
buffers_checkpoint
buffers_clean
buffers_backend
buffers_alloc
は、ブロックサイズを乗算しています。
ブロクサイズの確認方法は下記のとおりです。
コピーしたテンプレートでアイテムを新規作成します。
●ZabbixでESXiを監視する方法
参考URL:vmware ESXi 6.5 を wbemcli で監視しようとしたらエラー
参考URL:Zabbix2.04でESXiを監視する(ハードウェア編)
仮想サーバを稼働させている物理サーバにログイン(sshまたはtelnetで)し、wbemcliで監視できる設定になっているかどうか確認します。
Linuxマシンから情報取得可能かどうか確認します。
●VMware vSphere ESXi Hypervisorや仮想マシンを監視設定する手順
参考URL:【VMware】ZabbixでVMware vSphere ESXi Hypervisor や仮想マシンを監視設定する手順
参考URL:zabbixで監視する(ESX)
上記を参照して設定しました。
また、ホストだけでなく「アイテム」や「トリガー」や「グラフ」など自動登録します。
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」や「仮想マシン」が下図のように登録されます。
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のデータベースをバックアップするには下記のとおりです。
リストア方法は下記のとおりです。
試験その1
zabbix 2.4 → zabbix 2.2へのリストア。
バックアップ元の情報。
リストア先の情報。
zabbixのバージョンがバックアップ元の方が新しいためか、データベースのアップグレードは進行しませんでした。
試験その2
zabbix 2.2 → zabbix 2.4へのリストア。
バックアップ元の情報。
試験その3
zabbix 2.4 → zabbix 2.4へのリストア。
バックアップ元の情報。
試験その4
zabbix 2.4 → zabbix 3.0へのリストア。
バックアップ元の情報。
●エージェントの状態が赤い場合の対応
Zabbixサーバの新規構築時やデータベースからのリストア時等にZabbixサーバを再起動しても[監視]->[ホスト]の画面で[エージェントの状態]が赤のままの場合があります。これはzabbix_agentd.confでzabbix_agentd.confでZabbixサーバのIPアドレスを記載していなことが原因です。
ZabbixサーバのIPアドレスが10.0.0.1の場合、下記のように設定します。
もし、上記を設定しても変化がない場合はfirewallを確認してください。
10050ポートが空いていなければ空けてください。
●cannot send list of active checks
zabbix_server.logに「cannot send list of active checks to "<IPアドレス>"」というログが立て続けに記録されていました。
このため、zabbix_agentd.confを下記のとおり編集し再起動しました。
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を確認したところ、下記のようなエラーが記録されていました。
監視される側のzabbix_agentd.confを調査したところ、HostnameがそれぞれserverA、serverB.bigbang.dyndns.orgと設定されていました。
該当個所を修正し、Zabbix Agentを再起動して問題が解消されました。
●Zabbix 1.8のグラフの文字化けの対応
「さざなみフォント」を利用する場合と「IPAフォント」を利用する場合について記載します。
まず、「dejavuフォント」を無効にします。
IPAフォントを利用する場合は下記のようにします。
●1.8から2.0へのアップグレード
Zabbix Serverのバージョンアップには以下の手順を踏みます。
Zabbix Server停止
データベースのバックアップ時に新たに監視データが登録されないよう、いったんZabbix Serverを停止します。さらに、監視設定についても変更が加えられないよう、Apacheを停止します。
バックアップ
Zabbix Serverの設定ファイルとデータベースのバックアップを取得します。Zabbix Server設定ファイル(zabbix_server.conf)は任意の場所にcpコマンド等でバックアップを取得してください。
Zabbix2.0のインストール
ソースファイルを入手します。
設定ファイル(zabbix_server.conf)更新します。
設定ファイル(zabbix_server.conf)については、Zabbix2.0からの新機能であるZabbix Java Gatewayの利用設定など、変更箇所が何点かあります。
そのため、Zabbix2.0のソースコードディレクトリ内にあるzabbix_server.confのオリジナルファイルに既存のZabbix1.8で行っていた設定項目を記述する形で対応するのがいいかと思います。
その他既存のものと同様の設定箇所に関してはこちらを参照してください。Zabbix2.0で新たに追加された設定項目は以下になります。
ソースコードの中にあるオリジナルの設定ファイル(zabbix_server.conf)の配置場所がZabbix1.8系と異なるので注意してください。
Zabbix1.8 → ソースコードディレクトリ/misc/conf/zabbix_server.conf
Zabbix2.0 → ソースコードディレクトリ/conf/zabbix_server.conf
Webインタフェースの置き換えます。
その後、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の場合の手順を示します。
データベースの更新スクリプト実行
データベースをZabbix2.0に対応させるためスクリプトを実行します。
データベースアップグレード用スクリプトは、ソースコードディレクトリ内のupgrades/dbpatches/2.0以下にあります。データベースの種類毎に更新スクリプトが用意されているので、環境に合わせて選択してください。
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を停止します。
●zabbix agentを起動するとNo active checks on serverというエラーが出力される
zabbix agentを起動するたびにzabbix_agentd.logに下記のようなエラーが出力されます。
原因は、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の範囲が設定されていたためでした。
●Received empty response from Zabbix Agent at [IPアドレス]. Assuming that agent dropped connection because of access permissions.
Zabbix Agentが動作しているあるクライアントの状態が緑色のアイコンではなく赤色のアイコンとなっていました。
エラーは下記のとおりです。
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に下記のログが記録されていました。
●アイテムproc.num[]でデータ取得できるものと取得できないものがある
参考URL:Zabbix アプリケーション監視のためのアイテムの違い
proc.numは下記のように定義されています。
何が違うかというと参考URLに記載されているとおりpsコマンドで得られる実行結果が異なる点と関係していました。
●ZabbixのAdminでログインできなくなった場合の対処方法
移行作業等でGUIでAdminによるログインが出来なくなったという経験があるのではないでしょうか。
この場合、MySQLのusersデータベースに接続し下記を実施することにより問題を解決することが出来ます。
まず、認証方法をZabbixのDBのパスワードを使用する方式に戻します。
●「Zabbix discoverer processes more than 75% busy」エラーが頻発する
参考URL:Zabbixにてdiscoverer processes more than ~なるエラーが…
参考URL:【連載Zabbix】Zabbix チューニング Serverプロセスの理解【Zabbix Advent Calendar 2016】
上記URLを参考に対応しました。
●「Less than 25% free in the configuration cache」が検知された場合の対処方法
参考URL:Zzabbixで「Less than 25% free in the configuration cache」の対処
上記URLを参考に対応しました。
●Service Unavailable
PacemakerでMariaDBをActive/Standbyでの構築時、Zabbixの設定完了後、http:///zabbix/にアクセスしたところ、ブラウザに下記のようなエラーが表示された。
そのため、PHP-FPMをインストールし、設定を変更する必要があります。
●zabbix-agentがroot権限で起動しない
参考URL:zabbix-agent をroot権限で起動する方法
参考URL:ZabbixでAllowRoot=1をせずに/var/log/messagesなどを監視する方法
※ただし、zabbixにroot権限を付与する形になりますので、セキュリティ上危険になることを理解する必要があります。
/etc/zabbix/zabbix-agentd.confを下記のように変更します。
実際にはrootで実行する設定をサービスファイルに書き込む必要があります。
/usr/lib/systemd/system/zabbix-agent.serviceを下記のように変更します。
●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」となり、ステータスが「取得不可」となってしまいます。
下記のように設定を変更しました。
●警告「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モジュールが有効になっているか確認します。
httpd.confに記載してもいいですし、下記のようにファイルを追加してもOKです。
ハンドラーなので、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を下記のように変更します。
しかし、障害は回復しませんでした。
「Template App PHP-FPM by HTTP」のマクロの内容を確認します。
※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」のマクロの内容を確認します。
※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分毎に記録されていました。
問題が解消されていました。(2021.09.02)
●milter-manager.sock: Connection refused
参考URL:CentOS7でmilter-managerとSpamAssassin(spamass-milter)を用いてスパムメール対策
zabbix-server.logに下記のようなエラーが記録されていました。
●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時点、一括で無効にする方法は分かりませんでした。
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-develMySQLデータベースサーバの設定ファイルを以下のように修正します。
(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.pidMariaDBデータベースサーバを起動します。
(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)]> quitZabbix用のデータベーススキーマとデータをインポートします(少し時間がかかります)。
# 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-serverApache及び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> exitOS起動時に自動的に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-fpmPHPをソースからインストールしている場合、ZABBIX用に以下のようにconfigureオプションをつけます。
# ./configure --with-apxs2 --with-gd --with-bcmath --with-mysql --with-mbstring --with-sockets
●Zabbixエージェントの起動及び動作確認(CentOS Stream 8)
Zabbixエージェントを起動してます。
# systemctl enable --now zabbix-agentZabbixエージェントが正常に動作しているか確認します(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 --reloadhttp://(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によるデータベース監視を行うために必要となるライブラリ |
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.gzZABBIXサーバのすべての機能を有効にするため、次のオプションを指定して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監視を行う場合に指定します |
# cd zabbix-1.6.5 # ./configure --enable-server --enable-ipv6 --with-mysql --with-net-snmp --with-jabber --with-libcurl --with-ldap --with-openipmi --with-unixodbcmakeを実行し、コンパイルを行います。
# 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=zabbixDBPasswordを設定し忘れた場合、ログに下記のようなエラーが記録される場合があります。
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 secondsPIDファイル、ログファイルに必要なディレクトリを作成し、ディレクトリの所有者をzabbixユーザに設定します(rpmからインストールした場合作業不要)。
# mkdir /var/run/zabbix # chown zabbix:zabbix /var/run/zabbix # mkdir /var/log/zabbix # chown zabbix:zabbix /var/log/zabbixZABBIXサーバの起動スクリプトのサンプルファイルは、ソースファイルの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/TokyoApacheがすでに起動している場合は再起動を行い、設定を反映させます(ソース版、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 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 Introduction画面
Nextをクリックします。

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

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

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

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

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

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

画面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監視を行う場合に指定します |
# ./configure --enable-agent --with-ldapmakeを実行し、コンパイルを行います。
# 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.logZABBIXエージェントの起動スクリプトとサンプルファイルはソースファイルの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.rpmzabbix-agentをインストールします。
# dnf install zabbix-agent zabbix-get -y # systemctl enable --now zabbix-agentfirewalldを有効化している場合、下記の作業を実施します。
# 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-agentfirewalldを有効化している場合、下記の作業を実施します。
# 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 [Admin]ユーザを選択
[Language]の設定を[Japanese(JP)]に設定し、[save]を選択すると、画面が日本語表示になります。

画面12 [Language]の設定を[Japanese(JP)]に設定
または、adminでログイン後、右上の[Profile]を選択して、言語を日本語に変更すると日本語表示になります。
●ホストの登録
[設定]-[ホスト]を選択すると、初期設定では、すでに監視対象としてZABBIXサーバ自身が「ZABBIX Server」というホスト名で登録されています。ただし初期設定では[ステータス]が[無効]になっているので、[無効]をクリックし[有効]に変更してください。

画面13 [ステータス]を[有効]に変更する
次に、新規にほかのホストを登録しますが、監視対象ホストには事前にZABBIXエージェントがインストールされていることとします。ここでは、各ホストのIPアドレスが以下のように設定されていると仮定します。
LinuxホストへのZABBIXエージェントのインストールは「●インストール前の準備」「●ZABBIXサーバのビルドとインストール」「●ZABBIXエージェントのビルドとインストール」および「●ZABBIXエージェントの設定方法」を参照してください。WindowsホストへのZABBIXエージェントのインストール方法については、後述します。ZABBIXサーバのIPアドレス :192.168.0.45
LinuxホストのIPアドレス :192.168.0.44
WindowsホストのIPアドレス :192.168.0.41
なお、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 [設定]-[ホスト]の画面から[ホストの作成]をクリックする
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アドレス]を使用します。 |

画面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アドレス]を使用します。 |

画面16 Linuxホストの場合と同様、各項目を設定し、[保存]をクリック
ホスト登録完了後に、[設定]-[ホスト]の画面で[グループ]を[全て]に設定すると、centos-32-zbxとwinxp-zbxが登録されていることが確認できます。

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

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

図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 | トレンドの保存期間を指定します。トレンドはヒストリからデータを間引いたものであり、主にグラフの表示などに使用されます。 |
ステータス | 有効 | 監視を有効にするかどうかを設定します。 |
保存時の計算 | なし | 保存時に、取得値を計算してから保存するかどうかを設定します。 |

画面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 | トレンドの保存期間を指定します。トレンドはヒストリからデータを間引いたものであり、主にグラフの表示などに使用されます。 |
ステータス | 有効 | 監視を有効にするかどうかを設定します。 |
保存時の計算 | なし | 保存時に、取得値を計算してから保存するかどうかを設定します。 |

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

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

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

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

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

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

画面26 [グラフ]として[hda device read/write]を選択し、登録したグラフを表示
グラフのズームアップ、移動
グラフをマウスでドラッグすると、表示する時間帯を変更できます。ただし、最小の表示幅は1時間になります。

画面27 マウスでドラッグすれば、表示する時間帯を変更できる
また、グラフ下部のバーをずらせば、時間軸を前後に移動することが可能です。

画面28 グラフ下部のバーをずらすと、時間軸を前後に移動できる
●トリガーの登録
トリガーとは、各アイテムの情報に基づいて、どのような状態になっている場合に警告や障害と判断するかを定義するものです。今回は「アイテムの登録」で作成した、アイテム[hda device read]、アイテム[hda device write]を使用してトリガーを作成します。

図2 トリガーを登録することにより、監視の結果得られる取得値と設定したトリガーの条件から、どのような状況を警告や障害の発生とするかを定義できる
[設定]-[トリガー]の画面から[ホスト]として[centos-32-zbx]を選んだ状態で[トリガーの作成]をクリックします。hdaへの読み込み負荷が上がった際に警告を発生させるため、以下設定を入力し、トリガー[High read access to hda device]を登録します。
名前 :High read access to hda device |

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

画面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 |

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

画面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 --uninstallzabbix_agentd.exeにはその他にもオプションがあります。各オプションの利用方法は以下のコマンドで表示することができます。
> zabbix_agentd.exe -h

画面33 [ZABBIX Agent]が登録されていることを確認し、サービスを起動する
「サーバーマネージャー」->「Windowsファイアウォール」->「詳細設定」->「受信の規制」から、右側のペインの「新しい規則」でポート10050を追加します。
●スキルに依存しない運用を支援
ZABBIXは、最初のセットアップ作業にこそある程度Linuxの知識が必要になりますが、セットアップ後は基本的にWebインターフェイスだけで操作ができるため、Linux/OSSに関する知識がなくとも運用できるのが特徴になっています。
いままでのOSSの監視ソフトウェアのように、コンソールにログインしてテキストベースの監視設定をエディタで行う必要があるソフトウェアでは、運用手順が複雑化していくことがありました。それに対し、ZABBIXではWebインターフェイスだけでほとんどの監視に関する操作ができるため、手順を明確化しやすくなっています。
システムの運用管理は、長期間にわたりシステムを安定的に稼働させることが重要です。しかし運用の半ばで、管理者の異動やLinux/OSSの知識がない人への作業の移管などが発生することがあります。あらかじめ作業の分担やスキルトランスファーを簡単に行うことができるソフトウェアを選択しておくことで、特定管理者へのスキル依存を発生させず、運用をスムーズに行える仕組みを構築できるようになります。
●テンプレートを使った効率的な監視設定
「●ZABBIXの設定」ではホストの登録から基本的な監視までの手順を説明しました。ですが、監視対象ごとに1つ1つ監視設定をしていくのには、膨大な手間と時間がかかります。そこで今回は「テンプレート」という機能を使って、効率的に監視を行う方法を紹介します。
テンプレートとは、複数のアイテム、トリガー、グラフの設定をまとめた監視設定の集まりです。テンプレートを利用することで、複数の監視対象にまとめて同一の設定をすることができます。
また、1つの監視対象に複数のテンプレートを適用したり、複数のテンプレートを取りまとめて1つのテンプレートとすることもできます。例えば、LinuxのテンプレートとApacheのテンプレートを適用することで、Webサーバの監視をすぐに開始することができます。
テンプレートを利用することで以下のような利点が生まれます。
- 複数ホストに対して容易に同一の設定を行うことができる
- 監視項目の追加や無効化を容易に行うことができる
- 異なるZABBIXサーバへの設定の移し替えができる

図3 テンプレートの役割
例えばOSと、Webサーバ、DBサーバ、ファイルサーバなどのアプリケーションの監視設定を1つのテンプレートにまとめたとしましょう。すると、各ホストにテンプレートを適用した後、起動していないサービスなど、不要な監視項目を無効化する必要が生じます。OS基本部分のテンプレート、各アプリケーション単位のテンプレート……という形で階層的にテンプレートを作成していくと、使い回しもでき、より効率的でしょう。
●オリジナルテンプレートの作成
ZABBIXでは、インストール直後でもいくつかのテンプレートが利用できます。ですが、既存のテンプレートは監視対象となるアプリケーションも限られており、必ずしも監視要件と合うわけではないので、監視要件に合わせて新しくテンプレートを作成する方がよいでしょう。
ここでは、新たにテンプレートを作成し、ホストに適用させる方法について紹介します。
テンプレートの作成は、前回紹介したホストの作成とほぼ同じ方法で行うことができます。例として、LinuxでWebサーバとして一般的に使われているApache用のテンプレートを作成してみましょう。
なお、既存のLinux用テンプレートであるTemplate_LinuxにはApacheの監視設定が一部含まれています。このため、Template_Linuxがリンクされているホストには以下で紹介するテンプレートは適用できないことに注意してください。
[設定]→[ホスト]の画面から、右上のプルダウンメニューより[テンプレート]を選択します。テンプレートの設定画面が表示されたら画面右上の[テンプレートの作成]をクリックします。

画面34 テンプレートの作成画面
項目 | 設定例 | 説明 | 名前 | Template_App_httpd | テンプレートの名称です。任意のものを設定します。 | グループ | Template | テンプレートが所属するホストグループです。 | 新規グループ | 空白 | 新たにホストグループを作成し、同時にテンプレートを作成したグループに作成させます。 | テンプレートとのリンク | 空白 | 作成したテンプレートに別のテンプレートを関連付けます。 |
---|
以上を設定し、右下の[保存]をクリックすると、テンプレートが作成されます。
●アプリケーションの作成
テンプレートを作成したら、アプリケーションも作成しましょう。アプリケーションとは、一般的な意味合いとは異なり、ここでは監視項目を分類する機能を指します。監視対象に登録されている監視項目が増え過ぎると、監視結果を一覧表示した際に視認性が悪くなってしまいます。
アプリケーションを作成するには、まず[設定]→[ホスト]の右上のプルダウンメニューより[アプリケーション]を選択します。プルダウンメニューより先ほど作成したTemplate_App_httpdを選択し、[アプリケーションの作成]をクリックします。

画面35 アプリケーションの作成
項目 | 設定例 | 説明 | 名前 | Apache | 監視項目の分類名 | ホスト | Template_App_httpd | アプリケーションを作成するホスト(テンプレート) |
---|
上記のように設定し、[保存]をクリックするとアプリケーションが作成されます。
●監視項目の追加
ただテンプレートを作成しただけでは、何も監視設定が登録されていない状態のままです。作成したテンプレートに対し、アイテム、トリガー、グラフを登録します。登録方法は前回紹介した監視設定と同様です。
[設定]→[アイテム]のホストプルダウンメニューより、先ほど作成した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 |
上記ファイルの括弧内に書かれているものがプロセス名称です。これを基にアイテムを登録します。
[アイテムの作成]をクリックし、以下のように設定します。
項目 設定例 |
以上で、起動中の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番となります。
項目 設定例 |
上記設定では80番ポートが開放されていれば、監視結果が1として得られます。
●値のマッピングの設定
先ほど紹介したポート監視は、監視結果として「0(ポートが閉じている)」もしくは「1(ポートが開いている)」という値を返します。ZABBIXではこの値を利用して障害判定を行いますが、人間の目で見た場合、即座に現在の状態を把握することが困難です。
ZABBIXでは、このポート監視のように、現在のステータスとして数値を返すアイテムも多く存在します。そのようなアイテムを利用するときは、値のマッピングという機能を利用すると、状態を一目で把握しやすくなります。値のマッピングは数字に意味を与える機能です。
例えば、ポートが開いている場合は1、閉じている場合は0を返すような監視設定では、
1→UP 0→Downのように、より分かりやすく表示させることができます。

画面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が設定されていないことを確認してください。
ログ監視を行う際は以下のように設定をします。
項目 設定例 |
この結果、/var/log/httpd/error_logが更新されると、更新内容をZABBIXで取得することができます。
以上でアイテムの設定は終了です。
トリガーの設定
次にトリガーを設定します。[設定]→[トリガー]のホストプルダウンメニューより作成した[Template_App_httpd]を選択します。[トリガーの作成]ボタンを押し、先ほど登録したアイテムに対して障害判定の設定を行います。
トリガーは以下のように設定します。
・プロセス監視
名前 :httpd process is not running on {HOSTNAME} |
上記設定では起動中のhttpdプロセスが1個未満になった場合に障害と判断します。トリガー名中の{HOSTNAME}はマクロと呼ばれる変数で、トリガーが登録されているホスト名を動的に挿入します。
・ポート監視
名前 :httpd service is down on {HOSTNAME} |
上記設定では、80番ポートが開放されていない状態(アイテムで0を取得した場合)に障害と判定します。
・ログ監視
名前 :error found in /var/log/httpd/error_log on {HOSTNAME} |
上記設定では/var/log/httpd/error_logに「error」が含まれる行が追加された際に障害と判断します。
以上でトリガーの登録は終了です。

画面37 テンプレートとホストを関連付ける
テンプレートに監視設定をしたら、実際にホストと関連付けていきます。
[設定]→[ホスト]より右上のプルダウンメニューから[ホスト]を選択します。テンプレートとのリンクの項目にある[追加]ボタンを押し、新たに設定したTemplate_App_httpdを選択し、保存します。
以上でテンプレートとのリンク設定は完了です。同様の手順で複数サーバに対してTemplate_App_httpdをリンクさせ、監視することができます。
●アクションの設定
まず、アクションの設定内容を決定する必要があります。
次に、どのトリガーに対しアクションを設定するか決定します。
なお、この項目はzabbix 2.0を元に記載しています。
今回は、該当障害発生時に特定ユーザのメールアドレスに送信するように設定したいと思います。
特定ユーザのアカウントを作成します。
[管理]-[ユーザ]をクリック。ユーザグループの一覧が表示されます。
右側のドロップダウンリストで[ユーザ]を選択、その右の[ユーザの作成]をクリックします。

表示画面([ユーザ]タブ)にしたがって設定します。言語は[日本語(ja_JP)]を選択します。
[メディア]タブでメディアタイプで事前に作成したものを選択します。
[権限]タブのユーザの種類で[Zabbix特権管理者]を選択します。これが[Zabbixユーザ]のままの場合、すべての設定が[拒否]項目に属すためメールを送信することができませんので注意してください。
ユーザの設定が終了したら[保存]を押します。
メディアタイプを作成するには以下のようにします。
[管理]-[メディアタイプ]をクリック。
右上にある[メディアタイプの作成]をクリック。
[説明]に分かりやすい文字列を記入。[タイプ]は、今回メール送信を目的としているので[メール]を選択。
[SMTPサーバ]及び[SMTP helo]にメールサーバのIPアドレス(またはFQDN)を記載。
[送信元メールアドレス]にFrom:となるメールアドレスを記載します。
[有効]にチェックを入れて[保存]をクリックします。
メディアタイプの一覧に作成されていることが分かります。
これを先ほどの[管理]-[ユーザ]-[メディア]タブで[追加]をクリックします。

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

設定するアクションの名称、実行条件、実行内容を設定して保存します。
作成したアカウントに対しきちんと権限を与えないとメール送信ができません。
[管理]→[ユーザ]で、右上のプルダウンから[ユーザ]を選択します。ユーザを一覧表示後、該当アカウントをクリックして[権限]タブをクリックし障害が発生したホストまたはホストグループが「読書可能」または「読込専用」のいずれかに表示されるのか確認します。
もし、拒否にしか表示されない場合、該当アカウントのユーザグループの設定でそのユーザグループがアクセスできるように権限を追加するか、[ユーザの種類]で「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名を記載します。

ホストのマクロの設定
マクロをクリックし、マクロに「{$URL}」、値にURLを記載し「更新」をクリックします。

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

アプリケーションの作成
作成された「Template Web Check」を開き、名前に「Web Check」を入力します。

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

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

ここまで来ると[監視データ]→[最新データ]でホストを絞り込み「適用」をクリックするとデータが表示されるようになります。
トリガーの作成
作成したテンプレート「Template Web Check」を開き、名前に「Webレスポンスコード」、深刻度は「警告」を選択、条件式に「{Template Web Check:web.test.rspcode[web check,{$URL}].count(#3,200,ne)}=3」、手動でのクローズを許可にチェックを入れ、「追加」をクリックします。

この設定により、直近の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
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を利用
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の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

※アプリケーション名:CPU

グラフ(カスタムグラフ)を作成します。
※グラフ名:UPS Load

※グラフ名:UPS Voltage

※グラフ名:Temperature

あとは必要に応じてトリガーを設定すれば、トリガーにしたがい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 fiapcaccess.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;
* * * * * 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 34Zabbix Agent 5.0より前のバージョンは下記のように設定します。
# vi /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1zabbixに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-agentZabbix 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-agentZabbixエージェントでコマンドを実行し、値を取得できるか確認します。
# 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 設定のエクスポート
エクスポートした設定情報をインポートするには[設定]→[エクスポート/インポート]より行います。右上のプルダウンメニューよりインポートを選択します。[ファイルをインポート]にインポートしたいXMLファイルを指定し、[インポート]をクリックします。

画面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-sysvinitSNMPTTをインストールために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"
※ローカルホストでの実行後
/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
下記の場合、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を作成します。「設定」 -> 「テンプレート」をクリックし、右上の「テンプレートの作成」をクリックします。
下部にある「追加」をクリックし作成します。
「Template SNMP Trap」が新規作成されていることを確認します。
Trap監視用アイテムの作成
「Template SNMP Trap」の「アイテム」をクリックします。
右上の「アイテムの作成」をクリックします。
下記を入力または選択し下部の「追加」をクリックします。
名前:SNMPトラップ(テスト用) タイプ:SNMPトラップ キー:snmptrap["General"] データ型:文字列 アプリケーションの作成:SNMP Trap※キー:snmptrap の引数は必ずダブルクオート「"」で括ってください。シングルクオート「'」で括ると正しく動作しません。
キー設定時に「General event」を指定する場合、snmptrap["General event"]とせず、snmptrap[General event]に設定しないと検知してくれませんでした。
下記のように作成されます。
ホストの設定
[設定] → [ホスト] からSNMPインターフェースを設定するホストをクリックします。「ホスト」タブを選択して、SNMPインターフェースの「追加」をクリック、IPアドレスを入力します。
※SNMPインターフェースの追加設定をしていない場合、アイテムやトリガー作成時にエラーが表示されてしまいますので注意してください。
[テンプレート]タブを選択し、[選択]をクリックします。作成したトラップ監視テンプレートにチェックを入れて[選択]をクリックします。
[追加]をクリックします。
「テンプレートとのリンク」にトラップ監視テンプレートが表示されていることを確認し「更新」ボタンをクリックすればホストの設定完了です。
トリガーの設定
参考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, $-*
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)のトリガーを選択し、右上の「トリガーの作成」をクリックします。
名前:SNMP Trap TEST
条件式:{neko.bigbang.dyndns.org:snmptrap["General"].iregexp(*)}=1
条件式:{neko.bigbang.dyndns.org:snmptrap[General].iregexp(*)}=1
※トリガー関数にiregexp(*)を使い、収集したアイテムをすべて検知させます。
※文字列で絞り込みたい場合は*部分を文字列にします。
Trapを送信し、Zabbixで検知されればOKです。[監視データ]->[概要]をクリック、フィルタをかけて表示させます。
グループ:すべて
タイプ:データ
アプリケーションによるフィルター:SNMP Trap
表示された時刻をクリックし「最新の値」をクリックすると内容が表示されます。
「最新の値」をクリックしても内容が表示されない場合、[ズーム]で「すべて」をクリックすると表示されます。
●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
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 ファイルを読み込みます。
-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
/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
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"
/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
# 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
***** 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.versionMySQLを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>
※パスワードは適切な文字列で設定してください。
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] 335453058templateを適用して 問題なく動作していれば、監視画面の[監視データ]->[概要]で確認することができます。
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 $ exitpg_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 postgresqlzbx_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 # cdzabbix_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
# 各データベースの情報
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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
#!/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
# 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」や「仮想マシン」が下図のように登録されます。

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_64zabbixのバージョンはバックアップ元の方が新しいです。
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.
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_64zabbixデータベースを作成しましたが、中身が空の状態です。監視画面に接続すると下記のようなエラーが表示されました。
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_64zabbixデータベースを作成しましたが、中身が空の状態です。監視画面に接続すると下記のようなエラーが表示されました。
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
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
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.orgZabbixサーバの/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'); ← 変更図は下記のようになり、時間軸のフォントが小さくなって読みにくくなります。

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

●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 installconfigureのオプション設定は利用する機能に応じて変更してください。インストール手順に関しては、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-serverZabbixのリポジトリを更新します。
# 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 foundzabbix_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://
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-UDSCentOS 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/Tokyophp-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.soserver-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 httpdhttp://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 httpdhttp://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. |
上記の場合、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. |
上記の場合、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 parameterValueCacheSize(デフォルトは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=SMTPmilter-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時点、一括で無効にする方法は分かりませんでした。