diff options
| author | shizhendong <[email protected]> | 2020-11-22 10:09:25 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2020-11-22 10:09:25 +0800 |
| commit | 92a5f46d735fb42b08ee63b8a9e86ff3fb8aec3d (patch) | |
| tree | f9f850d873df54db7021e4fac6b01e7fe2a41c9a | |
| parent | bc0b3af391777f7a0563c22141cdaa3f1a6bd10a (diff) | |
fix: confagent 修改global alert rule配置,根据 id 排序查询prom_server表,在定时任务中加入判断 当前 confagent是否为第一个可用 global prometheus,如何是加入 alert rule 配置项,不是则不再加入 alert rule 配置
| -rw-r--r-- | src/main/java/com/nis/dao/PromserverDao.java | 2 | ||||
| -rw-r--r-- | src/main/java/com/nis/job/ConfagentJob.java | 192 | ||||
| -rw-r--r-- | src/main/java/com/nis/service/PromserverService.java | 2 | ||||
| -rw-r--r-- | src/main/java/com/nis/service/impl/PromserverServiceImpl.java | 15 | ||||
| -rw-r--r-- | src/main/resources/mapper/PromserverDao.xml | 12 |
5 files changed, 127 insertions, 96 deletions
diff --git a/src/main/java/com/nis/dao/PromserverDao.java b/src/main/java/com/nis/dao/PromserverDao.java index 0473de2..640dd4d 100644 --- a/src/main/java/com/nis/dao/PromserverDao.java +++ b/src/main/java/com/nis/dao/PromserverDao.java @@ -19,4 +19,6 @@ public interface PromserverDao { List<Promserver> selectSubInfosByType(Integer type);
List<Promserver> queryPromServerInfosAndIdcName();
+
+ List<Promserver> queryHealthyGlobalPrometheus();
}
diff --git a/src/main/java/com/nis/job/ConfagentJob.java b/src/main/java/com/nis/job/ConfagentJob.java index 51dcb0c..87e9517 100644 --- a/src/main/java/com/nis/job/ConfagentJob.java +++ b/src/main/java/com/nis/job/ConfagentJob.java @@ -438,11 +438,6 @@ public class ConfagentJob extends QuartzJobBean { } logger.info("centerHandle : There are all subInfos : {}",JSON.toJSON(subInfos)); - //配置rule相关文件信息 目前固定为rule.yml - List ruleFile =new ArrayList(); - ruleFile.add("rule.yml"); - result.put("rule_files", ruleFile); - // 配置组装联邦信息开始 List l = new ArrayList(); Map m1 = new LinkedHashMap(); @@ -650,102 +645,107 @@ public class ConfagentJob extends QuartzJobBean { logger.debug("centerHandle : scrape_configs Info : {}",JSON.toJSON(l)); //配置联邦信息结束 - - //配置rule 查询所有rule配置信息 - List<AlertRule> alertRules = alertRuleService.queryList(); - - Map toCheck = new HashMap(); - - List groups = new ArrayList(); - - Map group = new HashMap(); - groups.add(group); - - List rules = new ArrayList(); - group.put("name", "alertRule"); - group.put("rules", rules); + boolean enableRule = promserverService.checkEnableRule(this.ipaddr, this.promServerPort); + if (enableRule) { + logger.info("当前 prometheus 支持告警:" + ipaddr + ":" + promServerPort); + //配置rule相关文件信息 目前固定为rule.yml + List ruleFile = new ArrayList(); + ruleFile.add("rule.yml"); + result.put("rule_files", ruleFile); + + //配置rule 查询所有rule配置信息 + List<AlertRule> alertRules = alertRuleService.queryList(); + + List groups = new ArrayList(); + + Map group = new HashMap(); + groups.add(group); + + List rules = new ArrayList(); + group.put("name", "alertRule"); + group.put("rules", rules); + + //获取配置文件判断是否需要添加endpoint state告警 + String endpointAlertPush = sysConfigService.queryValueByParamkey(Constant.ENDPOINT_ALERT_PUSH); + if (ObjectUtils.isNotEmpty(endpointAlertPush) && endpointAlertPush.equals("1")) { + String endpointAlert = sysConfigService.queryValueByParamkey(Constant.ENDPOINT_ALERT_RULE); + Map endpointAlertMap = (Map) JSON.parse(endpointAlert); + String alertName = (String) endpointAlertMap.get("alertName"); + String forTime = (String) endpointAlertMap.get("for"); + String expr = (String) endpointAlertMap.get("expr"); + Map rule = new HashMap(); + Map annotations = new HashMap(); + annotations.put("summary", "{{$value}}"); + rule.put("alert", alertName); + rule.put("expr", expr); + rule.put("for", forTime); + rule.put("annotations", annotations); + rules.add(rule); + } - //获取配置文件判断是否需要添加endpoint state告警 - String endpointAlertPush = sysConfigService.queryValueByParamkey(Constant.ENDPOINT_ALERT_PUSH); - if(ObjectUtils.isNotEmpty(endpointAlertPush)&&endpointAlertPush.equals("1")) { - String endpointAlert = sysConfigService.queryValueByParamkey(Constant.ENDPOINT_ALERT_RULE); - Map endpointAlertMap = (Map) JSON.parse(endpointAlert); - String alertName = (String) endpointAlertMap.get("alertName"); - String forTime = (String) endpointAlertMap.get("for"); - String expr = (String) endpointAlertMap.get("expr"); - Map rule =new HashMap(); - Map annotations = new HashMap(); - annotations.put("summary", "{{$value}}"); - rule.put("alert", alertName); - rule.put("expr", expr); - rule.put("for", forTime); - rule.put("annotations", annotations); - rules.add(rule); - } - - for(AlertRule alertRule : alertRules) { - Map labels = new HashMap(); - labels.put("severity", alertRule.getSeverity()); - Map annotations = new HashMap(); - annotations.put("summary", alertRule.getSummary()); - annotations.put("description", alertRule.getDescription()); - Map rule = new HashMap(); - rule.put("alert", alertRule.getId()); - rule.put("expr", "(" + alertRule.getExpr() + ")" + alertRule.getOperator() + alertRule.getThreshold()); - rule.put("for", alertRule.getLast() + "s"); - rule.put("labels", labels); - rule.put("annotations", annotations); - rules.add(rule); - } - result.put("groups", groups); - - logger.debug("centerHandle : alert rule Info : {}",JSON.toJSON(groups)); - - //配置alertManager - Map alertManager =new HashMap(); - List staticConfigList=new ArrayList(); - LinkedHashMap staticConfigs =new LinkedHashMap(); - staticConfigList.add(staticConfigs); - List staticConfig =new ArrayList(); - Map targets =new HashMap(); - List target =new ArrayList(); - List alertData =new ArrayList(); - if(!sysConfigs.isEmpty()) { - for(SysConfig sysconfig : sysConfigs) { - if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_API.getValue())) { - alertData.add(sysconfig.getParamValue()); - }else if(sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_PATH_PREFIX.getValue())){ - staticConfigs.put("path_prefix", sysconfig.getParamValue()); + for (AlertRule alertRule : alertRules) { + Map labels = new HashMap(); + labels.put("severity", alertRule.getSeverity()); + Map annotations = new HashMap(); + annotations.put("summary", alertRule.getSummary()); + annotations.put("description", alertRule.getDescription()); + Map rule = new HashMap(); + rule.put("alert", alertRule.getId()); + rule.put("expr", "(" + alertRule.getExpr() + ")" + alertRule.getOperator() + alertRule.getThreshold()); + rule.put("for", alertRule.getLast() + "s"); + rule.put("labels", labels); + rule.put("annotations", annotations); + rules.add(rule); + } + result.put("groups", groups); + + logger.debug("centerHandle : alert rule Info : {}", JSON.toJSON(groups)); + + //配置alertManager + Map alertManager = new HashMap(); + List staticConfigList = new ArrayList(); + LinkedHashMap staticConfigs = new LinkedHashMap(); + staticConfigList.add(staticConfigs); + List staticConfig = new ArrayList(); + Map targets = new HashMap(); + List alertData = new ArrayList(); + if (!sysConfigs.isEmpty()) { + for (SysConfig sysconfig : sysConfigs) { + if (sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_API.getValue())) { + alertData.add(sysconfig.getParamValue()); + } else if (sysconfig.getParamKey().equals(AlertManagerEnum.ALERT_PATH_PREFIX.getValue())) { + staticConfigs.put("path_prefix", sysconfig.getParamValue()); + } } } - } - if(staticConfigs.get("path_prefix")==null) { - staticConfigs.put("path_prefix","/"); - } - alertManager.put("alertmanagers",staticConfigList); - - // 配置alert_relabel_configs - List alertRelabel =new ArrayList(); - - // 过滤告警信息中instance标签 - Map alertRelabelMap =new HashMap(); - alertRelabelMap.put("regex", "instance"); - alertRelabelMap.put("action", "labeldrop"); - alertRelabel.add(alertRelabelMap); + if (staticConfigs.get("path_prefix") == null) { + staticConfigs.put("path_prefix", "/"); + } + alertManager.put("alertmanagers", staticConfigList); + // 配置alert_relabel_configs + List alertRelabel = new ArrayList(); - Map replicaRelabelMap = new HashMap(); - replicaRelabelMap.put("regex", Constant.REPLICA_LABEL); - replicaRelabelMap.put("action", "labeldrop"); - alertRelabel.add(replicaRelabelMap); - - alertManager.put("alert_relabel_configs", alertRelabel); - - staticConfigs.put("static_configs", staticConfig); - staticConfig.add(targets); - targets.put("targets", alertData); - result.put("alerting", alertManager); - logger.debug("centerHandle : alert manager Info : {}",JSON.toJSON(alertManager)); + // 过滤告警信息中instance标签 + Map alertRelabelMap = new HashMap(); + alertRelabelMap.put("regex", "instance"); + alertRelabelMap.put("action", "labeldrop"); + alertRelabel.add(alertRelabelMap); + + + Map replicaRelabelMap = new HashMap(); + replicaRelabelMap.put("regex", Constant.REPLICA_LABEL); + replicaRelabelMap.put("action", "labeldrop"); + alertRelabel.add(replicaRelabelMap); + + alertManager.put("alert_relabel_configs", alertRelabel); + + staticConfigs.put("static_configs", staticConfig); + staticConfig.add(targets); + targets.put("targets", alertData); + result.put("alerting", alertManager); + logger.debug("centerHandle : alert manager Info : {}", JSON.toJSON(alertManager)); + } return result; } diff --git a/src/main/java/com/nis/service/PromserverService.java b/src/main/java/com/nis/service/PromserverService.java index 0a8e2ec..46cb2f7 100644 --- a/src/main/java/com/nis/service/PromserverService.java +++ b/src/main/java/com/nis/service/PromserverService.java @@ -29,4 +29,6 @@ public interface PromserverService { public List<Promserver> querySubInfosByType(Integer type);
List<Promserver> queryPromServerInfosAndIdcName();
+
+ boolean checkEnableRule(String ipaddr, String promServerPort);
}
diff --git a/src/main/java/com/nis/service/impl/PromserverServiceImpl.java b/src/main/java/com/nis/service/impl/PromserverServiceImpl.java index 58d0f56..a20b2ef 100644 --- a/src/main/java/com/nis/service/impl/PromserverServiceImpl.java +++ b/src/main/java/com/nis/service/impl/PromserverServiceImpl.java @@ -3,6 +3,7 @@ package com.nis.service.impl; import com.nis.dao.PromserverDao;
import com.nis.entity.Promserver;
import com.nis.service.PromserverService;
+import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -37,4 +38,18 @@ public class PromserverServiceImpl implements PromserverService { public List<Promserver> queryPromServerInfosAndIdcName() {
return promserverDao.queryPromServerInfosAndIdcName();
}
+
+ @Override
+ public boolean checkEnableRule(String ipaddr, String promServerPort) {
+ List<Promserver> promservers = promserverDao.queryHealthyGlobalPrometheus();
+ if (CollectionUtils.isEmpty(promservers)) {
+ return false;
+ }
+
+ Promserver promserver = promservers.get(0);
+ if (promserver.getHost().equals(ipaddr) && promserver.getPort().toString().equals(promServerPort)) {
+ return true;
+ }
+ return false;
+ }
}
diff --git a/src/main/resources/mapper/PromserverDao.xml b/src/main/resources/mapper/PromserverDao.xml index f38714a..1c158b0 100644 --- a/src/main/resources/mapper/PromserverDao.xml +++ b/src/main/resources/mapper/PromserverDao.xml @@ -37,4 +37,16 @@ WHERE p.status = 1 </select> + + <select id="queryHealthyGlobalPrometheus" resultType="com.nis.entity.Promserver"> + SELECT + * + FROM + prom_server + WHERE + type = 1 + AND status = 1 + ORDER BY + id ASC + </select> </mapper>
\ No newline at end of file |
