マクロ
Nagiosをとてもフレキシブルにする主な特徴の1つは、コマンド定義でマクロが使える機能を持っている事です。 マクロはコマンドのホスト、サービス、および他のソースから参照する事が許されます。
マクロ置換-- マクロはどう働くか
Nagiosがコマンドを実行する前に、コマンド内で見つかったマクロは、それに対応する値で交換されます。 このマクロの代入はNagiosが実行するすべてのタイプのコマンドで行われます--ホストとサービスチェック、通知、イベントハンドラなど
あるマクロは、自身、他のマクロを含むことがあります。 これらは$HOSTNOTES$、$HOSTNOTESURL$、$HOSTACTIONURL$、$SERVICENOTES$、$SERVICENOTESURL$、および$SERVICEACTIONURL$マクロを含んでいます。
例1: ホストアドレスマクロ
コマンド定義でホストとサービスマクロを使用すると、コマンドが実行されている時、ホストかサービスの値を参照します。 例を試しましょう。 私たちがホスト定義を使用していると仮定して、check_ping コマンドの定義はこの様です:
define host{
host_name linuxbox
address 192.168.1.2
check_command check_ping
...
}
define command{
command_name check_ping
command_line /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w 100.0,90% -c 200.0,60%
}
拡張/最終コマンド行はホストチェックコマンドで実行されこの様になります:
/usr/local/nagios/libexec/check_ping -H 192.168.1.2 -w 100.0,90% -c 200.0,60%
かなり簡単でしょう? この美しさは、無制限のホストチェックにただ一つのコマンド定義が使用できるということです。 それぞれのホストは、同じコマンド定義でチェックされます。それはコマンドラインでホストアドレスが自動的に代入されるからです。
例2: コマンド引数マクロ
また、コマンドに引数を渡す事ができます、それは、コマンド定義を一般的に行いたいなら、かなり便利です。 オブジェクト(ホストまたはサービス)定義で指定された引数は、コマンド名と(!)で区切ります。このように:
define service{
host_name linuxbox
service_description PING
check_command check_ping!200.0,80%!400.0,40%
...
}
上の例では、サービスチェックコマンドが2つの引数を持っています(引数は$ARGn$マクロで対応付ける事が出来ます) $ARG1$マクロは「200.0、80%」です、そして、$ARG2$は「400.0、40%」(両方、引用符は付きません)です。 私たちが、前のホスト定義を使用しているとすると、check_ping コマンドはこの様に定義されます:
define command{
command_name check_ping
command_line /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
}
サービスのチェックコマンドのため拡張/最終コマンドラインが実行されます。この様に:
/usr/local/nagios/libexec/check_ping -H 192.168.1.2 -w 200.0,80% -c 400.0,40%
チップ: あなたのコマンド引数で(!)の文字を使う必要があるなら、バックスラッシュでエスケープできます。 また、あなたのコマンド引数にバックスラッシュを含む必要があるなら、それらバックスラッシュでエスケープできます。
オンデマンドマクロ
通常コマンド定義の中でホストとサービスのマクロを使用すると、コマンドが実行される時、ホストかサービスの値が参照されます。 例えば、ホストチェックコマンドが"linuxbox"というホストのために実行されてると、すべての 標準のホストマクロ がそのホスト("linuxbox")の値を参照します。
あなたが、コマンドの中で他のホストやサービスの値を参照したいなら。(コマンドが実行されていない)「オンデマンド」のマクロが使えます。 オンデマンドマクロは普通のマクロに似ています、値を得るためのホストやサービスのIDを含んでいるという事を除いて。 ここに、オンデマンドマクロの基本形式があります:
- $HOSTMACRONAME:host_name$
- $SERVICEMACRONAME:host_name:service_description$
HOSTMACRONAMEとSERVICEMACRONAMEをここで見つかるサービスマクロの標準のホストの一つの名前と取り替えます。
マクロ名がコロンでホストかサービスIDと切り離されることに注意。(:) またオンデマンドサービスマクロについて、サービスIDはホスト名とサービス記述の両方から成ります--これらがコロンで分けられているのは同様です(:)。
チップ: オンデマンドサービスマクロは空のホスト名フィールドを含むことができます。 この場合、サービスに関連しているホストの名前は自動的に使用されます。
オンデマンドのホストとサービスマクロが従う例:
$HOSTDOWNTIME:myhost$ <--- On-demand host macro
$SERVICESTATEID:novellserver:DS Database$ <--- On-demand service macro
$SERVICESTATEID::CPU Load$ <--- On-demand service macro with blank host name field
また、オンデマンドマクロもhostgroup、servicegroup、連絡先、およびcontactgroupマクロで利用可能です。 例えば:
$CONTACTEMAIL:john$ <--- On-demand contact macro
$CONTACTGROUPMEMBERS:linux-admins$ <--- On-demand contactgroup macro
$HOSTGROUPALIAS:linux-servers$ <--- On-demand hostgroup macro
$SERVICEGROUPALIAS:DNS-Cluster$ <--- On-demand servicegroup macro
オンデマンドグループマクロ
オンデマンドのマクロ定義で特別な書式を使うマクロの値を連絡先、ホスト、特定のグループのサービス全てで得ることが出来ます。 要求次第のマクロにおける特定のホストグループ、サービスグループ、または連絡先グループ名に参照をつけることによってこうします:
- $HOSTMACRONAME:hostgroup_name:delimiter$
- $SERVICEMACRONAME:servicegroup_name:delimiter$
- $CONTACTMACRONAME:contactgroup_name:delimiter$
HOSTMACRONAME、SERVICEMACRONAME、およびCONTACTMACRONAMEをここで見つかる標準のホスト、サービス、または連絡先マクロの1つの名前に取り替えます。 指定したデリミタは、各グループメンバーのマクロ値を分けるために使われます。
例えば、以下のマクロはhg1 hostgroupのメンバーであるホストステータスIDのコンマで切り離されたリストを返します:
$HOSTSTATEID:hg1:,$
このマクロ定義はこのように見えるものを返します:
0,2,1,1,0,0,2
カスタム可変マクロ
ホストやサービス定義や連絡先定義の中のどんなカスタムオブジェクト変数もまた、マクロとして利用可能です。 カスタム変数マクロは次に様に命名されます:
- $_HOSTvarname$
- $_SERVICEvarname$
- $_CONTACTvarname$
Take the following host definition with a custom variable called "_MACADDRESS"... "_MACADDRESS”と呼ばれるカスタム変数のホスト定義を使います。」…
define host{
host_name linuxbox
address 192.168.1.1
_MACADDRESS 00:01:02:03:04:05
...
}
_MACADDRESSカスタム変数は、$_HOSTMACADDRESS$と呼ばれているマクロで利用できます。カスタムオブジェクト変数、およびマクロの中でどのようにそれらを使用することができるかについてのより多くの情報は、ここで見つけることができます。
マクロの浄化
実行すべきコマンドにマクロを代入する前に潜在的に危険なシェルメタキャラクタを取り除ります。 マクロからどのキャラクタ取り除くかは illegal_macro_output_chars 指示の設定に依存します。 潜在的に危険なキャラクタは以下のマクロから取り除かれます:
- $HOSTOUTPUT$
- $LONGHOSTOUTPUT$
- $HOSTPERFDATA$
- $HOSTACKAUTHOR$
- $HOSTACKCOMMENT$
- $SERVICEOUTPUT$
- $LONGSERVICEOUTPUT$
- $SERVICEPERFDATA$
- $SERVICEACKAUTHOR$
- $SERVICEACKCOMMENT$
環境変数としてのマクロ
ほとんどのマクロが環境変数として使える様になっているのでNagiosが実行するコマンドやスクリプトで使えます。 セキュリティと健全性の為に、$USERn$、「オンデマンド」のホスト、およびサービスマクロは環境変数として利用できません。
標準のマクロを含む環境変数は、それらが対応するマクロ名と同様に命名されます。(ここに、記載されている)「NAGIOS_」が名前の前に付きます。 例えば、$HOSTNAME$ マクロは環境変数名の「NAGIOS_HOSTNAME」として利用可能でしょう。
利用可能なマクロ
ここにNagiosで利用可能なすべてのマクロリスト、そしてそれらをどんな時、使用できるかのチャートがあります。
参照: 利用可能なマクロリスト