`
hanhg
  • 浏览: 136932 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

snmp中告警消息的处理

阅读更多
最近一段时间做了一个网管的代理,学习了一些关于snmp的相关消息.刚开始的时候觉得特别地迷惑,还好找到了一些以前别人写的一些例子.觉得给我的帮助很大.现在项目做完了,我也想自己总结一下.给正在学习和彷徨中的人一点指导.欢迎拍砖.

   首先说一下消息的发送,让我们来看一下发送的一个例子:
 
public static void init() {
        try {
            // 创建一个DaemonTaskServer处理snmp的traps
            // 你也可以不用DaemonTaskServer,但使用DaemonTaskServer
            // 处理收到的PDU单元,可以更快的腾出来用于接收trap的socket,
            // 这样可以减少丢包(trap是udp包)
            // 把DaemonTaskServer的线程设置为NORM_PRIORITY,这样
            // trap接收的线程可以优先于trap处理的线程
            final DaemonTaskServer taskServer = new DaemonTaskServer();
            taskServer.start(Thread.NORM_PRIORITY);
            // 为snmp的trap包创建分配器(SnmpEventReportDispatcher)和监听器
            // SnmpEventReportDispatcher做为一个线程运行,并且在指定的端口监听traps
            int listePort = Integer.parseInt(PropertyReader.getValue("listenPort"));

            final SnmpEventReportDispatcher trapAgent = new SnmpEventReportDispatcher(listePort,
                    null, taskServer, null);
            // 把TrapListenerImpl作为snmp trap的监听器
            // TrapListenerImpl处理trap pdu包
            trapAgent.addTrapListener(new TrapListenerImpl());
            final Thread trapThread = new Thread(trapAgent);
            trapThread.setPriority(Thread.MAX_PRIORITY);
            trapThread.start();
        } catch (Exception e) {
                   }
    }

上面主要是建立了一个DaemonTaskServer,并在指定的端口进行监听,监听到消息的处理类为TrapListenerImpl.代码如下:
public void processSnmpTrapV1(SnmpPduTrap trap) {
        // System.out.println("NOTE: TrapListenerImpl received trap :");
        // System.out.println("\tGeneric " + trap.genericTrap);
        // System.out.println("\tSpecific " + trap.specificTrap);
        // System.out.println("\tTimeStamp " + trap.timeStamp);
        // System.out.println("\tAgent adress " + trap.agentAddr.stringValue());
        log.info(NAME + "NOTE: Trap V1 not of interest !!!");
    }

    public void processSnmpTrapV2(SnmpPduRequest trap) {
        SnmpVarBindList varbindList = new SnmpVarBindList();
        log.info(NAME + "收到TrapV2消息:");
        int len = trap.varBindList.length;
        for (int i = 0; i < len; i++) {
            log.info(NAME + "" + "oid : " + trap.varBindList[i].getOid() + " val : "
                    + trap.varBindList[i].getSnmpValue());
            SnmpVarBind svb = trap.varBindList[i];
            varbindList.add(svb);
        }
        try {
            String sendIP = PropertyReader.getValue("sendIP");
            int sendPort = Integer.parseInt(PropertyReader.getValue("sendPort"));
            senderTrap.send(varbindList, sendIP, sendPort);
        } catch (IOException e) {
            log.error(NAME + "发送告警消息失败,原因:", e);
        } catch (SnmpStatusException e) {
            log.error(NAME + "发送告警消息失败,原因:", e);
        }
    }

    public void processSnmpTrapV3(SnmpScopedPduRequest trap) {
        // println("NOTE: TrapListenerImpl received trap V3:");
        // println("\tContextEngineId : " + SnmpEngineId.createEngineId(trap.contextEngineId));
        // println("\tContextName : " + new String(trap.contextName));
        // println("\tVarBind list :");
        // for (int i = 0; i < trap.varBindList.length; i++)
        // println("oid : " + trap.varBindList[i].getOid() + " val : "
        // + trap.varBindList[i].getSnmpValue());
        log.info(NAME + "NOTE: Trap V3 not of interest !!!");

    }

这个类中主要是处理三个告警消息SnmpTrapV1,SnmpTrapV2,SnmpTrapV3,处理时根据发送消息的类型来进行处理.


   再来看看发送的代码吧.
SnmpTrapV1的代码:
public static void main(String args[]) {   
  
        try {   
             
            int port = 8085;   
            snmpAdaptor = new SnmpAdaptorServer(port);   
          
            snmpAdaptor.start();   
    
            print("NOTE: Sending a coldStart SNMP trap to"  
                    + " each destination defined in the ACL file...");   
            snmpAdaptor.setTrapPort(new Integer(port + 1));   
            snmpAdaptor.snmpV1Trap(0, 0, null);   
            println("v1 Done.");   
        } catch (Exception e) {   
            e.printStackTrace();   
        }   
    }  
使用snmpAdaptor.snmpV1Trap(0, 0, null)可以像目的端(接收snmp trap的程序)发送一个trap。

SnmpTrapV2的代码:
 public void send(SnmpVarBindList varbindList, String ip, int port) throws IOException,
            SnmpStatusException {
        sendServer.setTrapPort(port);
        SnmpPeer peer = new SnmpPeer(ip);
        peer.setDestPort(port);
        SnmpOid oid = new SnmpOid(".1.4.1.8596.2.19.1.1");

        SnmpTimeticks timeticks = new SnmpTimeticks(System.currentTimeMillis());
        try {
            sendServer.snmpV2Trap(peer, oid, varbindList, timeticks);
        } catch (Exception e) {
                   }
    }


0
1
分享到:
评论
3 楼 changtuipangxie 2008-11-03  
嘎嘎,我也发表了一片文章,正在迷惑中,有人帮一下不?
2 楼 congjl2002 2008-10-29  
注释很详细,非常好
1 楼 qinghan0261320 2008-10-28  
恩,不错。领教了。。

相关推荐

    Java使用SNMP4J实现snmp trap接口发送消息_20170808_LK

    在IT行业中,SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,而SNMP Trap是其一种主动通知机制。当网络设备发生特定事件时,如接口故障、内存溢出等,设备会自动向预设的管理站发送Trap消息,以便...

    综合告警管理系统解决方案

    5. 告警自动触发能力:可以通过告警触发网关实现向其他网管系统主动传送告警数据,如触发告警业务处理流程系统,还可以实现告警自动前转功能,如电子邮件、短消息、BP 等。 6. 系统自我管理能力:系统提供对网管系统...

    网络游戏-网络设备告警方法及告警管理装置.zip

    此外,为了提高告警处理的效率,通常会采用自动化和智能化手段,比如使用机器学习算法预测潜在故障,或者通过AI辅助决策来优化故障处理流程。同时,告警策略也需要根据游戏业务的特点进行定制,例如在高峰期设置更...

    Trap报文上报方法及系统、告警信息源告警代理服务装置.zip

    4. **配置管理**:允许管理员配置告警阈值、告警优先级和告警处理策略。 三、系统架构 典型的Trap报文上报系统通常由以下组件构成: 1. **被管理设备**:网络中的路由器、交换机、服务器等,具备SNMP代理功能,...

    华为ManageOne ServiceCenter RC3告警处理手册.pdf

    告警处理是IT运维中的关键环节,能够预防并及时解决故障,减少业务中断的可能性。 1. **ALM-ServiceCenter.9002 ServiceCenter与SNMP管理站连接异常** 当出现这个告警时,表示ServiceCenter与使用SNMP协议的网络...

    华为NE40&80路由器告警参考

    这些路由器在大型企业和数据中心网络中扮演着核心角色,因此对告警的准确理解和及时处理至关重要。告警参考文档通常包含了各种可能出现的故障情况、对应的告警信息、原因分析以及解决策略,旨在帮助用户快速定位和...

    snmp4j实现snmp trap 发送与接收

    在给定的代码中,`MultiThreadedTrapReceiver` 类使用了 SNMP4J 库提供的多线程消息派发机制来处理 Trap 消息。该类首先创建了一个 `ThreadPool` 对象,并使用该对象创建了一个 `MultiThreadedMessageDispatcher` ...

    华为ManageOne ServiceCenter RC1告警处理手册.pdf

    【华为ManageOne ServiceCenter RC1告警处理手册】是华为技术有限公司发布的一份详细文档,旨在帮助技术支持工程师和系统管理员有效处理ManageOne ServiceCenter 3.0 RC1版本中的告警问题,确保系统的正常运行。...

    基于Netcool集中告警系统解决方案-v1.0.rar

    2. **告警管理**:系统应具备强大的告警处理能力,能对海量告警进行智能分类、优先级排序,避免告警风暴,同时支持自定义告警规则和告警关联分析,便于快速定位问题。 3. **集成能力**:Netcool可能支持多种协议...

    IT集中监控告警平台_it_集中监控告警平台_主机监控_

    IT集中监控告警平台是现代IT管理中不可或缺的工具,其主要目的是实时监控网络环境中的各种设备和系统,包括主机,以确保业务的稳定运行。本文将深入探讨这个平台的功能、工作原理以及如何通过PING和TELNET方式进行...

    电信设备-告警事件信息的处理方法和装置.zip

    5. **自动化处理机制**:现代运维中,告警处理常结合自动化工具,如自动工单生成、自动恢复策略等,以减轻人工负担,提升响应速度。 6. **告警抑制与屏蔽**:对于某些预知或已知的正常情况导致的告警,可以设置抑制...

    综合告警管理系统说明

    该系统的核心在于其能够接收、处理并存储来自网络设备的告警信息,确保网络故障或异常情况能够被迅速识别和响应,从而保障网络的稳定运行。 #### 二、设计原理与架构 ##### **2.1 需求规定** 告警接收与显示:...

    CloudEngine 12800, 12800E V200R005C10 告警处理.pdf

    在CloudEngine 12800和12800E系列交换机的V200R005C10告警处理文档中,主要涵盖了以下几个方面的知识: 1. **告警查询工具**:文档提供了如何使用华为提供的工具来查询和监控设备告警的方法。这包括通过命令行界面...

    SolarWinds常用告警,中文

    2. **告警通知**:你可以配置多种通知方式,包括电子邮件、短信、SNMP陷阱、Windows事件日志等。此外,还可以设置通知频率,避免在问题未解决时频繁接收重复告警。 3. **告警状态管理**:告警有活动、已确认、已...

    用net-snmp的api实现trap接收,windows+linux

    你可以使用`snmp_varbind_list`结构体来处理陷阱中的变量绑定,然后通过`asn1_decode()`等函数解码SNMP报文。 5. **处理SNMP请求**:当trap到达时,Net-SNMP库会调用你的回调函数。在这里,你可以使用`snmp_parse_...

    告警信息传输方法及装置.zip

    - **可扩展性**:随着系统规模的扩大,告警系统需要支持大量设备和复杂环境下的告警处理。 - **标准化**:遵循业界标准,便于与其他系统集成。 - **智能化**:利用AI和机器学习技术进行告警预测和自动化处理,减轻...

    超硬核!360个Zabbix常见问题详解

    Zabbix server收不到客户机SNMP Trap告警可能是由于配置trap的监控项不正确,需要检查zabbix_server.conf文件中的配置来解决问题。 十、web 端SNMP不通 Zabbix web 端SNMP不通可能是由于接口问题,需要换成SNMP接口...

Global site tag (gtag.js) - Google Analytics