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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse配置android_零基础电脑初学者入门教程

    eclipse配置android_零基础电脑初学者入门教程Eclipse Android开发入门手册 资源下载http://tools.android-studio.orgjdk,AndroidSDK,开发工具eclipse、Androidstudio、idea  配置java环境搜索jdk安装对应的包,参照http://www.runoob.com/java/java-environment-setup.html  配置环境 安装eclipse和A…

    2022年10月4日
    0
  • matlab灰度gui,matlabgui灰度变化

    matlab灰度gui,matlabgui灰度变化课程设计报告册?课程名称:课题名称:专业班级:姓名:MATLAB课程设计灰度变换增强BobWang学号:信息楼22015164课程设计主要场所:时间:……《数字视音频技术》课程设计报告题目:基于MATLABGUI的数字图像处…学号:20994055003数字图像处理论文二〇一二年十月基于灰度变换的图像增强及Matlab实现摘…

    2022年5月23日
    32
  • Idea激活码最新教程2022.2.5版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2022.2.5版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2022 2 5 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2022 2 5 成功激活

    2025年5月26日
    0
  • 用python浪漫告白_python动态心形代码

    用python浪漫告白_python动态心形代码Python是一种面向他人进行的说明型编程方法,其源代码与说明器CPython遵守GPL协议,语法简洁清晰。那么,我们用少量的Python代码能做哪些有趣的东西?让小编告诉你。一、编写浪漫的心型1、图形都是由一系列的点(X,Y)构成的曲线,由于X,Y满足一定的关系,所以我们就可以建立模型,建立表达式expression,当关系满足时,两个for循环(forXinrange;forYin…

    2022年9月24日
    0
  • SQL注入-报错注入[通俗易懂]

    SQL注入-报错注入[通俗易懂]sql注入之报错注入的演示与介绍

    2022年9月29日
    0
  • MySQL comment_mysql和oracle的区别

    MySQL comment_mysql和oracle的区别iconv用法场景说明将UTF-8的编码转换成GBK编码,使用Notepad++创建一个UTF-8(无BOM)的编码文件,文件内容简单为风雨在途,保存文件名称为utf8.txt,转换之后存储文件名称为gbk.txt.1.1:iconv命令的使用iconv-fUTF8-tGBKgbk.txt1.2:iconv函数的使用#includesize_ticonv(iconv_tcd…

    2022年10月22日
    0

发表回复

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

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