当前位置: 首页 > news >正文

新一代网络监控技术——Telemetry

一、Telemetry的背景

传统的网络设备监控方式有SNMP、CLI、Syslog、NetStream、sFlow,其中SNMP为主流的监控数据方式。而随着网络系统规模的扩大,网络设备数量的增多,网络结构的复杂,相应监控要求也不断提升,如今这些传统监控方式体现出了许多不足之处,比如:

  • NetStream、sFlow主要针对流量进行监测,而缺少对于其他数据平面如CPU信息、内存、网络拥塞信息、网络事件的日志信息等的相关监测。

  • Syslog和CLI都缺少统一的结构化的数据,不利于维护和扩展。

  • SNMP虽然监测范围较广,但是在监测频率和方式上存在着不足。SNMP的主要监测方式为传统的拉模式(Pull Mode),这种方式是由监测端轮询式地主动向节点发起请求,等待响应的一问一答的模式。这种方式时效性较差,也难以监测突发性事件。如果采样周期过长,实时性下降;采样周期过短,则会增大被检测设备压力。

  • 虽然SNMP发展出了SNMP Trap的推送方式,但是这种方式只能够推送事件和告警信息,类似接口流量等的监控数据不能采集上送。

因此,大型数据网络的监控技术应具备实时性、高性能、高扩展性等特点,包括监控数据拥有更高的精度以便及时检测和快速调整微突发流量,同时监控过程要对设备自身功能和性能影响小以便提高设备和网络的利用率,更好的实现运维可视化,如监测时延,转发路径,缓存和丢包等。如果使用外部应用发起的请求获取网络状态信息的SNMP协议,就无法实时反映网络的状态。

传统监测方式存在的缺陷 :

图片

SNMP的时效性较差:

图片

Telemetry就是在这种需求下诞生的技术。业界也有将SNMP认为是传统的Telemetry技术,把当前Telemetry叫做Streaming Telemetry的说法,本文用Telemetry代指Streaming Telemetry。Telemetry 是新一代从设备上远程高速采集数据的网络监控技术,设备通过“推模式(Push Mode)”周期性地主动向采集器上送设备信息,提供更实时、更高速、更精确的网络监控功能。相比于SNMP,Telemetry实现了网络设备主动推送状态信息的能力,具有更强的时效性。

二、Telemetry的特点

Telemetry采集数据的类型丰富,可以充分反映网络状况

其按照统一的YANG数据模型组织数据,可利用谷歌的GPB(Google Protocol Buffers)、XML、JSON等多种方式进行编码和解码,并通过gRPC(Google Procedure Call Protocol)等协议传输数据,使得数据的获取更高效,智能对接更便捷。Telemetry可监测的数据类型有:

  • 网络接口数据:包括网络接口的流量、错误率、丢包率等。

  • 网络设备状态:包括CPU利用率、内存利用率、温度、风扇转速等。

  • 网络流量统计:包括流量的源IP地址、目的IP地址、端口号等信息。

  • QoS(服务质量)指标:包括延迟、抖动、丢包率等。

  • 链路状态:包括链路的带宽利用率、带宽利用率变化趋势等。

  • BGP(边界网关协议)信息:包括BGP路由表、AS(自治系统)路径等。

  • 网络安全信息:包括DDoS攻击、端口扫描、异常流量等。

  • 网络设备性能指标:包括各种硬件指标、资源利用率等。

设备采用推(push)的方式周期性的主动向采集器上送监测数据(精度可以达到亚秒级别,快速定位问题)

传统的SNMP检测方式主要依靠网络设备的路由引擎来处理信息。而Telemetry可以借助厂商支持,硬件板卡ASIC层面植入代码,直接从板卡导出实时数据。而板卡导出的数据是按照线速发送,从而使得上层的路由引擎专注于处理协议和路由计算等。实时性的数据可以为机器学习和目的分析提供充分支持,对自动化、流量调优和微突发等应用具有很大帮助。

Telemetry实现了一次订阅,设备N次回复,可以一直监控设备,避免重复查询

传统SNMP查询是一问一答的,假设1分钟内交互了1000次,就意味着SNMP解析了1000次查询请求报文,监控系统要为每一次查询请求保留会话信息,才能匹配返回的查询结果;同时被查询的设备端需要中断其他任务来执行查询命令。这种基于pull的方式的查询是双向传输的,不仅开销大而且实时性低。在大型网络中,路由器和交换机等设备往往有较大压力,无法支持短时间多次查询请求。Telemetry的push模式则只需要订阅一次,后续设备持续推送数据给监控系统,不需要维护会话关系,实现一次性传输,非常适合采集接口信息等高速的监控数据。

Telemetry和SNMP方式的对比:

图片

支持变频采样和抑制功能

一般情况下,用户的分析器需要设置较小的采样周期来获取更精确的数据用于分析,但是较小的采样周期产生了大量冗余数据,不仅需要大量的存储空间,也不便于用户对数据进行管理。如果配置了变频采样,Telemetry将根据预制的条件动态(如CPU利用率)调整采集周期,在监控指标正常的情况下,降低采样时间间隔,当监控指标达到阈值时,按照配置自动调整采样周期,以更高的频率上报采集数据,从而减少分析器的数据量。

以华为NE40E-M型路由器为例,若当前主控板CPU利用率在90%以上,Telemetry 除了CPU和内存的采样任务之外,对其他采样任务暂停。此时Telemetry停止上送采集数据,进入抑制状态。占用率下降到阈值后抑制解除,恢复上送后可能会导致部分数据的上送周期被拉长。

三、Telemetry的工作原理

Telemetry工作原理:

图片

一个完整的telemetry系统可分为五个部分:

订阅采集数据

订阅数据的方式分为静态订阅动态订阅

静态订阅是指设备作为客户端,采集器作为服务端,由设备主动发起到采集器的连接,进行数据采集上送。多用于长期巡检。

动态订阅是指设备作为服务端,采集器作为客户端发起到设备的连接,由设备进行数据采集上送。多用于短期监控。

推送采集数据

Telemetry通过数据推送将经过编码格式封装的数据上报给采集器进行接收和存储;Telemetry的数据推送有两种方式:基于gRPC方式和基于UDP方式。

读取数据

被检测设备和采集器均通过GPB结合.proto文件进行编码/解码。

以gRPC订阅推送为例子:
设备通过Yang模型捕获可获取的数据信息(数据源)
然后将这些数据通过GPB结合.proto文件进行编码(数据生成)
采集器通过gRPC进行数据订阅(数据订阅)
设备通过gRPC将编码数据推送到订阅的采集器中(数据推送)
采集器再根据通过GPB结合.proto文件进行解码(此文件要和GPB的.proto文件一致)

分析数据

分析器分析读取到的采集数据,并将分析结果发给控制器,便于控制器对网络进行配置管理,及时调优网络。

调整网络参数

控制器将网络需要调整的配置下发给设备,配置下发生效后,新的采集数据又会上报到采集器,此时分析器可以分析调优后的网络效果是否符合预期,直到调优完成后,整个业务流程形成闭环。

四、Telemetry的应用场景

1、以华为NE40E路由器的静态订阅为例,采集cpu和内存信息,最终推送至prometheus中并用Grafana展示:

网络结构:

图片

2、在路由器上使用system-view命令进入视图,再使用display telemetry sensor-path查看本设备支持的采样路径,确定对应指标的sensor-path:

不同的sensor-path代表了不同的指标:

图片

3、使用telemetry命令进入telemetry视图,按如下命令配置静态订阅:

配置静态订阅:

图片

4、在设备端,配置telemetry服务器。首先需要华为官方提供的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 importlibSERVER_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 serverserver.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 Trueexcept ValueError:passtry:import unicodedataunicodedata.numeric(s)return Trueexcept (TypeError,ValueError):passreturn Falsedef toPushgateway(labelValue,parseData,count):labels = ["product_name","subscription_id_str","sensor_path","node_id_str"]jobName = "pushgateway"url=PUSHGATEWAY_ADDRESSparam=""for i in str(parseData).split("\n"):if '{' in i :string = "".join(i.replace('{','_').split())param+=stringcontinueif ':' in i:save=paramkey = 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]=gg.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=savecontinue# 创建类继承huawei_grpc_dialout_pb2_grpc中Servicer方法class TelemetryCpuInfo(huawei_grpc_dialout_pb2_grpc.gRPCDataserviceServicer):def __init__(self):returndef 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 = 0for 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获取动态加载的模块中的属性值,调用此属性的解码方法FromStringdecode_func = getattr(decode_module, root_class).FromStringparsedata = decode_func(row_data.content)print('----------- content is -----------\n')print(parsedata)print(type(parsedata))toPushgateway(labelValue=labels,parseData=parsedata,count=count)count+=1print('----------- done -----------------')if __name__ == '__main__':serve()

6、运行结果,可以实现对telemetry数据的解析和输出。

收集的数据-1:

图片

收集的数据--2:

图片

收集的数据-3:

图片

7、在路由器端可以通过display telemetry subscription + 订阅名称的命令查看订阅状态。 

静态订阅相关信息:

图片

Grafana展示界面:

图片

五、总结

作为新一代监控技术, Telemetry技术凭借其高扩展性和高实时性可以实现业务端到端的网络流量可视化,打破“网络黑盒”,为精细化网络运维提供整体的解决方案和必要的技术支撑,符合大型数据网络所的监控要求。但目前Telemetry技术仍存在一些局限,如:

  • 不适合在中小型网络上使用,对庞大的数据流的处理需要更多的资源。

  • 目前SNMP仍被许多种类型的网络设备支持:如打印机,路由器和服务器等,范围十分广泛;而不少在网络中旧设备和程序则不支持Telemetry技术。因统计原理存在差异,接口Telemetry统计和通过命令、MIB、PM查询到的统计数据可能不一致。

  • 目前多个厂商之间也没有达成一致的指标路径和协议栈,如编码层面存在着XML、JSON和GPB;通信层面有gRPC、RestConf和Netconf等方式。

但面对大规模、高性能的网络监控需求,用户需要一种新的网络监控方式。Telemetry技术可以满足用户要求,支持智能运维系统管理更多的设备、监控数据拥有更高精度和更加实时、监控过程对设备自身功能和性能影响小,为网络问题的快速定位、网络质量优化调整提供了最重要的大数据基础,将网络质量分析转换为大数据分析,有力的支撑了智能运维的需要。可以预见的是,在未来的一段时间内,会出现多种新型的以Telemetry技术为核心的网络监控系统,其具有的细颗粒度和高精度的特点将为大数据网络环境下的监控提供新思路。

相关文章:

新一代网络监控技术——Telemetry

一、Telemetry的背景 传统的网络设备监控方式有SNMP、CLI、Syslog、NetStream、sFlow,其中SNMP为主流的监控数据方式。而随着网络系统规模的扩大,网络设备数量的增多,网络结构的复杂,相应监控要求也不断提升,如今这些…...

java斗牛,咋金花

无聊时间,打发下游戏 简单说下思路 目录 1.创建牌对象 2.创建52张牌,不包含大小王 3.洗牌 4.发牌 1.创建牌对象 2.创建52张牌,不包含大小王 3.洗牌 4.发牌 /*** 扑克牌*/ public class Poker {/*** 花色*/private String cardSuits…...

深信服技术认证“SCSA-S”划重点:信息收集

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师…...

代码逻辑修复与其他爬虫ip库的应用

在一个项目中,由于需要设置 http_proxy 来爬虫IP访问网络,但在使用 requests 库下载文件时遇到了问题。具体表现为在执行 Python 脚本时,程序会阻塞并最终超时,无法正常完成文件下载。 解决方案 针对这个问题,我们可以…...

字符串结尾空格比较相关参数BLANK_PAD_MODE(DM8:达梦数据库)

DM8:达梦数据库 字符串结尾空格比较相关参数BLANK_PAD_MODE 环境介绍1 BLANK_PAD_MODE01.1 初始化数据库1.2 创建测试表 T0 2 BLANK_PAD_MODE12.1 初始化数据库2.2 创建测试表 T1 3 BLANK_PAD_MODE只对字段varchar类型生效3.1 BLANK_PAD_MODE 对char 类型对比无效3.2 在两个数据…...

微型计算机原理MOOC题

一、8254 1.掉坑了,AL传到端口不意味着一定传到的是低位,要看控制字D5和D4,10是只写高位,所以是0A00.。。 2. 3. 4.待解决:...

TensorFlow实战教程(十八)-Keras搭建卷积神经网络及CNN原理详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章详细讲解了Keras实现分类学习,以MNIST数字图片为例进行讲解。本篇文章详细讲解了卷积神经网络CNN原理,并通过Keras编写CNN实现了MNIST分类学习案例。基础性文章,希望对您有所帮助! 一…...

uniapp为什么能支持多端开发?uniapp底层是怎么做的?

文章目录 前言uniapp为什么能支持多端开发?uniapp底层是怎么做条件编译uniapp的语法uniapp如何编译为不同端的代码uniapp的底层是如何做平台特性适配的呢?后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:uniapp &…...

《数据仓库入门实践》

前言: 1、问什么要写这篇博客? 随着自己在数仓岗位工作的年限增加,对数仓的理解和认知也在发生着变化 所有用这篇博客来记录工作中用到的知识点与经验 2、这篇博客主要记录了哪些内容? 在日常工作中,发现刚接触不久数仓…...

什么是arguments对象?

arguments 对象是 JavaScript 中的一个特殊对象,它包含了函数被调用时传入的所有参数。arguments 对象是一个类数组对象,它有一个 length 属性和按数字索引的元素。 每个函数在执行时都会自动创建一个 arguments 对象。我们可以通过arguments去访问参数…...

Java LinkedList链表、HashSet、HashMap

一、Java LinkedList: 链表(LinkedList)是一种常见的基础数据结构,是一种线性表,在每一个节点里存储下一个节点的地址。链表分为单向链表和双向链表。单向链表包含两个值:当前节点的值和指向下一个节点的链…...

Linux中清除cache/buffer方法

1、查看Linux中的cache/buffer情况: free -h 2、仅清除页面缓存PageCache方法: echo 1 > /proc/sys/vm/drop_caches 3、清除目录项和inode节点: echo 2 > /proc/sys/vm/drop_caches 4、清除页面缓存、目录项和inode节点:…...

github批量仓库克隆,git clone某个用户的所有仓库

利用github的api工具, 首先拿到用户名为kevin的所有仓库的url: curl "https://api.github.com/users/kevin/repos?per_page100&&page1" | grep -w clone_url >clone.txt过滤一下: grep -o https://[^"]* clone…...

防爆智能安全帽、防爆手持终端,防爆智能矿灯守护安全,在煤矿安全生产远程可视化监管中的应用

煤矿安全新守护:如何通过防爆智能装备实现远程可视化监管 煤矿是国民经济的重要支柱产业,但长期以来,安全生产事故的频发一直是困扰煤矿行业发展的严峻问题。安全生产事故不仅危及矿工的生命安全,也对企业和地方经济造成了重大的…...

数据结构与算法【B树】的Java实现+图解

目录 B树 特性 实现 节点准备 大体框架 实现分裂 实现新增 实现删除 完整代码 B树 也是一种自平衡的树形数据结构,主要用于管理磁盘上的数据管理(减少磁盘IO次数)。而之前说的AVL树与红黑树适合用于内存数据管理。存储一个100w的数…...

2024中国人民大学计算机考研分析

24计算机考研|上岸指南 中国人民大学 中国人民大学计算机考研招生学院是信息学院。目前均已出拟录取名单。 中国人民大学在1978年创立了经济信息管理系,它是国内最早建立的将数学与信息技术在经济管理领域应用为特色的系科。1986年,在原系计算站的基础…...

无人智能货柜:提升购物体验

无人智能货柜:提升购物体验 随着移动支付的普及,人们日常生活中的主要场景已经渗透了这一支付方式。同时,无人智能货柜作为购物的重要渠道,正在崭露头角。通过人工智能、图像识别和物联网技术的应用,无人智能货柜将使购…...

【OpenCV实现图像:可视化目标检测框】

文章目录 概要画框函数代码实现标签美化角点美化透明效果小结 概要 目标检测框的可视化在计算机视觉和机器学习领域中是一项重要的任务,有助于直观地理解和评估目标检测算法的性能。通过使用Python和相关的图像处理库,可以轻松实现目标检测框的可视化。…...

C/C++---------------LeetCode第1436. 旅行终点站

旅行的终点站 题目及要求哈希算法在main内使用 题目及要求 给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可…...

如何在AD上创建完整的项目

首先,我们先安装好AD,这里我使用的是AD22,安装过程如下: Altium Designer 22下载安装教程-CSDN博客 Altium Designer 22是全球领先的PCB设计软件之一,为电路板设计师提供了一种集成的解决方案,旨在简化和加…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...

倒装芯片凸点成型工艺

UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域&#xff…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...