サーバーのソフトウェア・コンポーネントを監視する場合、時には 監視するメトリクスのパフォーマンスに関する追加情報を見つける必要があるかもしれません。

アラートメールでの追加情報送信

25%というのは、一つの CPU が 25% なのか、他の 3つのCPUが 100% の状態で一つの CPU が25% なのか、あるいは何時間も負荷がかかりすぎた I/O トランザクションによってブロックされ、システムの温度が最大に上昇しているコンピュータで過負荷になっている CPU が 25% なのか、異なる背景が考えられるため、文脈を合わせる必要があります。

“25” には、いろいろな意味があるのではないでしょうか? もう少し掘り下げてみましょう

上記の流れで、管理しているサーバーの CPU 使用率を測定し、コンピューター管理者にメールで通知する閾値を定義したとします。

この閾値(CRIT for CPU > 80)は、以下のようにモジュール設定に反映されます。

アラートはテンプレートを使って定義されます “障害状態”で、特定のメールボックスに送信するためにカスタムメール送信のアクションを使用しています。

さて、ここまでは基本的なことです。

しかし、問題についての追加情報、必要なときだけ収集するもの、自動的に解決策を見つけるのに役立つリアルタイムの情報などを送れるようにしたいと思うかもしれません。

でも… Pandora FMS はこんなことができるのでしょうか?

さて、他のモジュールを参照するアラートマクロを使用して、他のモジュールの情報をメールに含めることができます。

マクロの全リストはドキュメントで ご確認いただけますが、ここではいくつかの興味深い マクロを 簡単にまとめてご紹介します。

moduledata_X_: アラートを発報したモジュールと同じエージェントの “X” モジュールのデータを表示します。

そうすると、LoadAVG というモジュールがある場合、マクロ_moduledata_LoadAVG_ を呼び出すと、システムロードの値を取り込むことができます。

同様に、そのモジュールの過去24時間のグラフを表示するには、マクロ _modulegraph_LoadAVG_24_を使用します。

*このグラフに関する最後のものはまだ実験的なもので、バージョン772までは誰でも使えるというわけではありません。

表示手順

モジュールが障害状態になった場合の対処法を、何らかの指示や手順としてテキストで記載することも可能です。 そのため、_alert_critical_instructions_ マクロは、このような場合のために当該モジュールで設定したテキストを返します。

過去のデータを表示する

また、警告が発生する前の状態のデータを表示したいと思うかもしれませbb、そのためには、マクロ_prevdata_を使用します。

エージェント情報カスタムフィールドを表示する

データを収集するエージェントに、ID 7 と ID 9 のカスタムエージェントフィールドとして、システム管理者の名前とその電話番号を伝えるフィールドがあるとします。

そのために、macro_agentcustomfield_n_をmacro_agentcustomfield_7_とmacro_agentcustomfield_9_として使用し、メールにシステム担当者の名前と電話番号を追加できるようにする予定です。

メールにマクロを使用した実例

では、例を見てみましょう。

ある程度完成度の高いメールを送りたい場合は、使用しているメールアクションを編集して、新しいマクロを追加してください。

動的情報の利用

さらに上を目指すなら?

何かが起こるたびにコマンドを実行し、その値を集めてメールで送りたい場合はどうすればよいでしょうか。

そうすれば、クリティカルな状況でしか利用しない情報でデータベースがいっぱいにならないように、監視時に常に追加の指標を持つ必要はありません。

追加情報を送信するためには、ソフトウェア・エージェントにあらじゃふねモジュールを作成し、必要なときだけ情報を収集するようにする必要があります。

その趣旨を踏まえて、モジュール内に次のような構造を入力してください。

module_begin

モジュール名MODULE_NAME

module_type async_string

module_precondition> XCOMMAND_TO_RUN_AS_CONDITION

module_execFINAL_COMMAND_TO_BE_EXECUTED

module_end

  • モジュールは、非同期で、収集するデータの種類を指定する必要があります。

これは、モジュールの前提条件を満たさない場合に、このモジュールが不明状態に陥り、その結果、失敗という誤った認識を与えてしまわないようにする必要があるためです。

  • モジュールを正常に動作させるためには、条件式を組み込む必要があります。

そのために、データを取得するための数値情報を取得する前のコマンドを実行します。 前述のCPUの例(80%より高い)に従うと、次のようになります。

  • module_precondition> 80uptime | awk -F “,” ‘{print $3}’ | awk ‘{print $3}’ | tr d “\n”.
  • 最後に、メールに添付するために、このような追加情報を取得するコマンドを使用します。

先ほどの場合、CPUを多く使っているプロセス(上位5プロセス)がわかると便利なので、次のように入力してもよいでしょう。

  • module_exec top -n1 | head -12

つまり、先の例では、次のようなモジュールが存在することになります。

module_begin

module_name TOP5_CPU_Proc_Usage

module_type async_string

module_precondition > 80 uptime | awk -F “,” ‘{print $3}’ | awk ‘{print $3}’ | tr d “\n”.

module_exec top -n1 | head -12

module_end

必要なときだけ実行されるモジュールを作成したら、メールにこの情報を入力します。

そのためには、メール内で以下のマクロを使用します。

_moduledata_TOP5_CPU_Proc_Usage_
これはあくまで追加情報を送るためのもので、他の用途にも使えます。例えば、サーバーのディスク使用量が限界に達している場合、コマンドを使ってサーバーに保存されているファイルのうち最も大きい 5つのファイルを表示できます。 “du -Sah/ | sort -rh | head -5”.

もっと知りたいですか?

Shares