SNMP TRAP_Bootstrapping

SNMP TRAP_Bootstrapping一、什么是SNMPTRAPSNMPtrap(SNMP陷阱):某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询。在网管系统中,被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。正如人们用中断通知CPU数据的到达,而不是让CPU进行轮询一样。Trap通知是更加合理的选择。用一句话来说的话,SNMPTrap就是被管理设备主动发送消息给

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、什么是SNMPTRAP

  • SNMP trap(SNMP 陷阱):某种入口,到达该入口会使SNMP被管设备主动通知SNMP管理器,而不是等待SNMP管理器的再次轮询。在网管系统中,被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。正如人们用中断通知 CPU 数据的到达,而不是让 CPU 进行轮询一样。Trap 通知是更加合理的选择。用一句话来说的话,SNMP Trap 就是被管理设备主动发送消息给 NMS 的一种机制。

二、SNMPTRAP功能特点

  • 1、事件驱动,第一时间收到设备故障告警
    以事件为驱动,由被监控的主机、网络设备、应用在发生故障时向NMS发送SNMP Trap,通过对接收到的SNMP Trap进行翻译和展现,以最快速度向管理人员发送告警。SNMP Trap不同于SNMP的主动采集,SNMP采集服务器按照固定的时间间隔,由网管系统以询问的方式,采集被监控端性能指标,因此发现被监控端性能问题的快慢取决于采集的频率间隔。而SNMP Trap是以事件为驱动,在被监控端设置陷阱,一旦被监控端设备出现相关问题,立刻发送SNMP Trap,因此能够在最短的时间内发现故障,避免因为设备故障带来的经济损失。
  • 2、提供SNMPTrap的接收,并通过对Trap信息翻译,展现事件
    支持设备,主机和应用的SNMP Trap信息,从被动变为主动,全面监控IT系统。通过对SNMP Trap的翻译和展现,一旦某个IT组件出现问题,可以在短时间之内,即可收到故障信息,满足企业的快速发现问题的需要。
    通过SNMPTrap的接收规则定义,管理员可以过滤非重要设备的Trap信息,也可以过滤被监控设备的非重要故障信息,帮助管理员在第一时间收到真正需要的管理信息。
  • 3、支持事件导出
    汇总特定时间内特定SNMPTrap事件,同时可以以Excel格式导出事件数据,便于管理人员对故障信息进行统计和分析。
  • 4、支持各类设备厂家MIB库的导入
    虽然国内各种网络设备都支持SNMP Trap,但是各个厂家的MIB库并不能很好的支持公共标准,因此,很多监控系统都支持私有MIB库的导入,确保能够全面兼容各个厂家设备的SNMP Trap信息.

三、SNMPTRAP工作流程

  • 1、Agent端
    A、编写MIB文件,确定好TRAP名称等信息
    B、命令方式:发送各种TRAP命令(Manager地址后面一定要加端口号162),在Manager端看反应结果,在Agent端无反应
    C、自动触发:配置snmpd.conf设置触发TRAP,系统发生某类错误时会自动触发相应类型的TRAP,发送给Manager
    D、程序方式:一部份TRAP需要写C语言程序,用相应的api(send_easy_trap或send_v2trap)发送
  • 2、Manager端
    A、配置snmptrapd.conf文件,设置访问权限
    B、将MIB文件导入到mibs文件夹中
    C、用perl等脚本语言编写处理trap的程序
    D、配置snmptrapd.conf文件,添加traphandler项,将不同的TRAP对应到不同的处理程序上

四、TRAP MIB编写及编译
NET-SNMP中TRAP的实现是基于一个由NOTIFICATION-TYPE 定义的MIB对象实现的。该对象在TrapPDU中头部位置,后续紧跟着该Trap携带的其他节点的信息,这些节点信息是Trap中有意义的信息,体现本次“告警”的真正内容,这些节点一般为普通的MIB对象。其中OBJECTS 子句中可以包含多个对象。

  • 实现私有Trap的方法与之前的普通MIB开发方法类型:

    • 先定义Trap的MIB对象,然后借由mib2c和相应的框架代码配置文件,“mib2c.notify.conf”,生成Trap框架代码。
      命令如下:
      mib2c -c mib2c.notify.conf TEST-TRAP-MIB::TestTraps

其生成的框架代码:

  1. 注册Trap对象
  2. 绑定对象发送列表
  3. 最后调用API发送:send_easy_trap() send_v2trap() send_v3trap().

Trap的发送逻辑一般具有重复发送的特性,这一特性可有snmp_alarm_register()实现。该API能够准确地实现计时器功能。示例代码中也是由该API实现重复,周期调用的功能。
五、TRAP MIB示例文件

TEST-TRAP-MIB DEFINITIONS ::= BEGIN
IMPORTS
	MODULE-IDENTITY, OBJECT-TYPE, TimeTicks FROM SNMPv2-SMI
	DisplayString, FROM SNMPv2-TC
	jsHostInfo FROM JS-MAIN-MIB ;
	TestTraps OBJECT IDENTIFIER ::= { 
    jsHostInfo 99 }
     
	cpuRatioHigh NOTIFICATION-TYPE
		OBJECTS  { 
   TestTrapDescription}  --可以包含多个对象
		STATUS  current
		DESCRIPTION "."
         ::= { 
    TestTraps 1 }    
         
  
	TestDescription OBJECT IDENTIFIER ::= { 
    TestTraps 2 }
      
	TestTrapDescription  OBJECT-TYPE
		SYNTAX  DisplayString (SIZE (0..256))
		MAX-ACCESS read-only
		STATUS current
		DESCRIPTION " "
		::= { 
    TestDescription 1 }
           
  END

六、TRAP 示例代码

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include "TestTraps.h"

//extern const oid snmptrap_oid[];
//extern const size_t snmptrap_oid_len;
int  cpu = 0; 
const oid snmptrap_oid[] = { 
   1,3,6,1,6,3,1,1,4,1,0};
const size_t snmptrap_oid_len = OID_LENGTH(snmptrap_oid);
//如果CPU大于80 则发送告警 否则不发送
void judge_send_cputrap(int cpu)
{ 
   
    static unsigned int cputrap_clientreg = 0;
    if(cpu > 80)
    { 
   
        if(cputrap_clientreg == 0){ 
   
            send_cpuRatioHigh_trap();
			//注册每5秒发送一次
            cputrap_clientreg = snmp_alarm_register(5,SA_REPEAT,send_cpuRatioHigh_trap,NULL);
 
        }
    }
    else
    { 
   
        if(cputrap_clientreg != 0)
        { 
   
            snmp_alarm_unregister(cputrap_clientreg);
            cputrap_clientreg = 0;
        }
    }
}
void read_cpudata_repeat(unsigned int clientreg, void *clientarg)
{ 
   
    cpu = 90;
    judge_send_cputrap(cpu); //判断发送告警
}


void init_TestTraps(void)
{ 
   
    printf(("TestTraps","Initializing\n"));
    snmp_alarm_register(1,SA_REPEAT,read_cpudata_repeat, NULL);
}

int
send_cpuRatioHigh_trap(void)
{ 
   
    netsnmp_variable_list *var_list = NULL;
    const oid       cpuRatioHigh_oid[] =
        { 
    1, 3, 6, 1, 4, 1, 88888, 1, 1, 99, 1 };
    const oid       TestTrapDescription_oid[] =
        { 
    1, 3, 6, 1, 4, 1, 88888, 1, 1, 99, 2, 1, 0 }	
    /* * 设置 snmpTrapOid.0 的值为私有MIB中定义的TestTrapDescription_oid */
    snmp_varlist_add_variable(&var_list,
                              snmptrap_oid, snmptrap_oid_len,
                              ASN_OBJECT_ID,
                              cpuRatioHigh_oid, sizeof(cpuRatioHigh_oid));

    /* * Add any objects from the trap definition */
    snmp_varlist_add_variable(&var_list,
                              TestTrapDescription_oid,
                              OID_LENGTH(TestTrapDescription_oid),
                              ASN_OCTET_STR,
                              /* * Set an appropriate value for TestTrapDescription */
                              (int*)&cpu, sizeof(cpu));

    /* * Add any extra (optional) objects here */

    /* * Send the trap to the list of configured destinations * and clean up */
     //发送TRAP之后并释放
    send_v2trap(var_list);
    snmp_free_varbind(var_list);

    return SNMP_ERR_NOERROR;
}

七、TRAP 注册到子代理中
方法跟普通MIB对象一样

八、测试和验证
需启动主代理进程和子代理进程 以及snmptrapd进程
直接到/usr/local/sbin/目录下 启动代理进程
./snmpd -f -Le -c /usr/local/share/snmp/snmpd.conf
然后启动子代理进程
./ example-demon

最后启动snmptrapd进程。
 ./snmptrapd -f -Le -c /usr/local/share/snmp/snmptrapd.conf

启动snmptrapd进程需要snmptrapd.conf配置文件
启动后即可看到
则每过5秒可以看到trap返回来的告警信息。

九、snmptrapd.conf编写
说明:配置文件所有指令都要顶格写,左侧不要留空格。
允许使用空格,但不能使用Tab键。
路径分隔符不能使用反斜杠,必须使用“/”。
此文件用来指定管理进程如何处理接收到的snmp notification。

  1. 在net-snmp安装目录下新建snmptrapd.conf文件,使用以下路径:/usr/local/share/snmp/snmptrapd.conf。

  2. 在snmptrapd.conf中加入以下指令:
    authCommunity log,execute,net public
    这条指令指明以“public”为“community”请求的snmp “notification”允许的操作。
    各变量意义如下:
    log: log the details of the notification – either in a specified file, to standard output (or stderr), or via syslog(or similar).
    execute: pass the details of the trap to a specified handler program, including embedded perl.
    net: forward the trap to another notification receiver.

  3. 若想对接收到的信息进行处理,可以使用traphandle,示例如下:
    traphandle SNMPv2-MIB::coldStart /usr/nba/bin/traps cold
    traphandle SNMPv2-MIB::warmStart /usr/nba/bin/traps warm
    traphandle IF-MIB::linkDown /usr/nba/bin/traps down
    traphandle IF-MIB::linkUp /usr/nba/bin/traps up
    第一个参数为从snmptrapd接收的OID,第二个参数为调用的程序。此次未做traphandle处理。

注意:上述是使用服务器本机获取TRAP ,如果想使用远程的管理设备获取TRAP
需要修改snmpd.conf文件

Trap的发送还需要指定到管理端地址和端口。在配置文件中,添加下面关键字:
不是关键点:Authtrapenable 1 //打开trap自动告警的开关,1代表开启,2代表关闭
Trap2sink localhost [community] [port] //指定trap发送的地址,共同体和端口
共同体和端口可以不指定,默认为public 和 162。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/171245.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接[通俗易懂]

    ChromeDriver与Chrome版本对应参照表及ChromeDriver下载链接[通俗易懂]ChromeDriverVersionChromeVersion74.0.3729.67473.0.3683.687372.0.3626.69722.4671-732.4671-732.4570-722.4469-712.4369-712.4268-702.4167-692.4066-68…

  • BI—脚不一样的感觉

    BI—脚不一样的感觉

  • 使用随机函数rand()和srand()来产生三个_随机函数怎么按

    使用随机函数rand()和srand()来产生三个_随机函数怎么按srand函数是随机数发生器的初始化函数。原型:voidsrand(unsignedintseed);srand和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生

  • ReadProcessMemory函数的分析「建议收藏」

    ReadProcessMemory函数的分析「建议收藏」ReadProcessMemory函数用于读取其他进程的数据。我们知道自远古时代结束后,user模式下的进程都有自己的地址空间,进程与进程间互不干扰,这叫私有财产神圣不可侵犯。但windows里还真就提供了那么一个机制,让你可以合法的获取别人的私有财产,这就是ReadProcessMemory和WriteProcessMemory。为什么一个进程居然可以访问另一个进程的地址空间呢?因为独立的只是低

  • 图的两种遍历方式

    图的两种遍历方式遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次。在二叉树基础中,介绍了对于树的遍历。树的遍历是指从根节点出发,按照一定的访问规则,依次访问树的每个节点信息。树的遍历过程,根据访问规则的不同主要分为四种遍历方式:(1)先序遍历(2)中序遍历(3)后序遍历(4)层次遍历类似的,图的遍历是指,从给定图中任意指定的顶点(称为初始点…

  • html下拉框设置默认值_html下拉列表框默认值[通俗易懂]

    html下拉框设置默认值_html下拉列表框默认值[通俗易懂]HTML和JavaScript综合练习题一、单项选择1.Web使用(D)在服务器和客户端之间传输数据。A.FTPB.TelnetC.E-mailD.HTTP2.HTTP服务默认……name的属性值必须要相同,必须有一个value值实现默认选中的属性:checked=”checked”-文件输入项(在后期上传时候用到):-下拉………

    2022年10月31日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号