Presented by DMZ. (非武装エリア)
最終更新日: 2021年11月7日
(This site is not official.)

Topに戻る

DNSサーバーの稼働確認/監視対象側でスクリプトを実行

Zabbixサーバー側からDNSサーバーの状況を確認するには、nslookupコマンドを使った方法で確認できます。
通常、シェルコマンドでnslookupコマンドを実行する場合は次のコマンドを実行します。

# nslookup -timeout=1 検索したいDNS名 127.0.0.1 ; ret=$?
# echo $ret

このコマンドが正常に実行されると自分自身のDNSサーバーに登録されている<検索したいDNS名>の情報を検索して、実行結果のステータスとして ret に 0 が返されます。 また失敗した場合には ret の値は 0 以外になります。このコマンドをZabbixにて定期的に実行することで、DNSサーバーが正常に動作しているかを検知できるようにします。
Zabbixサーバーからリモートホストへのコマンド実行するには、コマンドをスクリプトとして作成して特定のフォルダーに保存しておく必要があります。 デフォルトでスクリプトを置くフォルダーは次のコマンドで確認できます。

# zabbix_server --help | grep ExternalScripts
ExternalScripts "/etc/zabbix/externalscripts"

以下の手順で作成するスクリプトをこのフォルダーに置いてください。 また、フォルダーの場所をデフォルトから別の場所に変更したい時には /etc/zabbix/zabbix_server.conf ファイルでExternalScriptsを指定してください。
  1. /etc/zabbix/externalscripts/ck_nslookup.sh の作成
/etc/zabbix/externalscriptsフォルダーが存在しない場合には、先にフォルダーを作成します。

# mkdir /etc/zabbix/externalscripts

チェック用スクリプトを作成します。
(/etc/zabbix/externalscripts/ck_nslookup.sh)

#!/bin/bash
# -------------------------------------------------
# This command is DNS service available check.
# -------------------------------------------------
/usr/bin/nslookup -timeout=1 -retry=1 www.robata.org localhost > /dev/null 2>&1; ret=$?
echo $ret

監視対象ホスト側で実行させるスクリプトには引数が指定できない為、スクリプト中で検索するFQDN名(www.robata.org)を直接指定しています。 また、DNSサーバーの以上でタイムアウトとなる場合に、その応答がない時間が長いとZabbix側でぇdスクリプトの実行を諦めてしまうので、-retry=1とする事で最短時間でタイムアウトを認識するようにしています。
つづいて作成したスクリプトに実行権限を与えます。

# chmod +x /etc/zabbix/externalscripts/check_nslookup.sh


作成したシェルスクリプトを試してみましょう。

# /etc/zabbix/externalscripts/check_nslookup.sh <検索したいDNS名>

<検索したいDNS名>にはそのDNSサーバーに登録されているDNS名を指定して実行します。その結果、正常に検索できると 0 が返り、それ以外のI場合には 0 以外の値は返ってきます。


■ 監視アイテム作成

[設定] - [ホスト] から監視対象のサーバを選び、設定画面の [アイテム]タブを開き [アイテムの作成] をクリックします。
次のようなアイテムを作成します。
以上を設定したら保存前に[テスト]を実行して値がとれているか確認します。
ホストアドレスには監視対象のホストのIPアドレスが表示されているのを確認し、[値の取得とテスト]を実行すると"値"のフィールドに実行した結果の値が表示されます。 
これが問題なければ、[追加]をクリックして内容を保存します。


■ トリガーの作成

作成したアイテムによって、定期的にDNSのチェックがされてるようになったなら、この値が変動した時に実行されるトリガーを作っていきます。[トリガー]タブを開き [トリガーの作成] をクリックします。
(1) まず、DNSサーバーに障害が発生したと判断するトリガーを作成します。
条件式として判定に使うアイテムと、その判定基準を定義します。 ここでは"Local DNS check"というアイテムが0以外だった場合に障害と判定します。
条件式を指定できたら、[追加]をクリックしてトリガーを登録します。 以上で、DNSサーバーに問題がある場合にこのトリガーが"重度の障害"として発生されます。


以上で、DNSの監視設定は完了です。 これで、DNSサービスに障害が発生して何も応答が得られない時には、Zabbixは重度の障害として報告するようになります。


Topに戻る