summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2020-11-22 10:09:25 +0800
committershizhendong <[email protected]>2020-11-22 10:09:25 +0800
commit92a5f46d735fb42b08ee63b8a9e86ff3fb8aec3d (patch)
treef9f850d873df54db7021e4fac6b01e7fe2a41c9a
parentbc0b3af391777f7a0563c22141cdaa3f1a6bd10a (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.java2
-rw-r--r--src/main/java/com/nis/job/ConfagentJob.java192
-rw-r--r--src/main/java/com/nis/service/PromserverService.java2
-rw-r--r--src/main/java/com/nis/service/impl/PromserverServiceImpl.java15
-rw-r--r--src/main/resources/mapper/PromserverDao.xml12
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