1.SNMP Exporter详细解析(1)
2.万字长文。网管网管详细讲解OSEK直接网络管理,源码并对比Autosar网管。软件
SNMP Exporter详细解析(1)
SNMP协议 SNMP协议,开源在此不做过多介绍,网管网管详情可参阅华为对SNMP协议的源码spring xml解析源码介绍。 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地址的wgcloud源码使用一串数字。例如,在使用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包,从而远端的32771的源码系统管理员可以及时得知问题。 我们在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的部署,前面说了,手写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文件。 下一篇以实际案例讲解具体场景,包括如何规划目录,如何生成配置,上述参数如何具体使用。万字长文。详细讲解OSEK直接网络管理,并对比Autosar网管。
在复杂的嵌入式系统中,网络管理是关键,特别是OSEK和Autosar的网络管理。让我们一起来探讨一下这两种网络管理方式的差异,特别是针对直接网络管理的详细解析。 Osek的网络管理以其直接网络架构而闻名,特别是其网管报文和节点地址的管理。逻辑环是理解其工作原理的重要概念,每个节点按照顺序发送报文,地址信息存储在Byte0。理解逻辑环的建立、新节点的加入、节点异常退出以及结束逻辑环的流程,能帮助我们深入理解Osek的网络管理机制。报文包含了Source ID、Dest.ID(指向下一个节点的地址)、OpCode,数据内容则由用户自定义。逻辑环的建立涉及同步机制,如同起同睡,确保节点间有序通信。 向CAN总线发送的Alive报文在逻辑环建立中扮演重要角色。当节点收到首帧Alive报文,它会被唤醒并回应。节点通过比较报文源和当前后继节点,更新后继节点。逻辑顺序Ring报文的发送则由"TTyp"定时器控制,环路完成后,网管状态进入NMRESET/NMNORMAL。在休眠模式下,节点使用SleepInd位来控制,无需考虑其他节点的状态。 Osek的网管报文设置SleepInd位,表示ECU可能进入睡眠状态。当所有ECU无需工作时,通过SleepInd和SleepAck位触发休眠流程,所有节点最终进入NMBusSleep状态。在正常流程中,从唤醒到休眠的网管管理涉及环路建立和休眠。然而,新节点加入或ECU退出时,需要特殊处理,如新加入的节点通过发送Alive报文加入环,而退出的节点会影响Ring报文的发送和接收。 相比之下,Autosar网管的管理更为简洁。唤醒状态仅依赖于网管报文的存在。新节点加入时,它会检测是否被逻辑环跳过,通过发送Alive报文进行同步。ECU异常退出时,环路中的节点会根据接收到的Ring报文数量调整,"TMax"定时器用于检测节点退出情况。 Osek的复杂性体现在其LimpHome状态,它在特定错误条件下执行,如发送或接收失败。而Autosar的唤醒机制更为直接,主动节点发送报文后,被动节点响应。两者在网管报文内容的处理和唤醒流程上有着显著的差别。 最后,虽然Osek的网络管理更为复杂,但本文仅是初稿,我们将在后续分享更多细节。如果你对这些技术感兴趣,可以访问我分享的OSEK NM源代码链接:/ruiyanganqing/OSEK_NM。关注我,以小白视角深入理解,让你的嵌入式开发之路更加顺畅。现在,让我们转向Autosar BSW开发笔记的目录,继续探索更多技术细节。