summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortanghao <default@DESKTOP-7FEGRP2>2020-03-31 11:37:01 +0800
committertanghao <default@DESKTOP-7FEGRP2>2020-03-31 11:37:01 +0800
commitc085d6c5ddc0f512e01cc7488e30289288736fac (patch)
treec83b23d2355046b7a6afdc34188c8bdef97a09d0
parent4a990e63bdeb18e5d399a6f55dd9bd10f6e34a42 (diff)
feat: module新增支持http snmp区分
-rw-r--r--src/main/java/com/nis/entity/Module.java34
-rw-r--r--src/main/java/com/nis/entity/ModuleTypeEnum.java14
-rw-r--r--src/main/java/com/nis/job/ConfagentJob.java61
-rw-r--r--src/main/java/com/nis/util/YamlUtil.java18
-rw-r--r--src/main/resources/application.yml7
-rw-r--r--src/main/resources/mapper/EndpointDao.xml6
6 files changed, 117 insertions, 23 deletions
diff --git a/src/main/java/com/nis/entity/Module.java b/src/main/java/com/nis/entity/Module.java
index e2eb753..f617fa2 100644
--- a/src/main/java/com/nis/entity/Module.java
+++ b/src/main/java/com/nis/entity/Module.java
@@ -11,7 +11,11 @@ public class Module implements Serializable{
private String param;
private String path;
private String remark;
- private Boolean buildIn;
+ private Integer buildIn;
+ private String seq;
+ private String snmpParam;
+ private String snmpYml;
+ private String type;
public Integer getId() {
return id;
}
@@ -54,10 +58,34 @@ public class Module implements Serializable{
public void setRemark(String remark) {
this.remark = remark;
}
- public Boolean getBuildIn() {
+ public Integer getBuildIn() {
return buildIn;
}
- public void setBuildIn(Boolean buildIn) {
+ public void setBuildIn(Integer buildIn) {
this.buildIn = buildIn;
}
+ public String getSeq() {
+ return seq;
+ }
+ public void setSeq(String seq) {
+ this.seq = seq;
+ }
+ public String getSnmpParam() {
+ return snmpParam;
+ }
+ public void setSnmpParam(String snmpParam) {
+ this.snmpParam = snmpParam;
+ }
+ public String getSnmpYml() {
+ return snmpYml;
+ }
+ public void setSnmpYml(String snmpYml) {
+ this.snmpYml = snmpYml;
+ }
+ public String getType() {
+ return type;
+ }
+ public void setType(String type) {
+ this.type = type;
+ }
}
diff --git a/src/main/java/com/nis/entity/ModuleTypeEnum.java b/src/main/java/com/nis/entity/ModuleTypeEnum.java
new file mode 100644
index 0000000..3709784
--- /dev/null
+++ b/src/main/java/com/nis/entity/ModuleTypeEnum.java
@@ -0,0 +1,14 @@
+package com.nis.entity;
+
+public enum ModuleTypeEnum {
+ HTTP("http"),
+ SNMP("snmp");
+
+ private final String paramkey;
+ private ModuleTypeEnum(String paramkey) {
+ this.paramkey = paramkey;
+ }
+ public String getValue() {
+ return paramkey;
+ }
+}
diff --git a/src/main/java/com/nis/job/ConfagentJob.java b/src/main/java/com/nis/job/ConfagentJob.java
index 8fab087..6cd7986 100644
--- a/src/main/java/com/nis/job/ConfagentJob.java
+++ b/src/main/java/com/nis/job/ConfagentJob.java
@@ -7,6 +7,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
@@ -23,6 +24,8 @@ import com.alibaba.fastjson.JSON;
import com.nis.entity.AlertManagerEnum;
import com.nis.entity.AlertRule;
import com.nis.entity.Endpoint;
+import com.nis.entity.Module;
+import com.nis.entity.ModuleTypeEnum;
import com.nis.entity.Promserver;
import com.nis.entity.SysConfig;
import com.nis.service.AlertRuleService;
@@ -65,6 +68,8 @@ public class ConfagentJob extends QuartzJobBean {
private String prometheusPort;
@Value("${confagent.metricsPath}")
private String metricsPath;
+ @Value("${confagent.snmpYmlPath}")
+ private String snmpYmlPath;
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
@@ -153,14 +158,18 @@ public class ConfagentJob extends QuartzJobBean {
}
}
List result = null;
+ List<String> snmpYmls= new ArrayList<String>();
//两者模运算均匀分配
if(index!=null && !endpointInfos.isEmpty()) {
result=new ArrayList();
for(int m=0;m<endpointInfos.size();m++) {
if(m%subInfos.size()==index) {
+ //根据module类型来判断snmp处理
+ Module module = endpointInfos.get(m).getModule();
+ String type = module.getType();
subs.add(endpointInfos.get(m));
LinkedHashMap job = new LinkedHashMap();
-// job.put("job_name", endpointInfos.get(m).getModule().getName()+endpointInfos.get(m).getHost());
+// job.put("job_name", endpointInfos.get(m).getModule().getName()+endpointInfos.get(m).getHost());
job.put("job_name", "ed_"+endpointInfos.get(m).getId());
job.put("metrics_path", endpointInfos.get(m).getPath());
List list=new ArrayList();
@@ -173,32 +182,50 @@ public class ConfagentJob extends QuartzJobBean {
job3.put("project", endpointInfos.get(m).getProject().getName());
job3.put("asset",endpointInfos.get(m).getAsset().getHost());
job3.put("module",endpointInfos.get(m).getModule().getName());
-// job3.put("job", "ed_"+endpointInfos.get(m).getId());
-// job3.put("host", endpointInfos.get(m).getAsset().getHost());
+// job3.put("job", "ed_"+endpointInfos.get(m).getId());
+// job3.put("host", endpointInfos.get(m).getAsset().getHost());
job2.put("labels", job3);
list2.add(job2);
job.put("static_configs", list2);
- //处理endpoint中param字段json串 请求参数
- String param = endpointInfos.get(m).getParam();
- Map params=null;
- if(param!=null && !param.isEmpty()) {
- params=new HashMap();
- Map<String,String> json = (Map) JSON.parse(param);
- for(Map.Entry<String, String> a:json.entrySet()){
- List paramList =new ArrayList();
- paramList.add(a.getValue());
- params.put(a.getKey(),paramList);
+ if(StringUtils.isNotBlank(type)&&type.equals(ModuleTypeEnum.HTTP.getValue())) {
+ //处理endpoint中param字段json串 请求参数
+ String param = endpointInfos.get(m).getParam();
+ Map params=null;
+ if(param!=null && !param.isEmpty()) {
+ params=new HashMap();
+ Map<String,String> json = (Map) JSON.parse(param);
+ for(Map.Entry<String, String> a:json.entrySet()){
+ List paramList =new ArrayList();
+ paramList.add(a.getValue());
+ params.put(a.getKey(),paramList);
+ }
}
- }
- if(params!=null) {
- job.put("params",params);
+ if(params!=null) {
+ job.put("params",params);
+ }
+ }else if(StringUtils.isNotBlank(type)&&type.equals(ModuleTypeEnum.SNMP.getValue())) {
+ Map params=new HashMap();
+ params.put("target",endpointInfos.get(m).getHost()+":"+endpointInfos.get(m).getPort());
+ params.put("module", module.getName());
+ job.put("params", params);
+
+ String snmpYml = module.getSnmpYml();
+ snmpYmls.add(snmpYml);
}
result.add(job);
}
}
+ if(snmpYmls.size()>0) {
+ try {
+ // 同步snmp.yml文件内容 同时重启snmp exporter
+ YamlUtil.snmpYmlHandle(snmpYmls,snmpYmlPath);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
//将promserver和处理的endpoint对应关系储存到redis
- savePromeserverInfoToRedis(promserver,subs);
+// savePromeserverInfoToRedis(promserver,subs);
}
logger.info("subHandle : result : {} ",JSON.toJSON(result));
return result;
diff --git a/src/main/java/com/nis/util/YamlUtil.java b/src/main/java/com/nis/util/YamlUtil.java
index 8644354..cbfaa87 100644
--- a/src/main/java/com/nis/util/YamlUtil.java
+++ b/src/main/java/com/nis/util/YamlUtil.java
@@ -6,6 +6,7 @@ import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -23,6 +24,23 @@ public class YamlUtil {
}
@SuppressWarnings("unchecked")
+ public static boolean snmpYmlHandle(List<String> param,String ymlPath) throws Exception {
+ boolean flag=false;
+ if(!param.isEmpty() && ymlPath != null && ymlPath.length() != 0) {
+ File file = new File(ymlPath);
+ OutputStream out = new FileOutputStream(file);
+ OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
+ for(String s : param) {
+ y.dump(y.load(s),osw);
+ }
+// RuntimeUtil.run(null, null, new String[]{"kill","-hup","`ps -ef |grep prometheus|grep -v grep|awk \'{print $2}\'`"});
+ RuntimeUtil.run(null, null, new String[]{"/bin/sh", "-c","ps -ef |grep snmp_exporter|grep -v grep|awk \'{print $2}\'|xargs kill -hup"});
+ flag = true;
+ }
+ return flag;
+ }
+
+ @SuppressWarnings("unchecked")
public static boolean subYmlHandle(List<Object> param,String ymlPath) throws Exception {
boolean flag=false;
if(!param.isEmpty() && ymlPath != null && ymlPath.length() != 0) {
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 054238d..af16249 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -4,7 +4,7 @@ server:
uri-encoding: UTF-8
max-threads: 1000
min-spare-threads: 30
- port: 8080
+ port: 8989
servlet:
context-path: /nz-confagent
@@ -21,7 +21,7 @@ spring:
enabled: true
redis:
database: 0
- host: localhost
+ host: 192.168.41.69
port: 6379
password: # 密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
@@ -37,9 +37,10 @@ spring:
confagent:
- ipaddr: 192.168.40.247
+ ipaddr: 192.168.40.126
ymlPath: F:/prometheus.yml
ruleYmlPath: F:/rule.yml
+ snmpYmlPath: F:/snmp.yml
prometheusPort: 9090
## job config
jobCron: 0/15 * * * * ?
diff --git a/src/main/resources/mapper/EndpointDao.xml b/src/main/resources/mapper/EndpointDao.xml
index ef31dd8..53cc2dd 100644
--- a/src/main/resources/mapper/EndpointDao.xml
+++ b/src/main/resources/mapper/EndpointDao.xml
@@ -18,6 +18,9 @@
<result column="port" property="port"/>
<result column="param" property="param"/>
<result column="path" property="path"/>
+ <result column="type" property="type"/>
+ <result column="snmp_param" property="snmpParam"/>
+ <result column="snmp_yml" property="snmpYml"/>
</association>
<association columnPrefix="a_" property="asset" javaType="com.nis.entity.Asset">
@@ -69,6 +72,9 @@
m.param AS m_param,
m.path AS m_path,
m.remark AS m_remark,
+ m.type AS m_type,
+ m.snmp_param AS m_snmp_param,
+ m.snmp_yml AS m_snmp_yml,
a.id AS a_id,
a.sn AS a_sn,
a.model_id AS a_model_id,