Nagiosプラグインの作成方法(http://zener.blog.51cto.com/937811/727685)
9503 ワード
Nagiosプラグインの作成方法
Nagiosの最も感動的な点は、簡単なガイドラインを理解するだけで、自分のプラグインを簡単に作成できることです.プラグインを管理するために、Nagiosは、サービスのステータスを問い合わせるたびにサブプロセスを生成し、コマンドからの出力および終了コードを使用して特定のステータスを決定します.終了ステータスコードの意味は次のとおりです. OK —終了コード0-サービスが正常に動作していることを示します. WARNING —終了コード1-サービスが警告状態であることを示します. CRITICAL —終了コード2-サービスが危険な状態であることを示します. UNKNOWN —終了コード3-サービスが不明な状態であることを示します.
最後のステータスは、通常、プラグインがサービスのステータスを特定できないことを示します.たとえば、内部エラーが発生した可能性があります.
次に、UNIXを確認するためのPythonのスクリプトの例を示します.® 平均負荷2.0以上のレベルは警告状態を表し、5.0以上のレベルは危険状態を表すと仮定します.これらの値はいずれもハードコーディング方式を採用し、常に最近の1分間の平均負荷を使用する.
インベントリ5.Pythonプラグイン-ワークプラグインの例
この小さな実行可能プラグインを作成した後、Nagiosを使用してプラグインを登録し、平均負荷をチェックするサービス定義を作成します.
この作業も簡単です.次の内容を使用して名前を作成します.
インベントリ6.例示的なプラグイン-Nagiosを使用して登録
インベントリ7.例示的なプラグインを使用するサービスを作成する
完全なプラグインを作成
前述の例では、ランタイム構成をサポートしない「ハードコーディング」方式のプラグインの制限について説明します.実際には、通常、構成可能なプラグインを作成するのが最善です.このようにして、Nagiosを使用して単一のプラグインとして登録し、特定の状況の警告と危険レベルをカスタマイズするためにパラメータを渡すプラグインを作成および維持できます.次の例には、使用メッセージも含まれます.これは、いくつかの異なる開発者または管理者が使用または維持するプラグインにとって非常に価値があることが確認されました.
もう1つの良い実践は、すべての異常をキャプチャし、UNKNOWNサービスステータスを報告するために後退し、Nagiosがこの状況に関する通知を正しく管理できるようにすることである.異常な「失敗」を許可するプラグインは、通常終了し、値1を返します.Nagiosの場合、これはWARNING状態を表す.プラグインがWARNINGとUNKNOWNを正しく区別できることを確認してください.たとえば、UNKNOWNの結果として処理する場合にエラーが発生する可能性がある場合は、通常、WARNING通知の少なくとも一部を無効にすることができます.
Pythonでプラグインを作成
上記の推奨事項-実行時のパラメータ化、メッセージの使用、および改善された例外処理-前の数倍のサンプルプラグインのソースコードが得られます.ただし、エラーをより安全に処理でき、プラグインをより広い範囲で再利用できます.
インベントリ8.Pythonプラグイン-平均負荷の完全なプラグインを取得
この新しいプラグインを使用するには、次の方法で登録する必要があります.
インベントリ9.Pythonプラグイン-Nagiosを使用して登録
なお、以下の例によれば、
インベントリ10.Pythonプラグインを使用したサービスを作成する
Tclでプラグインを作成
最後の例は、単純オブジェクトアクセスプロトコル(SOAP)とWebサービス記述言語(WSDL)を使用してxmenthods.netの為替レートをチェックするTclを使用して作成されたプラグインです.SOAPは、プラグインに為替レートの現在の値を提供し、これらの値を構成の範囲と比較します.この値が警告の範囲外であればOKとみなされます.この値が警告レベルより大きいか小さいが、危険限界を超えていない場合は、状態をWARNINGに設定します.ネットワークエラーが発生しない限り、CRITICALに設定します.この場合、ステータスをUNKNOWNに設定します.
このプラグインは、異なる範囲の為替レートをチェックできるように、異なる構成可能なパラメータを識別することができます.また、各国の様々な為替レートをチェックすることもできます.
インベントリ11.Tclプラグイン-現在の為替レートを検証
Nagiosが呼び出す方法を知るために、このコマンドを登録する必要があります.この作業を完了するには、前と同様の構成とコマンド定義を使用して、次の名前を作成します.
次の例では、コマンドの名前を
次に、作成したばかりのプラグインを使用して為替レートを監視するサービスを作成します.次に、サービス定義を示します.
インベントリ12.新しいサービスとしてTclプラグインを追加
終わりの言葉
Nagiosを使用して、すべてのタイプのハードウェアとソフトウェアを監視できます.独自のプラグインを作成することで、Nagiosサーバと通信するさまざまなオブジェクトを監視できます.管理コマンドラインパラメータと終了ステータスの計算言語を使用できるように、さまざまな可能性があります.
高度なシステム管理者は、Tclまたは他の言語を使用してSOAPの例を拡張し、内部ネットワークのWebサービスと通信し、サービスの動作の正確性を検証するためにプラグインを作成することができます.
また、Cプラグインを使用するか、お気に入りの動的言語にCを埋め込むこともできます(Pythonでは、
Nagiosの最も感動的な点は、簡単なガイドラインを理解するだけで、自分のプラグインを簡単に作成できることです.プラグインを管理するために、Nagiosは、サービスのステータスを問い合わせるたびにサブプロセスを生成し、コマンドからの出力および終了コードを使用して特定のステータスを決定します.終了ステータスコードの意味は次のとおりです.
最後のステータスは、通常、プラグインがサービスのステータスを特定できないことを示します.たとえば、内部エラーが発生した可能性があります.
次に、UNIXを確認するためのPythonのスクリプトの例を示します.® 平均負荷2.0以上のレベルは警告状態を表し、5.0以上のレベルは危険状態を表すと仮定します.これらの値はいずれもハードコーディング方式を採用し、常に最近の1分間の平均負荷を使用する.
インベントリ5.Pythonプラグイン-ワークプラグインの例
#!/usr/bin/env python import os,sys (d1, d2, d3) = os.getloadavg() if d1 >= 5.0: print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1) sys.exit(2) elif d1 >= 2.0: print "GETLOADAVG WARNING: Load average is %.2f" % (d1) sys.exit(1) else: print "GETLOADAVG OK: Load average is %.2f" % (d1) sys.exit(0)
この小さな実行可能プラグインを作成した後、Nagiosを使用してプラグインを登録し、平均負荷をチェックするサービス定義を作成します.
この作業も簡単です.次の内容を使用して名前を作成します.
/etc/nagios-plugins/config/mygetloadavg.cfg
のファイルは、次の例に従って、 services.cfg
ファイルにサービスを追加します.覚えておいてください. hosts.cfg
プロファイルの定義 localhost
. インベントリ6.例示的なプラグイン-Nagiosを使用して登録
define command{ command_name check_mygetloadavg command_line /path/to/check_getloadavg }
インベントリ7.例示的なプラグインを使用するサービスを作成する
define service{ use service-template host_name localhost service_description LoadAverage check_period 24x7 contact_groups server-admins notification_options c,r check_command check_mygetloadavg }
完全なプラグインを作成
前述の例では、ランタイム構成をサポートしない「ハードコーディング」方式のプラグインの制限について説明します.実際には、通常、構成可能なプラグインを作成するのが最善です.このようにして、Nagiosを使用して単一のプラグインとして登録し、特定の状況の警告と危険レベルをカスタマイズするためにパラメータを渡すプラグインを作成および維持できます.次の例には、使用メッセージも含まれます.これは、いくつかの異なる開発者または管理者が使用または維持するプラグインにとって非常に価値があることが確認されました.
もう1つの良い実践は、すべての異常をキャプチャし、UNKNOWNサービスステータスを報告するために後退し、Nagiosがこの状況に関する通知を正しく管理できるようにすることである.異常な「失敗」を許可するプラグインは、通常終了し、値1を返します.Nagiosの場合、これはWARNING状態を表す.プラグインがWARNINGとUNKNOWNを正しく区別できることを確認してください.たとえば、UNKNOWNの結果として処理する場合にエラーが発生する可能性がある場合は、通常、WARNING通知の少なくとも一部を無効にすることができます.
Pythonでプラグインを作成
上記の推奨事項-実行時のパラメータ化、メッセージの使用、および改善された例外処理-前の数倍のサンプルプラグインのソースコードが得られます.ただし、エラーをより安全に処理でき、プラグインをより広い範囲で再利用できます.
インベントリ8.Pythonプラグイン-平均負荷の完全なプラグインを取得
#!/usr/bin/env python import os import sys import getopt def usage(): print """Usage: check_getloadavg [-h|--help] [-m|--mode 1|2|3] \ [-w|--warning level] [-c|--critical level]" Mode: 1 - last minute ; 2 - last 5 minutes ; 3 - last 15 minutes" Warning level defaults to 2.0 Critical level defaults to 5.0""" sys.exit(3) try: options, args = getopt.getopt(sys.argv[1:], "hm:w:c:", "--help --mode= --warning= --critical=", ) except getopt.GetoptError: usage() sys.exit(3) argMode = "1" argWarning = 2.0 argCritical = 5.0 for name, value in options: if name in ("-h", "--help"): usage() if name in ("-m", "--mode"): if value not in ("1", "2", "3"): usage() argMode = value if name in ("-w", "--warning"): try: argWarning = 0.0 + value except Exception: print "Unable to convert to floating point value
" usage() if name in ("-c", "--critical"): try: argCritical = 0.0 + value except Exception: print "Unable to convert to floating point value
" usage() try: (d1, d2, d3) = os.getloadavg() except Exception: print "GETLOADAVG UNKNOWN: Error while getting load average" sys.exit(3) if argMode == "1": d = d1 elif argMode == "2": d = d2 elif argMode == "3": d = d3 if d >= argCritical: print "GETLOADAVG CRITICAL: Load average is %.2f" % (d) sys.exit(2) elif d >= argWarning: print "GETLOADAVG WARNING: Load average is %.2f" % (d) sys.exit(1) else: print "GETLOADAVG OK: Load average is %.2f" % (d) sys.exit(0)
この新しいプラグインを使用するには、次の方法で登録する必要があります.
/etc/nagios-plugins/config/mygetloadavg2.cfg
: インベントリ9.Pythonプラグイン-Nagiosを使用して登録
define command{ command_name check_mygetloadavg2 command_line /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$ }
なお、以下の例によれば、
services.cfg
ファイルにサービスエントリを追加または変更します.感嘆符の使用にご注意ください !
で行ないます.前と同じように、 hosts.cfg
プロファイルの定義 localhost
. インベントリ10.Pythonプラグインを使用したサービスを作成する
define service{ use service-template host_name localhost service_description LoadAverage2 check_period 24x7 contact_groups server-admins notification_options c,r check_command check_mygetloadavg2!1!3.0!6.0 }
Tclでプラグインを作成
最後の例は、単純オブジェクトアクセスプロトコル(SOAP)とWebサービス記述言語(WSDL)を使用してxmenthods.netの為替レートをチェックするTclを使用して作成されたプラグインです.SOAPは、プラグインに為替レートの現在の値を提供し、これらの値を構成の範囲と比較します.この値が警告の範囲外であればOKとみなされます.この値が警告レベルより大きいか小さいが、危険限界を超えていない場合は、状態をWARNINGに設定します.ネットワークエラーが発生しない限り、CRITICALに設定します.この場合、ステータスをUNKNOWNに設定します.
このプラグインは、異なる範囲の為替レートをチェックできるように、異なる構成可能なパラメータを識別することができます.また、各国の様々な為替レートをチェックすることもできます.
インベントリ11.Tclプラグイン-現在の為替レートを検証
#!/usr/bin/env tclsh # parse arguments package require cmdline set options { {country1.arg "" "Country 1"} {country2.arg "" "Country 2"} {lowerwarning.arg "" "Lower warning limit"} {upperwarning.arg "" "Upper warning limit"} {lowercritical.arg "" "Lower critical limit"} {uppercritical.arg "" "Upper critical limit"} } array set opt [cmdline::getoptions argv $options {: [options]}] # if the user did not supply all arguments, show help message for each necessary [array names opt] { if {$opt($necessary) == ""} { set argv "-help" catch {cmdline::getoptions argv $options {: [options]}} usage puts stderr $usage exit 3 } } # load TclWebServices package package require WS::Client if {[catch { # download WSDL WS::Client::GetAndParseWsdl \ http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl \ {} currency # create stub commands WS::Client::CreateStubs currency # download the actual exchange rate set result [lindex \ [currency::getRate "England" "Japan"] 1] } error]} { # if downloading the rate failed for some reason, report it puts "EXCHANGERATE UNKNOWN: $error" exit 3 } if {($result < $opt(lowercritical)) || ($result > $opt(uppercritical))} { puts "EXCHANGERATE CRITICAL: rate is $result" exit 2 } if {($result < $opt(lowerwarning)) || ($result > $opt(upperwarning))} { puts "EXCHANGERATE WARNING: rate is $result" exit 1 } puts "EXCHANGERATE OK: rate is $result" exit 0
Nagiosが呼び出す方法を知るために、このコマンドを登録する必要があります.この作業を完了するには、前と同様の構成とコマンド定義を使用して、次の名前を作成します.
/etc/nagios-plugins/config/exchangerate.cfg
のファイル:command_line /path/to/check_exchangerate -country1 $ARG1$ -country2 $ARG2$ -lowercritical \ $ARG3$ -lowerwarning $ARG4$ -upperwarning $ARG5$ -uppercritical $ARG6$
次の例では、コマンドの名前を
check_exchangerate
. 次に、作成したばかりのプラグインを使用して為替レートを監視するサービスを作成します.次に、サービス定義を示します.
localhost
サーバが関連付けられます.このチェックは、物理ホストに実際に関連付けられていませんが、ホストにバインドする必要があります.このチェックが信頼されたネットワーク内のサーバを呼び出すSOAPメソッドに関連している場合は、監視が必要な実際のサーバを追加できます.この例では、サービスをサーバにバインドする必要があります.インベントリ12 のコードはポンド対円の為替レートをチェックし、為替レートが225から275の間にあることを検証します.インベントリ12.新しいサービスとしてTclプラグインを追加
define service{ use service-template host_name localhost service_description EXCHANGERATE check_period 24x7 contact_groups other-admins notification_options c,r check_command check_exchangerate!England!Japan!200!225!275!300 }
終わりの言葉
Nagiosを使用して、すべてのタイプのハードウェアとソフトウェアを監視できます.独自のプラグインを作成することで、Nagiosサーバと通信するさまざまなオブジェクトを監視できます.管理コマンドラインパラメータと終了ステータスの計算言語を使用できるように、さまざまな可能性があります.
高度なシステム管理者は、Tclまたは他の言語を使用してSOAPの例を拡張し、内部ネットワークのWebサービスと通信し、サービスの動作の正確性を検証するためにプラグインを作成することができます.
また、Cプラグインを使用するか、お気に入りの動的言語にCを埋め込むこともできます(Pythonでは、
Pyinline
;Perlの場合、 Inline
;あるいはTclに対して、 Critcl
)を使用して、オペレーティングシステムのC APIをプラグイン(高度な言語で記述)と組み合わせることができます.