Salt 向け Junos Syslog エンジン
ジュニパーネットワークスは、Salt を使用した Junos OS 対応デバイスの管理をサポートしています。Saltのインストールには、管理対象デバイスからのJunos OSシステムログメッセージをリッスンして、Saltイベントバスに公開する Junos syslogエンジン (Salt用)が含まれています。Junos syslogエンジンを既存またはカスタムのリアクターと組み合わせることで、Junos OSを実行するデバイスのイベントベースの状態管理にSaltを使用できます。
以下のセクションでは、Junos syslogエンジンの仕組み、設定および有効化の方法、送信およびサブスクライブするイベントの設定方法、イベントバスでこれらのイベントを表示する方法について説明します。
Junos Syslogエンジンについて
Junos OSは、システムログメッセージ( syslog メッセージとも呼ばれます)を生成して、ルーチン操作、障害とエラー状態、緊急またはクリティカル状態のイベントなど、デバイス上で発生するイベントを記録します。システムログメッセージには、次の情報が含まれます。
メッセージを生成した Junos OS プロセス
メッセージが生成された日時
イベントの重大度
イベントを一意に識別するタグ
イベントに関する情報を提供する文字列
たとえば、次の syslog メッセージには、ルータ 1 でのコミット操作の正常終了が記録されています。
Sep 3 11:52:22 router1 mgd[83498]: UI_COMMIT_COMPLETED: commit complete
Salt エンジンは、Salt によって監視され、Salt を利用する外部システム プロセスです。Salt エンジンは、Salt イベントバス上のイベントをエクスポートまたはインポートできます。SaltインストールにはJunos syslogエンジンが含まれています。Junos OSエンジンは、Saltサーバーに送信されるJunos OSシステムログメッセージを監視し、Saltイベントバスに公開することができます。 図1 は、Junos syslogエンジンを含むSaltセットアップを示しています。有効にすると、Junos syslog エンジンは、指定されたポートで Junos OS を実行している管理対象デバイスからの syslog イベントをリッスンします。
Junos syslogエンジンは、イベントを受信すると、イベント情報を抽出してSalt形式に変換し、Saltイベントバスに公開します。次の出力は、Salt イベントバスに表示されるものと同じコミット完了イベントを表しています。
jnpr/syslog/router1/UI_COMMIT_COMPLETED {
"_stamp": "2019-09-03T18:52:11.279878",
"daemon": "mgd",
"event": "UI_COMMIT_COMPLETED",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "commit complete",
"pid": "83498",
"priority": 188,
"raw": "<188>Sep 3 11:52:22 router1 mgd[83498]: UI_COMMIT_COMPLETED: commit complete",
"severity": 4,
"timestamp": "2019-09-03 18:52:11"
}
Salt イベントはすべて、イベントタグと本文で構成される同じ基本データ構造を使用します。イベントタグはイベントの高レベルの説明にすぎず、本文はイベントの詳細を含むディクショナリです。前の例では、イベントタグは jnpr/syslog/router1/UI_COMMIT_COMPLETEDです。
Junos Syslog エンジンを有効にする方法
Junos syslogエンジンを使用するには、エンジンが実行されているサーバーにpyparsingおよびtwisted Pythonモジュールをインストールする必要があります。このドキュメントでは、Junos syslog エンジンが Salt マスターで実行されていることを前提としています。前提条件をインストールし、Junos Syslog エンジンを有効にする方法の詳細については、Junos OS 用 Salt クイック スタート ガイドの Junos Syslog エンジンの設定を参照してください。
Junos Syslogエンジンを使用するには、Junos OSを実行しているデバイスで、Salt Masterの指定されたポートにsyslogメッセージを送信するように設定する必要があります。すべてのイベントを送信するようにデバイスを設定することも、特定のファシリティまたはメッセージの重大度レベルに対応するイベントのみを送信するようにデバイスを設定することもできます。
すべてのイベントを送信するには、すべてのファシリティとすべてのメッセージの重大度レベルを示すように any any を構成します。
[edit] saltuser@router1# set system syslog host salt-server port 9999 any any saltuser@router1# commit
たとえば、重大度レベルが info 以上のセキュリティ イベントのみを送信するには、 security info を構成します。
[edit] saltuser@router1# set system syslog host salt-server port 9999 security info saltuser@router1# commit
システム ロギング機能とメッセージ重大度レベルの詳細については、「 システム ロギング機能とメッセージ重大度レベル」を参照してください。
Junos syslogエンジンを有効にするには、Salt マスター 構成ファイルで engines キーでエンジンを設定し、Junos OSを実行しているデバイスで構成したものと同じポートを指定する必要があります。
engines:
- junos_syslog:
port: 9999
設定を適用するには、Salt マスターを再起動する必要があります。再起動すると、Junos syslog エンジン プロセスが自動的に開始されます。次に、Junos syslogエンジンは、指定されたポートでJunos OS syslogメッセージをリッスンし、イベント情報を抽出して、SaltイベントバスにSalt形式で公開します。特定のイベントが発生したときに自動的にアクションを実行するリアクタを作成および設定するには、 Junos OS イベント用の Salt リアクタの設定を参照してください。
イベントタグの設定方法
Salt イベントバスにパブリッシュされるイベントには、イベントタグとデータの 2 つのコンポーネントがあります。Junos OSイベントは、以下のデフォルトイベントタグ(またはイベントトピック)構文を使用します。
jnpr/syslog/hostname/event
Junos OSイベントのイベントタグは常に jnpr/syslog で始まる必要がありますが、エンジン設定で topic パラメータを定義し、含めるフィールドを指定することで、残りのフィールドをカスタマイズできます。例えば、以下の設定では、デバイスの IP アドレス、メッセージを生成したプロセス、イベントを含むイベントタグが生成されます。
engines:
- junos_syslog:
port: 9999
topic: jnpr/syslog/hostip/daemon/event
この構文を設定すると、完了したコミット操作イベントのタグは次のようになります。
jnpr/syslog/198.51.100.2/mgd/UI_COMMIT_COMPLETED
イベントタグのフィールドには、 jnpr/syslog/の後に以下のフィールドを任意に組み合わせて含めることができます。
daemoneventhostiphostnamemessagepidpriorityraw (the raw event data forwarded from the device)severitytimestamp
特定の Junos OS プロセスのイベントを購読する方法
Junos Syslog エンジンを有効にする方法の説明に従って、Junos OS を実行しているデバイスが Junos Syslog エンジンに送信する Syslog イベントを設定できます。デフォルトでは、Junos syslogエンジンは、Saltイベントバスで受信したすべてのイベントのイベントデータを公開します。また、エンジン設定で daemon パラメーターを設定することで、特定のプロセスのみにサブスクライブするように Junos syslog エンジンをカスタマイズすることもできます。このパラメーターを設定すると、Junos syslogエンジンは、Salt イベントバス上のこれらのプロセスに関連するイベントのみを公開します。
次のSaltエンジン設定は、管理プロセス(mgd)およびルーティングプロトコルプロセス(rpd)からのイベントにJunos syslogエンジンをサブスクライブします。
engines:
- junos_syslog:
port: 9999
topic: jnpr/syslog/hostname/event
daemon:
- mgd
- rpd
salt-masterプロセスを再起動して設定を適用すると、Junos syslogエンジンは、これら2つのプロセスからのイベントのみをSaltイベントバスに公開します。
jnpr/syslog/router1/UI_DBASE_LOGIN_EVENT {
"_stamp": "2019-08-28T22:16:42.612723",
"daemon": "mgd",
"event": "UI_DBASE_LOGIN_EVENT",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "User 'saltuser' entering configuration mode",
"pid": "52764",
"priority": 189,
"raw": "<189>Aug 28 15:17:00 router1 mgd[52764]: UI_DBASE_LOGIN_EVENT: User 'saltuser' entering configuration mode",
"severity": 5,
"timestamp": "2019-08-28 22:16:42"
}
Salt Event Busでイベントを表示する方法
Salt ランナーは、ミニオンではなく Salt マスターでモジュールを実行します。ランナーは salt-run コマンドを使用して実行します。Salt マスターイベントバスのイベントをリアルタイムで表示するには、次のコマンドを実行して、ターミナルにイベントを表示します。
saltuser@salt-master~$ sudo salt-run state.event pretty=True
jnpr/syslog/router1/UI_COMMIT_COMPLETED {
"_stamp": "2019-07-24T17:17:30.390374",
"daemon": "mgd",
"event": "UI_COMMIT_COMPLETED",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "commit complete",
"pid": "5795",
"priority": 188,
"raw": "<188>Jul 24 10:17:38 router1 mgd[5795]: UI_COMMIT_COMPLETED: commit complete",
"severity": 4,
"timestamp": "2019-07-24 17:17:30"
イベントをすばやくトリガーする場合は、次の例に示すようにミニオンに ping を実行します。
saltuser@salt-master~$ sudo salt 'router1' test.ping
対応するイベント バス出力には、Salt ジョブとミニオンの応答が表示されます。
20190626185606864697 {
"_stamp": "2019-06-26T18:56:06.865972",
"minions": [
"router1"
]
}
salt/job/20190626185606864697/new {
"_stamp": "2019-06-26T18:56:06.867352",
"arg": [],
"fun": "test.ping",
"jid": "20190626185606864697",
"minions": [
"router1"
],
"missing": [],
"tgt": "router1",
"tgt_type": "glob",
"user": "sudo_saltuser"
}
salt/job/20190626185606864697/ret/router1 {
"_stamp": "2019-06-26T18:56:06.968557",
"cmd": "_return",
"fun": "test.ping",
"fun_args": [],
"id": "router1",
"jid": "20190626185606864697",
"retcode": 0,
"return": true,
"success": true
}
Junos Syslog エンジンの設定をテストするには、Junos OS を実行しているデバイスで 操作を実行します。デバイスは、その操作のファシリティと重大度レベルのメッセージをJunos syslogエンジンに送信するように設定されている必要があります。さらに、エンジンは、そのプロセス(またはすべてのプロセス(デフォルト))からのメッセージにサブスクライブする必要があります。この操作を実行すると、Junos syslogエンジンがイベントをSaltイベントバスに公開します。