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。

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

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

(0)
上一篇 2022年8月20日 下午4:00
下一篇 2022年8月20日 下午4:16


相关推荐

  • DOS命令之COPY

    DOS命令之COPYDOS命令之COPY本文的命令说明来自与DOS命令帮助说明,如果与DOS命令帮助说明不同,请以DOS命令帮助说明为准。1,命令说明     将一份或多份文件复制到另一个位置。     COPY[/D][/V][/N][/Y|/-Y][/Z][/L][/A|/B]source[/A|/B]            [+s

    2022年7月18日
    21
  • java—常量「建议收藏」

    java—常量「建议收藏」常量:在程序执行的过程中其值不可以发生改变。 1.java中常量分类:    A:字面值常量     字符串常量   用双引号括起来的内容      举例:"lixiaochi","liyan"     整数常量      所有整数      举例:12,23     小数常量      所有小数   …

    2022年7月8日
    26
  • JS字符串比较

    JS字符串比较JS 中字符串可以进行 gt lt 比较 以下进行具体说明 1 gt 比较字符串进行大于 小于 比较时 会根据第一个不同的字符的 ASCII 值码进行比较 数字字符串与数字比较时 数字字符串会转换成数字再进行大小比较 非数字字符串与数字比较时 非数字字符串会转换成 NaN NaN 与任何比较都返回 false console log 1 2 2a 1 2 2b falseconsole log 1 02 1 gt 1 1 比较字符串进行大于 小于 比较时 会根据第一个不同的字符的 ASCII 值码进行比较

    2026年3月17日
    2
  • Promise的含义和用法「建议收藏」

    Promise的含义和用法「建议收藏」含义Promise是异步编程的一种解决方案。Promise对象有以下2个特点:1.对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其…

    2022年5月30日
    36
  • 斯密特触发器

    斯密特触发器斯密特触发器又称斯密特与非门 是具有滞后特性的数字传输门 电路具有两个阈值电压 分别称为正向阈值电压和负向阈值电压 与双稳态触发器和单稳态触发器不同 施密特触发器属于 电平触发 型电路 不依赖于边沿陡峭的脉冲 nbsp 它是一种阈值开关电路 具有突变输入 输出特性的门电路 这种电路被设计成阻止输入电压出现微小变化 低于某一阈值 而引起的输出电压的改变 nbsp 当输入电压由低向高增加 到达 V 时 输出电

    2026年3月26日
    2
  • matlab数字图像处理实验

    matlab数字图像处理实验计算机图像处理实验课 1 9 看完本课程可以让你 matlab 技能小小进步 对图像处理稍微了解 一 matlab 数字图像处理实验 guide 的简单使用教程 二 matlab 数字图像处理实验 图像的几何变换 三 matlab 数字图像处理实验 图像灰度变换处理 四 matlab 数字图像处理实验 平滑处理未完待续

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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