ダイヤルアウト テレメトリ接続を確立する
ダイヤルアウト テレメトリ接続を確立するには、この手順を使用します。Junos デバイスから収集するセンサー情報に基づいて、gRPC サービス、ストリーミング サーバー プロファイル、センサー プロファイル、エクスポート プロファイル、データ コレクターを構成します。
ダイヤルアウトモードでは、ジュニパーデバイスは外部のテレメトリコレクターへの接続を開始し、テレメトリデータをストリーミングします。この方法は、テレメトリデータの一元管理が必要な場合に適しており、コレクターが接続を開始する必要なく、デバイスがデータをコレクターにプッシュするためです。
-
ジュニパーデバイスで、Junos Telemetryをサポートする互換性のあるJunos OSバージョンが実行されていることを確認します。
-
選択したトランスポートプロトコル(UDP、gRPCなど)と互換性のあるテレメトリコレクター(Juniper Telemetry Collector、Prometheus、InfluxDBなど)を設定します。
-
ジュニパーデバイスとコレクター間のネットワーク接続を確認します(たとえば、gRPCの場合はTCPポート50051、UDPの場合はカスタムポートなど)。
-
gRPC で TLS を使用する場合は、デバイスとコレクターの証明書を準備します。
-
サポートされているセンサーについては、 Junos YANGデータモデルエクスプローラー (Junos OS リリース23.2R2-S2で導入)または Junos Telemetry Sensor Explorer (リリース20.2R1〜23.1R1用)を参照してください。
-
レガシ gRPC ダイヤルアウト接続については、IP アドレスとルーティング インスタンスを構成するには、「 レガシ ダイヤルアウト接続の gRPC サービスを構成する」を参照してください。
特定のシステム リソースを監視するようにセンサーを構成します。各センサー構成には、3つの主要コンポーネントが必要です。
-
ストリーミング サーバー プロファイル - データを収集するサーバーと、IP アドレスやポート番号などの関連パラメーターを指定します。開始する前に、ジュニパーネットワークスデバイスからインバンド管理インターフェイスを使用しているサーバーへの接続を設定します。
-
センサープロファイル:システムリソースのモニタリングを可能にし、データの受信に使用される宛先サーバーなどの関連パラメータを設定できます。
-
[プロファイルのエクスポート(Export profile)]:使用するトランスポート プロトコルやデータを収集する間隔など、収集したデータをエクスポートするための属性を指定します。
センサープロファイルを設定する前に、少なくとも 1 つのエクスポートプロファイルと少なくとも 1 つのストリーミングサーバーを設定することをお勧めします。その後、エクスポート プロファイルとストリーミング サーバーをセンサー プロファイル構成に関連付けることができます。
統計のエクスポートを有効にするには、[edit services analytics]階層レベルでexport-profileおよびsensorステートメントを含めます。エクスポートプロファイルには、レポートレート、トランスポートサービス(gRPCなど)、および形式(gbp-gnmiなど)を含める必要があります。センサー構成には、コレクター名、エクスポートプロファイルの名前、およびリソースパスを含める必要があります。
リソースパスの例: /interfaces/interface[name='fxp0'。
gNMI ダイヤルアウトのエクスポート プロファイルを設定する場合、{'dscp', 'forwarding-class', 'payload-size'} などのエクスポート プロファイル パラメータは適用されません。これらのオプションのいずれかを設定すると、エラーが発生します。
次の手順に従って、ダイヤルアウト テレメトリ接続を確立します。
ストリーミング サーバー プロファイルの設定
サーバープロファイルは、エクスポートされたテレメトリデータを収集するサーバーのパラメーターを定義します。複数のサーバ プロファイルを定義できます。また、同じサーバ プロファイルを複数のセンサー プロファイルに関連付けることもできます。Junos OS リリース 15.1F6 以降、特定のセンサーに複数のサーバーを関連付けることができます。
UDP 経由でテレメトリ データをストリーミングする場合のガイドライン:
- テレメトリデータは、UDP経由でソースアプリケーションからコレクターに直接ストリーミングされます。設定は、コレクターへの接続のタイプによって異なります。コレクターは、管理インターフェイスまたは WAN インターフェイスを介して到達できる必要があります。
- ラインカードセンサーの場合、リモートアドレスがWANインターフェイス経由で到達可能であれば、ラインカードからコレクターにデータを直接エクスポートできます。ラインカードセンサー用の管理インターフェイス経由でテレメトリデータをエクスポートする必要がある場合は、データをルーティングエンジンにルーティングしてからコレクターに送信します。
- UDP 経由でのテレメトリ データの転送では、 .gpb 形式のみがサポートされています。以下は、センサー パス
/junos/system/linecard/interface/のテレメトリ データを UDP 経由でストリーミングする構成の例です。データは、「10」秒ごとに、最大ペイロードサイズが「5000」のコレクターに、ポート番号3026のリモートアドレス143.1.1.2にエクスポートされます。set services analytics streaming-server server_test remote-address 143.1.1.2 set services analytics streaming-server server_test remote-port 3026 set services analytics export-profile export_test local-port 0 set services analytics export-profile export_test reporting-rate 10 set services analytics export-profile export_test payload-size 5000 set services analytics export-profile export_test format gpb set services analytics export-profile export_test transport udp set services analytics sensor resource_test server-name server_test set services analytics sensor resource_test export-name export_test set services analytics sensor resource_test resource /junos/system/linecard/interface/
エクスポートされたテレメトリデータを収集するストリーミングサーバーのプロファイルを定義するには、次のようにします。
センサー プロファイルの設定
センサー プロファイルは、データを監視およびストリーミングするためのシステム リソースのパラメーターを定義します。センサー プロファイルごとに監視できるシステム リソースは 1 つだけです。監視するシステム リソースごとに異なるセンサー プロファイルを構成します。ただし、同じシステム リソースを監視するように複数のセンサーを設定することはできます。例えば、同じシステム・リソースからデータをエクスポートするために、異なるパラメーターを構成することを検討してください。
センサープロファイルを設定するには:
エクスポート プロファイルの設定
エクスポートプロファイルは、Junos Telemetryメカニズムを介して生成されたデータのエクスポートプロセスのパラメーターを定義します。少なくとも 1 つのエクスポート プロファイルを設定する必要がありますが、複数のエクスポート プロファイルを設定することもできます。各エクスポート プロファイルは、複数のセンサー プロファイルに関連付けることができます。ただし、特定のセンサー プロファイルに関連付けることができるエクスポート プロファイルは 1 つだけです。
プラットフォーム固有の エクスポートプロファイル の動作
Feature Explorerを使用して、特定の機能に対するプラットフォームとリリースのサポートを確認します。
次の表を使用して、プラットフォームのプラットフォーム固有の動作を確認します。
| プラットホーム |
差 |
|---|---|
| MXシリーズ |
MXシリーズルーター上のみ、Junos OS リリース17.3R1以降、エクスポートプロファイルのパケット損失の優先度を指定できます。その結果、各センサーに適切なパケット損失の優先度を適用できます。損失の優先度の設定は、輻輳時にどのパケットをネットワークからドロップするかを判断するのに役立ちます。以前は、エクスポート プロファイルでフォワーディング クラスと DSCP 値のみを指定することができました。サポートされているパケット損失の優先度設定は、 |
エクスポートプロファイルを設定するには:
データコレクタの設定
Junos Telemetry Interface センサーの設定の確認
目的
設定を確認します。
アクション
設定モードから、 show services analytics コマンドを入力して設定を確認します。出力に意図した設定内容が表示されない場合は、設定手順の手順を繰り返して設定を修正します。
user@host# show services analytics
streaming-server telemetry-server {
remote-address 192.0.2.2;
remote-port 30000;
}
export-profile export-params {
local-address 192.0.2.3;
local-port 21111;
dscp 20;
forwarding-class assured-forwarding;
loss-priority high;
reporting-rate 20;
format gpb;
transport udp;
}
sensor interface-1 {
server-name telemetry-server;
export-name export-params;
resource /junos/system/linecard/interface/logical/usage/;
resource-filter et-*;
}
設定をコミットした後、 show agent sensors 運用コマンドを発行して、センサーが有効になっていることを確認します。
user@host> show agent sensors
Sensor Information :
Name : interface-1
Resource : /junos/system/linecard/interface/logical/usage/
Version : 1.0
Sensor-id : 193570469
Resource-filter : et-*
Server Information :
Name : telemetry-server
Scope-id : 0
Remote-Address : 192.0.2.2
Remote-port : 30000
Profile Information :
Name : export-params
Rep-interval : 20
Address : 192.0.2.3
Port : 21111
Timestamp : 1
Format : GPB
Transport : UDP
DSCP : 20
Forwarding-class : assured-forwarding
Loss-priority : high
gRPC センサーの show agent sensors コマンド出力は、Junos OS Evolved プラットフォームでは、Junos OS プラットフォームの出力形式に合わせて切り捨てられます。
センサーパスの選択
センサーエクスプローラーとセンサーパスの選択に関するガイドライン
ジュニパーネットワークスの Junos YANGデータモデルエクスプローラ を使用して、サポートされているすべてのリソースパス、それに対応するリーフ、およびそれらをサポートするデバイスプラットフォームを表示します。
他のテレメトリ センサーと、一部のレガシ センサーに関する特定の情報を検索および表示するには、「 レガシ センサー パス」を参照してください。
センサー パスを構成するためのガイドラインとベスト プラクティスについては、「 センサー パスの探索」を参照してください。
UNIX ユーティリティによる Junos Telemetry Interface データのデコード
UNIXユーティリティを使用して、ジュニパーネットワークスデバイスからのストリーミングデータであるサーバーまたはコレクター上のJunos Telemetry Interfaceデータをデコードできます。このセクションの例では、ストリーミング データの 1 つのパケットをデコードする方法を示します。
データをデコードするためのコレクターの準備
この例では、次のものが必要です。
-
UNIX OS と Netcat (nc) ユーティリティー。
-
プロトコルバッファコンパイラ。
-
Junos Telemetry Interface プロトコル バッファ ファイル。
この手順では、Ubuntu OS を使用してデータをデコードするようにコレクターを準備する方法を示します。
Netcatユーティリティをインストールします。
sudo apt-get install netcat
プロトコル バッファー コンパイラをインストールします。
sudo apt-get install protobuf-compiler
プロトコルバッファ開発者ライブラリをインストールします。
sudo apt-get install libprotobuf-dev
ライブラリ ファイルがインストールされていることを確認します。
ls /usr/include/google/protobuf/descriptor.proto /usr/include/google/protobuf/descriptor.proto
最新バージョンのJunos Telemetryインターフェイスプロトコルバッファファイルをダウンロードしてインストールします。
Web ブラウザから、ジュニパーネットワークス ページの [すべての Junos プラットフォーム] ソフトウェアのダウンロード URL に移動します。 https://www.juniper.net/support/downloads/。Junos OS プラットフォームの名前とリリース番号を選択したら、[ ツール ] セクションに移動して Junos Telemetry Interface データ モデル ファイル パッケージをダウンロードします。
tar –xvzf junos-telemetry-interface-15.1F6.9.tgz junos-telemetry-interface/telemetry_top.proto junos-telemetry-interface/logical_port.proto junos-telemetry-interface/lsp_mon.proto junos-telemetry-interface/firewall.proto junos-telemetry-interface/lsp_stats.proto junos-telemetry-interface/port.proto junos-telemetry-interface/NOTICE junos-telemetry-interface/license.txt
手記:抽出したファイルの場所をメモしておいてください。
コレクターでのデータのデコード
この手順では、データをキャプチャする方法、生データをデコードする方法、およびプロトコル バッファー ファイルを使用してデータをデコードする方法を示します。
データをデコードするには、次のようにします。
データをキャプチャします。
宛先ストリーミングテレメトリサーバーまたはコレクターで netcat を UDP リスナーモードで実行して、すべての受信データグラムをファイルに格納します。ジュニパーネットワークスデバイスのstreaming-serverプロファイルで構成された宛先ポート番号を使用します。
nc -ul 0.0.0.0 20000 > data.gpb
手記:このコマンドは、データグラムを
data.gpbという名前のファイルに格納します。このプログラムを実行してデータをキャプチャします。データの受信を停止したい場合は、ブレーク信号(Control + C)を送信してプログラムで停止してください生データをデコードします。
手記:この手順は省略可能です。データのエンコードされたメッセージタイプがわかっている場合は、必須ではありません。
data.gpbファイルからメッセージをデコードします。protoc --decode_raw < ../data.gpb 1: "hillrock:160.1.1.25" 2: 0 4: "S1:/junos/system/linecard/interface/logical/usage/:/junos/system/linecard/interface/logical/usage/:PFE" 5: 65265 6: 1477686534474 7: 1 8: 1 101 { 2636 { 7 { 1 { 1: "et-0/0/4:2.32767" 2: 1477642750 3: 813 4 { 12: 0x37363732332e3165 } . . .2636の下の次の入れ子構造は、センサーの種類を識別します。2636数値は、telemetry_top.protoファイルで定義されているJuniperNetworksSensorメッセージを識別します。この例では、数値識別子7、logical_port.protoファイルで定義されたLogicalPortメッセージに対応しています。次のステップでこの情報を使用して、より詳細な出力を生成します。メッセージをデコードしてフィールド名を含めます。
プロトコル バッファー コンパイラを decode オプション付きで実行します。さらに、最上位のメッセージ・タイプ (
TelemetryStream) と、メッセージ定義logical_port.protoを持つファイルを指定します。また、Goggle protocol buffers (gpb) ライブラリを含める必要があります。protoc --decode TelemetryStream logical_port.proto -I /usr/include -I . < data.gpb system_id: "hillrock:160.1.1.25" component_id: 0 sensor_name: "S1:/junos/system/linecard/interface/logical/usage/:/junos/system/linecard/interface/logical/usage/:PFE" sequence_number: 65268 timestamp: 1477686536484 version_major: 1 version_minor: 1 enterprise { [juniperNetworks] { [jnprLogicalInterfaceExt] { interface_info { if_name: "et-0/0/4:2.32767" init_time: 1477642750 snmp_if_index: 813 parent_ae_name: "ae1.32767" ingress_stats { if_packets: 0 if_octets: 0 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/7:3.0" init_time: 1477642750 snmp_if_index: 520 parent_ae_name: "ae0.0" ingress_stats { if_packets: 61203309 if_octets: 6487548454 } egress_stats { if_packets: 87416547 if_octets: 9266153982 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.0" init_time: 1477642750 snmp_if_index: 2512 ingress_stats { if_packets: 26266247 if_octets: 2784214806 } egress_stats { if_packets: 26247215 if_octets: 2781829290 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.1" init_time: 1477642750 snmp_if_index: 2522 ingress_stats { if_packets: 26266249 if_octets: 2784214972 } egress_stats { if_packets: 26249115 if_octets: 2781935590 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.2" init_time: 1477642750 snmp_if_index: 2523 ingress_stats { if_packets: 26266248 if_octets: 2784214912 } egress_stats { if_packets: 26249106 if_octets: 2781935086 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.3" init_time: 1477642750 snmp_if_index: 2524 ingress_stats { if_packets: 26266248 if_octets: 2784214820 } egress_stats { if_packets: 26248520 if_octets: 2781902320 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.4" init_time: 1477642750 snmp_if_index: 2525 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247302 if_octets: 2781834112 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.5" init_time: 1477642750 snmp_if_index: 2526 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247209 if_octets: 2781828904 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.6" init_time: 1477642750 snmp_if_index: 2527 ingress_stats { if_packets: 26266248 if_octets: 2784214820 } egress_stats { if_packets: 26247196 if_octets: 2781828226 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.7" init_time: 1477642750 snmp_if_index: 2528 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247203 if_octets: 2781828618 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.8" init_time: 1477642750 snmp_if_index: 2529 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247225 if_octets: 2781829850 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.9" init_time: 1477642750 snmp_if_index: 2530 ingress_stats { if_packets: 26266247 if_octets: 2784214760 } egress_stats { if_packets: 26247209 if_octets: 2781828954 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.32767" init_time: 1477642750 snmp_if_index: 648 ingress_stats { if_packets: 4 if_octets: 240 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/4:2.32767" init_time: 1477642750 snmp_if_index: 813 parent_ae_name: "ae1.32767" ingress_stats { if_packets: 0 if_octets: 0 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/7:3.0" init_time: 1477642750 snmp_if_index: 520 parent_ae_name: "ae0.0" ingress_stats { if_packets: 61206122 if_octets: 6487846632 } egress_stats { if_packets: 87420567 if_octets: 9266580102 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.0" init_time: 1477642750 snmp_if_index: 2512 ingress_stats { if_packets: 26267458 if_octets: 2784343172 } egress_stats { if_packets: 26248420 if_octets: 2781957020 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.1" init_time: 1477642750 snmp_if_index: 2522 ingress_stats { if_packets: 26267460 if_octets: 2784343338 } egress_stats { if_packets: 26250320 if_octets: 2782063320 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.2" init_time: 1477642750 snmp_if_index: 2523 ingress_stats { if_packets: 26267459 if_octets: 2784343278 } egress_stats { if_packets: 26250311 if_octets: 2782062816 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.3" init_time: 1477642750 snmp_if_index: 2524 ingress_stats { if_packets: 26267460 if_octets: 2784343292 } egress_stats { if_packets: 26249725 if_octets: 2782030050 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.4" init_time: 1477642750 snmp_if_index: 2525 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248507 if_octets: 2781961842 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.5" init_time: 1477642750 snmp_if_index: 2526 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248414 if_octets: 2781956634 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.6" init_time: 1477642750 snmp_if_index: 2527 ingress_stats { if_packets: 26267460 if_octets: 2784343292 } egress_stats { if_packets: 26248401 if_octets: 2781955956 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.7" init_time: 1477642750 snmp_if_index: 2528 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248408 if_octets: 2781956348 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.8" init_time: 1477642750 snmp_if_index: 2529 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248430 if_octets: 2781957580 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.9" init_time: 1477642750 snmp_if_index: 2530 ingress_stats { if_packets: 26267459 if_octets: 2784343232 } egress_stats { if_packets: 26248414 if_octets: 2781956684 } op_state { operational_status: "up" } } interface_info { if_name: "et-0/0/13:0.32767" init_time: 1477642750 snmp_if_index: 648 ingress_stats { if_packets: 4 if_octets: 240 } egress_stats { if_packets: 0 if_octets: 0 } op_state { operational_status: "up" } } } } }
コレクターでのJunos Telemetry Interface UDPデータのデコード
コレクターは、受信データを読み取るために、リモートアドレスまたはポートの組み合わせでリスナーを開始する必要があります。受信データは、 telemetry_top.proto ファイルとセンサー proto ファイルを使用してデコードできます。
デコード手順を簡略化するために、コレクターはテレメトリソフトウェアパッケージの一部として出荷されたすべてのプロトファイルをロードして、受信データをデコードできます。
- 管理インターフェイスとWANインターフェイスの両方でストリーミングデータを検証します。ストリーミングサーバープロファイルに適切なアドレスを指定します。
- 列挙型と浮動小数点数は、UDP ストリーミングの文字列としてストリーミングされます。gNMI は同じ形式を使用するため、列挙型は文字列として保持されます。
- float データ型の処理は、将来のリリースを対象としています。
テレメトリ データが UDP 経由でストリーミングされる場合は、データが正しくデコードされ、不明なフィールドがコレクターでデコードされないことを確認します。
UDP 経由でテレメトリ データをストリーミングしているときに発生する問題には、次のようなものがあります。
- 誤ったデコード: 誤ったデコードは、テレメトリ データが UDP 経由で正しくストリーミングされていないことを意味します。次の例では、太字で強調表示されているデータは、データが正しくデコードされなかったことを示しています。この動作は、エンコードが正しくないか、proto ファイルのパッケージが間違っていることが原因です。
system_id: "r02.dtw01.icn" component_id: 65535 sensor_name: "mpls:/network-instances/network-instance/mpls:/network-instances/network-instance/mpls:rpd" sequence_number: 2421 timestamp: 1715024560793 version_major: 1 version_minor: 0 enterprise: { [juniperNetworks]: { [jnpr_network_instances_rsvp_ext]: { network_instance: { name: "master" mpls: { 153 { 151 { 152{ 151{ 51: "r02.dtw01.icn-r01.bos02.icn-01" 152{ 151{ 51: "AUTO" 52: 0 53: 12873154 } 152{ 151{ 51:1 52:200000 53: 0 54: 300 55: 1 61: 1549061 } 152 {正しくデコードされたデータの例は次のとおりです。
system_id: "r0-RE0" component_id: 65535 sub_component_id: 0 sensor_name: "test_chassisd:/network-instances/:/network-instances/:rpd" sequence_number: 0 timestamp: 1719126223900 version_major: 1 version_minor: 0 enterprise { [juniperNetworks] { [jnpr_network_instances_ni_226_ext] { network_instance { name: "DEFAULT" protocols { protocol { identifier: "STATIC" name: "DEFAULT" static_routes { static { prefix: "10.0.0.0/8" state { prefix: "10.0.0.0/8" set_tag: "0" } next_hops { next_hop { index: "1" state { index: "1" next_hop: "10.220.127.254" metric: 0 recurse: false } interface_ref { state { interface: "re0:mgmt-0" subinterface: 0 } } } } } - 不完全なデータ ストリーミング: 不完全なデータのストリーミングは、出力ファイルのデータ検証によって検証する必要があります。
参照
変更履歴
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。特定の機能がお使いのプラットフォームでサポートされているかどうかを確認するには、 Feature Explorer を使用します。