diff options
| author | tanghao <default@DESKTOP-7FEGRP2> | 2020-03-31 11:37:01 +0800 |
|---|---|---|
| committer | tanghao <default@DESKTOP-7FEGRP2> | 2020-03-31 11:37:01 +0800 |
| commit | c085d6c5ddc0f512e01cc7488e30289288736fac (patch) | |
| tree | c83b23d2355046b7a6afdc34188c8bdef97a09d0 | |
| parent | 4a990e63bdeb18e5d399a6f55dd9bd10f6e34a42 (diff) | |
feat: module新增支持http snmp区分
| -rw-r--r-- | src/main/java/com/nis/entity/Module.java | 34 | ||||
| -rw-r--r-- | src/main/java/com/nis/entity/ModuleTypeEnum.java | 14 | ||||
| -rw-r--r-- | src/main/java/com/nis/job/ConfagentJob.java | 61 | ||||
| -rw-r--r-- | src/main/java/com/nis/util/YamlUtil.java | 18 | ||||
| -rw-r--r-- | src/main/resources/application.yml | 7 | ||||
| -rw-r--r-- | src/main/resources/mapper/EndpointDao.xml | 6 |
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, |
