设备端口流量 ************* 获取交换机端口流量的大小。 采集侧 ================== 采集原理 ~~~~~~~~~ 采集器通过周期性的查询交换机的端口当前的已经流过的bit数。 .. attention:: *通过SNMP方式采集回来的数据单位为单位为octet,实际计算为bit的时候需要乘以8。 另外,交换机会对该值做统计,最大值是2^64,当超过这个值之后,将会从0开始计算。所以,如果采集频率较小,会出现临近两次的值,后一次比前一次的小。 同时,部分交换机对该值是有刷新的时间周期的,如果采集的周期小于设备刷新的周期,会导致相邻两次的值一样的情况。 比如思科的Nexus系列就是存在这类情况。* 采集任务参数配置要求 ~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: auto :stub-columns: 1 :align: left * - **采集方式** - SNMP * - **SNMP OID** - * 入方向:1.3.6.1.2.1.31.1.1.1.6 * 出方向:1.3.6.1.2.1.31.1.1.1.10 * - **返回值** - 累计流量的bit总数 * - **采集超时时间** - 默认10000ms * - **采集周期** - #. 次/10s,每次完成一个设备的所有接口的数据采集(批量采集) #. 次/1min,每次完成一个设备的所有接口的数据采集(批量采集) #. 次/2min,每次完成一个设备的所有接口的数据采集(批量采集) #. 次/10s,每次完成一个接口的数据采集(单端口采集) #. 次/1min,每次完成一个接口的数据采集(单端口采集) #. 次/2min,每次完成一个接口的数据采集(单端口采集) * - **配置筛选条件** - #. 业务线 #. 区域(地域) #. 机房 #. POD #. 业务属性(服务角色) #. 设备角色 #. 设备IP、IP地址段 #. 采集模式(单端口,批量) * - **特殊端口采集周期** - #. 对于专线和出口端口的采集频率设置 #. 次/10s,每次完成一个接口的数据采集(单端口采集) #. 次/1min,每次完成一个接口的数据采集(单端口采集) #. 次/2min,每次完成一个接口的数据采集(单端口采集) * - **特殊要求** - #. 使用同一机房的采集去采集该机房的设备存活状态,如果该机房没有采集器,使用一组指定的默认采集器去采集 #. 支持手动指定某一些IP地址(ip地址段)使用特定的采集器 任务筛选条件的互斥关系 ~~~~~~~~~~~~~~~~~~~~~~~~ a. 采集模式必选 #. 机房--POD--设备IP,存在父子关系,当父节点未被选中或者是多选状态下,子节点不能继续选择;当且仅当机房、POD、同时处于单选状态下方可继续选择设备IP; #. 区域--机房,存在父子关系,当父节点未被选中或者是多选状态下,子节点不能继续选择; #. 设备IP地址仅仅可以在没有任何其他项勾选的情况下,才可以支持手工输入多个IP地址,或者多个地址段; 任务处理流程 ~~~~~~~~~~~~~~ a. 从筛选条件中筛选出符合要求的设备;设备优先使用带内IP地址作为目标地址去采集,如果没有带内地址,则使用带外去采集。 #. 将筛选出的设备,设置采集周期; #. 对上述设备执行下发任务至指定的采集节点(包括人工指定,和按同一个机房使用本机房的采集器两种方式,后一种为默认行为); #. 对于不能通过自动下发任务至同机房采集器的任务,下发任务至默认的采集器去采集; #. 对于采集模式批量方式的,通过CMDB信息判断设备是否是在出口和专线中,判断特殊端口的采集周期和普通的采集周期是否一致,一致则以该频率做批量采集。否则,退化为单端口采集,针对不同端口设置不同的采集频率。 #. 对于采集模式是单端口模式的,从CMDB拉取该设备的端口信息,按每个端口发送一次请求;批量的,则只发一次请求。 #. 采集器执行采集任务,当请求报文发出去之后。如果超时时间内(默认 2000ms)没有收到返回,采集失败,此时刻没有数据。如果有返回,将返回值做预处理。 #. 注意每个端口都有两个方向的数据需要采集,分别为出方向的流量大小,如方向的流量大小 .. attention:: *批量采集的时候,在特定设备上,会出现部分端口的数据有返回,部分无返回的情况。对于没有返回数据的端口,认为该端口的采集失败。* 端口流量采集示例 ~~~~~~~~~~~~~~~~~ 如下是一个批量采集设备端口的流量的示例。注意到返回值包括两部分,一个是“=”左边的oid,一部分是采集值。返回的OID是两部分合成的,snmp请求的OID加上端口index。 所以,根据返回值,我们可以知道端口的index和对应的bit值。通过index可以逆向查找到该index对应的端口名、带宽等信息。 .. code-block:: shell [linux]$ snmpbulkwalk -c 360buy -v 2c -O Qn 172.28.0.21 1.3.6.1.2.1.31.1.1.1.6 .1.3.6.1.2.1.31.1.1.1.6.436 = 262474421298197 .1.3.6.1.2.1.31.1.1.1.6.437 = 398990784040185 .1.3.6.1.2.1.31.1.1.1.6.438 = 748587795338452 .1.3.6.1.2.1.31.1.1.1.6.439 = 545337523591573 .1.3.6.1.2.1.31.1.1.1.6.440 = 354141939931478 .1.3.6.1.2.1.31.1.1.1.6.441 = 352663359849510 .1.3.6.1.2.1.31.1.1.1.6.442 = 50923126328422 .1.3.6.1.2.1.31.1.1.1.6.443 = 87161657902329 .1.3.6.1.2.1.31.1.1.1.6.444 = 386220895479355 .1.3.6.1.2.1.31.1.1.1.6.445 = 419397774056438 .1.3.6.1.2.1.31.1.1.1.6.446 = 7848238529338 .1.3.6.1.2.1.31.1.1.1.6.447 = 341401915516811 .1.3.6.1.2.1.31.1.1.1.6.448 = 106775721102572 采集值预处理 ~~~~~~~~~~~~~~~~ 采集会有二类情形,一是采集超时,没有取回结果;二是采集正常。 a. 采集超时,没有取回结果时,则本次采集为空,即这个时刻没有采集数据,不做任何数据的补充,不能标记为0值等; #. 解析返回值,取出返回值中的index和对应的端口流量状态值。 #. 将本次采集值减去上一次采集值的绝对值,作为 ``流量增量值`` 。(这里考虑到复杂处理,我们不额外处理计数器溢出导致的情况) :math:`C_{increase} = C_{current} - C_{last}` #. 将 ``流量增量值`` 换算为使用带宽大小。:math:`B_{used} = C_{increase}*8/100000/SampleInterval` #. 将 ``流量增量值`` 换算为带宽使用率[单位Mbps](带宽使用率分为两种,一种是人为限制带宽, 一种是端口速率),我们优先选择限制带宽为bandwith。 :math:`C_{util} = B_{used}*100/Bandwith` #. 通过index逆向从CMDB中解析出端口名字, 端口速率 数据染色 ~~~~~~~~~~~~~~~~ 对每条采集数据,染色如下。 a. 时间戳(采集时间) #. 业务线 #. 区域(地域) #. 机房 #. POD #. 房间 #. 机柜 #. 业务属性(服务角色) #. 设备角色 #. 带内管理IP #. 带外管理IP #. 设备名 #. 厂商 #. 设备品牌 #. 设备型号 #. 设备流程状态 #. 端口index #. 端口名 #. 端口带宽 #. 端口流量当前值 #. 端口流量增量值 #. 端口带宽使用率 #. 带宽使用大小(单位Mbps) 数据分析和报警 ================== 数据预处理 ~~~~~~~~~~~~~~~~~ 对于10s采集的数据,因为部分设备的数据刷新时间大于10s,导致出现数据带宽使用率为0的情况。所以需要对这部分数据做聚合。原始数据作为参考。 计算公式为: .. math:: C_0 = {{C_{inc0} + C_{inc10} + ...+ C_{inc50}} \over 6} .. math:: B_0 = {{B_{used0} + B_{used10} + ...+ B_{used50}} \over 6} 即将第0s个至第50s采集的数据做均值后复制给0s的点。如17:51:00秒~17:51:50秒,6个点的数值平均后记到17:51:00秒上 策略配置 ~~~~~~~~~~~~~~~~~ .. warning:: 对于端口在专线或者出口列表里的端口,不能进入此分析过程,他们单独应用于专线和出口。 .. list-table:: :widths: auto :stub-columns: 1 :align: left * - **策略名** - #. 报警策略名字 * - **策略筛选条件** - #. 业务线 #. 区域(地域) #. 机房 #. POD #. 业务属性(服务角色) #. 设备角色 #. 设备IP、IP地址段 #. 端口名 #. 流量方向(进,出) * - **策略生效时间** - 支持到小时级别(0-23) * - **阈值类型** - #. 带宽使用率 #. 流量大小(Mbps) * - **触发阈值** - M分钟内使用率>=N达到S次(M,N,S为整数, N可以为流量大小或者流量使用率,根据阈值类型定义)。 * - **恢复阈值** - X分钟内使用率