2020年12月5日土曜日

OSSのロードバランサ「ZEVENET Community Edition」にてカスタムモニター (Farmguardian) を作成する

先日から、OSSのロードバランサ「ZEVENET」を自宅環境に導入しており、半月ほど使用しているが、特に不具合も発生せず問題なく動作している。

★過去の記事はこちら。

今回はZEVENETでカスタムモニター (Farmguardian) の作成する手順について記載する。

カスタムモニターとは

一般的に、ロードバランサでは、負荷分散対象のサーバに対して通信ができるかどうかを一定間隔で監視する機能が備わっており、「モニター」であるとか「ヘルスチェック」などと呼ぶことが多い。ZEVENETでは、このモニターの設定を「Farmguardian」と呼ぶが、分かりづらいので本記事では「モニター」と呼ぶことにする。

ZEVENETでは、プロキシ、メール、DNS、NTPの通信を2台のサーバに負荷分散させる用途で使用しており、プロキシとメールに関してはTCPの通信となるため、「check_tcp」と呼ばれるモニターにてTCPのポート開放を定期的にチェックすることで、サーバの監視を行うことができる。

DNSとNTPはUDPの通信であり、ZEVENETにはデフォルトで「check_udp」と呼ばれるモニターが用意されているのだが、この「check_udp」は正常に動作しないことに気づいた。以下が実際にDNSに対してcheck_udpのモニターを設定した結果となるが、正常に監視が行われずにDownステータスになってしまっている。

今回上記を解消する手順を確認したので記載する。この手順を応用すれば、ZEVENETのOSコマンドでチェックできる機能であれば、自由にカスタムモニターを作ることができる。今回は、「UDP」と「DNS」のチェック方法を例に設定方法を記載する。

環境

  • ESXi 6.7 Update 3
  • ZEVENET Community Edition 5.11

手順

1. 「/usr/lib/nagios/plugins」にモニター用のスクリプトを確認

マニュアルには明確に記載されていないが、ZEVENETでモニターを作成する際は、必ず「/usr/lib/nagios/plugins」にモニター用のスクリプトを作成する必要がある。このディレクトリ以外に配置されているOSコマンドやスクリプトでは正常に動作しないので注意すること。

なお、デフォルトでも多数のスクリプトが配置されている。

# cd /usr/lib/nagios/plugins
# ls -l
合計 2552
-rwxr-xr-x 1 root root  55952  5月 13  2018 check_apt
-rwxr-xr-x 1 root root   2315  5月 13  2018 check_breeze
-rwxr-xr-x 1 root root  60432  5月 13  2018 check_by_ssh
lrwxrwxrwx 1 root root      9  5月 13  2018 check_clamd -> check_tcp
-rwxr-xr-x 1 root root  43504  5月 13  2018 check_cluster
-rwxr-xr-x 1 root root  64208  5月 13  2018 check_dbi

~(以下略)~

これらのヘルプを確認して使えそうなスクリプトがあれば当然使用できる。ヘルプは./<スクリプト名> -hで確認することができる。

# ./check_dns -h
check_dns v2.2 (monitoring-plugins 2.2)
Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>
Copyright (c) 2000-2008 Monitoring Plugins Development Team
        <devel@monitoring-plugins.org>

This plugin uses the nslookup program to obtain the IP address for the given host/domain query.
An optional DNS server to use may be specified.
If no DNS server is specified, the default server(s) specified in /etc/resolv.conf will be used.


Usage:
check_dns -H host [-s server] [-a expected-address] [-A] [-t timeout] [-w warn] [-c crit]

Options:
 -h, --help
    Print detailed help screen
 -V, --version

~(以下略)~

2. カスタムモニター用のスクリプトを作成

今回はあえてカスタムモニター用のスクリプトを作成し、ZEVENETに登録することにする。

UDPチェック用のスクリプトを「check_udp2」、DNSチェック用のスクリプトを「check_dns2」として以下の通り作成した。それぞれ第1引数にチェック対象のホストのIPアドレス (またはホスト名)、第2引数にチェック対象のポート番号を指定して実行する作りとする。

UDPチェックはncコマンドでポート開放をチェックする。

# cat /usr/lib/nagios/plugins/check_udp2
------------------------------
#!/bin/bash

HOST=$1
PORT=$2

nc -unvz ${HOST} ${PORT}
------------------------------

DNSチェックはdigコマンドを使い、example.comの名前解決をできるかどうかでDNSのサービスの状態をチェックする。

# cat /usr/lib/nagios/plugins/check_dns2
------------------------------
#!/bin/bash

HOST=$1
PORT=$2

dig @${HOST} example.com -p ${PORT} +short +time=3 +tries=3
------------------------------

最後にスクリプトに実行権限を付けておく。

# chmod +x /usr/lib/nagios/plugins/check_udp2
# chmod +x /usr/lib/nagios/plugins/check_dns2

3. モニター (Farmguardians) を作成

管理GUIにログインし、「Monitoring」→「Farmguardians」にて「CREATE FARMGUARDIAN」を選択する。

Farmguardianの設定は以下の通りとする。Commandの「HOST」はチェック対象のホストのIPアドレス (またはホスト名)、「PORT」はチェック対象のポート番号を示す変数となる。Intervalは負荷分散対象にチェックを行う間隔となるので、要件に応じて設定すればよい。

設定項目 設定値 (UDPチェック) 設定値 (DNSチェック)
Name check_udp2 check_dns
Command check_udp2 HOST PORT check_dns2 HOST PORT
Interval 15 seconds 15 seconds

4. Farmの設定を修正

「LSLB」→「Farms」で修正対象のFarmの「Edit」ボタンを選択する。

「Health Checks for backend」を先ほど作成したモニターに設定変更する。なお、ZEVENETではなぜか本設定を変更すると「Submit」ボタンを押すことなく即座に設定反映されてしまうので、設定時は注意が必要となる (反映された旨が、自動的に右下にメッセージとして表示される)。

5. 動作確認

設定変更後、「Monitoring」→「Farm Stats」を確認し、負荷分散対象がUpステータスになっていることを確認する。

まとめ

ZEVENETのカスタムモニターは、「/usr/lib/nagios/plugins」にモニター用のスクリプトを配置するということに注意すれば、OSコマンドを利用することで簡単にカスタマイズすることができる。

応用すれば、例えばOracle DBなどを監視させる場合もsqlplusなどを使って実装することもできるだろう。

参考

0 件のコメント:

コメントを投稿

人気の投稿