1.SNMP Exporter详细解析(1)
2.请各位哥哥姐姐帮个忙,码解给我点NET-SNMP的资料
SNMP Exporter详细解析(1)
SNMP协议 SNMP协议,在此不做过多介绍,码解详情可参阅华为对SNMP协议的码解介绍。 support.huawei.com/ente... 具体RFC文档如下:SNMP相关的码解RFC很多,可根据实际需求查看,码解但在本文中不需要深入探讨。码解装饰公司报价源码 rfc2cn.com/rfc.html SNMP的码解组织结构 SNMP由三部分组成:SNMP内核、管理信息结构SMI和管理信息库MIB。码解 SNMP内核负责协议结构分析,码解根据分析结果执行网管动作;SMI是码解一种通用规则,用于命名对象、码解定义对象类型,码解以及编码对象和对象值;MIB在被管理实体中创建命名对象,码解即一个实例。码解SMI规定游戏规则,码解在规则基础上由MIB实现实例化,而SNMP则是实例化的终极执行BOSS。 常见术语: 企业码:组成OID对象的厂商遵守的标识 iana.org/assignments/en... 比如华为的企业码: SMI编号结构 iana.org/assignments/sm... 如果需要深入研究SNMP协议,建议阅读TCP/IP详解卷1:协议 MIB介绍 MIB全称Management Information Base,其主要负责为所有的被管理网络节点建立一个接口,本质上类似于IP地址的一串数字。例如,在使用SNMP时,我们经常看到这样一组数字串: 在这串数字中,每个数字都代表一个节点,其含义可参考下表: 显然,这个数字串可以直接理解为系统的名字。在实际使用中,我们将其作为参数读取该节点的值,如果有写权限的话还可以更改该节点的值,因此,SNMP为系统管理员提供了一套极为便利的工具。但在一般使用中,我们一般不使用这种节点的表达方式,而是使用更为容易理解的方式,对于上面的例子,其往往可以使用SNMPv2-MIB::sysName.0所替代。你可能会想,系统能理解它的含义吗?那你就多虑了,一般在下载SNMP工具包的买点信号指标源码时候还会下载一个MIB文件包,其提供了所有节点的树形结构。在该结构中可以方便地查找对应的替换表达。 NetSNMP介绍 NetSNMP是一个简单的SNMP协议library库,提供支持SNMP的一套应用程序和开发库,包括代理端软件和管理端查询工具。通俗地理解,SNMP可以看作是一个C/S结构。在客户机中,一般会部署一个snmpd的守护进程,而在服务端(管理端)会下载一个SNMP工具包,这个包中包含了许多用于管理客户端网络节点的工具,例如get、set、translate等等。下图可能会帮助你更清晰地理解这个概念: 上图中,表示的是双方进行通信时所用的默认端口号,被管理端会打开一个守护进程,负责监听端口发来的请求;管理端会提供一个SNMP工具包,利用工具包中的命令可以向被管理端的端口发送请求包,以获取响应。除此之外,管理端还会开启一个SNMPTrapd守护进程,用于接受被管理端向自己的端口发送来的snmptrap请求,这一机制主要用于被管理端的自动报警中,一旦被管理端的某个节点出现故障,系统会自动发送snmptrap包,从而远端的系统管理员可以及时得知问题。 我们在Linux中,针对SNMP协议的操作(解析MIB文件)主要依赖这个NetSNMP库,相当于中间代理人的角色,下面我简单画出关于NetSNMP和SNMP Exporter以及配置生成器之间的关系。Telegraf默认支持NetSNMP和gosmi,默认使用gosmi,而SNMP Exporter默认使用NetSNMP的库,暂不支持gosmi。 SNMP Exporter读取snmp.yml配置文件信息,snmp.yml配置文件中定义了需要采集指标的OID信息和数据类型以及结构,但是有一点需要明确,手写snmp.yml是升级管理系统源码一个吃力不讨好的事情,对工程师非常不友好,那工具开发者其实也是想到了这一点,故提供了一套SNMP Exporter配置文件生成器工具,可以通过配置文件生成器生成自己需要的自定义的snmp.yml配置文件,通过自己自定义指标可以得到相关指标数据,然后在通过数据做可视化和监控告警。 SNMP Exporter默认使用GET BULK遍历数据,NetSNMP有实现对给定管理树进行遍历的工具,如snmpbulkwalk、snmpbulkget等等。 snmpbulkwalk和snmpwalk的区别: snmpwalk是一个逐步遍历的工具,它会从指定的根OID(对象标识符)开始,按照字典序逐步获取下一个OID的值,直到遍历完整个MIB树或者达到指定的终止条件。这意味着snmpwalk逐步获取每个OID的值,一个接一个。 snmpbulkwalk是一种更为高效的遍历工具,它使用了SNMP的BulkWalk操作,允许一次性获取多个OID的值,减少了往返的SNMP请求次数。这使得snmpbulkwalk在获取大量数据时更为高效。 SNMP Exporter如果使用SNMP v1版本,默认使用的是snmpwalk,如果使用的是SNMP v2c版本或v3,默认使用snmpbulkwalk。 SNMP Exporter部署 SNMP Exporter采集器目前只支持snmpd 端口,暂不支持snmptrapd即端口,端口可自行修改哦,建议使用默认端口。 SNMP Exporter推荐使用源码包编译安装使用,在这里我主要介绍两种部署安装方式,源码编译安装和Docker Compose部署。 Docker Compose部署 新建初始化挂载目录: 创建compose.yml,并启动SNMP Exporter,Docker引擎安装可前往改篇文章查看具体步骤: 启动 源码编译安装 主要介绍CentOS 7.9系统和Ubuntu ..2 LTS中部署SNMP Exporter 到此就完成了SNMP Exporter源码编译安装。 添加systemd服务管理 如果为了安全,需要使用普通用户执行,可以新建普通用户snmp_exporter SNMP Exporter配置生成器部署 上面已经完成SNMP Exporter的部署,前面说了,k线把脉源码手写snmp.yml是非常不友好的。 故我们需要一款配置生成工具进行配置生成,只需要我们填写一些关键的信息即可得到我们想要的配置文件,比如想要采集交换机的指标,采集无线网络AC和AP的指标,其他SNMP协议设备指标。 SNMP Exporter提供了一套这样的配置生成器工具,接下来就来看下如何部署,其实SNMP Exporter主要难点就是在处理配置生成工具和协调mib库上。 部署SNMP Exporter配置生成器 CentOS 7.9系统会出现curl版本太低导致make generator mibs错误的问题 运行过程说明: 配置生成器从generator.yml中读取简化的收集指令并把相应的配置写入snmp.yml。snmp_exporter可二进制执行文件仅使用snmp.yml文件从开启了snmp的设备收集数据。 示例: args参数解析 示例: flags参数解析 --snmp.mibopts的作用: 这个参数具体什么作用呢?主要解决的是有些mib库文件中,某些厂商并没有按照默认标准来,而是在MIB文件中使用了特殊符号,我们应该指定MIB解析的参数,比如某些MIB文件描述中有下划线_,那么如果使用某个指标去解析这个库应该是失败的,需要添加--snmp.mibopts=u,允许使用下划线。 目录规划 建议不同类型的设备都有一个目录,其中包含不同设备类型的mibs目录、生成器可执行文件和generator.yml配置文件。这是为了避免MIB定义中的名称空间冲突。仅在设备的mibs目录中保留所需的MIB文件。 下一篇以实际案例讲解具体场景,包括如何规划目录,如何生成配置,上述参数如何具体使用。请各位哥哥姐姐帮个忙,给我点NET-SNMP的资料
LZ装了Net-SNMP把
你可以关闭Net-SNMP服务或者直接卸载Net-SNMP
不过留着也无妨
这是个snmp服务的持久化对象,就是net-snmp服务状态在关机后得以保存,差不多可以想象成是个备份,没有什么危害的
针对目前IP网络管理系统中管理信息的收集所存在的不足之处,文中设计了一种基于RMON的网络探测器并给出了具体的实现方案;该探测器充分利用一些现有的免费开发工具包,并可以有效地解决这些问题。
关键词 网络探测器 网络管理 远程监视
1 引言
在一个网络管理系统中,网管信息的收集是一项最基本的任务,它是实现各种复杂的网络管理功能的基础。在本网管系统的基本实现中,是脉冲量指标源码依赖于管理站来采集网络中的各种信息,并对采集到的信息进行分析和处理,这种方式基本上能够满足多数网络的管理需求,然而,它也存在一些不足之处。
(1)所有网管信息的采集全部依赖于中心的管理站,对管理站的处理能力有较高的要求,同时,由于各种原始的网管信息都需要汇集到管理站,就会带来管理站四周较大的网络流量,容易造成网络的阻塞;
(2)对于一些带有防火墙的虚拟网,位于其外部的管理站无法访问到其内部的网络,因而也就无法对其进行监视与管理;
(3)管理站在信息采集的时候,主要是利用SNMP(简单网络管理协议)和各个网络设备进行通信,获得各设备的网管信息。然而,这些信息主要是关于设备自身的,而关于整个网络的总体信息则比较缺乏。
“网络探测器”正是为了有效解决上述问题而提出的。
在本网管系统中,网络探测器是放置在一个局域网内部的硬件装置,它可以按照预定的配置信息,对该局域网内部的网络信息进行收集和统计,并对局域网的工作状况进行监视;同时,提供一定的接口,供管理站与之进行通信,获得它的网管信息,并对它进行配置与管理。 2 网络探测器原理
2.1 网络数据包的侦听
在以太网上,任何一个主机发出的数据包都是在共享的以太网传输介质上进行传输的,每个数据包的包头部分都包含了源地址和目的地址。一般情况下,局域网上各台主机的网卡负责检查每一个数据包,如果发现其目的地址是本机,则接收该数据包并向上层传递,以进行下一步的处理;如果目的地址不是本机,则忽略它。
在一些特殊的情况下,需要让一台主机能够接收所有的数据包,即进行网络数据包的“侦听”,这时,通过对网卡进行设置,可以让该主机的网卡工作在“混杂模式”下,则不论数据包的目的地址是否是本机,都能够截获并传递给上层进行处理。
对于截获的数据包,进行进一步的分析处理,就能够得到数据包的一些基本属性,如包类型、包大小、目的地址、源地址等,这样,就可以在此基础上进行分析和统计。
2.2 SNMP——简单网络管理协议
SNMP是TCP/IP网络上的一个重要的网络管理协议,能够用于监控和管理网络设备,SNMP规范定义了管理站与网络设备之间交换管理信息的协议、管理信息的结构框架、通用的管理信息库MIB等。
SNMP是网络管理系统的基础,本网管系统主要基于SNMP来从各个网络设备获得各种网络管理信息,并在对它们进行进一步分析处理后,提供各种网络管理功能。
在网络探测器的实现中,我们将使用SNMP规范来实现它和管理站的通信,即在网络探测器上实现一个具有完整功能的SNMP Agent,通过SNMP来向管理站提供各种网管信息。网络探测器支持RMON MIB,主要提供整个局域网有关的统计信息。
2.3 RMON——远程监视
RMON(Remote Network Monitoring)规范是SNMP的一个重要增强,它定义了一种远程监视MIB来作为MIB-II的补充,为网络管理站提供了至关重要的网络信息。RMON可以把子网当作一个整体来监视,提供关于整个子网的一些统计信息。
RMON本质上是定义了一套MIB规范,其作用是定义标准的网络监视功能和接口,使基于SNMP的管理站和RMON探测器之间能够通信。一般说来,RMON提供了一种有效且高效的方法来监视子网行为。
RMON规范主要包括在两个重要RFC文档中:RFC 定义了RMON1, RFC 定义了RMO- N2。
RMON1主要工作在MAC层,能够监视和它相连的LAN内的所有流量,捕获所有MAC层的帧,从这些帧中读取MAC层的源地址和目的地址,并进行有关的各种分析和统计。
RMON2是RMON1的扩充,RMON2工作在MAC层之上,能够从OSI模型的第3层到第7层对数据包进行解析,监视协议流量,例如,探测器能够基于网络层协议和地址(包括IP)来监视流量。
RMON规范定义的MIB库结合在MIB-II中,其子树标识为。RMON1定义了个组,RMON2在RMON1的基础上进行了简单扩充,添加了9个新的组。
3 系统总体设计
3.1 基本设计思想
从本质上讲,网络探测器是一个支持RMON规范的SNMP Agent,其主要任务包括:
(1)采集、分析和统计局域网的各种有用信息,按照RMON规范对这些信息进行组织;
(2)实现SNMP Agent,提供标准的SNMP接口,供管理站从它获得网络管理信息。
网络探测器底层的平台是嵌入式Linux系统,该系统具有网络模块,可以接入以太局域网。具体的平台要求是:
硬件系统平台:性能较高,处理速度相对较快,内存容量较大,带有网络模块;
操作系统平台:支持网络功能,能够接入以太网,提供C++编译开发工具。
在本网络探测器的实现时,考虑到运行效率、硬件成本、使用方便性等各方面的因素,做了以下限定:
(1)针对目前最常见的以太网环境;
(2)有一个接口使其仅能连接到一个子网,这样可使得系统简单有效、易于安装配置;
(3)全部MIB对象存放在内存中,提高运行效率;
(4)有选择地实现一些重要的MIB组;RMON是一个功能非常强大的MIB库,能够为管理站提供详细的网络管理信息,然而,在一般应用中都不大可能对所有的SNMP MIB组加以实现。
3.2 系统基本体系结构
图2给出了本网络探测器的基本体系结构。网络探测器包括以下一些基本组成模块:网络侦听、数据包分析、分类统计计数、RMON MIB库、SNMP处理以及Trap发送等。
探测器系统中,各个功能模块的主要功能如下:
网络侦听模块负责从网络上截获所有的数据包;网络探测器连接在特定局域网上,它能够对该局域网上传输的所有数据包进行截获,然后提交给上层模块进行分析处理。
数据包分析模块对截获的数据包根据数据包的类型、源地址、目的地址、包大小等基本信息逐个进行分析。
数据包分析模块在对数据包进行分析后,根据数据包的特性,调用特定的分类统计计数模块对该包进行统计计数,分类统计计数模块按照MIB库的规范要求,将统计结果更新到有关的一些MIB对象中。
RMON MIB库用来保存各种RMON MIB对象(实际上还包括MIB-II的System组和Interface组),这些对象按照RMON MIB规范进行组织,这里的MIB库是一个概念上的数据库,实际上各种信息都组织在内存中,以提高访问效率。
SNMP处理模块负责实现SNMP访问接口,接收SNMP请求(包括Get、GetRequest、Set等操作),对它进行分析处理,并按照要求访问RMON MIB库,从中取得需要的MIB对象值并返回给请求者(对Get、GetRequest而言),或者设置有关的MIB对象值(对Set操作而言)。
Trap发送模块负责在发生特定事件时,主动发送Trap信息给预定的管理站;在分类统计计数模块对MIB对象的值进行计数时,如果发现特定值超过了预定的范围,则启动Trap发送模块,按照预定策略发送Trap信息给管理站。
4 实现技术
4.1 SNMP Agent的实现
目前,已经有一些可用的SNMP Agent开发工具包,它们提供一些基本的框架平台,实现了Agent的通用功能,在其基础上,开发者可以集中精力进行具体逻辑功能的实现,如MIB对象的数据采集等。这样有利于简化开发工作,加快开发进程。常见的SNMP Agent开发工具包有:Agent++、net-snmp、WinSnmp API(适用于Windows平台)等。
为了方便探测器Agent的实现,我们选择了Agent++平台,它是免费的且源代码公开。
Agent++是一套用于开发SNMP Agent的C++库,它建立在SNMP++的基础之上。Agent++提供了完整的协议处理框架,提供了标量对象和表对象等MIB对象的基类,通过继承用户可以方便地定义MIB对象。Agent++具有以下一些特点:
(1)功能强大,能够实现各种复杂的MIB对象;
(2)简单易用,开发人员无需深入了解底层的SNMP处理,仅使用一些简单的类和接口,即可快速实现带有各种MIB对象的Agent;
(3)扩展性强,方便定义和实现新的功能;
(4)可移植性好,代码可以方便地移植到Windows、UNIX、Linux等平台上;
(5)支持SNMPv1和SNMPv2c;
(6)支持多线程处理,在线程中处理SNMP请求,可以进行并发的处理;
(7)支持MIB对象的持久保存,可将MIB对象保存到硬盘上,并可以从硬盘装载;
(8)具有详细的日志功能。
4.2 网络数据包侦听的实现
网络数据包的侦听也可以使用一些现成的开发包来实现,winpcap和libpcap是比较著名的开发包,提供了较强的网络数据包截获功能,其中,winpcap运行在Windows平台上,libpcap运行在UNIX和Linux平台上。
本项目使用libpcap作为数据包侦听部分的开发包。
libpcap(Packet Capture Library),即数据包捕获函数库。在网络包抓取中libpcap是非常常用的一个库,著名的tcpdump就是用它来实现的。libpcap是一个与实现无关的访问操作系统所提供的分组捕获函数库,用于访问数据链路层。这个库为不同的平台提供了一致的C函数编程接口,在安装了 libpcap 的平台上,以 libpcap 为接口写的程序、应用,能够自由地跨平台使用。它支持多种操作系统。
libpcap 结构简单,使用方便;它提供了多个API封装函数,我们利用这些API函数即可完成本网络探测器所需的网络数据包监听功能。
5 结束语
针对网络管理系统的管理信息收集所存在的一些特殊问题,本文设计并实现一种网络探测器。在一个网络管理应用系统中,要根据具体情况决定是否为一些局域网设置网络探测器。所以网络探测器是对本网络管理系统基本实现的补充,它可以使得本网管系统功能更加完善。实践证明本实现方案简单实用,达到了预期的目的。
参 考 文 献
[1] Stallings W,胡成松, 汪凯译 . SNMP网络管理,北京:中国电力出版社,
[2] RFC -, Management Information Base for Network Management of TCP/IP-based internets: MIB-II
[3] RFC -, Remote Network Monitoring Management Information Base
[4] RFC -, Remote Network Monitoring Management Information Base II