设备监控告警设计与开发采用IMB的MQ服务器(Websphere MQ),进行设计开发。
服务器的建立属于工程维护,或者说是服务器运行的工作组进行配置,开发人员,对此是透明的,只要基本设计参数就行了。
1、脚本运行;IBM服务器AIX运行的是Unix系统,那么使用的脚本自然就是用SHELL命令编写的。
脚本CPU.sh实例程序:#!/bin/bash#editor qiuzhiwei#date 140520cur_PERCENT_log1=`df -k|grep "/dev/hd1"|grep "home"|awk '{print $4}'|cut -f 1 -d %`cur_PERCENT_app1=`df -k|grep "/dev/hd12app"|awk '{print $4}'|cut -f 1 -d %`cur_PERCENT_log2=`ssh wasadmin@192.168.60.134 df -k|grep "/dev/hd1"|grep "home"|awk '{print $4}'|cut -f 1 -d %` cur_PERCENT_app2=`ssh wasadmin@192.168.60.134 df -k|grep "/dev/hd12app"|awk '{print $4}'|cut -f 1 -d %`cur_PERCENT_flowdata=`df -k|grep "/flowdata"|awk '{print $4}'|cut -f 1 -d %`if [ $cur_PERCENT_log1 ] && [ $cur_PERCENT_log1 -ge 80 ];thenecho "APPServer1服务器日志目录使用率超过80%!"fiif [ $cur_PERCENT_app1 ] && [ $cur_PERCENT_app1 -ge 80 ];thenecho "APPServer1服务器应用目录使用率超过80%!"fiif [ $cur_PERCENT_log1 ] && [ $cur_PERCENT_log2 -ge 80 ];thenecho "APPServer2服务器日志目录使用率超过80%!"fiif [ $cur_PERCENT_app2 ] && [ $cur_PERCENT_app2 -ge 80 ];thenecho "APPServer2服务器应用目录使用率超过80%!"fiif [ $cur_PERCENT_flowdata ] && [ $cur_PERCENT_flowdata -ge 80 ];thenecho "APPServer服务器附件及缓存目录使用率超过80%!"fi2、数据封装Java程序,执行脚本的完整程序。
关键的方法:Process.getRuntime.exec(filePath);public class ScriptJob {//执行脚本通用方法public void actionScript(String fileName,String tag){try {//执行脚本Process pro=Runtime.getRuntime().exec(fileName);String ret=IOUtils.toString(pro.getInputStream(), "UTF-8");if(ret!=null){MqProcessBO mq=(MqProcessBO) SpringContextUtil.getBean("MqProcessBO");mq.parseContent(ret,tag);}System.out.println("脚本["+fileName+"]执行完成");} catch (Exception e) {System.out.println("执行脚本文件["+fileName+"]出现错误"+e.getMessage());e.printStackTrace();}}}3、报文发送public class MqProcessBO {public void parseContent(String ret,String tag){String[] packs=ret.split("\r\n");for(int i=0;i<packs.length-1;i=i+2){String ip=packs[i];String content=packs[i+1];(ip+"******************"+content);send(ip,content,tag);}}public void send(String ip, String content,String tag) { String xml=packageContent(ip,content,tag);MQQueueManager qMgr;MQEnvironment.hostname = "10.201.36.9";MQEnvironment.port = 21004;MQEnvironment.channel = "CHANNEL1";SID = 1208;String mgrName = "QM_FM";String qname = "Q_FM_IPNET_WGALARM";try {qMgr = new MQQueueManager(mgrName);int openOptions = MQC.MQMT_REQUEST | MQC.MQPMO_NEW_MSG_ID | MQC.MQOO_OUTPUT | MQC.MQOO_FAIL_IF_QUIESCING| MQC.MQOO_INPUT_AS_Q_DEF;("*******************QUEUE NAME INFO:"+qname);MQQueue queue = qMgr.accessQueue(qname, openOptions);MQPutMessageOptions pmo = new MQPutMessageOptions();("------------------SEND INFO:["+xml+"]");MQMessage msg = new MQMessage();msg.messageId = "MSGID".getBytes();msg.messageType = MQC.MQMT_REQUEST;msg.replyToQueueName = qname;msg.messageSequenceNumber = 1;try {msg.write(xml.getBytes());queue.put(msg, pmo);msg.clearMessage();} catch (IOException e) {e.printStackTrace();}mit();("INFO DONE!");} catch (MQException e) {e.printStackTrace();}}private String packageContent(String ip,String content,String tag){//根据Tag获取基本信息String title=null;String eventId=null;String level=null;if(tag.equals(AlarmProcessConstants.WEB)){//WEBtitle=AlarmProcessConstants.WEB_TITLE;eventId=AlarmProcessConstants.WEB_EVENTID;level=AlarmProcessConstants.WEB_LEVEL;}else if(tag.equals(AlarmProcessConstants.LOG)){//LOGtitle=AlarmProcessConstants.LOG_TITLE;eventId=AlarmProcessConstants.LOG_EVENTID;level=AlarmProcessConstants.LOG_LEVEL;}else if(tag.equals(AlarmProcessConstants.INTF)){//INTF title=AlarmProcessConstants.INTF_TITLE;eventId=AlarmProcessConstants.INTF_EVENTID;level=AlarmProcessConstants.INTF_LEVEL;}else if(tag.equals(AlarmProcessConstants.SYSCPU)){//CPU title=AlarmProcessConstants.SYSCPU_TITLE;eventId=AlarmProcessConstants.SYSCPU_EVENTID;level=AlarmProcessConstants.SYSCPU_LEVEL;}else if(tag.equals(AlarmProcessConstants.SYSPROCESS)){//PROCESS title=AlarmProcessConstants.SYSPROCESS_TITLE;eventId=AlarmProcessConstants.SYSPROCESS_EVENTID;level=AlarmProcessConstants.SYSPROCESS_LEVEL;}else if(tag.equals(AlarmProcessConstants.DBCAP)){//DBtitle=AlarmProcessConstants.DBCAP_TITLE;eventId=AlarmProcessConstants.DBCAP_EVENTID;level=AlarmProcessConstants.DBCAP_LEVEL;}Document doc=DocumentHelper.createDocument();doc.setXMLEncoding("GB18030");Element root= doc.addElement("message");//headElement head=root.addElement("head");Element version =head.addElement("version");version.setText("1.0");Element vendor=head.addElement("vendor");vendor.setText("综合网络资源管理系统");Element address=head.addElement("address");address.setText(ip);Element type=head.addElement("type");type.setText("alarm");//alarmElement alarm=root.addElement("alarm");Element id=alarm.addElement("id");String id2=CUIDHexGenerator.getInstance().generate();id.setText(id2);Element operator=alarm.addElement("operator");operator.setText("new");Element eventid=alarm.addElement("eventid");eventid.setText(eventId);Element ttl=alarm.addElement("title");ttl.setText(title);Element ll =alarm.addElement("level");ll.setText(level);Element detail =alarm.addElement("detail");detail.setText(content);Element time=alarm.addElement("time");Date date=new Date();SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat sdf2=new SimpleDateFormat("HH:mm:ss");time.setText(sdf1.format(date)+"T"+sdf2.format(date));Element type2=alarm.addElement("type");type2.setText("performance");(doc.asXML());return doc.asXML();}}常量设计类AlarmProcessConstants.java:public class AlarmProcessConstants {/*** 1、 WEB*/public final static String WEB = "WEB";public final static String WEB_TITLE = "Web层运行可用性异常";public final static String WEB_EVENTID = "IPNET-NMS-WEBUNAVAILABLE";public final static String WEB_LEVEL = "1";/*** 2、接口 INTF*/public final static String INTF = "INTF";public final static String INTF_TITLE = "接口运行状态异常";public final static String INTF_EVENTID = "IPNET-NMS-INTFACESTATUS";public final static String INTF_LEVEL = "2";/*** 3、日志 LOG*/public final static String LOG = "LOG";public final static String LOG_TITLE = "错误日志异常";public final static String LOG_EVENTID = "IPNET-NMS-WRONGLOG";public final static String LOG_LEVEL = "3";/*** 4、系统进程 SYSPROCESS*/public final static String SYSPROCESS = "SYSPROCESS";public final static String SYSPROCESS_TITLE = "系统关键进程运行状态异常";public final static String SYSPROCESS_EVENTID= "IPNET-NMS-PROCESSSTATUS";public final static String SYSPROCESS_LEVEL = "1";/*** 5、系统CPU SYSCPU*/public final static String SYSCPU = "SYSCPU";public final static String SYSCPU_TITLE = "系统关键进程cpu占用率异常";public final static String SYSCPU_EVENTID = "IPNET-NMS-CPUHIGHRATE";public final static String SYSCPU_LEVEL = "3";/*** 6、数据库容量【自定义】 DBCAP*/public final static String DBCAP = "DBCAP";public final static String DBCAP_TITLE = "数据库容量异常";public final static String DBCAP_EVENTID = "IPNET-NMS-WRONGLOG";//日志形式public final static String DBCAP_LEVEL = "3";//日志形式}4、解析处理此处有接受方进行处理。