新世代のネットワーク監視テクノロジー - テレメトリー

1. テレメトリの背景

従来のネットワーク デバイス監視方法には、SNMP、CLI、Syslog、NetStream、sFlow などがありますが、その中でも SNMP が主流のデータ監視方法です。ネットワーク システムの規模の拡大、ネットワーク デバイスの数の増加、ネットワーク構造の複雑さ、およびそれに伴う監視要件に伴い、これらの従来の監視方法には次のような多くの欠点が反映されています。

  • NetStream と sFlow は主にトラフィックを監視しますが、CPU 情報、メモリ、ネットワーク輻輳情報、ネットワーク イベント ログ情報などの他のデータ プレーンの関連監視は行いません。

  • Syslog と CLI にはどちらも統一された構造化データがないため、メンテナンスや拡張には役立ちません。

  • SNMPは監視範囲が広いものの、監視頻度や監視方法に欠点があります。 SNMP の主な監視方法は従来のプル モードで、監視側がポーリング方式でノードへのリクエストを積極的に開始し、応答を待つ質疑応答モードです。この方法は適時性が低く、緊急事態を監視することが困難です。サンプリング期間が長すぎるとリアルタイム性能が低下し、サンプリング期間が短すぎるとテスト対象の機器にかかる圧力が増加します。

  • SNMP は SNMP トラップ プッシュ方式を開発しましたが、この方式でプッシュできるのはイベントとアラーム情報だけであり、インターフェイス トラフィックなどの監視データは収集および送信できません。

したがって、大規模データネットワークの監視技術は、タイムリーな検出のための監視データの精度の向上やマイクロバーストトラフィックの迅速な調整など、リアルタイム、高性能、高スケーラビリティなどの特性を備えている必要があります。監視プロセスでは、機器自体の機能と機能を十分に理解する必要があり、パフォーマンスへの影響が少なく、機器とネットワークの利用率が向上し、遅延、転送パス、キャッシュ、パケットロスの監視など、運用と保守の可視化がより効果的に実現されます。 、など。 SNMP プロトコルを使用して外部アプリケーションによって開始されたネットワーク ステータス情報を要求する場合、ネットワークのステータスをリアルタイムに反映することはできません。

従来の監視方法の欠点:

写真

SNMP には適時性がありません。

写真

テレメトリーは、このニーズから生まれたテクノロジーです。業界では、SNMP が従来のテレメトリ テクノロジであると考えられており、現在のテレメトリをストリーミング テレメトリと呼んでいます。この記事では、ストリーミング テレメトリを指すためにテレメトリを使用します。 Telemetry は、デバイスからリモートかつ高速にデータを収集する新世代のネットワーク監視技術であり、デバイスは「プッシュ モード」を通じてデバイス情報を定期的かつアクティブにコレクタに送信し、よりリアルタイム、より高速、より正確なネットワーク監視機能を提供します。 . . SNMP と比較して、テレメトリを使用すると、ネットワーク デバイスがステータス情報をアクティブにプッシュできるようになり、よりタイムリーになります。

2. テレメトリーの特徴

テレメトリは、ネットワーク状態を完全に反映できる幅広い種類のデータを収集します

統一された YANG データ モデルに従ってデータを整理し、Google の GPB (Google プロトコル バッファー)、XML、JSON などのエンコードおよびデコード方法を使用でき、gRPC (Google Procedure Call Protocol) などのプロトコルを通じてデータを送信して、アクセスがより効率的になり、インテリジェントなドッキングがより便利になります。 Telemetry が監視できるデータの種類は次のとおりです。

  • ネットワーク インターフェイス データ: ネットワーク インターフェイスのトラフィック、エラー率、パケット損失率などを含みます。

  • ネットワークデバイスのステータス: CPU 使用率、メモリ使用率、温度、ファン速度など。

  • ネットワーク トラフィック統計: トラフィックの送信元 IP アドレス、宛先 IP アドレス、ポート番号、その他の情報が含まれます。

  • QoS (サービス品質) 指標: 遅延、ジッター、パケット損失率などを含みます。

  • リンクステータス: リンク帯域幅使用率、帯域幅使用率の変化傾向などを含む。

  • BGP (ボーダー ゲートウェイ プロトコル) 情報: BGP ルーティング テーブル、AS (自律システム) パスなどが含まれます。

  • ネットワーク セキュリティ情報: DDoS 攻撃、ポート スキャン、異常なトラフィックなど。

  • ネットワーク機器のパフォーマンス指標: さまざまなハードウェア指標、リソース使用率などを含みます。

デバイスはプッシュ方式を使用して、モニタリング データを定期的かつアクティブにコレクタに送信します (精度は 1 秒未満のレベルに達し、問題を迅速に特定できます)

従来の SNMP 検出方法は、主にネットワーク デバイスのルーティング エンジンに依存して情報を処理します。テレメトリはメーカーのサポートに依存して、ハードウェア ボードの ASIC レベルでコードを埋め込み、ボードからリアルタイム データを直接エクスポートできます。ボードによってエクスポートされたデータは回線速度で送信されるため、上位層のルーティング エンジンはプロトコルの処理とルーティング計算に集中できます。リアルタイム データは、機械学習と目的分析を完全にサポートし、自動化、トラフィックの最適化、マイクロバーストなどのアプリケーションに非常に役立ちます。

テレメトリは 1 つのサブスクリプションを実装し、デバイスは N 回応答します。デバイスを常に監視し、クエリの繰り返しを回避できます。

従来の SNMP クエリは 1 つの質問と 1 つの回答に基づいています。1 分以内に 1,000 のインタラクションがあったと仮定すると、SNMP が 1,000 のクエリ リクエスト メッセージを解析したことになります。監視システムは、返されたクエリ結果と一致させるために、各クエリ リクエストのセッション情報を保持する必要があります。 ;同時に、クエリ対象のデバイスはクエリ コマンドを実行するために他のタスクを中断する必要があります。このプルベースのクエリは両方向に送信されるため、コストがかかるだけでなく、リアルタイム パフォーマンスも低くなります。大規模なネットワークでは、ルーターやスイッチなどのデバイスに大きな負荷がかかることが多く、短期間に複数のクエリ要求をサポートできません。 Telemetry のプッシュ モードでは 1 つのサブスクリプションのみが必要で、後続のデバイスはモニタリング システムにデータをプッシュし続けます。セッション関係を維持する必要がなく、1 回限りの送信が実現されます。インターフェイスなどの高速モニタリング データの収集に非常に適しています。情報。

テレメトリ方式と SNMP 方式の比較:

写真

可変周波数サンプリングおよび抑制機能をサポートします

一般に、ユーザーの分析装置では、より正確な分析データを取得するためにサンプリング周期を短く設定する必要がありますが、サンプリング周期を短くすると大量の冗長データが生成され、大量の保存スペースが必要になるだけでなく、不便になります。ユーザーがデータを分析できるように、データは管理されます。可変周波数サンプリングが構成されている場合、Telemetry は事前に設定された条件 (CPU 使用率など) に基づいて収集期間を動的に調整します。監視インジケーターが正常な場合、サンプリング間隔は短縮されます。監視インジケーターがしきい値に達すると、サンプリング間隔が短縮されます。収集されたデータをより頻繁にレポートすることで、アナライザー内のデータ量が削減されます。

Huawei NE40E-M ルーターを例にとると、メイン制御ボードの現在の CPU 使用率が 90% を超えている場合、Telemetry は CPU およびメモリのサンプリング タスクに加えて、他のサンプリング タスクを一時停止します。この時点で、Telemetry は収集されたデータの送信を停止し、抑制状態になります。占有率が閾値まで低下すると抑止が解除され、アップロード再開後、一部のデータについてはアップロード周期が長くなる場合があります。

3. テレメトリーの動作原理

テレメトリーの仕組み:

写真

完全なテレメトリ システムは、次の 5 つの部分に分割できます。

データを収集するために購読する

データのサブスクライブ方法は、静的サブスクリプション動的サブスクリプションに分かれています。 :

静的サブスクリプション とは、デバイスがクライアントとして機能し、コレクタがサーバーとして機能することを意味します。デバイスは、データを収集して送信するためにコレクタへの接続をアクティブに開始します。主に長期検査に使用されます。

動的サブスクリプション とは、デバイスがサーバーとして機能し、コレクターがクライアントとして機能してデバイスへの接続を開始し、デバイスがデータを収集して送信することを意味します。主に短期間のモニタリングに使用されます。

収集したデータをプッシュする

Telemetry は、エンコードされた形式でカプセル化されたデータをコレクターに報告し、データ プッシュを通じて受信および保存します。Telemetry データ プッシュには、gRPC ベースと UDP ベースの 2 つの方法があります。

読み取りデータ

検出されたデバイスとコレクターは両方とも、GPB と .proto ファイルを組み合わせてエンコード/デコードされます。

gRPC サブスクリプション プッシュを例に挙げます。
デバイスは、Yang モデルを通じて利用可能なデータ情報 (データ ソース) をキャプチャし、
GPB を介したデータ エンコード用の .proto ファイルの結合 (データ生成)
コレクターは gRPC を介してデータ サブスクリプション (データ サブスクリプション) を実行します
デバイスは、エンコードされたデータをgRPC を介したサブスクライブされたコレクション (データ プッシュ)
次に、コレクターは GPB を介して .proto ファイルをデコードします (このファイルは GPB の .proto ファイルと一致している必要があります)

データを分析する

アナライザーは収集されたデータを分析し、分析結果をコントローラーに送信します。これにより、コントローラーはネットワークを構成および管理し、タイムリーにネットワークを最適化できます。

ネットワークパラメータを調整する

コントローラーは、調整が必要なネットワーク構成をデバイスに配信します。構成が配信されて有効になると、新しく収集されたデータがコレクターにレポートされます。このとき、アナライザーは、最適化されたネットワーク効果が次のようになっているかを分析できます。最終的に、ビジネス プロセス全体が閉ループを形成します。

4. テレメトリーの応用シナリオ

1. Huawei NE40E ル​​ーターの静的サブスクリプションを例として、CPU とメモリの情報を収集し、最後にそれを prometheus にプッシュして Grafana で表示します。

ネットワーク構造:

写真

2. ルータで system-view コマンドを使用してビューに入り、display telemetry sensor-path を使用してデバイスでサポートされているサンプリング パスを表示し、対応するインジケータのセンサー パスを決定します。

異なるセンサーパスは異なるインジケーターを表します。

写真

3. telemetry コマンドを使用してテレメトリ ビューに入り、次のように静的サブスクリプションを構成します。

静的サブスクリプションを構成します。

写真

4. デバイス側で、テレメトリ サーバーを構成します。まず、デコードツールとしてHuaweiが公式に提供しているprotoファイルが必要です(この記事の最後にリンクを貼っています)。コマンド ラインまたはオープン ソースの run_codegen.py スクリプトを使用して、proto ファイルを使用して Python コードを生成します。

必要な対応する proto ファイルと run_codegen スクリプト:

写真

huawei-devm.proto(デバイス):

写真

データを解析するために動的にロードします。

写真

写真

5. サーバーコード

from concurrent import futures
import time
import grpc
from proto_file import huawei_grpc_dialout_pb2_grpc
from proto_file import huawei_telemetry_pb2
import prometheus_client
from prometheus_client import Gauge
from prometheus_client.core import CollectorRegistry
import requests
import importlib

SERVER_ADDRESS=" "
PUSHGATEWAY_ADDRESS=" "
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
registry = CollectorRegistry(auto_describe=False)
gaugeMap={}
def serve():
    # 创建一个grpc server对象

    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    # 注册huawei的telemetry数据监听服务

    huawei_grpc_dialout_pb2_grpc.add_gRPCDataserviceServicer_to_server(
        TelemetryCpuInfo(), server)
    server.add_insecure_port(SERVER_ADDRESS)
    # 启动grpc server

    server.start()
    # 死循环监听

    try:
        while True:
            print("running------")
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        pass
    try:
        import unicodedata
        unicodedata.numeric(s)
        return True
    except (TypeError,ValueError):
        pass
    return False

def toPushgateway(labelValue,parseData,count):
    labels = ["product_name","subscription_id_str","sensor_path","node_id_str"]
    jobName = "pushgateway"
    url=PUSHGATEWAY_ADDRESS
    param=""


    for i in str(parseData).split("\n"):
        if '{' in i :
            string = "".join(i.replace('{','_').split())
            param+=string
            continue
        if ':' in i:
            save=param
            key = param+i.split(':')[0].strip()
            value = i.split(':')[1].strip()
            if is_number(value):
                key+=str(count)
                print("keys:"+key)
                if key in gaugeMap.keys():
                    g=gaugeMap.get(key)
                else:
                    g = Gauge(key,"",labels,registry=registry)
                    gaugeMap[key]=g
                g.labels(product_name=labelValue[0],
                    subscription_id_str=labelValue[1],
                    sensor_path=labelValue[2],
                    node_id_str=labelValue[3]).set(float(value))
                requests.post("%s/job/%s" %(url,jobName),
                          data=prometheus_client.generate_latest(registry))
            param=save
        continue


# 创建类继承huawei_grpc_dialout_pb2_grpc中Servicer方法

class TelemetryCpuInfo(huawei_grpc_dialout_pb2_grpc.gRPCDataserviceServicer):
    def __init__(self):
        return

    def dataPublish(self, request_iterator, context):

        for i in request_iterator:
            print('############ start ############\n')
            telemetry_data = huawei_telemetry_pb2.Telemetry.FromString(i.data)
            print(telemetry_data)
            labels = [telemetry_data.product_name,
                      telemetry_data.subscription_id_str,
                      telemetry_data.sensor_path,
                      telemetry_data.node_id_str]
            count = 0
            for row_data in telemetry_data.data_gpb.row:
                print('-----------------')
                print('The proto path is :' + telemetry_data.proto_path)
                print('-----------------')
                module_name = telemetry_data.proto_path.split('.')[0]
                root_class = telemetry_data.proto_path.split('.')[1]
                decode_module = importlib.import_module('proto_file.'+module_name + '_pb2')
                # 定义解码方法:getattr获取动态加载的模块中的属性值,调用此属性的解码方法FromString

                decode_func = getattr(decode_module, root_class).FromString
                parsedata = decode_func(row_data.content)
                print('----------- content is -----------\n')
                print(parsedata)
                print(type(parsedata))
                toPushgateway(labelValue=labels,parseData=parsedata,count=count)
                count+=1
                print('----------- done -----------------')


if __name__ == '__main__':
    serve()

6. 実行結果によりテレメトリデータの分析と出力を実現できます。

収集されたデータ -1:

写真

収集されたデータ -- 2:

写真

収集されたデータ-3:

写真

7. ルーター側では、display telemetry subscription + subscription name コマンドを使用してサブスクリプションのステータスを確認できます。​ 

静的サブスクリプション関連情報:

写真

Grafana 表示インターフェイス:

写真

5. まとめ

新世代の監視技術であるテレメトリー技術は、高い拡張性と高いリアルタイム性によりエンドツーエンドのネットワークトラフィックの可視化を実現し、「ネットワークのブラックボックス」を打破し、洗練されたネットワークに必要な総合的なソリューションと技術サポートを提供します。大規模なデータ ネットワークの監視要件に合わせた運用と保守。ただし、テレメトリ テクノロジには、次のようないくつかの制限があります。

  • 巨大なデータ フローの処理にはより多くのリソースが必要となるため、中小規模のネットワークでの使用には適していません。

  • 現在、SNMP は依然としてプリンター、ルーター、サーバーなどの多くの種類のネットワーク デバイスでサポートされており、その範囲は非常に広いですが、ネットワーク内の多くの古いデバイスやプログラムはテレメトリ テクノロジをサポートしていません。統計原則の違いにより、インターフェイス テレメトリ統計は、コマンド、MIB、および PM を通じてクエリされた統計と一致しない可能性があります。

  • 現時点では、複数のメーカー間で一貫したインジケーター パスとプロトコル スタックは存在せず、たとえば、エンコード レベルでは XML、JSON、GPB があり、通信レベルでは gRPC、RestConf、Netconf があります。

しかし、大規模かつ高性能のネットワーク監視要件に直面して、ユーザーは新しいネットワーク監視方法を必要としています。テレメトリ技術は、ユーザーの要件を満たし、より多くのデバイスを管理するためのインテリジェントな運用および保守システムをサポートできます。監視データはより高精度で、よりリアルタイムです。監視プロセスは、デバイス自体の機能やパフォーマンスにほとんど影響を与えません。迅速な位置情報を提供します。ネットワーク問題の解決とネットワーク品質の最適化と調整を行い、最も重要なビッグデータ基盤を提供し、ネットワーク品質分析をビッグデータ分析に変換し、インテリジェントな運用と保守のニーズを効果的にサポートします。今後、テレメトリー技術を核としたさまざまな新しいネットワーク監視システムが登場すると予想され、その粒度の細かさと高精度により、ビッグデータネットワーク環境における新たな監視手法が提供されると考えられます。

おすすめ

転載: blog.csdn.net/m0_59795797/article/details/134586060