Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. 概要

Notification icon.

Checkmk では、通知とは、監視中に問題やその他のイベントが発生した場合に、ユーザーに積極的に通知することを意味します。 これは、ほとんどの場合、電子メールを使用して行われます。 ただし、SMS の送信やチケットシステムへの転送など、他にも多くの方法があります。 Checkmk には、独自の通知方法用のスクリプトを作成するためのシンプルなインターフェースが用意されています。

ユーザーへの通知は、監視コアによって報告されたイベントから始まります。 イベントコンソールで処理されるイベントと混同しないように、ここではこれを「監視イベント」と呼びます。 監視イベントは、常に特定のホストまたはサービスに関連しています。 監視イベントには、次のようなタイプがあります。

Checkmk は、これらの監視イベントからユーザー通知を作成できるルールベースのシステムを採用しています。このシステムは、非常に厳しい要件の実装にも使用できます。 多くの場合、電子メールによる単純な通知で十分ですが、その設定も簡単です。

この記事では、主に通知の基本と一般的な質問について説明します。

その代わりに、実装を直接開始したい場合は、以下をご覧ください。 Checkmk では、通知の定義方法として、一般的に 2 つの方法を区別しています。 1 つは、通知のルールをグローバルに定義する方法です。 このルールは、イベントに応じて、影響を受けるすべてのユーザーおよびグループに適用されます。 この通知の作成については、「ルールによる通知の設定」で説明しています。

同時に、各ユーザーは通知設定を個別に変更することができます。 たとえば、休暇中は、担当者が自分の受信箱への通知の配信を無効にすることができます。 これらの個人設定の実装方法については、「個人通知ルール」の記事をご覧ください。

2. 通知するか、まだ通知しないか?

通知は基本的にオプションであり、通知を行わなくても Checkmk は効率的に使用できます。 大規模な組織では、運用チームが Checkmk インターフェースを常に監視するコントロールパネルのようなものを導入しており、追加の通知は不要です。 Checkmk 環境がまだ構築中の場合は、通知は、偽アラーム(偽陽性)が発生しない、あるいはごくまれにしか発生しない場合にのみ、同僚の助けになることを考慮する必要があります。 まず、すべての状態が「OK 」または「UP」、つまり「すべて緑」になるように、閾値およびその他のすべての設定を把握しておく必要があります。

毎日、何百通もの無用な電子メールが受信箱に殺到すると、新しい監視システムの受け入れはすぐに消え去ってしまいます。

通知の微調整には、以下の手順が効果的であることが証明されています。

ステップ 1: まず、Checkmk で新たに発見された実際の問題を修正し、次に偽アラームを排除して、監視を微調整します。 すべてが「正常」OK /UP になるまで、この作業を繰り返します。 一般的な偽アラームを削減するための推奨事項については、ビギナーズガイドをご覧ください。

ステップ 2: 次に、通知を自分だけにアクティブに切り替えます。 散発的で短時間のトラブルによる「静的」なノイズを減らします。 これを行うには、閾値をさらに調整し、必要に応じて予測監視を使用し、チェックの試行回数を増やしたり、通知の遅延を試みてください。 もちろん、真の問題が原因である場合は、その問題の解決を試みてください。

ステップ 3: 自分の受信トレイが比較的落ち着いたら、同僚の通知を有効にします。 各連絡先が自分に関連する通知のみを受信するように、効率的な連絡先グループを作成します。

これらの手順により、障害の削減を支援する関連情報を提供するシステムが実現します。

3. 通知の生成と対応方法

3.1. 概要

Checkmk 通知システムの複雑さの多くは、重要でない通知を回避するための数多くの調整オプションによるものです。 そのほとんどは、通知が発生した時点で既に通知が遅延または抑制されている状況です。 さらに、監視コアには、特定の通知をデフォルトで抑制するインテリジェンスがビルトインされています。 この章では、これらのすべての側面について説明します。

3.2. スケジュールダウンタイム

Icon of a scheduled downtime.

ホストまたはサービスがスケジュールダウンタイムにある場合、そのオブジェクトの通知は抑制されます。 これは、可用性の正しい評価と並んで、監視にダウンタイムを実際に提供するための最も重要な理由です。 これに関連するのは、以下の詳細です。

  • ホストがスケジュールダウンタイムとしてフラグが立てられている場合、そのホストのすべてのサービスも、明示的に入力しなくても自動的にスケジュールダウンタイムになります。

  • スケジュールダウンタイム中にオブジェクトが問題状態になった場合、ダウンタイムが予定どおりに終了すると、その問題はダウンタイムの終了時に遡って通知されます。

  • スケジュールダウンタイムの開始と終了は、それ自体が監視イベントとなり、通知されます。

3.3. 通知期間

Icon of an inactive notification period.

設定時に、各ホストおよびサービスについて通知期間を定義することができます。 これは、通知を行う時間枠を定義する期間です

設定は、セットアップメニューの検索から簡単に見つけることができる、Monitoring Configuration > Notification period for hosts 、またはNotification period for services ルールセットを使用して行います。 現在通知期間にないオブジェクトには、灰色の休止アイコン が表示されます。

現在通知期間にないオブジェクトの監視イベントは通知されません。 このような通知は、通知期間が再びアクティブになったときに、ホスト/サービスがまだ問題状態にある場合、「再発行」されます。 通知期間外にオブジェクトの状態に複数の変更があった場合でも、最新の状態のみが通知されます。

なお、通知ルールでは、通知を特定の期間に制限することも可能です。 これにより、時間範囲をさらに制限することができます。 ただし、時間条件を含むルールにより破棄された通知は、後で自動的に繰り返されることはありません

3.4. サービスが実行されているホストの状態

ホストが完全に故障しているか、少なくとも監視にアクセスできない場合、そのサービスの監視は当然不可能になります。 アクティブチェックは、原則として「CRIT 」または「UNKNOWN」を登録します。これは、ホストへのアクセスをアクティブに試みるため、エラーが発生するためです。 このような状況では、他のすべてのチェック(つまり大部分のチェック)は省略され、以前の状態のまま残ります。 これらは、stale (時間)アイコンでフラグが付けられます。

このような状態で、すべてのアクティブチェックが問題を通知すると、当然のことながら非常に面倒になります。 たとえば、web サーバーにアクセスできない場合、そのことはすでに通知されていますので、そのサーバーに依存する HTTP サービスごとに電子メールを追加で生成してもあまり意味がありません。

このような状況を最小限に抑えるため、監視コアは、原則として、ホストが「UP 」状態の場合にのみ、サービスに対する通知を生成します。 これが、ホストのアクセス可能性が個別に認証される理由でもあります。 特に設定がない場合、この認証はSmart Pingまたは ping によって行われます。

Checkmk Raw(または Nagios コアを搭載した商業版)を使用している場合、ごくまれに、ホストの問題が アクティブなサービスに対して通知を生成することがあります。 これは、Nagios がホストチェックの結果を、その後しばらくの間は有効であると見なすためです。 サーバーへの最後の ping が成功してから次のアクティブチェックまで数秒しか経過していない場合でも、Nagios は、実際にはホストが「DOWN 」であるにもかかわらず、ホストを「UP 」と評価します。 一方、Checkmk マイクロコア (CMC)は、ホストの状態が確認されるまでサービス通知を「待機」モードに保持するため、不要な通知を確実に最小限に抑えることができます。

3.5. 親ホスト

何百ものホストが接続されている、企業の拠点にある重要なネットワークルーターが故障したと想像してみてください。 そのルーターに接続されているすべてのホストは、監視対象から外れ、DOWN となります。 その結果、何百もの通知がトリガーされます。 これは問題です。

このような問題を回避するために、ルーターをそのホストの親ホストとして定義することができます。 冗長ホストがある場合は、複数の親を定義することもできます。 すべての親が「DOWN 」状態になると、到達できなくなったホストは「UNREACH 」状態としてフラグが付けられ、その通知は抑制されます。 もちろん、ルーター自体の問題については引き続き通知されます。

ちなみに、CMC は内部では Nagios とは少し異なる方法で動作しています。 偽アラームを減らし、本物の通知を確実に処理するために、CMC は関連するホストのチェックの正確な時刻に細心の注意を払っています。 ホストチェックが失敗した場合、コアは親ホストのホストチェックの結果を待ってから通知を生成します。 この待機は非同期であり、一般的な監視には影響しません。 これにより、ホストからの通知の遅延を最小限に抑えることができます。

4. 通知の制御

4.1. 原則

Checkmk は「デフォルト」設定では、監視イベントが発生すると、影響を受けるホストまたはサービスのすべての連絡先に通知電子メールが送信されるように設定されています。 これは確かに最初は理にかなっていますが、実際には、次のような多くの追加要件が発生します。

  • あまり有用ではない特定の通知の抑制。

  • 自分が連絡先ではないサービスからの通知の「サブスクリプション」。

  • 時刻に応じて、電子メール、SMS、またはポケットベルで通知を送信すること。

  • 一定時間内に承認が得られなかった場合の、問題のエスカレーション。

  • WARNUNKNOWNステータスでは通知を行わないオプション。

  • そして、さらに多くの機能があります …​

Checkmk は、ルールベースのメカニズムにより、このような要件を最大限の柔軟性で実装することができます。

通知設定では、通知ルールチェーンを管理し 誰に どのように通知するかを決定します。 監視イベントが発生すると、このルールチェーンが上から下へ順番に実行されます。 各ルールには、そのルールが当該の状況に実際に適用されるかどうかを判断する条件があります。

条件が満たされた場合、ルールは 2 つのことを決定します。

  • 連絡先の選択(誰に通知するか?

  • 通知方法(どのように通知するか?)、例えば HTML 電子メール、およびオプションで、選択した方法に関する追加のパラメータ。

重要:ホストおよびサービスのルールとは対照的に、ここでは、該当するルールが満たされた後も評価は続行されます。 後続のルールでは、さらに通知を追加することができます。 前のルールによって生成された通知も削除することができます。

ルール評価の最終結果は、次のような構造のテーブルになります。

誰(連絡先) 方法 (方法) 方法のパラメータ

ハリー・ヒルシュ

電子メール

Reply-To: linux.group@example.com

ブルーノ・ヴァイゼンケーム

電子メール

Reply-To: linux.group@example.com

ブルーノ・ワイゼンケーム

SMS

これで、このテーブルの各エントリに対して、その方法に適したユーザー通知を実際に実行する通知スクリプトが呼び出されます。

4.2. 通知の使用を無効にする

ルールを使用して無効にする

Enable/disable notifications for hosts 、またはEnable/disable notifications for services ルールセットを使用すると、通知を一切発行しないホストおよびサービスを指定することができます。 前述のように、コアは通知を抑制します。 このようなサービスに対する通知を「購読」する後続の通知ルールは、通知がまったく生成されないため、無効になります。

コマンドによる無効化

Icon of a disabled notification.

コマンドを使用して、個々のホストまたはサービスの通知を一時的に無効にすることもできます。

ただし、そのためには、ユーザーロールにCommands on host and services > Enable/disable notifications許可が割り当てられている必要があります。デフォルトでは、どのロールにもこの許可は割り当てられていません。

この許可が割り当てられている場合、Commands > Notifications コマンドを使用して、ホストおよびサービスからの通知を無効化(および後で有効化)することができます。

Command to enable and disable notifications.

このようなホストまたはサービスは、アイコンでマークされます。

コマンドは、ルールとは異なり、設定の許可も変更のアクティブ化も必要としないため、状況に迅速に対応するための簡単な回避策となります。

重要:スケジュールされたダウンタイムとは異なり、使用不能にされた通知は可用性評価に影響を与えません。 予定外の停止中に、可用性統計を歪めることなく通知を無効にしたいだけの場合は スケジュールされたダウンタイムを登録しないでください。

グローバルに無効にする

サイドバーの「Master control 」スナップインには、Notifications のマスタースイッチがあります。

Master control snap-in.

このスイッチは、大規模なシステム変更を行う予定があり、その間にエラーによって多くのサービスがCRIT 状態になる可能性がある場合に非常に便利です。 このスイッチを使用すると、無用な電子メールが大量に送信されて同僚の迷惑になることを防ぐことができます。 作業が終了したら、通知を再度有効にすることを忘れないでください。

分散監視の各サイトには、このようなスイッチが 1 つずつあります。 セントラルサイトの通知をオフにしても、リモートサイトは通知を有効にすることができます。ただし、これらの通知はセントラルサイト宛てに送信され、セントラルサイトから配信されます。

重要:通知が使用不能になっていた間にトリガーされた通知は、通知が再び有効になっても後で繰り返されることはありません

4.3. 通知の遅延

サービスが短時間だけ問題状態になることがあるが、停止はごく短時間であり、重大ではない場合があります。 このような場合、通知は煩わしいですが、簡単に抑制することができます。Delay host notifications およびDelay service notifications ルールセットは、このような状況に対応しています。

ここでは、時間を分単位で指定します。この時間が経過するまで、通知は遅延されます。 その前にOK /UP 状態が再び発生しても、通知はトリガーされません。 当然、これは、の問題の通知も遅延されることを意味します。

もちろん、通知を遅らせるよりも、断続的な問題の根本原因を取り除くほうがより望ましいですが、それはまた別の話です...​

4.4. チェックの繰り返し試行

通知を遅らせるもう 1 つの非常に似た方法は、サービスが問題状態になったときに複数のチェックを試みるようにすることです。 これは、Maximum number of check attempts for hosts 、またはMaximum number of check attempts for service ルールセットを使用して実現できます。

たとえば、ここで3 の値を設定すると、CRIT の結果のチェックは、最初は通知をトリガーしません。 これは、CRIT ソフトステートと呼ばれますハードステートはOK のままです。 3 回連続の試行でOK 以外の状態が返された場合にのみ、サービスはハードステートに切り替えられ、通知がトリガーされます。

遅延通知とは対照的に、ここでは、このような問題が表示されないようにビューを定義するオプションがあります。 BI アグリゲーションは、ソフトステートではなくハードステートのみを含めるように構築することもできます。

4.5. フラッピングホストおよびサービス

Icon indicating flapping state.

ホストまたはサービスが短期間に頻繁に状態を変化する場合、フラッピングとみなされます。 これは実際の状態です。 ここでの原則は、サービスが(完全に)安定して実行されていない段階での過剰な通知を削減することです。 このような段階は、可用性統計でも特別に評価することができます。

フラッピングオブジェクトは、アイコンでマークされます。 オブジェクトがフラッピングしている間は、連続する状態変化によって通知は発生しません。 ただし、オブジェクトがフラッピング状態になったとき、およびフラッピング状態から抜け出したときには、通知が発生します。

フラッピングの認識は、以下の方法で変更できます。

  • Master control には、フラッピングの検出を制御するためのメインスイッチ (Flap Detection) があります。

  • Enable/disable flapping detection for hosts 、またはEnable/disable flapping detection for services ルールセットを使用して、検出からオブジェクトを除外することができます。

  • 商業版では、Global settings > Monitoring core > Tuning of flap detection を使用して、フラッピング検出のパラメータを定義し、感度を調整することができます。

Global settings for flap detection handling.

カスタマイズ可能な値の詳細については、Help > Show inline help で状況依存ヘルプを表示してください。

5. 通知の開始から終了までのパス

5.1. 通知のヒストリー

まず、通知のプロセスを追跡できるように、Checkmk でホストおよびサービスレベルの通知のヒストリーを表示する方法をご紹介します。

Checkmk が通知をトリガーする監視イベントとしては、たとえば、サービスの状態の変化があります。 テストのために、Fake check results コマンドを使用して、この状態の変化を手動でトリガーすることができます。

通知のテストでは、この方法でサービスを「OK 」状態から「CRIT 」状態に切り替えることができます。 ここで、Service > Service notifications を使用してサービス詳細ページでこのサービスの通知を表示すると、以下のエントリが表示されます。

List of accumulated notifications for a service.

最新のエントリはリストの一番上に表示されます。ただし、最初のエントリは一番下にあるため、エントリを 1 つずつ上から順に確認しましょう。

  1. 監視コアは、状態変化の監視イベントをログに記録します。 1 列目のアイコンは、状態(この例ではCRIT )を示しています。

  2. 監視コアは、生の通知を生成します。 これは、コアから通知モジュールに渡され、適用可能な通知ルールの評価が行われます。

  3. ルールの評価の結果、ユーザー hh に、方法mailでユーザー通知が行われます

  4. 通知の結果、電子メールは SMTP サーバーに正常に配信されました。

さまざまな設定オプションや基本条件のコンテキストを正しく理解し、通知が予想どおりに表示されない場合に正確な問題診断を行うために、ここでは、関連するすべてのコンポーネントを含む通知プロセスの詳細について説明します。

Tip

上記でサービスについて示した通知のヒストリーは、ホストについても表示することができます。ホストの詳細ページにある、ホスト自体の「Host 」メニュー(メニュー項目「Notifications of host 」)および、そのホストのすべてのサービスを含む「Notifications of host & services 」で表示できます。

5.2. コンポーネント

Checkmk 通知システムには、以下のコンポーネントが含まれます。

コンポーネント 機能 ログファイル

Nagios

Checkmk Rawの監視コアで、監視イベントを検出し、生の通知を生成します。

~/var/log/nagios.log
~/var/nagios/debug.log

Checkmkマイクロコア(CMC)

Checkmk Raw の Nagios と同じ機能を持つ、商業版の監視コアです。

~/var/log/cmc.log

通知モジュール

通知ルールを処理して、生の通知からユーザー通知を作成します。通知スクリプトを呼び出します。

~/var/log/notify.log

通知スプーラ(商業版のみ

通知の非同期配信、および分散環境における通知の一元化を行います。

~/var/log/mknotifyd.log

通知スクリプト

通知方法ごとに、実際の配信を処理するスクリプト (HTML 電子メールの生成および送信など) があります。

~/var/log/notify.log

5.3. 監視コア

生の通知

前述のように、すべての通知は、監視コアでの監視イベントから始まります。 すべての条件が満たされ、通知の「青信号」が出された場合、コアは内部check-mk-notify ヘルプ連絡先への生の通知を生成します。 生の通知には、実際の連絡先や通知方法の詳細はまだ含まれていません。

生の通知は、サービスの通知ヒストリーで次のように表示されます。

A raw notification in the notification history.
  • アイコンは、ライトグレーのスピーカー

  • check-mk-notify が連絡先として指定されます。

  • check-mk-notify 通知コマンドとして指定されます。

生の通知は、通知ルールを処理する Checkmk 通知モジュールに渡されます。 このモジュールは、Nagios (cmk --notify) によって外部プログラムとして呼び出されます。 CMC は、このモジュールを永続的な補助プロセス (通知ヘルパー) として待機状態に保つことで、プロセスの作成を削減し、マシンの時間を節約します。

Nagios 監視コアでのエラー診断

Checkmk Rawで使用される Nagios コアは、すべての監視イベントを~/var/log/nagios.log に記録します。 このファイルは、通知のヒストリーを保存する場所でもあります。 GUI を使用して、ホストやサービスの通知を確認する場合など、このファイルも照会されます。

しかし、より興味深いのは、etc/nagios/nagios.d/logging.cfgdebug_level変数を32 に設定した場合に受信する、~/var/nagios/debug.log ファイルにあるメッセージです。

コアの再起動後 …​

OMD[mysite]:~$ omd restart nagios

… 通知が作成または抑制された理由に関する有用な情報を見つけることができます。

~/var/nagios/debug.log
[1592405483.152931] [032.0] [pid=18122] ** Service Notification Attempt ** Host: 'localhost', Service: 'backup4', Type: 0, Options: 0, Current State: 2, Last Notification: Wed Jun 17 16:24:06 2020
[1592405483.152941] [032.0] [pid=18122] Notification viability test passed.
[1592405485.285985] [032.0] [pid=18122] 1 contacts were notified.  Next possible notification time: Wed Jun 17 16:51:23 2020
[1592405485.286013] [032.0] [pid=18122] 1 contacts were notified.

CMC 監視コアのエラー診断

商業版では、~/var/log/cmc.log ログファイルに監視コアからのプロトコルが表示されます。 標準インストールでは、このファイルには通知に関する情報は含まれていません。 ただし、Global settings > Monitoring Core > Logging of the notification mechanics.コアは、監視イベントが通知システムに通知を転送する理由、または(まだ)転送しない理由に関する情報を提供します。

OMD[mysite]:~$ tail -f var/log/cmc.log
2021-08-26 16:12:37 [5] [core 27532] Executing external command: PROCESS_SERVICE_CHECK_RESULT;mysrv;CPU load;1;test
2021-08-26 16:12:43 [5] [core 27532] Executing external command: LOG;SERVICE NOTIFICATION: hh;mysrv;CPU load;WARNING;mail;test
2021-08-26 16:12:52 [5] [core 27532] Executing external command: LOG;SERVICE NOTIFICATION RESULT: hh;mysrv;CPU load;OK;mail;success 250 - b'2.0.0 Ok: queued as 482477F567B';success 250 - b'2.0.0 Ok: queued as 482477F567B'

注記:通知のログ記録を有効にすると、大量のメッセージが生成される場合があります。 ただし、後で特定の状況で通知が生成されなかった理由を確認する場合に役立ちます。

5.4. 通知モジュールによるルールの評価

コアが生成した生の通知は、通知ルールのチェーンを通過し、通知のテーブルになります。 生の通知のデータに加えて、すべての通知には以下の追加情報が含まれます。

  • 通知先の連絡先

  • 通知方法

  • この方法のパラメータ

同期配信では、テーブルのすべてのエントリに対して、適切な通知スクリプトが実行されます。 非同期配信では、通知はファイルとして通知スプーラに渡されます。

ルールチェーンの分析

より複雑なルール体制を作成する場合、特定の通知にどのルールが適用されるかという問題が必ず発生します。 この問題に対処するため、Checkmk には、Setup > Setup > Analyze recent notifications にビルトインの分析機能が用意されています。

分析モードでは、デフォルトで、システムによって生成され、ルールによって処理された最新の 10 件の生の通知が表示されます。

List of the last 10 raw notifications in analysis mode.

より多くの生の通知を分析する必要がある場合は、Global settings > Notifications > Store notifications for rule analysis で分析用に保存する数を簡単に増やすことができます。

Global setting for the number of raw notifications displayed.

これらの生の通知それぞれに対して、3 つのアクションを使用できます。

ルールチェーンをテストします。選択した監視イベントについて、各ルールのすべての条件が満たされているかどうかがチェックされます。結果の通知テーブルが、ルールとともに表示されます。

通知のコンテキスト全体を表示します。

この生の通知を、表示されたばかりのように繰り返します。それ以外の場合は、表示は分析と同じになります。これにより、ルールの条件をチェックできるだけでなく、通知が視覚的にどのように表示されるかをテストすることもできます。

エラー診断

ルールチェーンテスト () を実行した場合、監視イベントに適用されたルールと適用されなかったルールを確認できます。

List of applied and not applied rules.

ルールが適用されなかった場合は、灰色の円の上にマウスを置くとヒント(マウスオーバーテキスト)が表示されます。

Hint when a rule has not been applied.

ただし、このマウスオーバーテキストでは、ルールが適用されなかった原因は略語で表示されます。 これらは、ルールの「Host events (条件が満たされていない)」または「Service events条件が満たされている)」の条件を参照しています。

ホストイベントタイプ

略語

意味

説明

rd

UP ➤ DOWN

ホストの状態が「UP 」から「DOWN

ru

UP ➤ UNREACHABLE

ホストの状態が「UP 」から「UNREACH

dr

DOWN ➤ UP

ホストの状態が「DOWN 」から「UP

du

DOWN ➤ UNREACHABLE

ホストの状態が「DOWN 」から「UNREACH

ud

UNREACHABLE ➤ DOWN

ホストの状態が「UNREACH 」から「DOWN

ur

UNREACHABLE ➤ UP

ホストの状態が「UNREACH 」から「UP

?r

any ➤ UP

ホストの状態が任意の状態からUP

?d

any ➤ DOWN

ホストの状態が任意の状態からDOWN

?u

任意 ➤ UNREACHABLE

ホストの状態が任意の状態からUNREACH

f

フラッピング状態の開始または終了

s

スケジュールダウンタイムの開始または終了

x

問題の承認

as

アラートハンドラーの実行、成功

af

アラートハンドラーの実行、失敗

サービスイベントタイプ

略語

意味

説明

rw

OK ➤ WARN

サービス状態が「OK 」から「OK」に変更されました。WARN

rr

OK ➤ OK

サービスの状態が「OK 」から「OK

rc

OK ➤ CRIT

サービス状態が「OK 」から「CRIT

ru

OK ➤ UNKNOWN

サービス状態が「OK 」から「UNKNOWN」に変更されました。

wr

WARN ➤ OK

サービス状態が「WARN 」から「OK

wc

WARN ➤ CRIT

サービス状態が「WARN 」から「CRIT

wu

WARN ➤ UNKNOWN

サービス状態が「WARN 」から「UNKNOWN」に変更されました。

cr

CRIT ➤ OK

サービス状態が「CRIT 」から「OK

cw

CRIT ➤ WARN

サービス状態が「CRIT 」から「WARN

cu

CRIT ➤ UNKNOWN

サービス状態が「CRIT 」から「UNKNOWN」に変更されました。

ur

UNKNOWN ➤ OK

サービス状態がUNKNOWNからOK

uw

UNKNOWN ➤ WARN

サービスの状態がUNKNOWNからWARN

uc

UNKNOWN ➤ CRIT

サービスの状態がUNKNOWNからCRIT

?r

任意 ➤ OK

サービスの状態が任意の状態からOK

?w

任意 ➤ WARN

サービスの状態が任意の状態からWARN

?c

任意 ➤ CRIT

サービス状態が任意の状態からCRIT

?u

任意 ➤ UNKNOWN

サービスの状態が任意の状態からUNKNOWNに変更されました

これらのヒントに基づいて、ルールをチェックおよび修正することができます。

もう 1 つの重要な診断オプションは、ログファイル~/var/log/notify.log です。 通知のテストでは、よく使用されるコマンドtail -f が役立ちます。

OMD[mysite]:~$ tail -f var/log/notify.log
2025-04-09 08:02:49,302 [15] [cmk.base.notify]  -> does not match: Event type 'rd' not handled by this rule. Allowed are: du, ?r
2025-04-09 08:02:49,303 [20] [cmk.base.notify] User cmkadmin's rule 'my test notification'...
2025-04-09 08:02:49,303 [20] [cmk.base.notify]  -> matches!
2025-04-09 08:02:49,303 [20] [cmk.base.notify]    - adding notification of cmkadmin via mail
2025-04-09 08:02:49,303 [20] [cmk.base.notify] User peter's rule 'test notification of peter'...
2025-04-09 08:02:49,303 [20] [cmk.base.notify]  -> matches!
2025-04-09 08:02:49,303 [20] [cmk.base.notify]    - modifying notification of peter via mail
2025-04-09 08:02:49,303 [20] [cmk.base.notify] Executing 2 notifications:
2025-04-09 08:02:49,303 [20] [cmk.base.notify]   * would notify peter via mail, parameters: graphs_per_notification, notifications_with_graphs, matching_rule_nr, matching_rule_text, bulk: no
2025-04-09 08:02:49,303 [20] [cmk.base.notify]   * would notify cmkadmin via mail, parameters: graphs_per_notification, notifications_with_graphs, matching_rule_nr, matching_rule_text, bulk: no

Global settings > Notifications > Notification log level を使用すると、通知の包括性を 3 つのレベルで制御できます。 これをFull dump of all variables and command に設定すると、ログファイルに、通知スクリプトで使用可能なすべての変数の完全なリストが表示されます。

Global setting to specify the log level.

たとえば、リストは次のように表示されます (抜粋)。

~/var/log/notify.log
2025-04-09 08:47:39,186 [10] [cmk.base.notify] Raw context:
                    CONTACTS=hh
                    HOSTACKAUTHOR=
                    HOSTACKCOMMENT=
                    HOSTADDRESS=127.0.0.1
                    HOSTALIAS=localhost
                    HOSTATTEMPT=1
                    HOSTCHECKCOMMAND=check-mk-host-smart

5.5. 通知スプーラによる非同期配信

商業版の強力な追加機能として、通知スプーラがあります。 これにより、通知を非同期で配信することができます。 この文脈での「非同期」とはどういう意味でしょうか?

  • 同期配信: 通知モジュールは、通知スクリプトの実行が完了するまで待機します。 実行に時間がかかる場合、通知が蓄積されます。 監視が停止すると、これらの通知は失われます。 さらに、短期間に多くの通知が生成されると、コアにバックログが蓄積され、監視が停止する原因となります。

  • 非同期配信: すべての通知は、~/var/check_mk/notify/spool にあるスプールファイルに保存されます。 ジャムが発生することはありません。 監視が停止しても、スプールファイルは保持され、通知は後で正しく配信されます。 通知スプーラがスプールファイルの処理を引き継ぎます。

通知スクリプトが迅速に実行され、何よりもタイムアウトが発生しない場合は、同期配信が可能です。既存のスプーラにアクセスする通知方法では、これは当然のことです。 システムのスプールサービスは、特に電子メールや SMS で使用できます。 通知スクリプトは、ファイルをスプーラに渡します。この手順では、待機状態になることはありません。

SMTPまたはネットワーク接続を確立するその他のスクリプトによる追跡可能な配信を使用する場合は、常に非同期配信を使用する必要があります。 これは、インターネット経由で HTTP によってテキストメッセージ (SMS) を送信するスクリプトにも適用されます。 ネットワークサービスへの接続を確立する際のタイムアウトは、数分かかる場合もあり、前述のようなジャムが発生します。

幸い、Checkmk では非同期配信がデフォルトで有効になっています。 まず、サイト起動時に通知スプーラ (mknotifyd) も起動します。これは、次のコマンドで確認できます。

OMD[mysite]:~$ omd status mknotifyd
mknotifyd:      running
-----------------------
Overall state:  running

一方、非同期配信(Asynchronous local delivery by notification spooler )は、Global settings > Notifications > Notification Spooling で選択されています:

Global setting for the notification spooler delivery method.

エラー診断

通知スプーラは、独自のログファイル~/var/log/mknotifyd.log を保持しています。 このファイルには 3 つのログレベルがあり、Global settings > Notifications > Notification Spooler ConfigurationVerbosity of logging パラメータで設定できます。 デフォルトはNormal logging (only startup, shutdown and errors です。 中間レベルVerbose logging (i.e. spooled notifications), では、スプールファイルの処理を確認できます。

~/var/mknotifyd.log
2025-04-09 08:47:37,928 [15] [cmk.mknotifyd] processing spoolfile: /omd/sites/mysite/var/check_mk/notify/spool/dad64e2e-b3ac-4493-9490-8be969a96d8d
2025-04-09 08:47:37,928 [20] [cmk.mknotifyd] running cmk --notify --log-to-stdout spoolfile /omd/sites/mysite/var/check_mk/notify/spool/dad64e2e-b3ac-4493-9490-8be969a96d8d
2025-04-09 08:47:39,848 [20] [cmk.mknotifyd] got exit code 0
2025-04-09 08:47:39,850 [20] [cmk.mknotifyd] processing spoolfile dad64e2e-b3ac-4493-9490-8be969a96d8d successful: success 250 - b'2.4.0 Ok: queued as 1D4FF7F58F9'
2025-04-09 08:47:39,850 [20] [cmk.mknotifyd] sending command LOG;SERVICE NOTIFICATION RESULT: hh;mysrv;CPU load;OK;mail;success 250 - b'2.4.0 Ok: queued as 1D4FF7F58F9';success 250 - b'2.0.0 Ok: queued as 1D4FF7F58F9'

6. SMTP による追跡可能な配信

6.1. 電子メールは信頼性が低い

監視は、それが信頼できる場合にのみ有用です。 そのためには、通知が確実かつ 迅速に受信される必要があります。 しかし、残念ながら、電子メールの配信は完全に理想的とは言えません。 通常、送信は、電子メールをローカル SMTP サーバーに渡すことで処理されます。 これにより、電子メールは自律的かつ非同期的に配信が試みます。

一時的なエラー(受信 SMTP サーバーに接続できない場合など)が発生すると、電子メールはキューに入れられ、後で再送信が試みます。 この「後で」とは、原則として 15~30 分後です。 その時点で通知は遅すぎるかもしれません。

電子メールが本当に配信できない場合、SMTP サーバーはログファイルにわかりやすいエラーメッセージを作成し、「送信者」にエラー電子メールを生成しようと試みます。 しかし、監視システムは実際の送信者ではなく、電子メールを受信することもできません。 その結果、このようなエラーは単に消えてしまい、通知は届きません。

6.2. 直接接続で SMTP を使用すると、エラー分析が可能になります

商業版では、SMTP による追跡可能な配信が可能です。 これは、ローカルメールサーバーの助けを借りずに意図的に行われます。 その代わりに、Checkmk 自体が SMTP 経由でスマートホストに電子メールを送信し、SMTP の応答を自ら評価します。

これにより、SMTP エラーがインテリジェントに処理されるだけでなく、正しい配信も正確に記録されます。 これは、書留郵便に少し似ています。 Checkmk は、SMTP スマートホスト(受信サーバー)から、電子メールが受理されたことを確認する受信確認(メール ID を含む)を受け取ります。

SMTP 経由で配信を追跡できる通知を設定する実際的なプロセスについては、グローバル通知ルールおよび 個人通知ルールで説明しています。

6.3. SMS およびその他の通知方法

エラーメッセージと追跡可能性を含む同期配信は、現在まで HTML 電子メールにのみ実装されています。 自作の通知スクリプトでエラーステータスを返す方法については、独自のスクリプトの作成に関する章をご覧ください。

7. 分散システムにおける通知

分散環境(つまり、複数の Checkmk サイトがある環境)では、リモートサイトで生成された通知をどう処理するかという問題が発生します。 このような状況では、基本的に 2 つの可能性があります。

  1. ローカル配信

  2. セントラルサイトへの中央配信(商業版のみ)

この件に関する詳細情報は、分散監視に関する記事をご覧ください。

8. 通知スクリプト

8.1. 原則

通知は、さまざまな方法で個別に行うことができます。 典型的な例としては、次のようなものがあります。

  • チケットまたは外部通知システムへの通知の転送

  • さまざまなインターネットサービスによる SMS の送信

  • 自動電話発信

  • 上位の包括的な監視システムへの転送

このため、Checkmk には、独自の通知スクリプトを作成できる非常にシンプルなインターフェースが用意されています。 これらのスクリプトは、Linux でサポートされているあらゆるプログラミング言語で作成できます。ただし、Shell、Perl、Python の 3 つで「市場」の 95% を占めています。

Checkmkに付属の標準スクリプトは~/share/check_mk/notifications にあります。 このディレクトリはソフトウェアの構成要素であり、変更することはできません。 代わりに、独自のスクリプトは~/local/share/check_mk/notifications に保存してください。 スクリプトが実行可能であることを確認してください (chmod +x)。 そうすることで、スクリプトが自動的に検出され、通知ルールで選択可能になります。

標準スクリプトをカスタマイズする場合は、~/share/check_mk/notifications から~/local/share/check_mk/notifications にスクリプトをコピーし、コピーしたスクリプトを変更してください。 元の名前を残した場合、スクリプトは自動的に標準バージョンに置き換えられ、既存の通知ルールを変更する必要はありません。

通知の場合、スクリプトはサイトユーザーの許可で呼び出されます。 環境変数ではNOTIFY_ で始まる変数に、影響を受けるホスト/サービス、監視イベント、通知先の連絡先、および通知ルールで指定されたパラメータに関するすべての情報がスクリプトに送信されます。

スクリプトが標準出力(printecho など) に書き込むテキストは、通知モジュールのログファイル~/var/log/notify.log に表示されます。

8.2. 追跡可能な通知

通知スクリプトでは、再現可能なエラーまたは最終的なエラーが発生したかどうかを、終了コードを使用して通知することができます。

終了コード 説明

0

スクリプトは正常に実行されました。

1

一時的なエラーが発生しました。実行は、設定された最大試行回数に達するまで、しばらく待ってから繰り返し試みてください。例:SMS サービスと HTTP 接続を確立できません。

2 およびそれ以上

最終的なエラーが発生しました。通知は再試行されません。GUI に通知エラーが表示されます。エラーは、ホスト/サービスのヒストリーに表示されます。例:SMS サービスが「認証が無効です」というエラーを記録しました。

さらに、すべてのケースで、通知スクリプトの標準出力は、ステータスとともにホスト/サービスの通知ヒストリーに入力されるため、GUI で確認できます。

重要: 一括通知では、追跡可能な通知は使用できません。

ユーザーからの通知エラーの処理については、SMTP による追跡可能な配信に関する章で説明します。

8.3. 簡単なスクリプトの例

例として、通知に関するすべての情報をファイルに書き込むスクリプトを作成することができます。 コーディング言語は Bash Linux シェルです。

~/local/share/check_mk/notifications/foobar
#!/bin/bash
# Foobar Teleprompter

env | grep NOTIFY_ | sort > $OMD_ROOT/tmp/foobar.out
echo "Successfully written $OMD_ROOT/tmp/foobar.out"
exit 0

次に、スクリプトを実行可能にしてください。

OMD[mysite]:~$ chmod +x local/share/check_mk/notifications/foobar

スクリプトに関する説明は、次のとおりです。

  • 1 行目は、#! とスクリプト言語のインタープリタへのパス (ここでは/bin/bash) です。

  • 2 行目のコメント文字「# 」の後の部分は、スクリプトのタイトルです。通常、これは通知方法を選択する際に表示されます。

  • env コマンドは、スクリプトが受信したすべての環境変数を出力します。

  • grep NOTIFY_ を使用すると、Checkmk 変数がフィルタリングされ、 によってアルファベット順にソートされます。

  • … アルファベット順に並べ替えられます。sort

  • > $OMD_ROOT/tmp/foobar.out は、結果をサイトディレクトリ内の ファイルに書き込みます。~/tmp/foobar.out

  • シェルは常に最後のコマンドの終了コードを取得するため、この場所ではexit 0 は実際には不要です。ここでは、echo であり、常に成功しますが、明示的に記述した方が常に望ましいです。

8.4. サンプルスクリプトのテスト

このスクリプトを使用するには、通知ルールでメソッドとして定義する必要があります。 自作のスクリプトにはパラメータ宣言がないため、HTML Email メソッドなどで提供されているようなチェックボックスはすべて表示されません。 その代わりに、NOTIFY_PARAMETER_1NOTIFY_PARAMETER_2 などとしてスクリプトで使用できるテキストのリストをパラメータとして入力できます。 テストのために、パラメータFröhnKlabusterFeinbein を指定します。

Rule with selection of sample script as notification method.

テストするには、ホストmyserver で、サービスCPU loadCRITに設定します —  Fake check results コマンドを使用します。 通知モジュールのログファイル~/var/log/notify.log に、パラメータを含むスクリプトの実行と、生成されたスプールファイルが表示されます。

~/var/log/notify.log
2021-08-25 13:01:23,887 [20] [cmk.base.notify] Executing 1 notifications:
2021-08-25 13:01:23,887 [20] [cmk.base.notify]   * notifying hh via foobar, parameters: Fröhn, Klabuster, Feinbein, bulk: no
2021-08-25 13:01:23,887 [20] [cmk.base.notify] Creating spoolfile: /omd/sites/mysite/var/check_mk/notify/spool/e1b5398c-6920-445a-888e-f17e7633de60

ファイル~/tmp/foobar.out には、通知に関する情報を含むすべてのCheckmk環境変数のアルファベット順のリストが表示されます。 ここで、スクリプトで使用できる値を確認できます。 最初の10行は次のとおりです。

OMD[mysite]:~$ head tmp/foobar.out
NOTIFY_ALERTHANDLERNAME=debug
NOTIFY_ALERTHANDLEROUTPUT=Arguments:
NOTIFY_ALERTHANDLERSHORTSTATE=OK
NOTIFY_ALERTHANDLERSTATE=OK
NOTIFY_CONTACTALIAS=Harry Hirsch
NOTIFY_CONTACTEMAIL=harryhirsch@example.com
NOTIFY_CONTACTNAME=hh
NOTIFY_CONTACTPAGER=
NOTIFY_CONTACTS=hh
NOTIFY_DATE=2021-08-25

パラメーターも以下の場所で確認できます:

OMD[mysite]:~$ grep PARAMETER tmp/foobar.out
NOTIFY_PARAMETERS=Fröhn Klabuster Feinbein
NOTIFY_PARAMETER_1=Fröhn
NOTIFY_PARAMETER_2=Klabuster
NOTIFY_PARAMETER_3=Feinbein

8.5. 環境変数

上記の例では、スクリプトに渡される環境変数のいくつかを紹介しました。 具体的にどの変数が利用可能かは、通知の種類、Checkmk のバージョンとエディション、および使用している監視コア (CMCまたは Nagios) によって異なります。env コマンドのトリックの他に、すべての変数の完全なリストを取得する 2 つの方法があります。

  • Global settings > Notifications > Notification log level を使用して、~/var/log/notify.log のログレベルを変更します。

  • HTML Email による通知には、Information to be displayed in the email body に「Complete variable list (for testing) 」オプションのチェックボックスがあります。

以下は、最も重要な変数のリストです。

環境変数 説明

OMD_ROOT

サイトのホームディレクトリ、例えば/omd/sites/mysite

OMD_SITE

サイト名、例えばmysite です。

NOTIFY_WHAT

ホスト通知の場合はHOST 、それ以外の場合はSERVICE を使用します。これらを使用すると、どちらの場合も有用な情報をログに記録する、インテリジェントなスクリプトを作成することができます。

NOTIFY_CONTACTNAME

連絡先のユーザー名 (ログイン名)。

NOTIFY_CONTACTEMAIL

連絡先の電子メールアドレス。

NOTIFY_CONTACTPAGER

連絡先のユーザープロファイルにある「Pager 」フィールドへの入力。このフィールドは通常、特定の目的のために予約されているわけではないため、通知に必要な情報を保存するために、各ユーザーごとに使用することができます。

NOTIFY_DATE

通知の日付を ISO-8601 形式で指定します。例:2021-08-25

NOTIFY_LONGDATETIME

非ローカライズされた Linux システムのデフォルト表示での日付と時刻、例:Wed Aug 25 15:18:58 CEST 2021

NOTIFY_SHORTDATETIME

ISO形式の日付と時刻、例:2021-08-25 15:18:58

NOTIFY_HOSTNAME

影響を受けるホストの名前。

NOTIFY_HOSTOUTPUT

ホストチェックのチェックプラグインの出力、例えば、Packet received via smart PING 。この出力はホスト通知にのみ関連しますが、サービス通知にも含まれます。

NOTIFY_HOSTSTATE

次の単語のいずれか:UPDOWN 、またはUNREACH

NOTIFY_NOTIFICATIONTYPE

この記事の冒頭で説明した通知タイプ。これは、次の単語のいずれかで表されます。
PROBLEM: 通常のホストまたはサービスの問題
RECOVERY: ホスト/サービスが再びUP /OK
ACKNOWLEDGEMENT (…​): 問題の承認
FLAPPINGSTART: ホスト/サービスがフラッピングを開始しました
FLAPPINGSTOP:- フラッピングが終了しました
DOWNTIMESTART:スケジュールダウンタイムの開始
DOWNTIMEEND: ダウンタイムの正常終了
DOWNTIMECANCELLED: ダウンタイムが途中で中断されました
CUSTOM:手動コマンドによる通知
ALERTHANDLER (…​):アラートハンドラーの実行(商業版のみ)
(…​) のタイプの場合、括弧には通知のタイプに関する追加情報が含まれます。

NOTIFY_PARAMETERS

空白で区切られたスクリプトのすべてのパラメータ。

NOTIFY_PARAMETER_1

スクリプトの最初のパラメータ。

NOTIFY_PARAMETER_2

スクリプトの 2 番目のパラメータなど。

NOTIFY_SERVICEDESC

対象サービスの名前。この変数は、ホスト通知には存在しません。

NOTIFY_SERVICEOUTPUT

サービスチェックのチェックプラグインの出力 (ホスト通知には使用しません)

NOTIFY_SERVICESTATE

次の単語のいずれか:OKWARNCRIT 、またはUNKNOWN

8.6. 一括通知

スクリプトが一括通知をサポートする場合は、複数の通知を同時に配信する必要があるため、特別な準備が必要です。 このため、環境変数を使用した配信も実際には機能しません。

ヘッダーの3 行目に、以下のようにスクリプトに名前を付けます。通知モジュールは、標準入力から通知を送信します。

~/local/share/check_mk/notifications/mybulk
#!/bin/bash
# My Bulk Notification
# Bulk: yes

スクリプトは、標準入力から変数のブロックを受け取ります。 各行は、NAME=VALUE のフォームになります。 ブロックは空白行で区切られます。 テキスト内の改行は、コード 1 (\a) の ASCII 文字で表します。

最初のブロックには、一般的な変数 (呼び出しパラメータなど) のリストが含まれます。 その後の各ブロックは、変数を通知にまとめます。

データをファイルに書き込んで、データがどのように送信されるかを確認する簡単なテストで、ご自身で試してみるのが最善です。 この目的には、次の通知スクリプトを使用できます。

~/local/share/check_mk/notifications/mybulk
#!/bin/bash
# My Bulk Notification
# Bulk: yes

cat > $OMD_ROOT/tmp/mybulktest.out

上記の手順でスクリプトをテストし、さらに通知ルールでNotification Bulking を有効にしてください。

8.7. 付属の通知スクリプト

Checkmk には、人気のある、広く使用されているインスタントメッセージングサービス、インシデント管理プラットフォーム、チケットシステムに接続するためのさまざまなスクリプトがすでに用意されています。 これらのスクリプトの使用方法については、以下の記事をご覧ください。

9. ファイルおよびディレクトリ

9.1. Checkmk のパス

ファイルパス 機能

~/var/log/cmc.log

CMCログファイル。通知のデバッグが有効になっている場合、通知が生成された、または生成されなかった理由に関する正確な情報がここに表示されます。

~/var/log/notify.log

通知モジュールのログファイル。

~/var/log/mkotifyd.log

通知スプーラのログファイルです。

~/var/log/mkotifyd.state

通知スプーラの現在の状態。これは主に、分散環境での通知に関連します。

~/var/nagios/debug.log

Nagios デバッグログファイル。~/etc/nagios/nagios.d/logging.cfg で、debug_level 変数を使用してデバッグメッセージをオンにしてください。

~/var/check_mk/notify/spool/

通知スプーラによって処理されるスプールファイルの保存場所です。

~/var/check_mk/notify/deferred/

一時的なエラーが発生した場合、通知スプーラはファイルをここに移動し、数分後に再試行します。

~/var/check_mk/notify/corrupted/

欠陥のあるスプールファイルはここに移動されます。

~/share/check_mk/notifications

Checkmk に標準で付属の通知スクリプトです。ここでは変更しないでください。

~/local/share/check_mk/notifications

カスタム通知スクリプトの保存場所です。標準スクリプトをカスタマイズする場合は、~/share/check_mk/notifications からここにコピーし、元のファイル名を保持してください。

9.2. SMTP サーバーのログファイル

SMTP サーバーのログファイルはシステムファイルであり、その絶対パスは以下にリストされています。 ログファイルが保存される正確な場所は、お使いの Linux ディストリビューションによって異なります。

パス 機能

/var/log/mail.log

Debian および Ubuntu における SMTP サーバーのログファイル

/var/log/mail

SUSE Linux Enterprise Server (SLES) の SMTP サーバーのログファイル

/var/log/maillog

Red Hat Enterprise Linux (RHEL) の SMTP サーバーのログファイル

このページでは