From 077f8b9d07f6424397f0b89c48b89f7a6560a86c Mon Sep 17 00:00:00 2001 From: tomsun28 Date: Wed, 15 Dec 2021 09:07:01 +0800 Subject: [PATCH] =?UTF-8?q?[alerter]=20=E9=98=88=E5=80=BC=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E6=AC=A1=E6=95=B0=E5=90=8E=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../usthe/alert/calculate/CalculateAlarm.java | 42 ++++++++++++++----- .../alert/controller/AlertsController.java | 1 - .../manager/controller/AppController.java | 4 +- .../manager/controller/I18nController.java | 4 +- .../monitor-detail.component.html | 23 +++++++++- .../monitor-list/monitor-list.component.html | 2 +- 6 files changed, 58 insertions(+), 18 deletions(-) diff --git a/alerter/src/main/java/com/usthe/alert/calculate/CalculateAlarm.java b/alerter/src/main/java/com/usthe/alert/calculate/CalculateAlarm.java index 2e0e597..5397794 100644 --- a/alerter/src/main/java/com/usthe/alert/calculate/CalculateAlarm.java +++ b/alerter/src/main/java/com/usthe/alert/calculate/CalculateAlarm.java @@ -20,6 +20,7 @@ import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * 根据告警定义规则和采集数据匹配计算告警 @@ -34,12 +35,14 @@ public class CalculateAlarm { private AlerterWorkerPool workerPool; private AlerterDataQueue dataQueue; private AlertDefineService alertDefineService; + private Map triggeredAlertMap; public CalculateAlarm (AlerterProperties properties, AlerterWorkerPool workerPool, AlerterDataQueue dataQueue, AlertDefineService alertDefineService) { this.workerPool = workerPool; this.dataQueue = dataQueue; this.alertDefineService = alertDefineService; + this.triggeredAlertMap = new ConcurrentHashMap<>(128); startCalculate(); } @@ -133,17 +136,34 @@ public class CalculateAlarm { Expression expression = AviatorEvaluator.compile(expr, true); Boolean match = (Boolean) expression.execute(fieldValueMap); if (match) { - // 阈值规则匹配,触发告警 - Alert alert = Alert.builder() - .monitorId(monitorId) - .priority(define.getPriority()) - .status((byte) 0) - .target(app + "." + metrics + "." + define.getField()) - .times(1) - // 模板中关键字匹配替换 - .content(AlertTemplateUtil.render(define.getTemplate(), fieldValueMap)) - .build(); - dataQueue.addAlertData(alert); + // 阈值规则匹配,判断已触发阈值次数,触发告警 + String monitorAlertKey = String.valueOf(monitorId) + define.getId(); + Alert triggeredAlert = triggeredAlertMap.get(monitorAlertKey); + if (triggeredAlert != null) { + int times = triggeredAlert.getTimes() + 1; + triggeredAlert.setTimes(times); + if (times >= define.getTimes()) { + triggeredAlertMap.remove(monitorAlertKey); + dataQueue.addAlertData(triggeredAlert); + } + } else { + int times = 1; + Alert alert = Alert.builder() + .monitorId(monitorId) + .alertDefineId(define.getId()) + .priority(define.getPriority()) + .status((byte) 0) + .target(app + "." + metrics + "." + define.getField()) + .times(times) + // 模板中关键字匹配替换 + .content(AlertTemplateUtil.render(define.getTemplate(), fieldValueMap)) + .build(); + if (times >= define.getTimes()) { + dataQueue.addAlertData(alert); + } else { + triggeredAlertMap.put(monitorAlertKey, alert); + } + } // 此优先级以下的阈值规则则忽略 break; } diff --git a/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java b/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java index 46930f8..6d04517 100644 --- a/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java +++ b/alerter/src/main/java/com/usthe/alert/controller/AlertsController.java @@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import javax.persistence.Id; import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.Predicate; import java.util.HashSet; diff --git a/manager/src/main/java/com/usthe/manager/controller/AppController.java b/manager/src/main/java/com/usthe/manager/controller/AppController.java index 95b5c04..cae3875 100644 --- a/manager/src/main/java/com/usthe/manager/controller/AppController.java +++ b/manager/src/main/java/com/usthe/manager/controller/AppController.java @@ -48,8 +48,8 @@ public class AppController { if (lang == null || "".equals(lang)) { lang = "zh-CN"; } - lang = lang.equalsIgnoreCase("zh-cn")? "zh-CN" : lang; - lang = lang.equalsIgnoreCase("en-us")? "en-US" : lang; + lang = "zh-cn".equalsIgnoreCase(lang)? "zh-CN" : lang; + lang = "en-us".equalsIgnoreCase(lang)? "en-US" : lang; List appHierarchies = appService.getAllAppHierarchy(lang); return ResponseEntity.ok(new Message<>(appHierarchies)); } diff --git a/manager/src/main/java/com/usthe/manager/controller/I18nController.java b/manager/src/main/java/com/usthe/manager/controller/I18nController.java index bba7e9a..4f7fede 100644 --- a/manager/src/main/java/com/usthe/manager/controller/I18nController.java +++ b/manager/src/main/java/com/usthe/manager/controller/I18nController.java @@ -38,8 +38,8 @@ public class I18nController { if (lang == null || "".equals(lang)) { lang = "zh-CN"; } - lang = lang.equalsIgnoreCase("zh-cn")? "zh-CN" : lang; - lang = lang.equalsIgnoreCase("en-us")? "en-US" : lang; + lang = "zh-cn".equalsIgnoreCase(lang)? "zh-CN" : lang; + lang = "en-us".equalsIgnoreCase(lang)? "en-US" : lang; Map i18nResource = appService.getI18nResources(lang); return ResponseEntity.ok(new Message<>(i18nResource)); } diff --git a/web-app/src/app/routes/monitor/monitor-detail/monitor-detail.component.html b/web-app/src/app/routes/monitor/monitor-detail/monitor-detail.component.html index 4224f82..fc2aab2 100644 --- a/web-app/src/app/routes/monitor/monitor-detail/monitor-detail.component.html +++ b/web-app/src/app/routes/monitor/monitor-detail/monitor-detail.component.html @@ -44,7 +44,28 @@

状态

-

{{monitor?.status}}

+
+ + + 未监控 + + + + 正常监控 + + + + 监控不可用 + + + + 监控不可达 + + + + 监控已挂起 + +

采集间隔

diff --git a/web-app/src/app/routes/monitor/monitor-list/monitor-list.component.html b/web-app/src/app/routes/monitor/monitor-list/monitor-list.component.html index 8782807..d87195e 100644 --- a/web-app/src/app/routes/monitor/monitor-list/monitor-list.component.html +++ b/web-app/src/app/routes/monitor/monitor-list/monitor-list.component.html @@ -50,7 +50,7 @@ 监控名称 监控状态 - 监控主机Host + 监控Host 监控类型 最新修改时间 操作