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. はじめに

1.1. イベントは状態ではありません

Checkmk の主なタスクは、状態のアクティブな監視です 監視対象の各サービスは、いつでも、OKWARNCRITUNKNOWN のいずれかの状態になります。 定期的なポーリングにより、監視は現在の状況の情報を常に更新します。

まったく別のタイプの監視として、イベントをハンドルする監視があります。 イベントの例としては、アプリケーションで発生する例外があります。 アプリケーションは「OK 」の状態のまま、正しく動作し続けるかもしれませんが、何かが発生したことは事実です

1.2. イベントコンソール

イベントコンソール(EC)により、Checkmk は、syslog、SNMP トラップ、Windows イベントログ、ログファイル、独自のアプリケーションなどのソースからのイベントを監視するための、完全に統合されたシステムを提供しています。 イベントは単なる状態として定義されるのではなく、独自のカテゴリを形成し、実際には Checkmk によってサイドバーのOverview 」に個別の情報として表示されます。

The Overview snap-in with the display of events.

内部的には、イベントは監視コアによって処理されるのではなく、別のサービスであるイベントデーモン(mkeventd) によって処理されます。

イベントコンソールには、過去のイベントを検索できるアーカイブもあります。 ただし、これは適切なログアーカイブの代替とはならないことをあらかじめご承知おきください。 イベントコンソールの役割は、大量のストリームから少数の 関連メッセージを知的にフィルタリングすることです。 これは、シンプルさ、堅牢性、およびスループットのために最適化されており、大量のデータを保存するためのものではありません。

EC の機能の概要は以下の通りです:

  • syslog または SNMP トラップを介してメッセージを直接受信できます。 したがって、対応する Linux システムサービスの設定は必要ありません。

  • また、Checkmk エージェントを使用して、テキストベースのログファイルや Windows イベントログを評価することもできます。

  • ユーザー定義のルールチェーンに基づいてメッセージを分類します。

  • メッセージの相関、要約、カウント、注釈、書き換え、および時間的関係も考慮することができます。

  • 自動化されたアクションを実行し、Checkmk 経由で通知を送信できます。

  • Checkmk ユーザーインターフェースに完全に統合されています。

  • 現在のすべての Checkmk システムバージョンに組み込まれており、すぐに使用できます。

1.3. 用語

イベントコンソールは、メッセージ(主にログメッセージのフォーム)を受信します。 メッセージは、タイムスタンプ、ホスト名など、いくつかの追加属性を持つ 1 行のテキストです。 メッセージが関連している場合は、同じ属性を持つイベントに直接変換することができますが、次の点に注意してください。

  • メッセージは、ルールが有効になっている場合にのみイベントに変換されます。

  • ルールでは、メッセージのテキストやその他の属性を編集することができます。

  • 複数のメッセージを 1 つのイベントに結合することができます。

  • メッセージは、現在のイベントをキャンセルすることもできます。

  • 特定のメッセージが表示されなかった場合に、人工的なイベントを生成することができます。

イベントは、いくつかの段階を経ます。

オープン

「正常」状態:何かが発生しました。オペレーターが対応する必要があります。

承認

問題が承認されました。これは、ステータスベースの監視におけるホストおよびサービスの問題に類似しています。

カウント

指定したメッセージの必要な数がまだ到着していません。この状況では、まだ問題はありません。したがって、このイベントはオペレーターにはまだ表示されません。

遅延

エラーメッセージは受信されていますが、イベントコンソールは、設定された時間内に適切な「OK 」メッセージが受信されるかどうかを待機しています。そのメッセージが受信された場合にのみ、イベントはオペレーターに表示されます。

クローズ

イベントはオペレーターによって、またはシステムによって自動的に閉じられ、アーカイブにのみ残っています。

イベントにも状態があります ただし、厳密に言えば、ここでいう状態はイベント自体の状態ではなく、イベントを送信したサービスまたはデバイスの状態を指します。 ステータスベースの監視に例えて言えば、イベントは「OK 」、「WARN 」、「CRIT 」、または「UNKNOWN」としてフラグが付けられます。

2. イベントコンソールの設定

イベントコンソールは Checkmk の構成要素であり、自動的に有効化されるため、設定は非常に簡単です。

ただし、ネットワーク経由で syslog メッセージまたは SNMP トラップを受信する場合は、別途有効にする必要があります。 その理由は、どちらのサービスも、特定のポート番号で UDP ポートを開く必要があるためです。 また、システムごとに 1 つの Checkmk サイトしかこの操作を行うことができないため、ネットワーク経由の受信はデフォルトで使用不能になっています。

ポート番号は次のとおりです:

プロトコル ポート サービス

UDP

162

SNMPトラップ

UDP

514

syslog

TCP

514

TCP 経由の Syslog

TCP 経由の Syslog はほとんど使用されませんが、メッセージの送信がセキュリティで保護されるという利点があります。 UDP では、パケットが確実に到着することは保証されません。 また、Syslog も SNMP トラップも、メッセージの損失に対する承認や同様の保護機能はありません。 TCP 経由の Syslog を使用するには、送信システムがこのポートを介してメッセージを送信できる必要があります。

Checkmk アプライアンスでは、サイト設定で syslog/SNMP トラップの受信を有効にすることができます。 それ以外の場合は、omd config を使用してください。 必要な設定は、Addons で確認できます。

ec omd config

omd start では、mkeventd を含む行で、EC が開いている外部インターフェースを確認できます:

OMD[mysite]:~$ omd start
Creating temporary filesystem /omd/sites/mysite/tmp...OK
Starting mkeventd (builtin: syslog-udp,snmptrap)...OK
Starting liveproxyd...OK
Starting mknotifyd...OK
Starting rrdcached...OK
Starting cmc...OK
Starting apache...OK
Starting dcd...OK
Starting redis...OK
Initializing Crontab...OK

3. イベントコンソールの最初のステップ

3.1. ルール、ルール、そしてルール

冒頭で、EC は関連メッセージを取り出して表示するために使用されると述べました。 しかし、残念ながら、テキストファイル、Windows イベントログ、syslog など、ほとんどのメッセージは重要ではないものです。 メッセージが発信者によって事前に分類されている場合も、あまり意味はありません。

たとえば、Syslog や Windows イベントログでは、メッセージは OK、WARN、CRIT などのように分類されます。 しかし、WARN や CRIT が実際に何を意味するかは、プログラマーによって主観的に定義されるものです。 また、そのメッセージを生成したアプリケーションがこのコンピュータ上で重要であるかどうかさえも、明確に判断することはできません。 つまり、どのメッセージが本当の問題であるかを判断し、どのメッセージを単に破棄できるかを設定する必要があるのです。

Checkmk の他の部分と同様、設定はルールによって行われEC は「最初の一致」の原則に従って受信メッセージごとにルールを処理します。 受信メッセージに最初に適用されるルールによって、そのメッセージの運命が決まります。 適用されるルールがない場合、メッセージは単に無言で破棄されます。

時間の経過とともに EC 用のルールは通常非常に多く蓄積されるため、ルールはパケットに整理されます。 ルールの処理は、パケットごとに、パケット内では上から下へ順番に行われます。したがって、これらのパケットの処理順序は重要です。

3.2. 簡単なルールの作成

当然のことながら、EC の設定インターフェースは、[Setup ] メニューの [Events > Event Console] にあります。 すぐに使える状態では、実際にはルールを一切含まない [Default rule pack] しかありません。 したがって、前述のように、受信メッセージは破棄され、ログにも記録されません。 モジュール自体は、次のようになっています。

ec wato module

まず、Add rule pack で新しいルールパッケージを作成します。

ec new rule pack

いつものように、ID は内部参照であり、後で変更することはできません。 保存すると、ルールパッケージのリストに新しいエントリが表示されます。

ec rule pack list

ここで、まだ空のルールパッケージに で切り替え、新しいルールを Add rule で作成します。 ここでは、Rule Properties という見出しの最初のボックスのみに入力してください。

ec first rule

必要なのは、一意のRule ID だけです。 この ID は後でログファイルで見つかり、生成されたイベントとともに保存されます。 したがって、ID には意味のある名前を体系的に割り当てるのが賢明です。 他のボックスはすべてオプションです。 これは、条件について特に当てはまります。

重要:この新しいルールは、テスト用の例であり、すべてのイベントに適用されます。 そのため、後でこのルールを削除するか、少なくとも無効にすることが重要です。そうしないと、イベントコンソールが、あらゆる無意味なメッセージで溢れ、ほとんど使い物にならなくなってしまいます。

変更をアクティブにする

Checkmk では、変更を有効にするには、まず変更をアクティブにする必要があります。 これは、複数の関連ルールに影響する変更について、ルールを「有効」にするタイミングを正確に指定できるため、デメリットではありません。 また、事前にEvent Simulator を使用して、すべてが意図したとおりに機能するかどうかをテストすることができます。

まず、ページ右上にある累積変更数の数字をクリックします。

ec activate changes

次に、[Activate on selected sites ] をクリックして変更をアクティブにします。 イベントコンソールは、このアクションが中断されることなく実行されるように設計されています。 受信メッセージは常に確実に受信されるため、プロセスでメッセージが失われることはありません。

EC での変更をアクティブにできるのは、管理者だけです。 これは、Activate changes for event console (イベントコンソールをアクティブにする)の許可によって制御されます。

新しいルールのテスト

テストのために、Syslog または SNMP 経由でメッセージを送信することができます。 後でこの操作も実行してください。 ただし、最初のテストでは、EC のビルトイン機能である「Event Simulator 」を使用するとより実用的です。

ec simulator

ここでは 2 つのオプションがあります。Try out は、シミュレートされたメッセージに基づいて、どのルールが一致するかを評価します。 EC のセットアップ GUI の最上位レベルでは、ルールパッケージが強調表示されます。 ルールパッケージ内では、個々のルールが強調表示されます。 各パッケージまたはルールには、次の 3 つの記号のいずれかが付けられています。

このルールは、メッセージに対して最初に有効になり、その結果、メッセージの運命を決定します。

このルールは有効になりますが、メッセージはそれより前のルールによってすでに処理されています。

このルールは有効になりません。非常に便利な機能:灰色のボールにマウスを置くと、そのルールが適用されない理由の説明が表示されます。

[Generate event ] をクリックすると、[Try out] とほぼ同じ操作が行われますが、この場合はメッセージが実際に生成されます。 定義されているアクションが実際に実行されます。 また、イベントは監視のオープンイベントにも表示されます。 確認画面で、生成されたメッセージのソースコードを確認できます。

ec event generated

生成されたイベントは、[Monitor ] メニューの [Event Console > Events] に表示されます。

ec one open event

テスト用にメッセージを手動で生成する

ネットワーク上で最初の実際のテストを行うには、別の Linux コンピュータから手動で syslog メッセージを簡単に送信することができます。 プロトコルは非常に単純なので、特別なプログラムは必要ありません。UDP を使用してnetcat またはnc にデータを送信するだけで済みます。 UDP パケットの内容は 1 行のテキストで構成されています。 これが特定の構造に従っている場合、イベントコンソールはコンポーネントをきれいに分解します。

user@host:~$ echo '<78>Dec 18 10:40:00 myserver123 MyApplication: It happened again.' | nc -w 0 -u 10.1.1.94 514

ただし、何でも送信することもできます。 EC はそれをそのまま受け付け、メッセージテキストとして評価します。 アプリケーション、優先度などの追加情報は、当然ながら欠落します。 セキュリティ上の理由から、ステータスはCRIT と想定されます。

user@host:~$ echo 'This is no syslog message' | nc -w 0 -u 10.1.1.94 514

EC を実行している Checkmk サイト内には、echo を使用してローカルでテキストメッセージを書き込むことができる名前付きパイプがあります。 これは、ローカルアプリケーションを接続するための非常に簡単な方法であり、メッセージの処理をテストする方法でもあります。

OMD[mysite]:~$ echo 'Local application says hello' > tmp/run/mkeventd/events

ちなみに、ここでは syslog 形式で送信することも可能で、イベントデータのすべてのフィールドがきれいに記入されます。

3.3. イベントコンソールの設定

イベントコンソールには、他のモジュールにはない独自のグローバル設定があります。この設定は、Setup > Events > Event Console の「Settings 」ボタンで表示できます。

ec settings

いつものように、個々の設定の説明は、インラインヘルプおよびこの記事の該当箇所でご覧いただけます。

設定へのアクセスは、デフォルトでは「admin 」ロールでのみ利用可能な「Configuration of Event Console 」許可によって可能です。

3.4. 許可

イベントコンソールには、役割と許可に関する独自のセクションもあります。

ec permissions

これらの許可の一部については、この記事の適切な場所で詳しく説明します。

3.5. イベントコンソールでのホストの割り当て

イベントコンソールの特別な機能は、ステータスベースの監視とは対照的に、ホストが焦点ではないことです。 イベントは、明示的なホストの割り当てなしでも発生することができます。実際、多くの場合、この方が望ましいでしょう。 ただし、イベントが発生したときにステータス概要にすばやくアクセスできるように、すでにアクティブな監視対象となっているホストには割り当てが可能である必要があります。 あるいは、遅くともイベントをステータスに変換する場合は、正しい割り当てが不可欠です。

syslog 経由で受信したメッセージの基本的なルールは、メッセージ内のホスト名が監視のホスト名と一致していることです。 これは、syslog 設定と Checkmk のホスト名付けの両方で、完全修飾ドメイン名(FQDN) /完全修飾ホスト名(FQHN) を使用することで実現できます。 Rsyslog では、グローバルディレクティブ$PreserveFQDN on を使用してこれを実現できます。

Checkmk は、イベントからのホスト名を、アクティブな監視からのホスト名と自動的に可能な限り一致させようとします ホスト名に加えて、ホストエイリアスも試されます。 短い名前が syslog 経由で送信された場合、割り当ては正しくなります。

中間ログサーバーがよく使用されるため、IP アドレスの逆解像度はここではあまり意味がありません。 ホスト名を FQDN/FQHN に変換したり、多くのエイリアスを再入力したりするのが時間のかかる作業である場合は、イベントコンソールの設定 Hostname translation for incoming messages を使用して、メッセージの受信時にホスト名を直接変換することができます。 これにより、さまざまな可能性が生まれます。

ec hostname translation

最も柔軟な方法は、ホスト名内でインテリジェントな検索と置換を可能にする正規表現を使用することです。 特に、ホスト名が明示的であるが、Checkmk で使用されるドメイン部分だけが欠落している場合は、簡単なルールが役立ちます。(.*)\1.mydomain.test になります。 これらすべてで不十分な場合は、Explicit hostname mapping を使用して、個々の名前とそのそれぞれの変換のテーブルを指定することができます。

重要:名前変換は、ルールの条件チェックの前に、つまり自動テキスト書き換えによる Rewrite hostname ルールアクションによるホスト名の書き換えが行われるずっと前に実行されます。

SNMP では、割り当てはもう少し簡単です。 ここでは、送信者の IP アドレスが、監視対象のホストのキャッシュされた IP アドレスと比較されます。つまり、スイッチの Telnet または SSH ポートのアクセス可能性チェックなどの定期的なアクティブチェックが利用可能になると、SNMP 経由で送信されたこのデバイスからのステータスメッセージは、正しいホストに割り当てられます。

4. 監視の「イベントコンソール」

4.1. イベントビュー

イベントコンソールによって生成されたイベントは、監視環境内のホストおよびサービスと同様に表示されます。 このエントリポイントは、Monitor メニューのEvent Console > Events:

ec open events hilites

Events ビューは、他のビューと同様にカスタマイズすることができます。 表示されるイベントをフィルタリングしたり、コマンドを実行したりすることができます。 詳細については、ビューに関する記事をご覧ください。 新しいイベントビューを作成すると、イベントおよびイベントヒストリーがデータソースとして利用可能になります。

イベント ID (ここでは「27 」) をクリックすると、その詳細が表示されます。

ec event details

ご覧のとおり、イベントにはかなりの数のデータフィールドがありますが、その意味についてはこの記事でビットごとに説明します。 ただし、最も重要なフィールドについては、ここで簡単に説明しておきます。

フィールド 意味

State (severity) of event

はじめに述べたように、各イベントは、OKWARNCRIT 、またはUNKNOWN に分類されます。ステータスOK のイベントは、あまり一般的ではありません。これは、EC が問題のみをフィルタリングするように設計されているためです。ただし、OK イベントが意味のある場合もあります。

Text/Message of the event

イベントの実際のコンテンツ:テキストメッセージ。

Hostname

メッセージを送信したホストの名前。これは、Checkmk によってアクティブに監視されているホストである必要はありません。ただし、その名前のホストが監視に存在する場合、EC は自動的にリンクを作成します。この場合、Host aliasHost contactsHost icons フィールドも入力され、ホストはアクティブな監視と同じ表記で表示されます。

Rule-ID

このイベントを作成したルールの ID です。この ID をクリックすると、ルールの詳細に直接移動します。ちなみに、その間にルールが削除されても ID は保持されます。

冒頭で述べたように、イベントはサイドバーの「Overview 」に直接表示されます。

The Overview snap-in with the display of events.

ここでは3つの数値が表示されます:

  • Events — すべての開いている承認済みのイベント (Event Console > Events ビューに対応)

  • Problems — そのうち、WARN /CRIT /UNKNOWN状態のもの

  • Unhandled — そのうちの、まだ承認されていないもののみ (これについては後で詳しく説明します)

4.2. イベントのコマンドとワークフロー

ホストおよびサービスと同様に、イベントにも単純なワークフローがマッピングされています。 これは通常、Commands メニューにあるコマンドを使用して行います。 チェックボックスで表示および選択することで、複数のイベントに対して同時にコマンドを実行することができます。 特別な機能として、よく使用する単一のイベントを アイコンから直接アーカイブすることができます

各コマンドには、コマンドの実行を許可する役割を制御するための許可があります。 デフォルトでは、admin およびuser の役割を持つユーザーは、すべてのコマンドを使用できます。

ec commands menu

以下のコマンドを使用できます。

更新および承認

Update & Acknowledge コマンドは、イベントリストの上に次の領域を表示します。

ec commands

Update (更新、承認)ボタンを使用すると、1 つの操作でイベントにコメントを追加し、担当者を追加し、イベントを承認することができます。Change contact (コメント)フィールドは、意図的にフリーテキストになっています。 ここには、電話番号なども入力できます。 このフィールドは、GUI でのイベントの表示にはまったく影響しません。これは、純粋にコメント用のフィールドです。

Set event to acknowledged (承認済み)チェックボックスをオンにすると、イベントはopen (承認待ち)フェーズからacknowledged (承認済み)フェーズに切り替わり、以降、handled (承認済み)として表示されます。 これは、ホストおよびサービスの問題の承認と同様です。

その後、このチェックボックスをオフにしてコマンドを呼び出すと、承認が解除されます

状態を変更する

Change State コマンドを使用すると、イベントの状態を、たとえば「CRIT 」から「WARN 」に手動で変更することができます。

カスタムアクション

Custom Action コマンドを使用すると、イベントに対して自由に定義できるアクションを実行できます。 最初は、Send monitoring notification アクションのみ使用できます。 このアクションは、Checkmk 通知を送信し、アクティブに監視されているサービスからの通知と同じようにハンドルされます。 これは通知ルールを通過し、電子メール、SMS、またはそれに応じて設定した内容を送信します。 EC による通知の詳細については、以下をご覧ください。

イベントをアーカイブ

Archive Event ボタンをクリックすると、開いているイベントリストからイベントが完全に削除されます。 イベントに対するすべてのアクション(この削除も含む)はアーカイブにも記録されるため、後でイベントに関するすべての情報にアクセスすることができます。 そのため、ここでは「削除」ではなく「アーカイブ」という表現を使用しています。

イベントリストから、個々のイベントを簡単にアーカイブすることもできます。

4.3. イベントの表示

可視性の「問題」

通常のユーザーに監視のホストおよびサービスの可視性を提供するために、Checkmk は連絡先グループを使用します。 これらのグループは、セットアップ GUI、ルール、またはフォルダ設定によってホストおよびサービスに割り当てられます。

イベントコンソールでは、イベントを連絡先グループに割り当てるという設定は存在しません。 これは、実際にどのメッセージが受信されるかは事前にわからないためです。 Syslog および SNMP のソケットはどこからでもアクセスできるため、ホストのリストも不明です。 そのため、イベントコンソールには、表示設定を定義するためのいくつかの特別な機能があります。

初期状態では、全員がすべてのイベントを表示できます

まず、ユーザーロールを設定する際に、「Event Console > See all events 」という許可があります。 これはデフォルトで有効になっているため通常のユーザーはすべてのイベントを見ることができます。 これは、設定ミスによって重要なエラーメッセージが見落とされないように、意図的に設定されています。 より正確な表示にするための最初のステップは、user ロールからこの許可を削除することです。

ホストへの割り当て

イベントの可視性を他の監視とできるだけ一貫させるため、イベントコンソールは、イベントを受信するホストを、セットアップ GUI で設定されたホストとできるだけ一致させるよう努めます。 これは簡単に聞こえますが、実際には難しい作業です。 イベントにホスト名が記載されておらず、IP アドレスしかわからない場合もあります。 また、ホスト名がセットアップ GUI で設定されているものと異なる場合もあります。

割り当ては次のように行われます:

  • イベントにホスト名が見つからない場合、その IP アドレスがホスト名として使用されます。

  • 次に、イベント内のホスト名が、監視対象のホストのすべてのホスト名、ホストアドレス、および IP アドレスと大文字小文字を区別せずに比較されます。

  • この方法でホストが見つかった場合、その連絡先グループがイベントに使用され、これを使用して表示が制御されます。

  • ホストが見つからない場合、連絡先グループ(設定されている場合)は、イベントを作成したルールから取得されます

  • そこにもグループが保存されていない場合、ユーザーは「Event Console > See events not related to a known host 」の許可がある場合にのみイベントを表示できます。

この割り当ては 1 つのポイントで変更できます。 つまり、ルールで連絡先グループが定義されておりホストを割り当てることができる場合、通常はマッピングが優先されます。 これは、Precedence of contact groups オプションを使用してルールで変更できます。

ec outcome contact groups

さらに、通知のルールで直接設定を行うこともできます。 これにより、ホストの通常の責任よりもイベントの種類を優先させることができます。

4.4. トラブルシューティング

どのルールがどのくらいの頻度で適用されますか?

ルールパック …​

ec pack hits

… および個々のルール …​

ec rule hits

…「Hits 」列には、パッケージまたはルールがメッセージと一致した回数が表示されます。 これにより、効果のないルールを削除または修正することができます。 また、一致頻度の高いルールについても、この情報は有用です。 EC のパフォーマンスを最適化するには、これらのルールをルールチェーンの先頭に配置する必要があります。 これにより、EC がすべてのメッセージに対してテストするルールの数を減らすことができます。

カウンターは、[Event Console > Reset counters ] メニュー項目でいつでもリセットできます。

ルールの評価のデバッグ

ルールの試行ではEvent Simulator を使用してルールの評価をチェックする方法について説明しました。 イベントコンソールの設定でDebug rule execution の値をon に変更すると、すべてのメッセージについて、同様の情報をランタイムで取得することができます。

イベントコンソールのログファイルは、var/log/mkeventd.log にあります。このファイルには、チェックされたルールが有効にならなかった正確な理由が表示されます。

var/log/mkeventd.log
[1481020022.001612] Processing message from ('10.40.21.11', 57123): '<22>Dec  6 11:27:02 myserver123 exim[1468]: Delivery complete, 4 message(s) remain.'
[1481020022.001664] Parsed message:
 application:    exim
 facility:       2
 host:           myserver123
 ipaddress:      10.40.21.11
 pid:            1468
 priority:       6
 text:           Delivery complete, 4 message(s) remain.
 time:           1481020022.0
[1481020022.001679] Trying rule test/myrule01...
[1481020022.001688]   Text:   Delivery complete, 4 message(s) remain.
[1481020022.001698]   Syslog: 2.6
[1481020022.001705]   Host:   myserver123
[1481020022.001725]   did not match because of wrong application 'exim' (need 'security')
[1481020022.001733] Trying rule test/myrule02n...
[1481020022.001739]   Text:   Delivery complete, 4 message(s) remain.
[1481020022.001746]   Syslog: 2.6
[1481020022.001751]   Host:   myserver123
[1481020022.001764]   did not match because of wrong text

言うまでもなく、この集中的なログ記録は必要な場合にのみ、慎重に使用してください。 少し複雑な環境では、膨大な量のデータが生成されます。

5. ルールによる全権限

5.1. 条件

EC ルールで最も重要な部分は、もちろん条件 (Matching Criteria) です。 メッセージがルールに保存されているすべての条件を満たした場合にのみ、ルールで定義されているアクションが実行され、メッセージの評価が完了します。

ec matching criteria

テキスト比較に関する一般的な情報

テキストフィールドを含むすべての条件では、比較テキストは常に正規表現として扱われます。 比較は、大文字と小文字を区別せずに実行されます。 これは、他のモジュールにおける Checkmk の慣例とは例外です。 しかし、これにより、特にイベント内のホスト名は、各ホストでローカルに設定されている場合、中央で設定されている場合とスペルが必ずしも一致しないため、ルールの表現がより堅牢になります。 したがって、この例外はここでは非常に有用です。

さらに、インフィックス一致が常に適用されます。つまり、検索テキストの内容がチェックされます。 そのため、検索テキストの先頭または末尾に.* を記述する必要がありません。

ただし、1 つの例外があります。 ホスト名との一致に正規表現を使用せず明示的なホスト名を使用する場合そのホスト名は含まれているかどうかではなく完全一致がチェックされます。

注意:検索テキストにドット (.) が含まれている場合、それは正規表現とみなされ、インフィックス検索が適用されます。たとえば、myhost.com はnotmyhostide にも一致します。

マッチグループ

ここで非常に重要で便利なのが、[Text to match ] フィールドのマッチグループという概念です。 これは、正規表現で括弧で囲まれた式と一致するテキストセクションを指します。

データベースのログファイルで、次のようなタイプのメッセージを監視したいとします。

Database instance WP41 has failed

WP41 はもちろん可変であり、異なるインスタンスごとに個別のルールを作成することは避けたいでしょう。 そのため、正規表現には、任意の文字列を表す「.* 」を使用します。

Database instance .* has failed

ここで、変数部分を丸括弧で囲むと、イベントコンソールは、今後のアクションのために実際の値を記憶キャプチャ)します。

Database instance (.*) has failed

ルールが一致すると、最初のマッチグループはWP41 (またはエラーを発生させたインスタンス) の値に設定されます。

緑色のボールの上にカーソルを置くと、Event Simulator でこれらのマッチグループを確認できます。

ec match groups 1

生成されたイベントの詳細にも、これらのグループが表示されます。

ec match groups 2

マッチグループは、主に次のような用途に使用されます。

ここでヒントです。 正規表現で何かをグループ化する必要があるが、マッチグループを作成したくない場合があります。 これは、開括弧の直後に?: を配置することで実現できます。 例:式one (.*) two (?:.*) three は、one 123 two 456 three に対して、1 つのマッチグループ123 のみを作成します。

IPアドレス

Match original source IP address フィールドでは、メッセージの送信者のIPv4アドレスを一致させることができます。 完全一致するアドレス、またはX.X.X.X/Yの表記でネットワークを指定します。たとえば、192.168.8.0/24 と指定すると、192.168.8.Xのネットワーク内のすべてのアドレスが一致します。

IP アドレスの一致は、監視対象のシステムがイベントコンソールに直接送信する場合にのみ機能することに注意してください。 別の中間 syslog サーバーがメッセージを転送している場合、そのアドレスがメッセージの送信者として表示されます。

Syslog 優先度および機能

Match syslog priority およびMatch syslog facility フィールドは、Syslog情報によって定義された標準情報です。 内部的には、8ビットフィールドは、施設(32通り)用の5ビットと優先度(8通り)用の3ビットに分割されています。

32 の事前定義された施設は、かつてはアプリケーションなど向けに用意されていました。 しかし、当時の選択は将来を見据えたものではありませんでした。 施設の一つであるuucpは、20 世紀の 90 年代初頭には既にほぼ廃れていました。

しかし、syslog 経由で送信されるすべてのメッセージには、これらのファシリティのいずれかが付いているのが現実です。 場合によっては、後でメッセージをフィルタリングできるように、メッセージの送信時にこれらのファシリティを自由に割り当てることもできます。 これは非常に便利です。

ファシリティと優先度の使用には、パフォーマンスの面でもメリットがあります。 いずれの場合も、同じファシリティまたは優先度を持つメッセージにのみ適用されるルールを定義する場合は、ルールのフィルタにこれらを追加で定義する必要があります。 そうすることで、イベントコンソールは、異なる値を持つメッセージを受信した場合に、これらのルールを非常に効率的にバイパスすることができます。 これらのフィルタが設定されているルールが多いほど、ルールの比較回数が少なくなります。

一致の反転

Negate match: Execute this rule if the upper conditions are not fulfilled. (条件がすべて満たされない場合にのみ有効)チェックボックスをオンにすると、条件が1 つも満たされない場合にのみルールが有効になります。 これは、実際には 2 種類のルール (ルールの [Outcome & Action ] ボックスの [Rule type ]) でしか使用できません。

  • Do not perform any action, drop this message, stop processing.

  • Skip this rule pack, continue rule execution with next pack

ルールパックの詳細については、以下をご覧ください。

5.2. ルールの効果

ルールタイプ: イベントをキャンセルまたは作成

ルールが一致すると、そのメッセージに対して実行すべき処理が指定されます。 これは、[Outcome & Action ] ボックスで設定します。

ec outcome

Rule type (ルールの一時停止)を使用すると、その時点での評価を完全に中止したり、現在のルールパッケージの評価を中止したりすることができます。 特に最初のオプションは、最初の段階でいくつかの特定のルールを使用して、ほとんどの不要な「ノイズ」を取り除くために使用します。 このボックスの他のオプションは、「通常」のルールでのみ実際に評価されます。

ステータスの設定

State を使用すると、ルールは監視におけるイベントのステータスを設定します。 ルールでは、この状態は「WARN 」または「CRIT 」になります。OK イベントを生成するルールは、特定のイベントを純粋に情報として表現する例外として興味深い場合があります。 そのような場合、これらのイベントを自動的に期限切れにする機能と組み合わせると便利です。

明示的なステータスを設定するだけでなく、さらに 2 つの動的なオプションがあります。(set by syslog) 設定は、syslog 優先度に基づいて分類を引き継ぎます。 これは、メッセージが送信者によってすでに使用可能として分類されている場合にのみ機能します。 syslog が直接受信したメッセージには、8 つの RFC 優先度のいずれかが含まれ、次のようにマッピングされます。

優先度 ID 状態 syslog による定義

emerg

0

CRIT

システムが使用できません

alert

1

CRIT

緊急対応が必要です

crit

2

CRIT

重大な条件

err

3

CRIT

エラー

warning

4

WARN

警告

notice

5

OK

正常ですが、重要な情報があります

info

6

OK

純粋に情報

debug

7

OK

デバッグメッセージ

syslog メッセージに加えて、Windows イベントログからのメッセージ、およびターゲットシステムで Checkmkログウォッチプラグインによってすでに分類されているテキストファイルからのメッセージも、既製のステータスとして提供されます。 SNMP トラップについては、残念ながらこの機能は利用できません。

まったく別の方法として、テキスト自体に基づいてメッセージを分類することができます。 これは、(set by message text) 設定を使用して実行できます。

ec state by text

ここで設定されたテキストとの一致は、Text to match およびその他のルール条件がチェックされた後にのみ行われます。そのため、これらのチェックを繰り返し行う必要はありません。

設定されたパターンが 1 つも一致しない場合、イベントはUNKNOWN状態に戻ります。

サービスレベル

Service Level フィールドの背後にある考え方は、組織内のすべてのホストおよびサービスには、一定の重要度があるということです。 これは、ホストまたはサービスの特定のサービス契約に関連付けることができます。 Checkmk では、ルールを使用して、このようなサービスレベルをホストおよびサービスに割り当て、たとえば、通知や自己定義のダッシュボードをそれに依存させることができます。

イベントは必ずしもホストやサービスと相関するわけではないため、イベントコンソールでは、ルールを使用してイベントにサービスレベルを割り当てることができます。 その後、このレベルを使用してイベントビューをフィルタリングすることができます。

デフォルトでは、Checkmk は 4 つのレベル(0(レベルなし)、10(シルバー)、20(ゴールド)、30(プラチナ))を定義しています。 この選択は、Global settings > Notifications > Service Levels で必要に応じて変更できます。 レベルは、この数字で並べ替えられ、相対的な重要度に応じて比較されるため、レベルを表す数字が重要です。

連絡先グループ

可視化に使用される連絡先グループは、イベントの通知にも使用されます。 ここでは、ルールを使用して、連絡先グループをイベントに明示的に割り当てることができます。 詳細については、監視の章をご覧ください。

アクション

アクションは、ホストおよびサービスのアラートハンドラーとよく似ています。 ここでは、イベントが開かれたときに、自己定義のスクリプトを実行することができます。 アクションの詳細については、以下のセクションで説明します。

自動削除(アーカイブ)

Delete event immediately after the actions で設定できる自動削除 (= アーカイブ) により、イベントが監視にまったく表示されなくなります。 これは、一部のアクションのみを自動的にトリガーしたい場合や、後で検索できるように特定のイベントのみをアーカイブしたい場合に便利です。

5.3. テキストの自動書き換え

Rewriting 機能を使用すると、EC ルールによってメッセージのテキストフィールドが自動的に書き換えられ、注釈が追加されます。 これは別のボックスで設定します。

ec rewriting

書き換えでは、マッチグループが特に重要です。 これを使用すると、元のメッセージの一部を新しいテキストに含めることができます。 書き換え時に、次のようにしてグループにアクセスできます。

\1

元のメッセージの最初のマッチグループに置き換えられます。

\2

元のメッセージの2 番目のマッチグループに置き換えられます (以下同様)。

0

元のメッセージ全体が置き換えられます。

上記のスクリーンショットでは、新しいメッセージテキストは次のようにコード化されます。Instance \1 has been shut down.もちろん、これは、正規検索式と同じルールの Text to match にも少なくとも1 つの括弧式が含まれている場合にのみ機能します。 その例としては、次のようなものがあります。

ec rewrite match

リライトに関する追加の注意点:

  • 書き換えは、一致後に、アクションの実行前に実行されます。

  • 一致、書き換え、およびアクションは、常に同じルールで実行されます。メッセージを書き換えてから、後のルールで処理することはできません。

  • \1\2 などの式は、Rewrite message text だけでなく、すべてのテキストフィールドで使用できます。

5.4. イベントの自動キャンセル

一部のアプリケーションやデバイスは、問題が解決するとすぐに適切な OK メッセージを送信します。 このような場合、エラーによって開かれたイベントを自動的に閉じるように EC を設定することができます。 これをキャンセルといいます。

次の図は、database instance (.*) has failed というテキストを含むメッセージを検索するルールを示しています。(.*) という式は、マッチグループでトラップされる任意の文字列を表します。 同じルールのText to cancel event(s) フィールドにあるdatabase instance (.*) recovery in progress という式は、一致するメッセージを受信すると、このルールで作成されたイベントを自動的に閉じます。

ec cancelling

自動キャンセルは、次の条件を満たしている場合に機能します。

  • Text to cancel event(s) と一致するテキストを持つメッセージが受信され、

  • ここで(.*) グループでキャプチャされた値が元のメッセージのマッチグループと一致する場合

  • 両方のメッセージが同じホストから送信されている、および

  • 同じアプリケーション (Syslog application to cancel event フィールド) である場合に限ります。

ここでは、マッチグループの原則が非常に重要です。 結局のところ、メッセージdatabase instance TEST recovery in progress が、メッセージdatabase instance PROD has failed によって生成されたイベントをキャンセルしても、あまり意味がありませんよね?

Text to cancel events(s) でプレースホルダー\1 を使用する間違いを犯さないでください。 これは機能しません! これらのプレースホルダーはリライト時のみ機能します。

テキストがイベントの作成とキャンセルの両方に使用される場合があります。 そのような場合、キャンセルが優先されます。

キャンセル時にアクションを実行する

イベントがキャンセルされたときに、アクションを自動的に実行することもできます。 イベントがキャンセルされると、アクションが実行される前に、イベント内のいくつかのデータフィールドが OK メッセージの値で上書きされることに注意してください。 これにより、OK メッセージの完全なデータがアクションスクリプトで使用可能になります。 さらに、この段階では、イベントの状態は「OK 」としてフラグが付けられます。 これにより、アクションスクリプトは上書きを検出し、エラーメッセージと OK メッセージに同じスクリプトを使用することができます (チケットシステムに接続する場合など)。

OK メッセージのデータにより、以下のフィールドが上書きされます。

  • メッセージテキスト

  • タイムスタンプ

  • 最後の発生時刻

  • syslog 優先度

その他のフィールドは、イベント ID を含め、変更されません。

書き換えと組み合わせたキャンセル

同じルールで書き換えとキャンセルを使用する場合は、ホスト名またはアプリケーションの書き換えに注意する必要があります。 キャンセルすると、EC は、キャンセルメッセージが開いているイベントのホスト名およびアプリケーションと一致するかどうかを常にチェックします。 しかし、これらが書き換えられている場合、キャンセルは機能しません。

そのため、イベントをキャンセルする前に、イベントコンソールはホスト名とアプリケーションの書き換えをシミュレートして、関連するテキストを比較します。 これはおそらく、ご期待どおりの動作でしょう。

エラーメッセージと後の OK メッセージのアプリケーションフィールドが一致しない場合にも、この動作を利用できます。 この場合、アプリケーションフィールドを既知の固定値に書き換えるだけです。 これにより、実際にはこのフィールドは無視されることになります。

syslog 優先度に基づくキャンセル

エラーメッセージと OK メッセージのテキストがまったく同じになる状況があります (残念ながら)。 ほとんどの場合、実際のステータスはテキストではなく、syslog 優先度でコード化されています。

この目的のために、Syslog priority to cancel event オプションがあります。 ここでは、たとえば、debug …​notice の範囲を入力します。 この範囲内のすべての優先度は、通常、OKステータスとみなされます。 このオプションを使用する場合でも、 Text to cancel event(s) フィールドに適切なテキストを入力する必要があります。そうしないと、同じアプリケーションに影響するすべてのOKメッセージがルールに一致してしまいます。

5.5. メッセージのカウント

Counting & Timing ボックスには、類似のメッセージをカウントするためのオプションがあります。 このオプションは、指定した期間内に頻繁または まれにのみ発生するメッセージのみ関連性がある場合に有用です。

頻繁すぎるメッセージ

Count messages in interval オプションを使用すると、頻繁に発生するメッセージのチェックを有効にすることができます。

ec counting

まず、[Time period for counting ] で期間を指定し、[Count until triggered] でイベントを開くメッセージの数を指定します。 上記の例では、1 時間に 10 件のメッセージに設定されています。 もちろん、これは 10 件の任意のメッセージではなく、ルールに一致するメッセージです。

通常、一致するすべてのメッセージをグローバルにカウントするのではなく、同じ「原因」を参照するメッセージのみをカウントするのが理にかなっています。 これを制御するために、Force separate events for different …​ で始まる 3 つのチェックボックスがあります。 これらは、以下の条件で一致するメッセージのみを一緒にカウントするように事前設定されています。

これにより、「1 時間に同じホスト、同じアプリケーション、同じサイトから 10 件以上のメッセージが受信された場合、...」などのルールを策定することができます。 このルールにより、複数の異なるイベントが生成される場合があります。

たとえば、3 つのチェックボックスをすべてオフにした場合、カウントはグローバルにのみ行われ、ルールは合計 1 つのイベントしか生成できなくなります。

ちなみに、カウントには 1 を入力するとよいでしょう。 そうすることで、「イベントストーム」を効果的に把握することができます。 たとえば、短期間に 100 件の同じ種類のメッセージが受信された場合でも、生成されるイベントは 1 件のみとなります。イベントの詳細には、最初のメッセージが発生した時刻が表示されます。

  • 最初のメッセージが発生した時刻、

  • 最も新しいメッセージが発生した時刻、および

  • このイベントにまとめられたメッセージの総数が表示されます。

ケースが閉じられた場合、2 つのチェックボックスを使用して、新しいイベントを開くタイミングを定義できます。 通常、イベントが承認されると、それ以降にメッセージが受信された場合、カウントが新たに開始され、新しいイベントがトリガーされます。 この機能は、[Continue counting when event is acknowledged] で無効にすることができます。

Discontinue counting after time has elapsed オプションを有効にすると、比較期間ごとに常に個別のイベントが開かれます。 上記の例では、1 時間あたり 10 件のメッセージという閾値が指定されています。 このオプションを有効にすると、1 時間に最大 10 件のメッセージが、すでに開いているイベントに追加されます。 1 時間が経過すると、十分な数のメッセージが受信されている場合、新しいイベントが開かれます。

たとえば、この数を 1 に、時間間隔を 1 日に設定した場合、このメッセージタイプのイベントは 1 日に 1 件しか表示されません。

Algorithm の設定は、一見すると少し意外かもしれません。 しかし、現実的に考えてみましょう。 「1時間に10件のメッセージ」とは、実際にはどういう意味でしょうか それはどの1時間のことでしょうか? 1 日の 1 時間ごとですか? 最後の 1 分間に 9 件のメッセージが受信され、次の 1 分の間にさらに 9 件のメッセージが受信された場合、2 分間で 18 件のメッセージが受信されますが、1 時間あたりでは 10 件未満であるため、このルールは適用されません。 これはあまり合理的なルールとは言えません。 この問題には唯一の解決策はないため、Checkmk では「1 時間あたり 10 件」が正確に何を意味するのかについて 3 つの異なる定義を用意しています。

この問題には単一の解決策がないため、Checkmk では「1 時間あたり 10 件のメッセージ」の正確な意味について 3 つの定義を用意しています。

アルゴリズム 機能

Interval

カウント間隔は、最初に受信した一致するメッセージから開始されます。counting フェーズのイベントが生成されます。指定した時間が経過してもカウントに達しない場合、イベントは黙って削除されます。ただし、指定した時間が経過する前にカウントに達した場合、イベントは直ちに開かれ(設定済みのアクションがトリガーされます)。

Token Bucket

このアルゴリズムは、固定の時間間隔では機能しませんが、ネットワークでトラフィックシェーピングによく使用される方法を実装しています。1 時間に 10 件のメッセージを送信するように設定しているとします。これは、平均して 6 分ごとに 1 件のメッセージが送信されることになります。一致するメッセージが最初に受信されると、counting フェーズでイベントが生成され、カウントが 1 に設定されます。それ以降のメッセージごとに、このカウントは 1 ずつ増加します。そして 6 分ごとに、メッセージが受信されたかどうかに関係なく、カウンタは再び 1 ずつ減少します。カウンタが再び 0 になると、イベントは削除されます。したがって、平均メッセージレート1 時間あたり 10 件を恒久的に上回ったときにトリガーが作動します。

Dynamic Token Bucket

これは、Token Bucket アルゴリズムのバリエーションで、ある時点でのカウンタが小さいほど、その減少速度は遅くなります。上記の例で、カウンタが 5 の場合、6 分ごとではなく12分ごとにのみ減少します。この結果、許容レートをわずかに上回った通知レートでは、イベントがより早く開かれ(したがって通知されます)、より早く通知されます。

では、どのアルゴリズムを選択すべきでしょうか?

  • Interval は、最も理解が簡単で、後で syslog アーカイブで正確なカウントを実行したい場合に追跡しやすいです。

  • Token Bucket 一方、はよりスマートで「柔軟」です。区間の端での異常が少なくなります。

  • Dynamic Token Bucket は、システムの反応性を高め、通知の生成を高速化します。

設定数に達していないイベントは潜在的ですが、オペレーターには自動的に表示されません。 これらは「counting 」フェーズにあります。 イベントビューの「phase 」フィルターを使用して、このようなイベントを表示することができます。

ec phase filter counting

頻度が低すぎる、または欠落しているメッセージ

特定のメッセージの到着が問題であることを意味する場合と同じように、メッセージの欠落も問題であることを意味する場合があります。 特定のジョブからは、1 日に少なくとも 1 件のメッセージが到着すると予想されます。 このメッセージが到着しない場合、そのジョブは実行されていない可能性が高く、早急に修正する必要があります。

これと同様の設定は、Counting & Timing > Expect regular messages で構成できます:

ec expect messages

カウントと同様に、メッセージの出現を予想する期間を指定する必要があります。 ただし、ここではまったく異なるアルゴリズムが使用されており、この点ではより理にかなっています。 期間は常に、定義された位置に正確に合わせられます。 たとえば、hour の間隔は、常に分と秒の 0 から開始されます。 次のオプションがあります。

間隔 アラインメント

10 seconds

10の倍数秒ごとに

minute

分単位で

5 minutes

0:00、0:05、0:10 など

15 minutes

0:00、0:15、0:30、0:45 など

hour

毎時の開始時

day

00:00 に正確に、ただし設定可能なタイムゾーンで。これにより、12:00 から翌日の 12:00 までの間にメッセージを期待することもできます。たとえば、自分のタイムゾーンがUTC +1の場合、UTC -11 hours と指定します。

two days

1時間ごとの開始時。ここでは、1970-01-01 00:00:00 UTC を基準に、0から47までのタイムゾーンオフセットを指定できます。

week

UTC タイムゾーンにオフセットを加えた木曜日の午前 0:00。オフセットは時間単位で指定できます。木曜日である理由は、1970 年 1 月 1 日(エポック開始日)が木曜日だったためです。

なぜこんなに複雑なのでしょうか? これは、偽アラームを回避するためです。 たとえば、バックアップから 1 日に 1 件のメッセージが送信されることを想定していますか? バックアップのランタイムには必ず若干の誤差があるため、メッセージが正確に 24 時間間隔で受信されることはありえません。 たとえば、メッセージが深夜 0 時前後 1、2 時間の間に到着すると予想される場合、00:00 から 00:00 までの間隔よりも、12:00 から 12:00 までの間隔の方がはるかに現実的です。 ただし、メッセージが表示されなかった場合、通知は正午の 12:00 にのみ受信されます。

同じ問題の複数回発生

Merge with open event オプションは、同じメッセージが繰り返し表示された場合、既存のイベントが更新されるように事前設定されています。 これを変更して、毎回新しいイベントを開くようにすることができます。

5.6. タイミング

Counting & Timing 」には、イベントの開始および/または自動終了に影響する 2 つのオプションがあります。

Delay event creation (イベントを一時停止)オプションは、イベントの自動キャンセルを使用する場合に便利です。 たとえば、5 分間の遅延を設定すると、エラーメッセージが発生した場合、作成されたイベントは 5 分間「delayed 」状態のままになります。この間に OK メッセージが到着することを期待します。 その場合は、イベントは自動的に、そして何の問題もなく閉じられ、監視には表示されません。 ただし、時間が経過すると、イベントが開かれ、定義されているアクションが実行されます。

ec delay

Limit event lifetime は、ほぼ逆の動作を行います。 これにより、一定時間後にイベントを自動的に閉じるようにすることができます。 これは、表示したいが、監視によってアクティビティを生成したくない、OK ステータスの情報イベントなどに便利です。 自動的に「スイッチアウト」することで、このようなメッセージを手動で削除する手間が省けます。

ec limit livetime

メッセージを承認すると、その時点でのスイッチアウトは停止します。 この動作は、2 つのチェックボックスで制御できます。

5.7. ルールパッケージ

ルールパッケージには、管理が容易になるという利点があるだけでなく、複数の類似したルールの設定を簡略化し、同時に評価を高速化することができます。

たとえば、Windows イベントログSecurity に関する 20 個のルールセットがあるとします。 これらのルールはすべて、アプリケーションフィールドに特定のテキストがある条件をチェックするという共通点があります (このログファイルの名前は、EC からのメッセージではApplication として使用されます)。 このような場合は、次のように操作します。

  1. 独自のルールパッケージを作成します。

  2. このパッケージにSecurity に関する 20 のルールを作成するか、それらをこのパッケージに移動します (ルールテーブルの右側にある選択リストMove to pack…​ )。

  3. これらのルールすべてから、アプリケーションの条件を削除します。

  4. パッケージの最初のルールとして、アプリケーションがSecurityではない場合、メッセージがパッケージからすぐに送信されるルールを作成します。

この除外ルールは、次のように構成されています。

  • Matching Criteria > Match syslog application (tag) Security の場合。

  • Matching Criteria > Invert matching onNegate match: Execute this rule if the upper conditions are not fulfilled.

  • Outcome & Action > Rule type onSkip this rule pack, continue rule execution with next rule pack

セキュリティログから送信されていないメッセージは、このパッケージの最初のルールによって「拒否」されます。 これにより、パッケージ内の残りのルールが簡略化されるだけでなく、ほとんどの場合、他のルールをまったくチェックする必要がなくなるため、プロセスの速度も向上します。

6. アクション

6.1. アクションの種類

イベントコンソールには 3 種類のアクションがあり、手動で実行することも、イベントを開いたりキャンセルしたりするときに実行することもできます。

  • 自分で作成したシェルスクリプトの実行。

  • ユーザー定義の電子メールの送信

  • Checkmk通知の生成

6.2. シェルスクリプトと電子メール

まず、イベントコンソールの設定で電子メールとスクリプトを定義する必要があります。 これらは、Actions (Emails & Scripts) エントリにあります。

ec add action

シェルスクリプトの実行

Add new action (スクリプトの実行)ボタンを使用して、新しいアクションを作成できます。 次の例は、Execute Shell Script (シェルスクリプトの実行)タイプのアクションとして、単純なシェルスクリプトを作成する方法を示しています。 イベントの詳細は、環境変数を通じてスクリプトで利用できます。 たとえば、イベントの$CMK_ID$CMK_HOST 、フルテキスト$CMK_TEXT 、または最初のマッチグループ$CMK_MATCH_GROUP_1 などです。 使用可能な環境変数の完全なリストについては、インラインヘルプを参照してください。

ec define action

Checkmk の古いバージョンでは、環境変数だけでなく、$TEXT$ などのマクロも使用でき、スクリプトが実行される前に置き換えられていました。 攻撃者が、Checkmk プロセスの権限で実行される特別に作成された UDP パケットを介してコマンドを注入する危険性があるため、マクロは使用しないでください。 マクロは、互換性の理由から現在もサポートされていますが、Checkmk の将来のバージョンで削除される可能性があります。

スクリーンショットに示されているサンプルスクリプトは、サイトディレクトリにtmp/test.out ファイルを作成し、そのファイルに、それぞれの最後のイベントに関する変数の具体的な値を含むテキストを書き込みます。

cat << EOF > ${OMD_ROOT}/tmp/test.out
Something happened:

Event-ID: $CMK_ID
Host: $CMK_HOST
Application: $CMK_APPLICATION
Message: $CMK_TEXT
EOF

スクリプトは、以下の環境で実行されます。

  • /bin/bash がインタプリタとして使用されます。

  • スクリプトは、サイトのホームディレクトリ (/omd/sites/mysite など) を持つサイトユーザーとして実行されます。

  • スクリプトの実行中は、他のイベントの処理は停止されます。

スクリプトに待機時間がある場合は、at Linux スプールを使用して、スクリプトを非同期で実行することができます。 これを行うには、スクリプトを別のlocal/bin/myaction ファイルに作成し、at コマンドで起動します。

echo "$OMD_ROOT/local/bin/myaction '$HOST$' '$TEXT$' | at now

電子メールの送信

Send Email アクションタイプは、単純なテキストの電子メールを送信します。 実際には、mail コマンドラインコマンドを使用するなど、スクリプトでもこれを行うことができます。 しかし、この方法の方が便利です。Recipient email address およびSubject フィールドにもプレースホルダーを使用できることにご注意ください。

ec define action email

6.3. Checkmk による通知

スクリプトの実行と (単純な) 電子メールの送信に加えて、EC には 3 番目のアクションタイプがあります。それは、Checkmk通知システムによる通知の送信です。 通知は、アクティブ監視からのホストおよびサービスの通知と同じ方法で EC によって生成できます。 上記の単純な電子メールと比較した利点は明らかです。

  • 通知は、アクティブ監視とイベントベースの監視について、1 つの場所でまとめて設定できます。

  • 一括通知、HTML 電子メール、その他の便利な機能も利用できます。

  • カスタム通知ルール、通知のオフなど、通常の機能も使用できます。

Send monitoring notification アクションタイプは常に自動的に処理されるため、設定は必要ありません。

イベントは「通常の」ホストやサービスとは多少異なるため、その通知にはいくつかの特徴があります。詳細については、次のセクションで詳しく説明します。

既存のホストへの割り当て

イベントは、アクティブな監視で設定されているかどうかに関係なく、どのホストからも送信されます。 結局のところ、syslog および SNMP ポートは、ネットワーク上のすべてのホストに対して開いています。 その結果、エイリアス、ホストタグ、連絡先などの拡張ホスト属性は、最初は使用できません。 このため、特に通知ルールの条件は、必ずしも期待どおりに機能しない場合があります。

たとえば、通知を行う場合、EC は、アクティブ監視内でイベントと一致するホストを見つけようとします。 これは、イベントの可視性と同じ手順で行われます。 そのようなホストが見つかった場合、そのホストから以下のデータが取得されます。

  • ホスト名の正しいスペル。

  • ホストエイリアス

  • Checkmk で設定されているプライマリ IP アドレス。

  • ホストタグ

  • セットアップ GUI 内のフォルダ

  • 連絡先および連絡先グループのリスト

その結果、処理された通知のホスト名は、元のメッセージのホスト名と完全に一致しない場合があります。 ただし、アクティブ監視の通知テキストと同じ形式の通知テキストを使用すると、ホスト名に適用される条件を含む、統一された通知ルールの作成が簡単になります。

マッピングは、メッセージを受信した EC と同じサイトで実行されている監視コアにライブステータスクエリを送信することで、リアルタイムに行われます。 もちろん、これは、syslog メッセージ、SNMP トラップなどが、ホストがアクティブに監視されている Checkmk サイトに常に送信されている場合にのみ機能します。

クエリが機能しない場合、またはホストが見つからない場合は、代替データが受け入れられます。

ホスト名

イベントからのホスト名。

ホストエイリアス

ホスト名がエイリアスとして使用されます。

IPアドレス

IP アドレスフィールドには、メッセージの元の送信者のアドレスが含まれます。

ホストタグ

ホストはホストタグを受け取りません。空のタグを含むホストタググループがある場合、ホストはそれらのタグを採用しますが、それ以外の場合、グループからのタグは採用されません。通知ルールでホストタグを参照する条件を設定する場合は、この点に注意してください。

セットアップ GUI フォルダ

フォルダはありません。したがって、特定のフォルダに保存されるすべての条件は、メインフォルダの場合でも、満たすことはできません。

連絡先

連絡先のリストは空です。フォールバック連絡先が存在する場合、それらが入力されます。

アクティブな監視でホストを割り当てることができない場合、当然、通知に問題が発生します。 その理由としては、条件が適用されなくなる場合と、連絡先の選択が問題になる場合が考えられます。 このような場合、イベントコンソールからの通知は、独自のルールで具体的に処理されるように通知ルールを変更することができます。 この目的のために、EC 通知のみに一致させる、またはその逆で除外する、別の条件があります。

ec notification condition

残りの通知フィールド

EC からの通知がアクティブ監視の通知システムを通過するには、EC をそのスキームに合わせて調整する必要があります。 そのプロセスでは、通知の典型的なデータフィールドができる限り効果的に入力されます。 ホストのデータがどのように決定されるかについては、先ほど説明しました。 その他のフィールドは次のとおりです。

通知タイプ

EC 通知は、常にサービスメッセージとみなされます

サービス内容

これは、イベントの「Application 」フィールドの内容です。このフィールドが空の場合、「Event Console 」が入力されます。

通知番号

これは「1 」に固定されているため、この場合はエスカレーションは不可能です。また、同じ種類のイベントが連続して複数発生した場合も同様です。現在、EC は、イベントが承認されていない場合の通知の繰り返しはサポートしていません。

日付/時刻

カウントされるイベントの場合、これはイベントに関連付けられたメッセージが最後に発生した時刻です。

プラグイン出力

イベントのテキスト内容です。

サービスの状態

イベントの状態、つまり、OKWARNCRIT 、またはUNKNOWN

前の状態

イベントには前の状態がないため、通常のイベントでは常に「OK 」が、イベントをキャンセルした場合は常に「CRIT 」が入力されます。このルールは、正確な状態変化を条件とする通知ルールに必要なものに最も近いものです。

連絡先グループを手動で定義する

前述のように、イベントの連絡先を自動的に決定できない場合があります。 そのような場合は、通知に使用する EC ルールで連絡先グループを直接指定することができます。Use in notifications (通知の連絡先グループ)ボックスを必ずチェックしてください。

ec set contact groups

通知のグローバルスイッチ

Master control スナップインには、通知に関する中央スイッチがあります。 これは、EC によって転送される通知にも適用されます。

The Master control snap-in with notifications switched off.

ホストの割り当てと同様に、EC によるスイッチの照会には、ローカル監視コアへのライブステータスアクセスが必要です。 照会が成功すると、イベントコンソールのログファイルに次のように表示されます。

var/log/mkeventd.log
[1482142567.147669] Notifications are currently disabled. Skipped notification for event 44

ホストのスケジュールダウンタイム

イベントコンソールは、現在スケジュールダウンタイム中のホストを検出し、そのような状況では通知を送信しません。 ログファイルでは、次のように表示されます。

var/log/mkeventd.log
[1482144021.310723] Host myserver123 is currently in scheduled downtime. Skipping notification of event 433.

もちろん、このためには、アクティブな監視でホストが正常に検出されている必要があります。 検出に失敗した場合は、ホストはダウンタイムではないとみなされ、いずれの場合も通知が生成されます。

追加のマクロ

独自の通知スクリプト、特にイベントコンソールからの通知用スクリプトを作成する場合、元のイベントを説明するいくつかの追加変数を使用できます (通常どおり、プレフィックスNOTIFY_ でアクセスします)。

EC_ID

イベント ID。

EC_RULE_ID

イベントを作成したルールの ID。

EC_PRIORITY

0 (emerg) から7 (debug) までの数値による syslog 優先度。

EC_FACILITY

Syslog 機能 — これも数値で指定します。値の範囲は、0 (kern) から32 (snmptrap) です。

EC_PHASE

イベントのフェーズ。アクションは未解決のイベントのみによってトリガーされるため、この値はopen である必要があります。すでに承認済みのイベントを手動で通知する場合は、ここにack を指定してください。

EC_COMMENT

イベントのコメントフィールドです。

EC_OWNER

Owner フィールド。

EC_CONTACT

イベント固有の連絡先情報を記載するコメントフィールドです。

EC_PID

メッセージを送信したプロセスの ID (syslog イベントの場合)。

EC_MATCH_GROUPS

ルールの一致から得られたマッチグループ。

EC_CONTACT_GROUPS

ルールで手動で定義したオプションの連絡先グループ。

6.4. アクションの実行

上記の「コマンド」では、オペレーターによるアクションの手動実行について学びました。 さらに興味深いのは、アクションの自動実行です。これは、[Outcome & Action ] セクションの EC ルールで設定できます。

ec rule actions

ここでは、ルールに基づいてイベントが開かれたりキャンセルされたりしたときに実行されるアクションを 1 つ以上選択できます。 後者の場合、キャンセルされたイベントがすでに「open 」フェーズに達している場合にのみアクションを実行するかどうかを、Do cancelling actions リストで指定できます。 カウントまたは 遅延を使用すると、まだ待機状態であり、ユーザーにはまだ表示されていないイベントがキャンセルされる場合があります。

アクションの実行は、ログファイルvar/log/mkeventd.log に記録されます。

var/log/mkeventd.log
[1481120419.712534] Executing command: ACTION;1;cmkadmin;test
[1481120419.718173] Exitcode: 0

これらのログはアーカイブにも書き込まれます。

7. SNMP トラップ

7.1. SNMP トラップの受信設定

イベントコンソールには独自の SNMP エンジンがビルトインされているため、SNMP トラップの受信設定は非常に簡単です。 オペレーティングシステムのsnmptrapd は必要ありません。 すでに実行している場合は、停止してください。

イベントコンソールのセットアップに関するセクションで説明したように、omd config を使用して、このサイトでトラップレシーバーを有効にしてください。

ec config traps

各サーバーでは、トラップ用の UDP ポートは 1 つのプロセスしか使用できないため、この設定は 1 台のコンピュータにつき 1 つの Checkmk サイトでのみ実行してください。 サイト起動時に、mkeventd を含む行で、トラップ受信が有効になっているかどうかを確認できます。

OMD[mysite]:~$ omd start
Creating temporary filesystem /omd/sites/mysite/tmp...OK
Starting mkeventd (builtin: snmptrap)...OK
Starting liveproxyd...OK
Starting mknotifyd...OK
Starting rrdcached...OK
Starting cmc...OK
Starting apache...OK
Starting dcd...OK
Starting redis...OK
Initializing Crontab...OK

SNMP トラップが機能するには、送信者と受信者が特定のcredentials について合意している必要があります。 SNMPv1 および v2c の場合、これは「コミュニティ」と呼ばれる単純なパスワードです。 バージョン 3 では、さらにいくつかの認証情報が必要になります。 これらの認証情報は、イベントコンソールの設定の Credentials for processing SNMP traps設定します。Add new element ボタンを使用して、デバイスが代替として使用できる複数の認証情報を設定できます。

ec trap credentials

もちろん、より複雑な作業は、監視するすべてのデバイスの宛先アドレスを指定し、ここで認証情報を設定することです。

7.2. テスト

残念ながら、意味のあるテスト機能を備えたデバイスはほとんどありません。 少なくとも、イベントコンソール自体を使用して、テストトラップを送信することで、トラップの受信を簡単に手動でテストすることができます。 これは、snmptrap コマンドを使用して実行できます。 次の例では、192.168.178.11 にトラップを送信しています。 送信者のホスト名は、.1.3.6.1 の後に指定し、解決可能または IP アドレス(ここでは192.168.178.30 )として指定する必要があります。

user@host:~$ snmptrap -v 1 -c public 192.168.178.11 .1.3.6.1 192.168.178.30 6 17 '' .1.3.6.1 s "Just kidding"

設定でLog levelVerbose logging に設定している場合、EC のログファイルでトラップの受信と評価を確認することができます。

var/log/mkeventd.log
[1482387549.481439] Trap received from 192.168.178.30:56772. Checking for acceptance now.
[1482387549.485096] Trap accepted from 192.168.178.30 (ContextEngineId "0x80004fb8054b6c617070666973636816893b00", ContextName "")
[1482387549.485136] 1.3.6.1.2.1.1.3.0                        = 329887
[1482387549.485146] 1.3.6.1.6.3.1.1.4.1.0                    = 1.3.6.1.0.17
[1482387549.485186] 1.3.6.1.6.3.18.1.3.0                     = 192.168.178.30
[1482387549.485219] 1.3.6.1.6.3.18.1.4.0                     =
[1482387549.485238] 1.3.6.1.6.3.1.1.4.3.0                    = 1.3.6.1
[1482387549.485258] 1.3.6.1                                  = Just kidding

認証情報が間違っている場合、1 行のみ表示されます。

var/log/mkeventd.log
[1482387556.477364] Trap received from 192.168.178.30:56772. Checking for acceptance now.

このようなトラップによって生成されたイベントは、次のように表示されます。

ec trap event

7.3. 数値をテキストに変換: トラップの翻訳

SNMP はバイナリプロトコルであり、メッセージのテキストによる説明はごくわずかです。 トラップのタイプは、いわゆる OID と呼ばれる一連の数字によって内部で伝達されます。 これらは、ドットで区切られた一連の数字として表示されます (例:1.3.6.1.6.3.18.1.3.0)。

いわゆる MIB ファイルを使用すると、イベントコンソールはこれらの数字の列をテキストに変換することができます。 たとえば、1.3.6.1.6.3.18.1.3.0 は、SNMPv2-MIB::sysUpTime.0 というテキストになります。

トラップの変換は、イベントコンソールの設定で有効にすることができます。

ec translate traps

上記のテストトラップは、今度は少し異なるイベントを生成します。

ec trap event translated

Add OID descriptions オプションを有効にすると、より詳細な情報が表示されます。 ただし、トラップが実際に何を行うのかを理解するには役立ちます。

ec trap event translated2

7.4. 独自の MIB のアップロード

残念ながら、オープンソースの利点は MIB ファイルの作成者にもまだ浸透していないため、Checkmk プロジェクトでは、ベンダー固有の MIB ファイルを提供することができません。 ごく一部の無料の基本 MIB コレクションがプリインストールされており、たとえば、sysUpTime の翻訳が提供されています。

ただし、これらのファイルは、SNMP MIBs for trap translation モジュール内のイベントコンソールで、メニュー項目「Add one or multiple MIBs 」を使用して、独自の MIB ファイルをアップロードすることで追加することができます。以下は、Netgear Smart Switches の MIB ファイルを追加した例です。

ec mibs for translation

MIB に関する注意事項:

  • 単一のファイルではなく、MIB コレクションを 1 つの ZIP ファイルとしてアップロードすることもできます。

  • MIB には相互に依存関係があります。不足している MIB は Checkmk によって表示されます。

  • アップロードした MIB は、cmk --snmptranslate コマンドラインでも使用されます。

8. ログファイルの監視

Checkmk エージェントは、ログウォッチプラグインを使用してログファイルを分析することができます。 このプラグインは、まず、イベントコンソールとは独立して、ログファイルの独自の監視を行います。これには、監視でメッセージを直接承認する機能も含まれます。 また、プラグインが検出したメッセージを 1:1 でイベントコンソールに転送することもできます。

Windows エージェントでは、ログファイルの監視が、テキストファイルの評価用プラグインと Windows イベントログの評価用プラグインのフォームで、永続的に統合されています。 Python でコーディングされたプラグインmk_logwatch は、Linux および Unix で利用できます。 3 つすべては、エージェントベーカリーからアクセスして、セットアップや設定を行うことができます。 そのためには、次のルールセットを使用してください。

  • Text logfiles (Linux, Solaris, Windows)

  • Finetune Windows Eventlog monitoring

ログウォッチプラグインの正確な設定については、この記事では説明しません。 ただし、ログウォッチプラグイン自体でメッセージを可能な限り事前にフィルタリングし、テキストファイルの内容全体をイベントコンソールに送信しないことが重要です。

これは、Logfile patterns ルールセットによるその後の再分類と混同しないでください。 これは、エージェントによってすでに送信されたメッセージのステータスを変更するだけです。 ただし、これらのテンプレートをすでに設定しており、ログウォッチからイベントコンソールに単に切り替えたい場合は、パターンをそのまま使用することができます。 この目的のために、転送ルール (Logwatch Event Console Forwarding) には、Reclassify messages before forwarding them to the EC オプションが含まれています。

この場合、すべてのメッセージは合計3 つのルールチェーンを通過します。 エージェント、再分類、イベントコンソールです。

次に、プラグインによって検出されたメッセージが通常のログウォッチチェックで監視されなくなり、代わりに 1:1 でイベントコンソールに転送され、そこで処理されるようにログウォッチを変更します。 これは、Logwatch Event Console Forwarding ルールセットを使用して行います。

ec logwatch forwarding

この点に関する注意点:

各サイトに独自のイベントコンソールがない分散環境では、リモートサイトは syslog 経由でメッセージをセントラルサイトに転送する必要があります。 デフォルトでは UDP が使用されますが、これは安全なプロトコルではありません。 より良い解決策は、TCP 経由の syslog を使用することです。ただし、この場合はセントラルサイトでこれを有効にする必要があります (omd config)。

転送する際には、Syslog facility を指定してください。 これにより、EC で転送されたメッセージを簡単に認識することができます。 この用途には、local0 からlocal7 が適しています。

List of expected logfiles を使用すると、予想されるログファイルのリストを監視し、特定のファイルが予想どおりに見つからない場合に警告を表示することができます。

重要:ルールを保存しただけでは何も実行されません。 このルールは、サービスディスカバリー中にのみ有効になります。 このルールを再度実行すると、以前のログウォッチサービスが削除され、代わりに各ホストに対してLog Forwarding という名前の新しいサービスが1 つ作成されます。

ec log forwarding check

このチェックにより、イベントコンソールへの転送時に問題が発生した場合も、後で確認することができます。

8.1. サービスレベルおよび syslog 優先度

転送されたログファイルは、使用されているフォーマットによっては syslog 分類が欠落している場合があるため、Log ForwardingLogwatch Event Console Forwarding ルールセットで再分類を定義することができます。 さらに、Rule packs の一部として定義するルールセットでは、ステータスとサービスレベルを個別に設定することができます

9. アクティブ監視のイベントステータス

アクティブ監視で現在問題のあるイベントが開いているホストも確認したい場合は、各ホストの現在のイベントステータスを要約するアクティブチェックを追加することができます。 開いているイベントがないホストの場合は、次のように表示されます。

ec events check none

OK 状態のイベントのみがある場合、チェックはその数を表示しますが、緑色のままです。

ec events check ok

CRIT 状態にある開いているイベントがある場合の例を以下に示します。

ec events check crit

このアクティブチェックは、Check event state in Event Console (開いているイベント)ルールセットのルールを使用して作成します。 また、すでに承認されたイベントをステータスに反映するかどうかを指定することもできます。

ec check remote

Application (regular expression) オプションを使用すると、アプリケーションフィールドに特定のテキストを含むイベントのみをチェックの対象に制限することができます。 この場合、ホストに対して複数のイベントチェックを行い、アプリケーションごとにチェックを分離することが望ましいでしょう。 これらを名前で区別するには、Item (used in service description) オプションも必要です。このオプションを使用すると、指定したテキストがサービス名に追加されます。

イベントコンソールが、ホストを監視している Checkmk サイトと同じサイトで実行されていない場合は、TCP 経由のリモートアクセス用に「Access to Event Console 」を設定する必要があります。

ec events check

この設定を有効にするには、イベントコンソールが TCP 経由のアクセスを許可している必要があります。 この設定は、アクセスするイベントコンソールの設定で変更できます。

ec remote access

10. アーカイブ

10.1. アーカイブの機能

イベントコンソールは、イベントが経たすべての変更のログを記録します。 このログは 2 つの方法で確認できます。

  • Monitor > Event Console にある「Recent event history 」グローバルビュー。

  • Event Console Event > History of Event メニュー項目からイベントの詳細で確認できます。

グローバルビューには、過去 24 時間のイベントのみを表示するフィルタがあります。 ただし、通常どおり、フィルタはカスタマイズすることができます。

次の図は、合計 4 回の変更が行われたイベント 33 のヒストリーです。 まず、イベントが作成されました (NEW)。 次に、ステータスがOK からWARN に手動で変更されました (CHANGESTATE)。 その後、コメントが追加されて承認されました (UPDATE)。 最後に、イベントはアーカイブ/削除されました (DELETE)。

ec history

アーカイブには、Action 列に表示される以下のアクションタイプが含まれています:

アクションタイプ 説明

NEW

イベントが新しく作成されました (メッセージを受信したため、またはメッセージの受信を期待するルールが失敗したため)。

UPDATE

イベントがオペレーターによって編集されました (コメント、連絡先情報、承認の変更)。

DELETE

イベントがアーカイブされました。

CANCELLED

イベントが OK メッセージによって自動的にキャンセルされました

CHANGESTATE

オペレーターによってイベントの状態が変更されました。

ARCHIVED

ルールが適用されず、グローバル設定で「Force message archiving 」が有効になっていたため、イベントが自動的にアーカイブされました。

ORPHANED

イベントが「counting 」フェーズにある間に、関連付けられているルールが削除されたため、イベントが自動的にアーカイブされました。

COUNTREACHED

設定されたメッセージ数に達したため、イベントは「counting 」から「open 」に移動されました。

COUNTFAILED

counting で必要なメッセージ数に達しなかったため、イベントは自動的にアーカイブされました。

NOCOUNT

イベントは、counting 段階にある間に、関連付けられているルールが「カウントしない」に変更されたため、自動的にアーカイブされました。

DELAYOVER

ルールで設定された遅延が切れたため、イベントが開かれました。

EXPIRED

イベントは、設定された有効期限が切れたため、自動的にアーカイブされました。

EMAIL

電子メールが送信されました。

SCRIPT

自動アクション (スクリプト) が実行されました。

AUTODELETE

イベントは、対応するルールで設定されていたため、開かれた直後に自動的にアーカイブされました。

10.2. アーカイブの場所

前述のように、イベントコンソールのアーカイブは、本格的な syslog アーカイブとして設計されていません。 実装、特に管理をできるだけシンプルにするため、データベースのバックエンドは省略されています。 その代わりに、アーカイブは単純なテキストファイルに書き込まれます。 各エントリは 1 行のテキストで構成され、タブで区切られた列が含まれます。 ファイルは、~/var/mkeventd/history にあります。

OMD[mysite]:~$ ll var/mkeventd/history/
total 1328
-rw-rw-r-- 1 stable stable 131 Dec 4 23:59 1480633200.log
-rw-rw-r-- 1 stable stable 1123368 Dec 5 23:39 1480892400.log
-rw-rw-r-- 1 stable stable 219812 Dec 6 09:46 1480978800.log

デフォルトでは、新しいファイルは毎日自動的に作成されます。 イベントコンソールの設定で、ファイルのローテーションをカスタマイズすることができます。Event history logfile rotation 設定では、週ごとのローテーションに切り替えることができます。

ファイル名は、ファイルの作成時刻の Unix タイムスタンプ (1970 年 1 月 1 日 0 時の秒数) に準拠しています。

Event history lifetime (ファイル回転)の設定を変更しない限り、ファイルは 365 日間保存されます。 さらに、ファイルは Checkmk の中央ディスク容量管理にも記録されます。これは、Site management の Global settings(グローバル設定)で設定できます。 この場合、それぞれで設定されたより短い期限が適用されます。 グローバル管理には、空きディスク容量が少なくなった場合に、Checkmk の履歴データを古いものから順に自動的に削除するという利点があります。

スペースの問題が発生した場合は、ディレクトリ内のファイルを手動で削除するか、スワップアウトすることもできます。 このディレクトリには、zip ファイルやその他のファイルは置かないでください

10.3. 自動アーカイブ

テキストファイルには制限がありますが、理論的には、イベントコンソールに多数のメッセージをアーカイブすることができます。 アーカイブのテキストファイルへの書き込みは、パフォーマンスは非常に高いですが、その後の検索効率は低下します。 ファイルにはリクエスト期間のみがインデックスとして登録されているため、リクエストごとに、関連するすべてのファイルを読み込んで完全に検索する必要があります。

通常、EC は、実際にイベントが開かれたメッセージのみをアーカイブに書き込みます。 これをすべてのイベントに拡張するには、2 つの方法があります。

  1. すべての (それ以降の) イベントと一致するルールを作成し、Outcome & actions で「Delete event immediately after the actions 」オプションを有効にします。

  2. イベントコンソール設定で「Force message archiving 」スイッチを有効にします。

後者の方法では、どのルールにも該当しないメッセージも (アクションタイプ「ARCHIVED 」) アーカイブに書き込まれます。

11. パフォーマンスとチューニング

11.1. メッセージ処理

サーバーが 64 コアと 2 TB のメインメモリを搭載している時代においても、ソフトウェアのパフォーマンスは依然として重要な役割を果たしています。 特にイベントの処理では、極端な状況では着信メッセージが失われる可能性があります。

その理由は、使用されているプロトコル (Syslog、SNMP トラップなど) のいずれもフロー制御に対応していないためです。 何千ものホストが 1 秒間に同時にメッセージを送信する場合、受信者はその速度を落とすことはできません。

そのため、やや大規模な環境では、メッセージの処理時間を監視することが重要です。 これは、定義したルールの数と、その構造によって異なります。

パフォーマンスの測定

パフォーマンスを測定するには、サイドバーにEvent Console Performance 」という名前の別のスナップインがあります。 これは、通常どおり次のように含めることができます。

ec performance

ここに表示される値は、過去 1 分間の平均値です。 数秒しか続かないイベントストームは、ここでは直接読み取ることができませんが、数値は多少平滑化されているため、読みやすくなっています。

最大パフォーマンスをテストするには、分類されていないメッセージのストームを人工的に生成します (テストシステムでのみ行ってください)。たとえば、テキストファイルの内容をイベントパイプに連続して書き込むシェルループを使用します。

OMD[mysite]:~$ while true ; do cat /etc/services > tmp/run/mkeventd/events ; done

スナップインの最も重要な測定値は、次の意味があります。

意味

Received messages

1 秒間に現在受信しているメッセージの数。

Rule tries

試行されるルールの数。これは、ルールチェーンの効率に関する貴重な情報となります。特に、次のパラメータと組み合わせると有用です。

Rule hits

現在ヒットしている 1 秒あたりのルールの数。これらは、メッセージを破棄するルールや、単にカウントするルールである場合もあります。したがって、すべてのルールヒットがイベントになるわけではありません。

Rule hit ratio

Rule triesRule hits の比率。つまり、1 つのルールが(最終的に)有効になるまでに、EC が試す必要があるルールの数です。スクリーンショットの例では、この比率が驚くほど小さいです。

Created events

1 秒間に作成された新しいイベントの数。イベントコンソールは関連する問題(監視のホストやサービスの問題に相当)のみを表示すべきであるため、スクリーンショットの0.73/s の数値は、実際には当然高すぎるでしょう。

Processing time per message

ここでは、メッセージの処理に要した時間を読むことができます。注意:通常、これはReceived messages の逆ではありません。イベントコンソールが何も処理しなかった時間は、メッセージが送信されなかったため、まだ欠落しているからです。ここでは、メッセージの到着から処理が完全に完了するまでの純粋な実際の経過時間を測定しています。EC が特定の時間に処理できるメッセージのおおよその数を表示できます。 また、これはCPU 時間ではなく、実際の時間であることにご注意ください。十分な空き CPU があるシステムでは、これらの時間はほぼ同じになります。しかし、システムに負荷がかかり、すべてのプロセスが常に CPU を使用できない状況になると、実際の時間は大幅に長くなる可能性があります。

チューニングのヒント

イベントコンソールが 1 秒間に処理できるメッセージの数は、Processing time per message で確認できます。 この時間は、通常、メッセージが処理されるまでに試行されるルールの数に関係しています。 ここでは、最適化のためにいくつかのオプションがあります。

  • 非常に多くのメッセージを排除するルールは、できるだけルールチェーンの先頭に配置してください。

  • ルールパックを使用して、関連するルールのセットをグループ化してください。 各パッケージの最初のルールは、共通のベース条件が満たされない場合、そのパッケージからすぐに離れるようにしてください。

さらに、syslog の優先度および機能に基づいて、EC で最適化が行われます。 優先度と機能の組み合わせごとに、その組み合わせのメッセージに関連するルールのみが含まれる個別のルールチェーンが内部的に作成されます。

優先度、機能、またはできればその両方に条件を含む各ルールは、これらのルールチェーンすべてに含まれるのではなく、最適な 1 つだけに含まれます。 つまり、syslog 分類が異なるメッセージについて、そのルールをチェックする必要はありません。

再起動後、~/var/log/mkeventd.log に、最適化されたルールチェーンの概要が表示されます。

var/log/mkeventd.log
[8488808306.233330]  kern        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233343]  user        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233355]  mail        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233367]  daemon      : emerg(120) alert(89) crit(89) err(89) warning(89) notice(89) info(89) debug(89)
[8488808306.233378]  auth        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233389]  syslog      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233408]  lpr         : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233482]  news        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233424]  uucp        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233435]  cron        : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233446]  authpriv    : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233457]  ftp         : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233469]  (unused 12) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233480]  (unused 13) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233498]  (unused 13) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233502]  (unused 14) : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233589]  local0      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233538]  local1      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233542]  local2      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233552]  local3      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233563]  local4      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233574]  local5      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233585]  local6      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233595]  local7      : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)
[8488808306.233654]  snmptrap    : emerg(112) alert(67) crit(67) err(67) warning(67) notice(67) info(67) debug(67)

上記の例では、いずれの場合も 67 個のルールをチェックする必要があることがわかります。daemon 施設からのメッセージには 89 個のルールが関連し、daemon/emerg の組み合わせのみ 120 個のルールをチェックする必要があります。 優先度または施設に関する条件を含む各ルールにより、67 個からその数がさらに減少します。

もちろん、これらの条件は、関連するメッセージが確実に満たす場合にのみ設定してください。

11.2. 現在のイベントの数

現在存在するイベントの数も、EC のパフォーマンスに影響を与える可能性があります。つまり、その数が著しく増加した場合です。 前述のように、EC は syslog アーカイブの代替としてではなく、「現在の問題」を表示するためのものとしてご利用ください。 イベントコンソールは、数千件の問題を処理することは可能ですが、それは本来の目的ではありません。

現在のイベント数が 5,000 程度を超えると、パフォーマンスが著しく低下し始めます。 これは、GUI の反応が遅くなることで確認できます。 また、一部の状況では、メッセージを現在のすべてのイベントと比較する必要があるため、処理も遅くなります。 メモリ要件も問題になる場合があります。

パフォーマンス上の理由から、イベントコンソールは常にすべての現在のイベントを RAM に保持しています。 これらは、1 分に 1 回(調整可能)、および処理が正常に完了すると、~/var/mkeventd/status ファイルに書き込まれます。 このファイルが非常に大きくなると(たとえば 50 メガバイト以上)、このプロセスもどんどん遅くなります。 現在のサイズをすばやくチェックするには、llls -alF の別名)を使用します。

OMD[mysite]:~$ ll -h var/mkeventd/status
-rw-r--r-- 1 mysite mysite 386K Dez 14 13:46 var/mkeventd/status

不適切なルール (たとえば、すべてに一致するルール) により現在のイベントが多すぎる場合、GUI による手動での削除は現実的ではありません。 この場合は、ステータスファイルを削除するだけで問題が解決します。

OMD[mysite]:~$ omd stop mkeventd
Stopping mkeventd...killing 17436......OK
OMD[mysite]:~$ rm var/mkeventd/status
OMD[mysite]:~$ omd start mkeventd
Starting mkeventd (builtin: syslog-udp)...OK

注意:もちろん、保存されているカウンターやその他の状態だけでなく、現在のイベントもすべて失われます。 特に、新しいイベントは ID 1 から再び開始されます。

自動オーバーフロー保護

イベントコンソールには、「オーバーフロー」に対する自動保護機能があります。 これにより、ホストごと、ルールごと、およびグローバルに、現在のイベントの数が制限されます。 開いているイベントだけでなく、delayedcounting などの他のフェーズのイベントもカウントされます。 アーカイブされたイベントはカウントされません。

これにより、ネットワークの体系的な問題により、何千もの重要なイベントが殺到し、イベントコンソールが「シャットダウン」してしまうような状況から保護されます。 これにより、メインメモリに過大なイベントを保存することによるイベントコンソールのパフォーマンスの低下を防ぐことができます。 また、オペレーターの概要表示も(ある程度)保護され、ストームの一部ではないイベントは表示されたままになります。

制限に達すると、次のいずれかのアクションが実行されます:

  • 新しいイベントの作成が停止されます (このホスト、ルール、またはグローバルに)。

  • 同じですが、さらに「オーバーフローイベント」が作成されます。

  • 同じですが、さらに適切な連絡先にも通知されます。

  • 上記の 3 つのバリエーションの代わりに、新しいイベントのためのスペースを確保するために、最も古いイベントを削除することもできます。

制限および制限に達した場合の影響は、イベントコンソールの設定でLimit amount of current events で定義します。 次の図は、デフォルトの設定を示しています。

ec limit open events

…​create overflow event で値を有効にしている場合、制限に達すると、エラー状況をオペレーターに通知する単一の人工イベントが作成されます。

ec overflow event

さらに、…​notify contacts の値を有効にしている場合、Checkmk 通知によって適切な連絡先に通知されます。 この通知は、Checkmk通知ルールに従って送信されます。 これらのルールは、イベントコンソールの連絡先選択に従う必要はなく、それを変更することができます。 次の表は、Notify all contacts of the notified host or service (デフォルト)を設定した場合に選択される連絡先を示しています。

制限 連絡先の選択

ホスト

Checkmk によるイベント通知の場合と同じ方法で決定される、ホストの連絡先。

ルールごと

ホスト名フィールドは空のままにしてください。ルールで連絡先グループが定義されている場合は、その連絡先グループが選択されます。それ以外の場合は、フォールバック連絡先が適用されます。

グローバル

フォールバック連絡先。

11.3. アーカイブが大きすぎます

前述のように、イベントコンソールには、すべてのイベントとその処理ステップのアーカイブがあります。 これは、実装と管理を容易にするために、テキストファイルで保存されています。

テキストファイルは、データの書き込み性能の点では、データベースなど、膨大な最適化作業を行わない限り、他のファイル形式に勝るものはありません。 これは、Linux によるこのタイプのアクセスの最適化や、ディスクおよび SAN の完全なメモリ階層など、さまざまな要因によるものです。 ただし、その代償として、読み取りアクセスに時間がかかります。 テキストファイルにはインデックスがないため、ファイル内で検索を行う場合は、ファイル全体を読み込む必要があります。

最も単純な場合、イベントコンソールは、イベントの発生時刻のインデックスとして、ログファイルのファイル名を使用します。 クエリの期間を制限するほど、検索は高速になります。

ただし、アーカイブが大きくなりすぎないようにすることが非常に重要です。 イベントコンソールを実際のエラーメッセージの処理にのみ使用する場合、この問題は発生しません。 EC を実際の syslog アーカイブの代替として使用すると、ファイルが非常に大きくなる可能性があります。

アーカイブが大きくなりすぎた場合は、~/var/mkeventd/history/ で古いファイルを削除してください。 さらに、Event history lifetime でデータの保存期間を制限して、将来はデフォルトで削除されるように設定することもできます。 デフォルトでは 365 日間保存されます。 おそらく、それよりもはるかに短い期間で十分でしょう。

11.4. 時間の経過に伴うパフォーマンスの測定

Checkmk は、各イベントコンソールサイトに対してサービスを自動的に起動し、そのパフォーマンスデータを曲線で記録し、オーバーフローが発生した場合は警告を表示します。

監視サーバーに Linux エージェントをインストールしている場合、チェックは自動的に検出され、通常どおり設定されます。

ec check

このチェックには、各期間における受信メッセージの数や、そのうちの破棄されたメッセージの数など、非常に多くの興味深い測定タイプがあります。

ec graph message rate

ルールチェーンの効率は、テストされたルールと機能したルールの比較によって表されます。

ec graph rule efficiency

このグラフは、メッセージの処理に要する平均時間を示しています。

ec graph processing time

他にも、いくつかの追加グラフがあります。

12. 分散監視

複数の Checkmk サイトがあるインストールでイベントコンソールを使用する方法については、分散監視に関する記事をご覧ください。

13. ステータスインターフェイス

Unix ソケット~/tmp/run/mkeventd/status によるイベントコンソールは、内部ステータスへのアクセスとコマンドの実行機能の両方を提供します。 ここで使用されるプロトコルは、ライブステータスの厳しく制限されたサブセットです。 このインターフェイスは、監視コアによってアクセスされ、イベントコンソールの分散監視も提供するために、データを GUI に渡します。

イベントコンソールの簡略化されたライブステータスには、以下の制限が適用されます。

  • 許可されるヘッダーは、Filter:OutputFormat: のみです。

  • したがって、KeepAlive は使用できず、1 つの接続につき 1 つのリクエストしか送信できません。

以下のテーブルが利用可能です:

events

現在のイベントをすべてリストします。

history

アーカイブへのアクセス。このテーブルへのクエリは、アーカイブのテキストファイルにアクセスします。すべてのファイルへのフルアクセスを避けるため、エントリの時間にフィルターを適用してください。

status

EC のステータスとパフォーマンス値。このテーブルには常に 1 行のみが含まれます。

コマンドは、非常にシンプルな構文を使用して、unixcat でソケットに書き込むことができます。

OMD[mysite]:~$ echo "COMMAND RELOAD" | unixcat tmp/run/mkeventd/status

以下のコマンドを使用できます。

DELETE

イベントをアーカイブします。引数:イベント ID およびユーザー略称。

RELOAD

設定を再読み込みします。

SHUTDOWN

イベントコンソールを終了します。

REOPENLOG

ログファイルを再度開きます。このコマンドは、ログファイルのローテーションに必要です。

FLUSH

現在のイベントおよびアーカイブされたイベントをすべて削除します。

SYNC

~/var/mkeventd/status ファイルの即時更新を開始します。

RESETCOUNTERS

ルールヒットカウンターをリセットします (セットアップ GUI の [Event Console > Reset counters ] メニュー項目に対応しています)。

UPDATE

イベントから更新を実行します。引数は、イベント ID、ユーザー略称、承認 (0/1)、コメント、連絡先情報の順です。

CHANGESTATE

イベントの「OK 」/「WARN 」/「CRIT 」/「UNKNOWN」の状態を変更します。引数は、イベント ID、ユーザー略称、およびステータス桁 (「0 」/「1 」/「2 」/「3 」) です。

ACTION

イベントに対してユーザー定義のアクションを実行します。引数は、イベント ID、ユーザー略称、およびアクション ID です。特別な ID「@NOTIFY 」は、Checkmk に関する通知を表します。

14. ファイルとディレクトリ

ファイルパス 説明

var/mkeventd

イベントデーモンの作業ディレクトリ。

var/mkeventd/status

イベントコンソールの現在の状態全体。主に、現在開いているすべてのイベント (およびcounting などの移行段階にあるイベント) が含まれます。設定ミスにより開いているイベントが多数発生した場合、このファイルは巨大になり、EC のパフォーマンスが大幅に低下する可能性があります。このような状況では、mkeventd サービスを停止し、ファイルを削除してからサービスを再起動すると、開いているイベントをすべて一度に削除できます。

var/mkeventd/history/

アーカイブのファイル位置。

var/log/mkeventd.log

イベントコンソールのログファイルです。

etc/check_mk/mkeventd.d/wato/global.mk

Python 構文で記述されたイベントコンソールのグローバル設定。

etc/check_mk/mkeventd.d/wato/rules.mk

Python 構文で記述された、設定済みのすべてのルールパッケージおよびルール。

tmp/run/mkeventd/events

echo またはその他のコマンドを使用して、EC にメッセージを直接書き込むことができる名前付きパイプです。このパイプには、一度に 1 つのアプリケーションだけが書き込むようにしてください。そうしないと、メッセージのテキストが混ざってしまう可能性があります。

tmp/run/mkeventd/eventsocket

パイプと同じ役割を果たしますが、複数のアプリケーションが同時に書き込みを行うことができる Unix ソケットです。書き込みには、unixcat またはsocat コマンドが必要です。

tmp/run/mkeventd/pid

実行中のイベントデーモンの現在のプロセス ID。

tmp/run/mkeventd/status

現在のステータスを照会したり、コマンドを送信したりできる Unix ソケットです。GUI の要求はまず監視コアに送られ、監視コアがこのソケットにアクセスします。

local/share/snmp/mibs

SNMP トラップ変換用にユーザーがアップロードした MIB ファイル。

このページでは