系统监控之SNMP协议理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lmy86263/article/details/52916669

使用Mycat分布式数据库中间件时需要对各个性能指标进行监控,官方已经提供了一个监控软件,于是讨论起来监控是怎么具体可能有哪些实现,虽然知道已经有很多的监控软件可以使用,比如zabbix,但是今天听同事说有一个叫做SNMP的协议,是专门用在环境监控方面的,回头一查发现这竟然是行业标准,而且zabbix也是基于这个协议实现的,本着不折腾不舒服的精神,调查了一番总结如下,主要分成两个部分:

  • snmp协议的内容总结;
  • 通过编程获取snmp协议中传递的信息;

本文主要着重在snmp协议的内容以及具体的结构,下一篇会通过Java 来获取snmp中传递的信息。

snmp已经发展出了三个版本,由于本文只是做一个总结,所以不涉及版本信息。

1. snmp协议的应用场景

snmp的中文名是简单网络管理协议,是Simple Network Management Protocol的简称,而且是一个应用层协议,等于和http是平级,但是差别咋就这么大呢?什么用处呢?用来在网络实体和节点之间交换管理或者监控信息,这是官方说法。简单点来说就是打小报告的,只不过这里打小报告的是程序而不是人,被报告的是机器或者操作系统而不是人。

为什么用这个东西?简单来说,就是为了方便偷懒,当开始时一个公司中的计算机不是很多,运维人员还可以一个一个去查看是什么问题,但是如果一家公司的计算机有成百上千台,还能去一个一个看吗?当然不能了,说能的人出门右转是精神病院,这也不是跑马拉松,没有必要这么锻炼,所以这个协议应运而生,想一想自己坐在办公室,一边看着各个计算机和服务器给你发来的监控信息,一边撩着妹子,感觉是不是很爽(发明这个协议的人当初是不是也当过单身狗),而且只要预先部署好,服务器出什么问题还会报警,这简直是运维人员的福利呀!!

2. snmp的具体内容

2.1 snmp的组成

在snmp中一般来说由三种组件组成:

  • 网络设备:指在网络中需要管理和监控的设备,例如提供服务的服务器、路由器等,这些设备必须支持snmp协议;
  • 管理组件:一般来说指的是运行网络管理系统的计算机(也可以指在这个计算机上运行的监控软件),这个计算机可能与被管理的网络设备在地理上隔绝的,但是可以远程监控和管理网络设备,例如网吧的网管的电脑就可以看做一个管理组件,可以用来监控每个电脑的运行,以及管理你上网的时间并提出预警;
  • 代理Agent:这是指运行在被管理设备上的一个软件模块,用来维护被管理设备的管理信息数据并可在需要时把管理数据发送给管理组件;
    • 代理保有MIB(Management Information Base)对象变量,可以从管理信息库MIB收集信息并回传给管理组件
    • MIB库是一个保存网络管理信息的虚拟数据存储空间,由多组被管理对象组成。在网络设备的MIB库中有由多个MIB模块定义的多组各自相关联的对象,其实说白了里面存储的是网络设备的属性,比如什么CPU信息、IO读写率等等;

2.2 snmp中组件之间的通信

2.2.1 snmp的通信协议和数据格式

首先要明确的是snmp协议是应用层协议,所以它的通信底层实现还是要靠TCP协议或者UDP协议,至于使用的是哪一种协议?就要思考一下snmp的应用场景,它是用来进行监控的,要不影响其他任务的执行,所以最好要简单一些并且效率高一些,那么这就是UDP协议了,而且还省去了握手的麻烦!

由于UDP协议是把数据打包成一个一个的数据报发送出来,那么具体的监控信息是怎样打包到其中的呢?这就涉及到组件之间通信的消息格式。管理组件与Agent代理之间以协议数据单元PDU(Protocol Data Unit,PDU)进行通讯,数据在进行网络传输前必须进行分块和封装,在SNMP信息传输的过程中,数据首先会被封装成PDU,PDU再被UDP协议封装进行传输。具体的数据格式是什么样的,参考相关文章中的第一篇。

2.2.2 snmp的通信过程

snmp是一个请求/响应式的协议,它的通信过程有三种:

  • 请求(读get)数据:管理组件发起请求读取变量,Agent代理返回从MIB中读取的变量数据;
    • get请求:用以从agent上获取指定OID(可以理解为设备属性的Id)对应的一条或多条值;
    • get-next请求:与get类似,最明显的区别是GETNEXT获取指定OID在系统树中所处位置的下一个OID,在snmp协议中被管理对象用一个树来组织,被管理对象用OID表示;

  • 修改(写set)数据:管理组件发起请求通过Agent代理来修改网络设备上的一些配置值;

  • 报警获取数据(trap):Agent代理使用trap向管理组件发出请求,用来报告网络设备上的一个异常情况以便管理组件能够知晓,类似于事件的回调函数;


相关文章:

猜你喜欢

转载自blog.csdn.net/lmy86263/article/details/52916669
今日推荐