1、修改snmp采集数据的告警

2、修改解析入库时 warning恢复判断
This commit is contained in:
fangshunjian
2019-01-17 11:52:24 +06:00
parent 3013ef7484
commit 1eacc059de
11 changed files with 317 additions and 89 deletions

View File

@@ -1,36 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_45"/>
<classpathentry kind="lib" path="lib/commons-beanutils-1.7.jar"/>
<classpathentry kind="lib" path="lib/commons-collections.jar"/>
<classpathentry kind="lib" path="lib/commons-io.jar"/>
<classpathentry kind="lib" path="lib/commons-lang.jar"/>
<classpathentry kind="lib" path="lib/commons-logging.jar"/>
<classpathentry kind="lib" path="lib/commons-net-ftp-2.0.jar"/>
<classpathentry kind="lib" path="lib/ezmorph-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/jpcap.jar"/>
<classpathentry kind="lib" path="lib/json-lib-2.2.2-jdk15.jar"/>
<classpathentry kind="lib" path="lib/junit.jar"/>
<classpathentry kind="lib" path="lib/ojdbc14.jar"/>
<classpathentry kind="lib" path="lib/mail.jar"/>
<classpathentry kind="lib" path="lib/ostermillerutils_1_07_00.jar"/>
<classpathentry kind="lib" path="lib/sigar.jar"/>
<classpathentry kind="lib" path="lib/ObjectSNMP.jar"/>
<classpathentry kind="lib" path="lib/fileComment.jar"/>
<classpathentry kind="lib" path="lib/snmp4j-2.0.3.jar"/>
<classpathentry kind="lib" path="lib/ant.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="lib/ganymed-ssh2-build210.jar"/>
<classpathentry kind="lib" path="lib/bonecp/bonecp-0.8.0-rc2.jar"/>
<classpathentry kind="lib" path="lib/bonecp/guava-14.0-rc3.jar"/>
<classpathentry kind="lib" path="lib/bonecp/slf4j-api-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/bonecp/slf4j-log4j12-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.0-bin.jar"/>
<classpathentry kind="lib" path="lib/tools-1.8.0.jar"/>
<classpathentry kind="lib" path="lib/jconsole-1.8.0.jar"/>
<classpathentry kind="lib" path="lib/druid-1.1.10.jar"/>
<classpathentry kind="lib" path="lib/FUtil-0.5.jar"/>
<classpathentry kind="lib" path="lib/netty-all-4.1.28.Final.jar" sourcepath="lib/netty-all-4.1.28.Final-sources.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.7.0_80"/>
<classpathentry kind="lib" path="lib/commons-beanutils-1.7.jar"/>
<classpathentry kind="lib" path="lib/commons-collections.jar"/>
<classpathentry kind="lib" path="lib/commons-io.jar"/>
<classpathentry kind="lib" path="lib/commons-lang.jar"/>
<classpathentry kind="lib" path="lib/commons-logging.jar"/>
<classpathentry kind="lib" path="lib/commons-net-ftp-2.0.jar"/>
<classpathentry kind="lib" path="lib/ezmorph-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/jpcap.jar"/>
<classpathentry kind="lib" path="lib/json-lib-2.2.2-jdk15.jar"/>
<classpathentry kind="lib" path="lib/junit.jar"/>
<classpathentry kind="lib" path="lib/ojdbc14.jar"/>
<classpathentry kind="lib" path="lib/mail.jar"/>
<classpathentry kind="lib" path="lib/ostermillerutils_1_07_00.jar"/>
<classpathentry kind="lib" path="lib/sigar.jar"/>
<classpathentry kind="lib" path="lib/ObjectSNMP.jar"/>
<classpathentry kind="lib" path="lib/fileComment.jar"/>
<classpathentry kind="lib" path="lib/snmp4j-2.0.3.jar"/>
<classpathentry kind="lib" path="lib/ant.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.15.jar"/>
<classpathentry kind="lib" path="lib/ganymed-ssh2-build210.jar"/>
<classpathentry kind="lib" path="lib/bonecp/bonecp-0.8.0-rc2.jar"/>
<classpathentry kind="lib" path="lib/bonecp/guava-14.0-rc3.jar"/>
<classpathentry kind="lib" path="lib/bonecp/slf4j-api-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/bonecp/slf4j-log4j12-1.6.1.jar"/>
<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.0-bin.jar"/>
<classpathentry kind="lib" path="lib/tools-1.8.0.jar"/>
<classpathentry kind="lib" path="lib/jconsole-1.8.0.jar"/>
<classpathentry kind="lib" path="lib/druid-1.1.10.jar" sourcepath="C:/Users/ThinkPad/.m2/repository/com/alibaba/druid/1.1.10/druid-1.1.10-sources.jar"/>
<classpathentry kind="lib" path="lib/FUtil-0.5.jar"/>
<classpathentry kind="lib" path="lib/netty-all-4.1.28.Final.jar" sourcepath="lib/netty-all-4.1.28.Final-sources.jar"/>
<classpathentry kind="lib" path="lib/nutz-1.r.66.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

BIN
lib/nutz-1.r.66.jar Normal file

Binary file not shown.

View File

@@ -3,15 +3,18 @@ package com.nms.server.bean;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import com.fang.U;
import com.nms.server.common.Common;
import com.nms.server.common.Config;
import com.nms.server.dao.OracleToMysql;
public class DetectInfo {
/**
* 数组大小
*/
public static final int DETEC_ARR_SIZE = 34;
public static final int SEQID = 0; //seqId
public static final int SETINFOID = 1; //监测设置ID
public static final int CHECKTYPE = 2; //监测类别
@@ -55,6 +58,10 @@ public class DetectInfo {
public static final int SHOWNUMLIST = 30;
public static final int PLEVELLIST = 31;
public static final int ALARMLIST = 32;
/**
* 告警恢复标识
*/
public static final int WARN_2_OK = 33;
/**
* detect_queue 的 key

View File

@@ -14,6 +14,7 @@ import java.sql.Statement;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
@@ -35,6 +36,8 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.nutz.json.Json;
import org.nutz.json.JsonFormat;
import org.snmp4j.Snmp;
import com.fang.U;
@@ -51,7 +54,6 @@ import com.nms.server.bean.SetInfo;
import com.nms.server.bean.SimpleNode;
import com.nms.server.bean.TableColumnsModel;
import com.nms.server.bean.TableModel;
import com.nms.server.dao.CommonDao;
import com.nms.server.thread.alarmData.AlarmDataResoveThread;
import com.nms.server.thread.detecData.NewDetecDataResoveThread;
import com.nms.server.thread.detectDataHandler.DataInsertManagerThread;
@@ -1538,11 +1540,10 @@ public class Common {
//获得当前的报警设置信息,与相应字段值比较
public static String[] getAlarmState(List<AlarmInfo> alarmInfos, String[] sysData) throws Exception{
String[] strs = null;
// logger.debug("!!you gaojing o "+(alarmInfos==null?null:alarmInfos.size()));
logger.debug("alarm Infos : "+(alarmInfos==null?null:Json.toJson(alarmInfos,JsonFormat.tidy())));
if(alarmInfos!=null){
strs = new String[]{"", "", ""};
for(AlarmInfo alarm : alarmInfos){
// logger.debug("!!you gaojing o "+alarm.getPoliceValue());
if(sysData.length>=alarm.getShowNum()){
if(sysData[alarm.getShowNum()-1]==null){
logger.error("Monitoring data is empty and can not do alarm verification");
@@ -2505,6 +2506,188 @@ public class Common {
}
/**
* 告警判断
*
* @return
*/
public static Object alarmJudgement(List<List<String>> data) {
if(data != null) {
List<String> pubData = data.get(0);
if(pubData.size() > 12){//旧格式 解析
logger.debug("旧格式数据,暂不实现");
}else if(pubData.size() <12){
logger.debug( "基本数据解析长度:"+pubData.size()+" 小于最小解析标准,不予解析;");
}else{//新格式 解析
/**
* 公共部分解析格式:
* seqId,
* 监测设置ID,
* 监测类别,
* 进程名称(监测类别设置名称),
* 监测服务启动时间,
* 检测时延(秒),
* 本次检测时间,
* 尝试次数,
* 下次计划监测时间,
* 执行状态是否成功是否正常,
* 状态信息(描述信息),
* 性能数据
**/
logger.debug(String.format("告警判断-新格式数据:%s", Arrays.toString(pubData.toArray())));
String seqId = pubData.get(0);//seqId
String setInfoId = pubData.get(1);//监测设置id
String checkType = pubData.get(2);// 监测类别
String detectIden = pubData.get(3);//进程名称(监测类别设置名称)
StringBuilder infoSb = new StringBuilder();
int detectStatus = Integer.valueOf(pubData.get(9));//状态
List<AlarmInfo> alarmInfoList = Common.getAlarmInfoMap().get(setInfoId);
if(data.size() < 3) {
return data;
}
for(int i = 2 ;i< data.size();i++) {
List<String> detailList = data.get(i);//每一行的监测数据
if(detailList != null && detailList.size() > 0) {
int maxAlarmLevel = 99;
String maxShowNum = "" ;
detailList.add(0, "");//告警序号
detailList.add(1, "");//告警级别
detailList.add(2, "");//告警值
if(alarmInfoList != null && alarmInfoList.size() > 0) {
for(AlarmInfo alarm : alarmInfoList) {
if (detailList.size() < alarm.getShowNum()) {// 得到的数据个数和告警列数比较
continue;
}
String value = detailList.get(alarm.getShowNum() -1+3);
boolean alarmFlag = false;
/**
* 过滤标识判断
* 1.指定了特定的标识:
* (1).当前标识非空:不在指定标识内,则不做告警判断;在,则做告警判断
* (2).当前标识为空:空不在指定标识内,不做告警判断
* 2.未指定特定的标识:所有标识都进行告警判断
*/
String marker = alarm.getMarker();
Integer markerShowNum = alarm.getMarkerFiledShowNum();
String markerCurVal = "";
//若未指定标识字段则从DC传递到NC的json字符串中markerShowNum的值为0
if(markerShowNum!=null && markerShowNum>0 && StringUtils.isNotBlank(marker)) {
markerCurVal = detailList.get(markerShowNum -1+3);//当前条详细监测数据的标识符
String sperator = Config.getString("alarm.set.marker.separator", "|");
if(StringUtils.isNotBlank(markerCurVal)) {
if(!(sperator+marker.trim()+sperator).toLowerCase().contains((sperator+markerCurVal.trim()+sperator).toLowerCase())) {//当前标识不在指定的标识里
continue;
}
}else {
continue;
}
}
if ("equals".equalsIgnoreCase(alarm.getPoliceSysmbols())) {//相同
if(value.equals(alarm.getPoliceValue())){
alarmFlag = true;
}
} else if ("include".equalsIgnoreCase(alarm.getPoliceSysmbols())) {//包含告警值内容
if(value.contains(alarm.getPoliceValue())){
alarmFlag = true;
}
} else if ("exclude".equalsIgnoreCase(alarm.getPoliceSysmbols())) {//不包含告警值内容
if(!value.contains(alarm.getPoliceValue())){
alarmFlag = true;
}
} else {
double result = Double.parseDouble(value) - Double.parseDouble(alarm.getPoliceValue());
if ((">".equals(alarm.getPoliceSysmbols()) && result > 0)
|| ("<".equals(alarm.getPoliceSysmbols()) && result < 0)
|| ("=".equals(alarm.getPoliceSysmbols()) && result == 0)
|| (">=".equals(alarm.getPoliceSysmbols()) && result >= 0)
|| ("<=".equals(alarm.getPoliceSysmbols()) && result <=0) ) {
alarmFlag = true;
}
}
String sysmbol = getAlarmSymbol(alarm.getPoliceSysmbols(), alarmFlag);
if(alarmFlag){
detectStatus = 0;
//性能信息
if(StringUtils.isNotBlank(markerCurVal)) {
infoSb.append("</br> [").append(markerCurVal).append("]");
}
infoSb.append(alarm.getFiledCommonts()).append(":")
.append(detailList.get(alarm.getShowNum()-1+3))
.append("(").append(alarm.getPoliceUnit()).append(") ")
.append(sysmbol).append("i18n_client.GetInfoRun.warningValue_n81i")
.append(alarm.getPoliceValue()).append("(").append(alarm.getPoliceUnit()).append(") ")
.append(" i18n_client.GetInfoRun.abnormal_n81i");
if (maxAlarmLevel > alarm.getPoliceLevel()) {// 保留本次最高告警级别,值越小级别越高
maxAlarmLevel = alarm.getPoliceLevel();
maxShowNum = alarm.getShowNum()+"";
}
detailList.set(0, maxShowNum);//告警序号
detailList.set(1, maxAlarmLevel+"");//告警级别
detailList.set(2, alarm.getPoliceValue());//告警值
}
}//for end
}
}
}
pubData.set(9, detectStatus+"");
if(infoSb.length()>0) {//状态信息
String perform = pubData.get(11);
if(StringUtils.isNotBlank(perform)) {
infoSb.insert(0, perform);
}else {
infoSb.delete(0, 5);
}
pubData.set(10, infoSb.toString());
}
}
}
if(logger.isDebugEnabled()) {
logger.debug("告警判断-结果: " + Json.toJson(data, JsonFormat.tidy()));
}
return data;
}
public static String getAlarmSymbol(String oldSymbol, boolean alarmFlag){
String symbol = "";
if(alarmFlag){
if(">".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.gt_n81i";
}else if(">=".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.out_n81i";
}else if("<".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.lt_n81i";
}else if("<=".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.in_n81i";
}else if("=".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.eq_n81i";
}else{
symbol = oldSymbol;
}
}else{
if(">".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.in_n81i";
}else if(">=".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.lt_n81i";
}else if("<".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.out_n81i";
}else if("<=".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.gt_n81i";
}else if("=".equals(oldSymbol)){
symbol = "i18n_client.GetInfoRun.notEquels_n81i";
}else if("equals".equalsIgnoreCase(oldSymbol)){
symbol = "not equals";
}else if("include".equalsIgnoreCase(oldSymbol)){
symbol = "exclude";
}else if("exclude".equalsIgnoreCase(oldSymbol)){
symbol = "include";
}
}
return symbol;
}
public static void main(String [] args){

View File

@@ -397,7 +397,7 @@ public class DataResolveThread implements Runnable{
delyFlag = false;
}
Calendar arriveTime = Calendar.getInstance();
detectInfo = new Object[33];
detectInfo = new Object[DetectInfo.DETEC_ARR_SIZE];
//detectInfo[DetectInfo.null] = (CSVUtils.csvBytesPrinter1(strsList, Constants.COMMON_TEXT_CODING));
detectInfo[DetectInfo.SEQID] = (seqId);
detectInfo[DetectInfo.SETINFOID] = (setInfoId);
@@ -859,7 +859,7 @@ public class DataResolveThread implements Runnable{
//公共信息集合
Calendar arriveTime = Calendar.getInstance();
detectInfo = new Object[33];
detectInfo = new Object[DetectInfo.DETEC_ARR_SIZE];
//detectInfo[DetectInfo.null] = (CSVUtils.csvBytesPrinter1(strsList, Constants.COMMON_TEXT_CODING));
detectInfo[DetectInfo.SEQID] = (seqId);
detectInfo[DetectInfo.SETINFOID] = (setInfoId);

View File

@@ -108,7 +108,7 @@ public class DetectInfoInsertThread implements Runnable {
} catch (Exception e) {
logger.error("error", e);
}finally {
db.closeQuiet(infoStmt,warnStmt,emailStmt,statusChangeStmt,conn,infoNewInsertStmt,infoNewUpdateStmt);
db.closeQuiet(infoStmt,warnStmt,emailStmt,statusChangeStmt,conn,infoNewInsertStmt,infoNewUpdateStmt,warnUpdateStmt);
infoStmt = null;
warnStmt = null;
emailStmt = null;
@@ -118,6 +118,7 @@ public class DetectInfoInsertThread implements Runnable {
conn = null;
infoNewInsertStmt=null;
infoNewUpdateStmt=null;
warnUpdateStmt = null;
}
sw.end();
logger.info("监测数据info信息解析入库耗时 " + U.StopWatch.toString(sw.total()) + " ,共 " + count + "");
@@ -223,8 +224,12 @@ public class DetectInfoInsertThread implements Runnable {
// 入库
saveToNew(insertDataTonew, 0);
sw.tag("insertDataTonew");
logger.debug("耗时统计: insertDataTonew " + sw.toString(sw.between("insertDataTonew",l + "e")));
saveToNew(updateDataTonew, 1);
logger.info("info_new table update success! data size : "+(insertDataTonew.size()+updateDataTonew.size()));
sw.tag("updateDataTonew");
logger.debug("耗时统计: updateDataTonew " + sw.toString(sw.between("updateDataTonew","insertDataTonew")));
saveInfo(params);
sw.tag(l + "sa");
logger.debug("入库完成,耗时:" + U.StopWatch.toString(sw.between(l + "sa", l + "e")) );
@@ -243,10 +248,13 @@ public class DetectInfoInsertThread implements Runnable {
*/
private void saveInfo(List<Object[]> infoList) throws SQLException {
Object[] temInfo = null;
StopWatch sw = new StopWatch();
sw.tag("start");
try {
int infoCount = infoList.size();
int warnCount = 0;
int emailCount = 0;
int warnRecoveryCount = 0;
Map<String,Long> statusChangeMap = U.newHashMap();
boolean emailFlag = Constants.flag_email == 1;// 是否启用 email
logger.info(emailFlag?"邮件功能開啟" : "邮件功能已关闭");
@@ -388,17 +396,39 @@ public class DetectInfoInsertThread implements Runnable {
}
}
}
/**
* 状态恢复
*/
if(temInfo[DetectInfo.WARN_2_OK] != null && temInfo[DetectInfo.WARN_2_OK].equals(1)) {
Object[] params = new Object[] {temInfo[DetectInfo.SEQID],temInfo[DetectInfo.SETINFOID]};
addRecordToStatement(warnUpdateStmt, params);
warnRecoveryCount ++;
}
ite.remove();
}
sw.tag("while");
logger.debug("耗时统计: add statement " + sw.toString(sw.between("while","start")));
if(infoCount >0){
infoStmt.executeBatch();
}
sw.tag("info");
logger.debug("耗时统计: info executeBatch " + sw.toString(sw.between("info","while")));
if(warnCount >0){
warnStmt.executeBatch();
}
sw.tag("warn");
logger.debug("耗时统计: warnStmt executeBatch " + sw.toString(sw.between("warn","info")));
if(emailCount >0){
emailStmt.executeBatch();
}
sw.tag("email");
logger.debug("耗时统计: email executeBatch " + sw.toString(sw.between("email","warn")));
if(statusChangeMap.size() > 0){
if(statusChangeStmt == null){
@@ -412,10 +442,19 @@ public class DetectInfoInsertThread implements Runnable {
}
statusChangeStmt.executeBatch();
}
warnUpdateStmt.executeBatch();//update warning
sw.tag("status");
logger.debug("耗时统计: status executeBatch " + sw.toString(sw.between("status","email")));
if(warnRecoveryCount > 0) {
warnUpdateStmt.executeBatch();
}
//warnUpdateStmt.executeBatch();//update warning
sw.tag("warnUpdate");
logger.debug("耗时统计: warnUpdate executeBatch " + sw.toString(sw.between("warnUpdate","status")));
conn.commit();
sw.tag("commit");
logger.debug("耗时统计: commit executeBatch " + sw.toString(sw.between("commit","warnUpdate")));
logger.info("批量保存info " + infoCount + " , warn : " + warnCount + " ,email : "+ emailCount);
} catch (Exception e) {
logger.error("info save error ,temInfo : "+Arrays.toString(temInfo) ,e);
@@ -433,6 +472,9 @@ public class DetectInfoInsertThread implements Runnable {
if(statusChangeStmt != null){
statusChangeStmt.clearBatch();
}
if(warnUpdateStmt != null) {
warnUpdateStmt.clearBatch();
}
}
}
@@ -582,12 +624,12 @@ public class DetectInfoInsertThread implements Runnable {
/* 判断状态变更 */
stateChange(newDetecInfo, oldDetecInfo);
} else {// 监测时间小于数据库中监测数据的时间,说明当前需要入库的监测为延迟数据
if (state != 1) {// 延迟数据监测状态没有成功,数据库入库的是正常数据,补录一条报警信息
/*if (state != 1) {// 延迟数据监测状态没有成功,数据库入库的是正常数据,补录一条报警信息
if ((Integer) newDetecInfo[DetectInfo.STATE] == 1
&& (Integer) oldDetecInfo[DetectInfo.PLEVEL] == 99) {
newDetecInfo[DetectInfo.APPENDWARNINGINFO] = oldDetecInfo;
}
}
}*/
}
} else {// 大于两条数据时,排序之后判断数据库的数据是否为最接近的时间数据
// 未入库的数据排序
@@ -791,6 +833,7 @@ public class DetectInfoInsertThread implements Runnable {
if (checkType.equalsIgnoreCase(Constants.DETEC_NMSC_STR)) {
newDetecInfo[DetectInfo.STATUSCHANGTIME] = (checkTime);
}
newDetecInfo[DetectInfo.WARN_2_OK] = 1;//告警恢复正常
// //update warning table
// collectWarnUpdateInfo(newDetecInfo);
}
@@ -902,15 +945,14 @@ public class DetectInfoInsertThread implements Runnable {
if((Long)newDeteInfo[DetectInfo.CHECKTIME]>(Long)oldDetecInfo[DetectInfo.CHECKTIME]){
newDataList.add(newDeteInfo);
}
if((Integer)newDeteInfo[DetectInfo.STATE]==1){
/*if((Integer)newDeteInfo[DetectInfo.STATE]==1 && (Integer)oldDetecInfo[DetectInfo.STATE] != 1){//状态恢复正常
Object[] params={newDeteInfo[DetectInfo.SEQID],newDeteInfo[DetectInfo.SETINFOID]};
try {
addRecordToStatement(warnUpdateStmt, params);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}*/
}
private void saveToNew(List<Object[]> dataList,int flag){
@@ -986,18 +1028,13 @@ public class DetectInfoInsertThread implements Runnable {
infoNewUpdateStmt.executeBatch();
logger.info("info_new table update success! size : "+ dataList.size());
} catch (SQLException e) {
logger.error("update info to info_new table error"+e.getMessage());
logger.error("update info to info_new table error",e);
}
}
dataList.clear();
}
}
private void collectWarnUpdateInfo(Object[] newDetectInfo){
Object[] params={newDetectInfo[DetectInfo.SEQID],newDetectInfo[DetectInfo.SETINFOID]};
try {
addRecordToStatement(warnUpdateStmt, params);
} catch (SQLException e) {
e.printStackTrace();
}
}
}

View File

@@ -135,7 +135,7 @@ public class MonitorManagerThread implements Runnable{
//NMSC
Common.runMonitorRunnable(new SystemDateThread(name,model.getNodeIp(),socketPort,setInfo,startTime));
}else{ //非服务器节点
logger.info("监测目标:"+model.getNodeIp()+" 是非服务器节点,不进行"+Constants.DETEC_SYSTEMDATE_STR+"监测");
logger.debug("监测目标:"+model.getNodeIp()+" 是非服务器节点,不进行"+Constants.DETEC_SYSTEMDATE_STR+"监测");
}
}
}
@@ -151,7 +151,7 @@ public class MonitorManagerThread implements Runnable{
//交换机类型节点监测 SNMP校验监测
Common.runMonitorRunnable(new SwitchPortThread(name,model.getNodeIp(),setInfo,startTime));
}else{ //计算机类型校验
logger.info("监测目标:"+model.getNodeIp()+" 不是交换机,无法进行监测");
logger.debug("监测目标:"+model.getNodeIp()+" 不是交换机,无法进行监测");
}
}
}
@@ -162,7 +162,7 @@ public class MonitorManagerThread implements Runnable{
if(model.getNodeType() != null && model.getNodeType().longValue() != 0l){ //非服务器节点
Common.runMonitorRunnable(new SNMP4JThread(name,model.getNodeIp(),setInfo,startTime));
}else{ //计算机类型校验
logger.info("监测目标:"+model.getNodeIp()+" 是服务器节点,不进行该类监测");
logger.debug("监测目标:"+model.getNodeIp()+" 是服务器节点,不进行该类监测");
}
}
}

View File

@@ -119,14 +119,11 @@ public class SNMP4JThread implements Runnable{
nextTime.add(Calendar.MINUTE, info.getCheckGap().intValue());
pubDatas.add(nextTime.getTimeInMillis() + "");// 下次计划监测时间,
//- DetecDatas 拼写 Body
List<List<String>> pubDatasList = new ArrayList<List<String>>();
if(state != -1){
pubDatasList = datasBody(retries,stateInfo.toString(),state,snmpDatasList);
pubDatasList = snmpDatasList;//datasBody(retries,stateInfo.toString(),state,snmpDatasList);
}
pubDatas.add(state+""); // 执行状态
pubDatas.add(stateInfo.toString()); // 状态信息(描述信息),
pubDatas.add(""); // 性能数据,
@@ -139,6 +136,7 @@ public class SNMP4JThread implements Runnable{
//- 存入缓存
if(pubDatasList!=null && pubDatasList.size()>0){
try {
Common.alarmJudgement(pubDatasList);//告警判断
Common.addDeteData(CSVUtils.csvFilePrinter(pubDatasList, Constants.COMMON_TEXT_CODING));
logger.debug("监测数据以 CSV格式 保存完成");
} catch (Exception e) {

View File

@@ -17,6 +17,8 @@ import java.util.concurrent.CountDownLatch;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.nutz.json.Json;
import org.nutz.json.JsonFormat;
import org.snmp4j.mp.SnmpConstants;
import com.nms.server.bean.SetInfo;
@@ -518,8 +520,8 @@ public class SwitchPortThread implements Runnable{
//- DetecDatas 拼写 Body
List<List<String>> pubDatasList = new ArrayList<List<String>>();
if(state != -1){//执行成功了
pubDatasList = datasBody(retries,stateInfo.toString(),state,snmpDatasList2);
pubDatasList =snmpDatasList2;//
//datasBody(retries,stateInfo.toString(),state,snmpDatasList2);
//64位获取失败告警
if(!dataFlag64){
state=0;
@@ -539,6 +541,8 @@ public class SwitchPortThread implements Runnable{
//- 存入缓存
if(pubDatasList!=null && pubDatasList.size()>0){
try {
logger.debug("switchDetection : " + Json.toJson(pubDatasList,JsonFormat.tidy()));
Common.alarmJudgement(pubDatasList);//告警判断
//添加监测数据到缓存,等待监测数据解析线程的解析入库
Common.addDeteData(CSVUtils.csvFilePrinter(pubDatasList, Constants.COMMON_TEXT_CODING));
logger.debug("监测数据以 CSV格式 保存完成");
@@ -949,22 +953,13 @@ public class SwitchPortThread implements Runnable{
//拼写监测信息的详细信息对于switchport就是每个端口的监测信息
private List<List<String>> datasBody(int times,String stateInfo,int state,List<List<String>> snmpDatas2)throws Exception{
// List<List<String>> pubDatasList = new LinkedList<List<String>>();
logger.debug("监测数据主体拼写 state "+state+" size"+(snmpDatas2==null ? -1 :snmpDatas2.size()));
if(snmpDatas2!=null && snmpDatas2.size()!=0){
for (List<String> snmpDatas : snmpDatas2) {
// List<String> pubDatas0 = new LinkedList<String>();
// 执行状态是否成功是否正常, 第三方脚本监测任务执行结果(用于报警 -1执行失败 0不正常1正常-1时可保留后续数据为空但是数据个数需要对应
for (List<String> snmpDatas : snmpDatas2) {
// -- 执行状态是否成功,记录的状态是否正常(用于报警),
String [] datas0 = new String[0];
datas0 = snmpDatas.toArray(datas0);
// logger.debug("snmpDatas>>>> "+Arrays.toString(snmpDatas.toArray(datas0)));
// logger.debug("Common.getAlarmInfoMap()>>>> "+Common.getAlarmInfoMap().size());
String[] pArray = Common.getAlarmState(Common.getAlarmInfoMap().get(info.getId()+""), datas0);
// logger.debug("pArray>>>> "+Arrays.toString(pArray));
if (pArray == null || pArray.length==0) {//无告警信息
snmpDatas.add(0, "");//插入后,列表之后的信息顺序往后移
snmpDatas.add(1, "");
@@ -975,13 +970,19 @@ public class SwitchPortThread implements Runnable{
snmpDatas.add(1, pArray == null ? "" : pArray[1]);
snmpDatas.add(2, pArray == null ? "" : pArray[2]);
stateInfo+=Common.getStateInfo(info.getCheckTypeName(),Common.getAlarmInfoMap().get(info.getId()+""), datas0);
logger.debug("swtich stateInfo : " + stateInfo);
}
// logger.debug("pArray>>>> "+Arrays.toString(pubDatas0.toArray()));
}
if(logger.isDebugEnabled()) {
logger.debug(String.format("snmpData : %s , stateInfo : %s ", Json.toJson(snmpDatas,JsonFormat.tidy()),Json.toJson(stateInfo,JsonFormat.tidy())));
}
}
}
return snmpDatas2;
}
/*
class Switch{

View File

@@ -935,7 +935,7 @@ public class ConnectionOracle {
fields.add(idName);
fields.add(pidName);
Set<String> temp = new HashSet<String>();
ArrayList<Map<String,String>> list = this.dbSelect(sql, fields);
ArrayList<Map<String,String>> list = this.dbSelect(sb.toString(), fields);
if(list != null){
for(Map<String,String> map : list){
String id = map.get(idName);

View File

@@ -411,14 +411,15 @@ public class SNMP4JUtils {
OID oid = vb.getOid();
String index = oid.last()+"";//索引
String oidStr = oid.toString();
if (rootOid.equals("1.3.6.1.4.1.5000000.1.4.1.1.3")) {
logger.info("对5000000.1.4.1.1.3进行特殊处理");
if (rootOid.startsWith("1.3.6.1.4.1.5000000.1.4.1.1")) {
logger.debug("对5000000.1.4.1.1进行特殊处理");
String[] p = oidStr.substring(rootOid.length()).split("[.]");
if (p.length == 3) {
oidStr = rootOid + "." + p[1];
if (p.length == 4) {
oidStr = rootOid + "." + p[1]+"."+p[3];
}
}
oidStr = oidStr.substring(0, oidStr.lastIndexOf("."));
System.out.println(oid.toString() + " --> " + oidStr);
if(oidModel.contains(oidStr)){
Map<String, String> map = mapInstance.get(index);
if(map == null){
@@ -532,8 +533,8 @@ public class SNMP4JUtils {
oidModel.add("1.3.6.1.4.1.1000.4.3.1.10");*/
oidModel.add("1.3.6.1.4.1.5000000.1.4.1.1.3");
//String oid = "1.3.6.1.2.1.1";
String oid = "1.3.6.1.4.1.5000000.1.4.1.1.3";
String host = "10.3.2.9";
String oid = "1.3.6.1.4.1.5000000.1.4.1.1";
String host = "10.4.2.5";
String port = "161";
String community = "public";
int retries = 3;