マクロとその動作についての理解

出典: Nagios 3翻訳プロジェクト Wiki

目次

マクロ Macros

Nagiosがとても柔軟である主要な特徴のひとつにコマンド定義でマクロを使えるという能力があります。マクロはあなたのコマンドで、ホスト、サービスやその他のソースからの情報参照を許可します。


Macroの代替 - マクロの動作 Macro Substitution - How Macros Work

Nagiosでコマンドを実行する前に、コマンド定義の対応する値を見つけることができれば、それはどんなマクロでも置き換えることができます。このマクロの代替はNagiosが実行する様々なコマンドのタイプで発生します - ホストとサービスチェック、通知、イベントハンドラ、その他。

特定のマクロは他のマクロ自身を含むかもしれません。 それらは、 $HOSTNOTES$, $HOSTNOTESURL$, $HOSTACTIONURL$, $SERVICENOTES$, $SERVICENOTESURL$, and $SERVICEACTIONURL$ マクロを含みます。

例 1: ホストアドレスマクロ Example 1: Host Address Macro

コマンド定義でホストとサービスのマクロを使う際、これらはコマンドが実行されているホストかサービスの値を参照します。例を示しましょう。我々はホスト定義を用いて 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%

とてもシンプルでしょう? この美しさは、無制限のホストのチェックに、 1つのコマンド定義を使うことができるということです。各々のホストのアドレスが、実行前にコマンドラインに自動的に代入されるので、各々のホストは同じコマンド定義でチェックすることができます


例 2: コマンド引数マクロ Example 2: Command Argument Macros

あなたはコマンドに引数を持たせることが出来、 それはコマンド定義よりむしろ元の形のまま手軽に行えます。 引数はオブジェクト定義 (例 ホストやサービス)で指定し、コマンド名からはエクスクラメーションマーク(!)で区切ります:

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%

豆知識: もし、あなたが、感嘆符 (!) の文字をコマンド引数で用いる必要がある場合、バックスラッシュ (\) でエスケープします。もしあなたが、コマンド引数の中でバックスラッシュを含む必要がある場合、それらもバックスラッシュでエスケープしなくてはいけません


オンデマンドマクロ On-Demand Macros

通常、コマンド定義でホストとサービスのマクロを使う時、コマンドが実行されているホストやサービスの値を参照します。例えば、ホストチェックコマンドが"linuxbox"という名前に対して実行される時、全ての 基本ホストマクロ はホスト("linuxbox") の値を参照します。

コマンドの中で別のホストやサービス(コマンドを実行していないホスト)の値を参照したいのであれば、 "オンデマンド"マクロと呼ばれるものを使うことができます。オンデマンドマクロは通常のマクロに見えますが、ホストやサービスが得るべき値を含んでいる事だけが違います。以下にあるのは基本的なオンデマンドマクロのフォーマットです:

  • $HOSTMACRONAME:host_name$
  • $SERVICEMACRONAME:host_name:service_description$

HOSTMACRONAMEとSERVICEMACRONAMEをここで見つけられる、サービスマクロの標準のホストのひとつの名前に置き替えてください。

マクロ名がコロン(:)によってホストかサービス識別子と分けられる事に注意してください。またオンデマンドサービスマクロのために、サービス識別子がコロン(:)によって分けられたホスト名とサービス記述の両方から成ります。

On-demand service macros can contain an empty host name field. In this case the name of the host associated with the service will automatically be used.


オンデマンドホストとサービスマクロの例は次の通り:

$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

また、オンデマンドマクロもホストグループ、サービスグループ、コンタクトおよびコンタクトグループマクロに利用可能です。 例えば:

$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


オンデマンドグループマクロ On-Demand Group Macros

あなたは、あなたのオンデマンドマクロ宣言のための特別なフォーマットを使用することによって、特定のグループにおける全てのコンタクト、ホスト、またはサービスのまたがってマクロの値を得ることができます。あなたは以下のように、オンデマンドマクロにおける特定のホストグループ、サービスグループ、またはコンタクトグループ名に参照をつけることによってこれをします。:

  • $HOSTMACRONAME:hostgroup_name:delimiter$
  • $SERVICEMACRONAME:servicegroup_name:delimiter$
  • $CONTACTMACRONAME:contactgroup_name:delimiter$

HOSTMACRONAME、SERVICEMACRONAMEとCONTACTMACRONAMEを、 ここで見つけられる標準のホスト、サービスまたはコンタクトのひとつの名前に置き替えてください。あなたが指定するデリミタは、各グループメンバーのためのマクロ値を切り離すのに使用されます。

例えば、以下のマクロはhg1ホストグループのメンバーであるホストのための、ホスト状態のidのコンマで切り離されたリストを返すでしょう:

$HOSTSTATEID:hg1:,$

This macro definition will return something that looks like this: 

このマクロ定義はこれに似ている何かを返すでしょう:

0,2,1,1,0,0,2

カスタム可変マクロ Custom Variable Macros

Any 「custom object variables」that you define in host, service, or contact definitions are also available as macros. あなたがホスト、サービスまたはコンタクト定義において定義するどんな カスタムオブジェクト変数もマクロとして利用可能です。カスタム可変マクロは以下の通り指定されます:

  • $_HOSTvarname$
  • $_SERVICEvarname$
  • $_CONTACTvarname$

"_MACADDRESS"と呼ばれているカスタム変数の、以下のホスト定義で取ってください…

define host{

	host_name		linuxbox

	address		        192.168.1.1

	_MACADDRESS	        00:01:02:03:04:05

	...

	}

_MACADDRESSのカスタム変数は、$_HOSTMACADDRESS$と呼ばれるマクロで利用可能でしょう。カスタムオブジェクト変数と、それらをマクロにどのように使用できるかに関する詳しい情報をここで見つけることができます。


マクロ浄化 Macro Cleansing

実行されるべきコマンドに代用する前に、潜在的に危険なシェルメタ文字列をいくつかのマクロから取り去ります。マクロからどのキャラクタを取り去るかはillegal_macro_output_charsの設定内容に依ります。潜在的に危険な文字列は以下のマクロから取り去られます:

  1. $HOSTOUTPUT$
  2. $LONGHOSTOUTPUT$
  3. $HOSTPERFDATA$
  4. $HOSTACKAUTHOR$
  5. $HOSTACKCOMMENT$
  6. $SERVICEOUTPUT$
  7. $LONGSERVICEOUTPUT$
  8. $SERVICEPERFDATA$
  9. $SERVICEACKAUTHOR$
  10. $SERVICEACKCOMMENT$


環境変数としてのマクロ Macros as Environment Variables

ほとんどのマクロを環境変数として簡単に参照できるように、Nagiosによって実行されるスクリプトかコマンドで利用可能にします。セキュリティと健全の目的のために、$USERn$、「オンデマンド」ホスト、およびサービスマクロは、環境変数として利用可能にされなかったです。

標準のマクロを含む環境変数は、名前の先頭に"NAGIOS_"を付け加えられて ( ここに記載される)それら一致するマクロ名と同じように命名される。例えば、$HOSTNAME$


利用可能なマクロ

Nagiosで利用可能なすべてのマクロのリストおよびそれらを使用できる時の表をここで見つけることができます。

個人用ツール