Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Extensible Telemetry Guide

拡張可能テレメトリの概要

Apstraのデバイスドライバーとテレメトリコレクターをインストールして、 IBAプローブで使用できる追加のテレメトリを収集します。デバイスドライバーにより、ApstraはNOSに接続し、テレメトリを収集できます。Apstraには、EOS、NX-OS、Ubuntu、CentOSのドライバが同梱されています。ここに記載されていないオペレーティング システムのドライバを追加するには、 Juniper Support にお問い合わせください。

テレメトリ コレクターは、拡張テレメトリの収集に役立つ Python モジュールです。以下のセクションでは、テレメトリコレクターを作成し、新しいコレクターでApstraを拡張するためのパイプラインについて説明します。コレクターを開発するには、Python に精通している必要があります。

開発環境の設定

テレメトリ コレクター( aos_developer_sdk リポジトリに格納)へのアクセスについては、 Juniper Support にお問い合わせください。開発した新しいコレクターをリポジトリに投稿します。

システム環境を損ならないように、仮想環境を使用して(開発とテストのために)必要な Python パッケージを分離することをお勧めします。https://support.juniper.net/support/downloads/?p=apstra/ から、 aos_developer_sdk.run の基本開発環境 ダウンロードできます。環境を読み込むには、以下を実行します。

このコマンドは、aos_developer_sdk Docker イメージを読 み込 みます。イメージの読み込みが完了すると、環境を開始するコマンドが印刷されます。コマンドの指定に応じてコンテナ環境を起動します。依存関係をインストールするには、以下を実行します。

コレクターの開発とテスト用に環境がセットアップされました。デバイス ドライバーや REST クライアントなどの Apstra SDK パッケージも、環境にインストールされます。

コレクターの開発

テレメトリ コレクターを開発するには、次の 順序で指定します

  1. コレクターが開発されるサービス - サービスの内容を識別します。たとえば、サービスは、スイッチ インターフェイスから受信および送信バイトを収集する場合があります。サービスの名前を識別します。組み込みサービス(ARP、BGP、インターフェイス、ホスト名、ルート、MAC、XCVR、LAG、MLAG)用に予約されているサービス名の使用は禁止されています。
  2. Apstraに提供されるデータのスキーマ - コレクター出力の構造化方法を識別します。キーと値のペアのコレクションは、Apstraに投稿する必要があります。各項目、つまり、キー/値の構文とセマンティック的な意味を特定します。上記の例では、keyはインターフェイス名を識別する文字列です。値は JSON 文字列で、JSON には 2 つのキー 'rx' と 'tx' の両方が整数の値を持っています。
  3. コレクターが開発されるネットワーク オペレーティング システム(NOS)- コレクター プラグインは NOS 固有です。コレクターを書き込む前に、コレクターが必要な NOS を識別します。
  4. 必要なデータをデバイスから取得する方法 - デバイスで使用して必要な情報を取得できるコマンドを識別します。例えば、「show interfaces」コマンドは、Arista EOSデバイスから受信および送信バイトを与えます。
  5. ストレージスキーマパス - 各項目のキーと値の型によって、ストレージスキーマパスが決定されます。選択したコレクターの種類は、アプリケーションのストレージスキーマを決定します。ストレージスキーマは、サービスが返すデータの高レベルの構造を定義します。コレクターのストレージ スキーマ パスは、次の表を使用して決定できます
    表 1: ストレージ スキーマ パスの決定
    キー型 の値の種類 ストレージスキーマのパス
    文字列 文字列 aos.sdk.telemetry.schemas.generic
    文字列 辞書 aos.sdk.telemetry.schemas.generic
    辞書 文字列 aos.sdk.telemetry.schemas.iba_string_data
    辞書 整数 aos.sdk.telemetry.schemas.iba_integer_data
  6. アプリケーションスキーマ - アプリケーションスキーマは、フレームワークに投稿された各項目のスキーマを定義します。アプリケーションスキーマは、ドラフト4バージョンのjsonスキーマを使用して表現されます。各項目は、キーと値で構成されています。次の表は、2 つのサンプル項目を指定します。
    表 2: ストレージ スキーマ パスを持つサンプル 項目
    ストレージ スキーマ パス のサンプル項目
    aos.sdk.telemetry.schemas.generic
    {
        "identity": "eth0",
        "value": "up",
    }
    aos.sdk.telemetry.schemas.iba_string_data
    {
        "key": {
            "source_ip": "10.1.1.1",
            "dest_ip": "10.1.1.2",
        },
        "value": "up",
    }
    メモ:

    * ジェネリック ストレージ スキーマを持つコレクターから返されるアイテムは、キー 'id' を使用してキー値を指定し、キー 'value' を使用する値を指定する必要があります。

    * IBAベースのスキーマを持つコレクターによって返されるアイテムは、キー'key'を使用してキー値を指定し、キー'value'を使用して値を指定する必要があります。

    この情報を使用して、JSON スキーマを作成できます。次の表は、上記で指定されたサンプル項目を対応する JSON スキーマにマッピングしています。

    表 3:サンプル アプリケーション スキーマ
    サンプル項目 のアプリケーションスキーマ
    {
        "identity": "eth0",
        "value": "up",
    }
    {
        "type": "object",
        "properties": {
            "identity": {
                "type": "string",
            },
            "value": {
                "type": "string",
            }
        }
    }
    {
    {
        "key": {
            "source_ip": "10.1.1.1",
            "dest_ip": "10.1.1.2",
        },
        "value": "up",
    }
    {
        "type": "object",
        "properties": {
            "key": {
                "type": "object",
                "properties": {
                    "source_ip": {
                        "type": "string",
                        "format": "ipv4"
                    },
                    "dest_ip": {
                        "type": "string",
                        "format": "ipv4"
                    },
                    "required": ["source_ip", "dest_ip"],
                }
            },
            "value": {
                "type": "string",
            }
        }
    }
    {

    JSON スキーマで使用可能な構造を使用すると、より複雑なスキーマを指定できます。ファイル内のスキーマを更新します。 aos_developer_sdk/aosstdcollectors/aosstdcollectors/json_schemas/<service_name>.json

    メモ:

    Apstraバージョン4.0.1では、GUIを使用して サービススキーマをインポート できます。

書き込みコレクター

コレクターは、 aos.sdk.system_agent.base_telemetry_collector から派生する必要があるクラスです。BaseTelemetryCollectorコレクターの 収集 メソッドをロジックで上書きし、以下の操作を行います。

デバイスからデータを収集

コレクター内のデバイス ドライバー インスタンスには、デバイスに対してコマンドを実行するメソッドが用意されています。たとえば、ほとんどのApstraデバイスドライバはメソッドを get_json 提供し、 get_text コマンドを実行して出力を返します。

メモ:

aos_developer_sdk環境のデバイスドライバーは事前にインストールされています。データを収集するために利用可能な方法を調めることができます。例えば:

データを解析

収集されたデータは、Apstraフレームワークと上記で識別されたサービススキーマに従って解析し、再フォーマットする必要があります。一般ストレージ スキーマを持つコレクターは、次の構造に従います。

IBAベースのスキーマを持つコレクターは、以下の構造に従います。

上記の構造では、転記されたデータには複数の項目があります。各項目にはキーと値があります。たとえば、インターフェイス固有の情報を投稿するには、フレームワークに投稿する各インターフェイスにアイデンティティ/キー値のペアが存在します。

メモ:

サードパーティパッケージを使用してデバイスから取得したデータを解析する場合は、パス内のPythonパッケージとバージョンをリストします。

<aos_developer_sdk>/aosstdcollectors/requirements_<NOS>.txt.依存関係によってインストールされたパッケージは、Apstraソフトウェアが使用するパッケージと競合しません。Apstraにインストールされたパッケージは、開発環境で /etc/aos/python_dependency.txt 利用できます。

フレームワークへのデータの投稿

データを収集し、必要なスキーマに従って解析する場合は、データをフレームワークに投稿します。コレクターで post_data 利用可能なメソッドを使用できます。1 つの引数を受け入れ、それはフレームワークに投稿する必要があるデータです。

リポジトリ内のフォルダ aos_developer_sdk/aosstdcollectors/aosstdcollectors には、各NOSのフォルダが含まれています。NOSと一致するフォルダにコレクターを追加します。CumulusはApstraバージョン4.1.0ではサポートされていませんが、この例は具体的な目的で使用されています。たとえば、Cumulus のコレクターを作成するには、コレクターを 、 に aos_developer_sdk/aosstdcollectors/aosstdcollectors/cumulus追加し、サービス名の後にファイルの名前を付けます。例えば、サービス名が 、 の場合は interface_in_out_bytes、ファイル interface_in_out_bytes.pyの名前を指定します。

コレクター クラスの定義に加えて、コレクター ファイルで関数 collector_plugin を定義します。この関数は、1 つの引数を取得し、実装されているコレクター クラスを返します。

たとえば、一般的なストレージスキーマベースのコレクターは次のようになります。

IBAストレージスキーマベースのコレクターは次のようになります。

単体テスト コレクター

リポジトリ内のフォルダー aos_developer_sdk/aosstdcollectors/test には、NOS に基づくフォルダーが含まれています。NOS に一致するフォルダーにテストを追加します。たとえば、Cumulus のコレクターへのテストが に aos_developer_sdk/aosstdcollectors/test/cumulus追加されます。ユニットテストの名前をプレフィックス test_にすることをお勧めします。

既存のインフラストラクチャでは、デバイス ドライバコマンドの応答を模擬して使用する Pytest 固定具 collector_factory を実装しています。テスト開発の一般的なフローは次のとおりです。

  1. コレクターファクトリを使用して、コレクターインスタンスと模擬Apstraフレームワークを取得します。コレクター ファクトリは、入力として記述したコレクター クラスを受け取ります。
  2. デバイスの応答を模擬します。
  3. 収集メソッドを呼び出す。
  4. 模擬的なApstraフレームワークに投稿されたデータを検証します。

例えば、テストは次のようになります。

テストを実行するには、以下を実行します。

このコマンドは、リポジトリ内のすべてのテストを実行します。

パッケージ コレクター

すべてのコレクターは NOS に基づいてパッケージ化されます。すべてのパッケージを生成するには、 で aos_develop_sdkを実行します。ビルドパッケージ aos_developer_sdk/distを見つけることができます.パッケージのビルドは大きく分類できます。

パッケージ の説明
内蔵コレクター パッケージ これらのパッケージには、プレフィックス aosstdcollectors_builtin_があります。Apstraは、リファレンスデザインに従ってデバイスからテレメトリを収集するために、セクションに記載されているサービスを <deviceblah> 必要とします。組み込みコレクター パッケージには、これらのサービスのコレクターが含まれています。パッケージは NOS 単位で生成されます。
カスタム コレクター パッケージ

これらのパッケージの名前にはプレフィックス aosstdcollectors_custom_ が含まれています。パッケージは NOS 単位で生成されます。 aosstdcollectors_custom_<NOS>-0.1.0-py2-none-any.whl というパッケージには、開発されたコレクターが含まれています。

Apstra SDKデバイスドライバパッケージ

これらのパッケージにはプレフィックス apstra_devicedriver_があります。これらのパッケージは、NOS 単位で生成されます。パッケージは、Apstraではデフォルトでは利用できないNOS用に生成されます。

パッケージのアップロード

Apstraソフトウェアに内蔵コレクターパッケージとデバイスオペレーティングシステム(NOS)用のApstra SDKデバイスドライバが提供されていない場合は、Apstraサーバーにアップロードする必要があります。

オフボックス ソリューションを使用していて NOS が EOS でない場合は、組み込みのコレクター パッケージをアップロードする必要があります。

コレクターを含むパッケージをアップロードし、デバイスシステムエージェントまたはシステムエージェントプロファイルに割り当てます。

テレメトリ コレクターの使用

テレメトリサービスレジストリの設定

レジストリは、そのアプリケーションスキーマとストレージスキーマパスにサービスをマッピングします。REST エンドポイント /api/telemetry-service-registryでテレメトリ サービス レジストリを管理できます。特定のサービスのレジストリ エントリを追加せずにサービスのコレクターを有効にすることはできません。サービスのレジストリ エントリは、サービスの使用中に変更できません。

メモ:

実行 makeすると、すべてのアプリケーション スキーマが dist フォルダー内の tar ファイル (json_schemas.tgz) に一緒にパッケージ化されます。apstra-cliでは、.tgzファイル内のすべてのスキーマをインポートするオプションがあります。

開始コレクター

サービスを開始するには、次の 3 つの引数を使用して POST API /api/systems/<system_id>/services を使用します。

引数  
Input_data コレクターへの入力として提供されるデータ。デフォルトは「なし」です。
間隔 サービスを実行する間隔。デフォルトは120秒です。
名前 サービスの名前。
メモ:

また、apstra-cliユーティリティを使用してコレクターを管理することもできます。

コレクターの削除

サービスを削除するには、DELETE API を使用します /api/systems/<system_id>/services/<service_name>

収集されたデータの取得

収集されたデータを取得するには、GET API を使用します /api/systems/<system_id>/services/<service_name>/data。最後の反復で収集されたデータのみが保存されます。Apstraの再起動後もデータは持続しません。

実行中のコレクター サービスの一覧表示

デバイスで有効になっているサービスのリストを取得するには、GET API を使用します /api/systems/<system_id>/services