This is an automated email from the ASF dual-hosted git repository.

zhaoqingran pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git


The following commit(s) were added to refs/heads/master by this push:
     new 8bb4493b43 [bugfix] fix alert integration extern source bug (#2979)
8bb4493b43 is described below

commit 8bb4493b43af512a858b7db5f4bed6e2b6a0f27a
Author: tomsun28 <tomsu...@outlook.com>
AuthorDate: Tue Jan 14 18:22:21 2025 +0800

    [bugfix] fix alert integration extern source bug (#2979)
---
 .all-contributorsrc                                | 18 +++++
 README.md                                          |  2 +
 README_CN.md                                       |  2 +
 .../alert/controller/AlertReportController.java    | 28 +++++--
 .../hertzbeat/alert/dto/PrometheusExternAlert.java |  7 +-
 .../alert/notice/impl/DbAlertStoreHandlerImpl.java |  4 +-
 .../impl/AlertManagerExternAlertService.java       | 23 ++++--
 .../service/impl/DefaultExternAlertService.java    | 34 +++++++++
 .../service/impl/PrometheusExternAlertService.java | 72 ++++++++++-------
 .../main/resources/templates/1-EmailTemplate.html  |  4 +-
 .../resources/templates/10-WeWorkAppTemplate.txt   |  6 +-
 .../templates/11-HuaweiCloudSmnTemplate.txt        |  6 +-
 .../resources/templates/12-ServerChanTemplate.txt  |  6 +-
 .../main/resources/templates/13-GotifyTemplate.txt |  6 +-
 .../main/resources/templates/2-WebhookTemplate.txt | 10 ++-
 .../resources/templates/4-WeWorkRobotTemplate.txt  |  6 +-
 .../templates/5-DingTalkRobotTemplate.txt          |  4 +-
 .../resources/templates/6-FlyBookRobotTemplate.txt |  6 +-
 .../resources/templates/7-TelegramBotTemplate.txt  |  6 +-
 .../main/resources/templates/8-SlackTemplate.txt   |  6 +-
 .../resources/templates/9-DiscordBotTemplate.txt   |  6 +-
 home/src/pages/team/index.jsx                      |  8 ++
 web-app/src/app/layout/basic/basic.component.ts    |  4 +-
 .../alert/alert-center/alert-center.component.html |  4 +-
 .../alert-group-converge.component.html            |  4 +-
 .../alert-setting/alert-setting.component.html     |  4 +-
 .../alert-setting/alert-setting.component.less     |  2 +-
 .../help-message-show.component.less               |  3 +-
 .../doc/alert-integration/alertmanager.en-US.md    | 26 ++++---
 .../doc/alert-integration/alertmanager.zh-CN.md    | 26 ++++---
 .../doc/alert-integration/alertmanager.zh-TW.md    | 26 ++++---
 .../doc/alert-integration/prometheus.en-US.md      | 89 +++++++---------------
 .../doc/alert-integration/prometheus.zh-CN.md      | 69 +++++------------
 .../doc/alert-integration/prometheus.zh-TW.md      | 77 ++++++-------------
 .../assets/doc/alert-integration/webhook.en-US.md  |  2 +-
 .../assets/doc/alert-integration/webhook.zh-CN.md  |  2 +-
 .../assets/doc/alert-integration/webhook.zh-TW.md  |  2 +-
 web-app/src/assets/i18n/en-US.json                 | 28 +++----
 web-app/src/assets/i18n/zh-CN.json                 | 24 +++---
 web-app/src/assets/i18n/zh-TW.json                 | 24 +++---
 40 files changed, 355 insertions(+), 331 deletions(-)

diff --git a/.all-contributorsrc b/.all-contributorsrc
index 2441d3c3f9..275faaf2c8 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -2207,6 +2207,24 @@
       "contributions": [
         "doc"
       ]
+    },
+    {
+      "login": "Suvrat1629",
+      "name": "Suvrat1629",
+      "avatar_url": "https://avatars.githubusercontent.com/u/140749446?v=4";,
+      "profile": "https://github.com/Suvrat1629";,
+      "contributions": [
+        "code"
+      ]
+    },
+    {
+      "login": "ghyghoo8",
+      "name": "ghy",
+      "avatar_url": "https://avatars.githubusercontent.com/u/363129?v=4";,
+      "profile": "http://ghyghoo8.github.io/";,
+      "contributions": [
+        "code"
+      ]
     }
   ],
   "contributorsPerLine": 7,
diff --git a/README.md b/README.md
index e215b64c3a..c8a1c72b7c 100644
--- a/README.md
+++ b/README.md
@@ -493,6 +493,8 @@ Thanks to these wonderful people, welcome to join us:
       <td align="center" valign="top" width="14.28%"><a 
href="http://www.ponfee.cn/";><img 
src="https://avatars.githubusercontent.com/u/46117331?v=4?s=100"; width="100px;" 
alt="ponfee"/><br /><sub><b>ponfee</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=ponfee"; 
title="Code">💻</a></td>
       <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Vedant7789";><img 
src="https://avatars.githubusercontent.com/u/147625492?v=4?s=100"; 
width="100px;" alt="Vedant7789"/><br /><sub><b>Vedant7789</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=Vedant7789"; 
title="Code">💻</a></td>
       <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Craaaaazy77";><img 
src="https://avatars.githubusercontent.com/u/23025522?v=4?s=100"; width="100px;" 
alt="Craaaaazy77"/><br /><sub><b>Craaaaazy77</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=Craaaaazy77"; 
title="Documentation">📖</a></td>
+      <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Suvrat1629";><img 
src="https://avatars.githubusercontent.com/u/140749446?v=4?s=100"; 
width="100px;" alt="Suvrat1629"/><br /><sub><b>Suvrat1629</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=Suvrat1629"; 
title="Code">💻</a></td>
+      <td align="center" valign="top" width="14.28%"><a 
href="http://ghyghoo8.github.io/";><img 
src="https://avatars.githubusercontent.com/u/363129?v=4?s=100"; width="100px;" 
alt="ghy"/><br /><sub><b>ghy</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=ghyghoo8"; 
title="Code">💻</a></td>
     </tr>
   </tbody>
 </table>
diff --git a/README_CN.md b/README_CN.md
index db78f89d37..cf2c15d45e 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -492,6 +492,8 @@ Thanks these wonderful people, welcome to join us:
       <td align="center" valign="top" width="14.28%"><a 
href="http://www.ponfee.cn/";><img 
src="https://avatars.githubusercontent.com/u/46117331?v=4?s=100"; width="100px;" 
alt="ponfee"/><br /><sub><b>ponfee</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=ponfee"; 
title="Code">💻</a></td>
       <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Vedant7789";><img 
src="https://avatars.githubusercontent.com/u/147625492?v=4?s=100"; 
width="100px;" alt="Vedant7789"/><br /><sub><b>Vedant7789</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=Vedant7789"; 
title="Code">💻</a></td>
       <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Craaaaazy77";><img 
src="https://avatars.githubusercontent.com/u/23025522?v=4?s=100"; width="100px;" 
alt="Craaaaazy77"/><br /><sub><b>Craaaaazy77</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=Craaaaazy77"; 
title="Documentation">📖</a></td>
+      <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Suvrat1629";><img 
src="https://avatars.githubusercontent.com/u/140749446?v=4?s=100"; 
width="100px;" alt="Suvrat1629"/><br /><sub><b>Suvrat1629</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=Suvrat1629"; 
title="Code">💻</a></td>
+      <td align="center" valign="top" width="14.28%"><a 
href="http://ghyghoo8.github.io/";><img 
src="https://avatars.githubusercontent.com/u/363129?v=4?s=100"; width="100px;" 
alt="ghy"/><br /><sub><b>ghy</b></sub></a><br /><a 
href="https://github.com/apache/hertzbeat/commits?author=ghyghoo8"; 
title="Code">💻</a></td>
     </tr>
   </tbody>
 </table>
diff --git 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertReportController.java
 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertReportController.java
index 17d335b665..cf81040abb 100644
--- 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertReportController.java
+++ 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/controller/AlertReportController.java
@@ -17,7 +17,6 @@
 
 package org.apache.hertzbeat.alert.controller;
 
-import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import java.util.List;
@@ -31,7 +30,6 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -39,7 +37,6 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @Tag(name = "Extern Alarm Manage API")
 @RestController
-@RequestMapping(path = "/api/alerts/report", produces = 
{APPLICATION_JSON_VALUE})
 @Slf4j
 public class AlertReportController {
     
@@ -49,7 +46,7 @@ public class AlertReportController {
         this.externAlertServiceList = externAlertServiceList;
     }
 
-    @PostMapping("/{source}")
+    @PostMapping("/api/alerts/report/{source}")
     @Operation(summary = "Api for receive external alarm information")
     public ResponseEntity<Message<Void>> 
receiveExternAlert(@PathVariable(value = "source") String source, 
                                                             @RequestBody 
String content) {
@@ -74,7 +71,7 @@ public class AlertReportController {
                 .body(Message.fail(CommonConstants.FAIL_CODE, "Not support the 
" + source + " source alert"));
     }
 
-    @PostMapping
+    @PostMapping("/api/alerts/report")
     @Operation(summary = "Api for receive default external alarm information")
     public ResponseEntity<Message<Void>> 
receiveDefaultExternAlert(@RequestBody String content) {
         log.info("Receive default extern alert content: {}", content);
@@ -94,4 +91,25 @@ public class AlertReportController {
         return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                 .body(Message.success("Not support the default source alert"));
     }
+
+    @PostMapping("/api/v2/alerts")
+    @Operation(summary = "Api for receive external alarm information")
+    public ResponseEntity<Message<Void>> 
receivePrometheusServerAlert(@RequestBody String content) {
+        log.info("Receive prometheus server alert, content: {}", content);
+        ExternAlertService externAlertService = externAlertServiceList.stream()
+                .filter(item -> 
"prometheus".equals(item.supportSource())).findFirst().orElse(null);
+        if (externAlertService != null) {
+            try {
+                externAlertService.addExternAlert(content);
+                return ResponseEntity.ok(Message.success("Add extern alert 
success"));
+            } catch (Exception e) {
+                return ResponseEntity.status(HttpStatus.BAD_REQUEST)
+                        .body(Message.fail(CommonConstants.FAIL_CODE,
+                                "Add extern alert failed: " + e.getMessage()));
+            }
+        }
+        log.error("Not support prometheus extern alert");
+        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
+                .body(Message.success("Not support the prometheus source 
alert"));
+    }
 }
diff --git 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/PrometheusExternAlert.java
 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/PrometheusExternAlert.java
index 728f6939cf..83c61abc08 100644
--- 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/PrometheusExternAlert.java
+++ 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/dto/PrometheusExternAlert.java
@@ -17,6 +17,7 @@
 
 package org.apache.hertzbeat.alert.dto;
 
+import java.time.Instant;
 import java.util.Map;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
@@ -39,11 +40,9 @@ public class PrometheusExternAlert {
 
     private String status;
 
-    private Long startsAt;
+    private Instant startsAt;
 
-    private Long activeAt;
-
-    private Long endsAt;
+    private Instant endsAt;
     
     private String generatorURL;
 }
diff --git 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/notice/impl/DbAlertStoreHandlerImpl.java
 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/notice/impl/DbAlertStoreHandlerImpl.java
index ff65988eb6..b6b5ecca05 100644
--- 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/notice/impl/DbAlertStoreHandlerImpl.java
+++ 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/notice/impl/DbAlertStoreHandlerImpl.java
@@ -20,6 +20,7 @@ package org.apache.hertzbeat.alert.notice.impl;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import lombok.RequiredArgsConstructor;
@@ -66,7 +67,8 @@ final class DbAlertStoreHandlerImpl implements 
AlertStoreHandler {
                 if 
(CommonConstants.ALERT_STATUS_FIRING.equals(singleAlert.getStatus())) {
                     if 
(!CommonConstants.ALERT_STATUS_RESOLVED.equals(existAlert.getStatus())) {
                         singleAlert.setStartAt(existAlert.getStartAt());
-                        
singleAlert.setTriggerTimes(existAlert.getTriggerTimes() + 
singleAlert.getTriggerTimes());
+                        int triggerTimes = 
Optional.ofNullable(existAlert.getTriggerTimes()).orElse(1) + 
Optional.ofNullable(singleAlert.getTriggerTimes()).orElse(1);
+                        singleAlert.setTriggerTimes(triggerTimes);
                     } 
                 } else if 
(CommonConstants.ALERT_STATUS_RESOLVED.equals(singleAlert.getStatus())) {
                     // Transition to resolved state
diff --git 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertManagerExternAlertService.java
 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertManagerExternAlertService.java
index 44e9ea6b36..6f7cd88807 100644
--- 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertManagerExternAlertService.java
+++ 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/AlertManagerExternAlertService.java
@@ -17,6 +17,7 @@
 
 package org.apache.hertzbeat.alert.service.impl;
 
+import java.time.Instant;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -25,6 +26,7 @@ import org.apache.hertzbeat.alert.dto.AlertManagerExternAlert;
 import org.apache.hertzbeat.alert.dto.PrometheusExternAlert;
 import org.apache.hertzbeat.alert.reduce.AlarmCommonReduce;
 import org.apache.hertzbeat.alert.service.ExternAlertService;
+import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -70,15 +72,24 @@ public class AlertManagerExternAlertService implements 
ExternAlertService {
             if (description == null) {
                 description = 
annotations.values().stream().findFirst().orElse("");
             }
-
+            Map<String, String> labels = prometheusAlert.getLabels();
+            if (labels == null) {
+                labels = new HashMap<>(8);
+            }
+            labels.put("__source__", "alertmanager");
+            String status = CommonConstants.ALERT_STATUS_FIRING;
+            if (prometheusAlert.getEndsAt() != null && 
prometheusAlert.getEndsAt().isBefore(Instant.now())) {
+                status = CommonConstants.ALERT_STATUS_RESOLVED;
+            }
             SingleAlert singleAlert = SingleAlert.builder()
                     .content(description)
-                    .status(prometheusAlert.getStatus())
-                    .activeAt(prometheusAlert.getActiveAt())
-                    .startAt(prometheusAlert.getStartsAt())
-                    .endAt(prometheusAlert.getEndsAt())
-                    .labels(prometheusAlert.getLabels())
+                    .status(status)
+                    
.activeAt(CommonConstants.ALERT_STATUS_FIRING.equals(status) ? 
Instant.now().toEpochMilli() : null)
+                    .startAt(prometheusAlert.getStartsAt() != null ? 
prometheusAlert.getStartsAt().toEpochMilli() : Instant.now().toEpochMilli())
+                    
.endAt(CommonConstants.ALERT_STATUS_RESOLVED.equals(status) ? 
prometheusAlert.getEndsAt().toEpochMilli() : null)
+                    .labels(labels)
                     .annotations(prometheusAlert.getAnnotations())
+                    .triggerTimes(1)
                     .build();
 
             alarmCommonReduce.reduceAndSendAlarm(singleAlert);
diff --git 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/DefaultExternAlertService.java
 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/DefaultExternAlertService.java
index c178448d9a..cd7d549741 100644
--- 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/DefaultExternAlertService.java
+++ 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/DefaultExternAlertService.java
@@ -17,9 +17,11 @@
 
 package org.apache.hertzbeat.alert.service.impl;
 
+import java.time.Instant;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.alert.reduce.AlarmCommonReduce;
 import org.apache.hertzbeat.alert.service.ExternAlertService;
+import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +44,38 @@ public class DefaultExternAlertService implements 
ExternAlertService {
             log.warn("parse extern alert content failed! content: {}", 
content);
             throw new IllegalArgumentException("parse extern alert content 
failed!");
         }
+        alert.setId(null);
+        String status = alert.getStatus();
+        if (status == null) {
+            // can use the startAt and endAt to determine the status
+            if (alert.getStartAt() != null && alert.getEndAt() != null) {
+                if (alert.getEndAt() < Instant.now().toEpochMilli()) {
+                    status = CommonConstants.ALERT_STATUS_RESOLVED;
+                } else {
+                    status = CommonConstants.ALERT_STATUS_FIRING;
+                }
+            } else {
+                status = CommonConstants.ALERT_STATUS_FIRING;
+            }
+        }
+        alert.setStatus(status);
+        if (CommonConstants.ALERT_STATUS_FIRING.equals(status)) {
+            alert.setEndAt(null);
+            if (alert.getStartAt() == null) {
+                alert.setStartAt(Instant.now().toEpochMilli());
+            }
+            if (alert.getActiveAt() == null) {
+                alert.setActiveAt(Instant.now().toEpochMilli());
+            }
+        } else {
+            alert.setActiveAt(null);
+            if (alert.getStartAt() == null) {
+                alert.setStartAt(Instant.now().toEpochMilli());
+            }
+            if (alert.getEndAt() == null) {
+                alert.setEndAt(Instant.now().toEpochMilli());
+            }
+        }
         alarmCommonReduce.reduceAndSendAlarm(alert);
     }
 
diff --git 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/PrometheusExternAlertService.java
 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/PrometheusExternAlertService.java
index 667053d665..c7eb272258 100644
--- 
a/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/PrometheusExternAlertService.java
+++ 
b/hertzbeat-alerter/src/main/java/org/apache/hertzbeat/alert/service/impl/PrometheusExternAlertService.java
@@ -17,12 +17,16 @@
 
 package org.apache.hertzbeat.alert.service.impl;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import java.time.Instant;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.hertzbeat.alert.dto.PrometheusExternAlert;
 import org.apache.hertzbeat.alert.reduce.AlarmCommonReduce;
 import org.apache.hertzbeat.alert.service.ExternAlertService;
+import org.apache.hertzbeat.common.constants.CommonConstants;
 import org.apache.hertzbeat.common.entity.alerter.SingleAlert;
 import org.apache.hertzbeat.common.util.JsonUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,38 +46,50 @@ public class PrometheusExternAlertService implements 
ExternAlertService {
 
     @Override
     public void addExternAlert(String content) {
-        
-        PrometheusExternAlert alert = JsonUtil.fromJson(content, 
PrometheusExternAlert.class);
-        if (alert == null) {
+
+        TypeReference<List<PrometheusExternAlert>> typeReference = new 
TypeReference<>() {};
+        List<PrometheusExternAlert> alerts = JsonUtil.fromJson(content, 
typeReference);
+        if (alerts == null || alerts.isEmpty()) {
             log.warn("parse prometheus extern alert content failed! content: 
{}", content);
             return;
         }
-        Map<String, String> annotations = alert.getAnnotations();
-        if (annotations == null) {
-            annotations = new HashMap<>(8);
-        }
-        if (StringUtils.hasText(alert.getGeneratorURL())) {
-            annotations.put("generatorURL", alert.getGeneratorURL());
-        }
-        String description = annotations.get("description");
-        if (description == null) {
-            description = annotations.get("summary");
-        }
-        if (description == null) {
-            description = annotations.values().stream().findFirst().orElse("");
+        for (PrometheusExternAlert alert : alerts) {
+            Map<String, String> annotations = alert.getAnnotations();
+            if (annotations == null) {
+                annotations = new HashMap<>(8);
+            }
+            if (StringUtils.hasText(alert.getGeneratorURL())) {
+                annotations.put("generatorURL", alert.getGeneratorURL());
+            }
+            String description = annotations.get("description");
+            if (description == null) {
+                description = annotations.get("summary");
+            }
+            if (description == null) {
+                description = 
annotations.values().stream().findFirst().orElse("");
+            }
+            Map<String, String> labels = alert.getLabels();
+            if (labels == null) {
+                labels = new HashMap<>(8);
+            }
+            labels.put("__source__", "prometheus");
+            String status = CommonConstants.ALERT_STATUS_FIRING;
+            if (alert.getEndsAt() != null && 
alert.getEndsAt().isBefore(Instant.now())) {
+                status = CommonConstants.ALERT_STATUS_RESOLVED;
+            }
+            SingleAlert singleAlert = SingleAlert.builder()
+                    .content(description)
+                    .status(status)
+                    
.activeAt(CommonConstants.ALERT_STATUS_FIRING.equals(status) ? 
Instant.now().toEpochMilli() : null)
+                    .startAt(alert.getStartsAt() != null ? 
alert.getStartsAt().toEpochMilli() : Instant.now().toEpochMilli())
+                    
.endAt(CommonConstants.ALERT_STATUS_RESOLVED.equals(status) ? 
alert.getEndsAt().toEpochMilli() : null)
+                    .labels(labels)
+                    .annotations(alert.getAnnotations())
+                    .triggerTimes(1)
+                    .build();
+
+            alarmCommonReduce.reduceAndSendAlarm(singleAlert);   
         }
-        
-        SingleAlert singleAlert = SingleAlert.builder()
-                .content(description)
-                .status(alert.getStatus())
-                .activeAt(alert.getActiveAt())
-                .startAt(alert.getStartsAt())
-                .endAt(alert.getEndsAt())
-                .labels(alert.getLabels())
-                .annotations(alert.getAnnotations())
-                .build();
-        
-        alarmCommonReduce.reduceAndSendAlarm(singleAlert);
     }
 
     @Override
diff --git 
a/hertzbeat-manager/src/main/resources/templates/1-EmailTemplate.html 
b/hertzbeat-manager/src/main/resources/templates/1-EmailTemplate.html
index 2e2d8dccc6..85a927d0a6 100644
--- a/hertzbeat-manager/src/main/resources/templates/1-EmailTemplate.html
+++ b/hertzbeat-manager/src/main/resources/templates/1-EmailTemplate.html
@@ -81,7 +81,9 @@
                         </#if>
                         <div class="info-item">Trigger Count: 
${alert.triggerTimes!0}</div>
                         <div class="info-item">Start Time: 
${((alert.startAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}</div>
-                        <div class="info-item">Last Trigger: 
${((alert.activeAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}</div>
+                        <#if alert.activeAt?? && alert.activeAt gt 0>
+                            <div class="info-item">Active Time: 
${((alert.activeAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}</div>
+                        </#if>
                         <#if alert.endAt?? && alert.endAt gt 0>
                             <div class="info-item">End Time: 
${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}</div>
                         </#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/10-WeWorkAppTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/10-WeWorkAppTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/10-WeWorkAppTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/10-WeWorkAppTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/11-HuaweiCloudSmnTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/11-HuaweiCloudSmnTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- 
a/hertzbeat-manager/src/main/resources/templates/11-HuaweiCloudSmnTemplate.txt
+++ 
b/hertzbeat-manager/src/main/resources/templates/11-HuaweiCloudSmnTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/12-ServerChanTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/12-ServerChanTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/12-ServerChanTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/12-ServerChanTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/13-GotifyTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/13-GotifyTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/13-GotifyTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/13-GotifyTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/2-WebhookTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/2-WebhookTemplate.txt
index 87b22c8267..e202b2e668 100644
--- a/hertzbeat-manager/src/main/resources/templates/2-WebhookTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/2-WebhookTemplate.txt
@@ -24,11 +24,13 @@
       <#if alert.content?? && alert.content != "">
       "content": "${alert.content?json_string}",
       </#if>
-      "triggerCount": ${alert.triggerTimes!0},
-      "startTime": 
"${((alert.startAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}",
-      "lastTrigger": 
"${((alert.activeAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}"
+      "triggerTimes": ${alert.triggerTimes!0},
+      "startAt": "${((alert.startAt!0)?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}",
+      <#if alert.activeAt?? && alert.activeAt gt 0>,
+      "activeAt": 
"${((alert.activeAt!0)?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}"
+      </#if>
       <#if alert.endAt?? && alert.endAt gt 0>,
-      "endTime": "${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}"
+      "endAt": "${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}"
       </#if>
       <#if alert.annotations?? && alert.annotations?size gt 0>,
       "annotations": {
diff --git 
a/hertzbeat-manager/src/main/resources/templates/4-WeWorkRobotTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/4-WeWorkRobotTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/4-WeWorkRobotTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/4-WeWorkRobotTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/5-DingTalkRobotTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/5-DingTalkRobotTemplate.txt
index 074e3fd8c7..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/5-DingTalkRobotTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/5-DingTalkRobotTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/6-FlyBookRobotTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/6-FlyBookRobotTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/6-FlyBookRobotTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/6-FlyBookRobotTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/7-TelegramBotTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/7-TelegramBotTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/7-TelegramBotTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/7-TelegramBotTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git a/hertzbeat-manager/src/main/resources/templates/8-SlackTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/8-SlackTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/8-SlackTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/8-SlackTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git 
a/hertzbeat-manager/src/main/resources/templates/9-DiscordBotTemplate.txt 
b/hertzbeat-manager/src/main/resources/templates/9-DiscordBotTemplate.txt
index a9b9ff3391..4f9e8deed1 100644
--- a/hertzbeat-manager/src/main/resources/templates/9-DiscordBotTemplate.txt
+++ b/hertzbeat-manager/src/main/resources/templates/9-DiscordBotTemplate.txt
@@ -24,7 +24,9 @@
 </#if>
 > - Trigger Count: ${alert.triggerTimes}
 > - Start Time: ${(alert.startAt?number_to_datetime)?string('yyyy-MM-dd 
 > HH:mm:ss')}
-> - Last Trigger: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+<#if alert.activeAt??>
+> - Active Time: ${(alert.activeAt?number_to_datetime)?string('yyyy-MM-dd 
HH:mm:ss')}
+</#if>
 <#if alert.endAt??>
 > - End Time: ${(alert.endAt?number_to_datetime)?string('yyyy-MM-dd HH:mm:ss')}
 </#if>
@@ -42,4 +44,4 @@
 <#list commonAnnotations?keys as key>
 > - ${key}: ${commonAnnotations[key]}
 </#list>
-</#if>
\ No newline at end of file
+</#if>
diff --git a/home/src/pages/team/index.jsx b/home/src/pages/team/index.jsx
index 1a1a363e90..d4eb786c63 100644
--- a/home/src/pages/team/index.jsx
+++ b/home/src/pages/team/index.jsx
@@ -1215,6 +1215,14 @@ export default function () {
                     
alt="Craaaaazy77"/><br/><sub><b>Craaaaazy77</b></sub></a><br/><a
                     
href="https://github.com/apache/hertzbeat/commits?author=Craaaaazy77"; 
title="Documentation">📖</a>
                   </td>
+                  <td align="center" valign="top" width="14.28%"><a 
href="https://github.com/Suvrat1629";><img
+                    
src="https://avatars.githubusercontent.com/u/140749446?v=4?s=100"; width="100px;"
+                    
alt="Suvrat1629"/><br/><sub><b>Suvrat1629</b></sub></a><br/><a
+                    
href="https://github.com/apache/hertzbeat/commits?author=Suvrat1629"; 
title="Code">💻</a></td>
+                  <td align="center" valign="top" width="14.28%"><a 
href="http://ghyghoo8.github.io/";><img
+                    
src="https://avatars.githubusercontent.com/u/363129?v=4?s=100"; width="100px;"
+                    alt="ghy"/><br/><sub><b>ghy</b></sub></a><br/><a
+                    
href="https://github.com/apache/hertzbeat/commits?author=ghyghoo8"; 
title="Code">💻</a></td>
                 </tr>
                 </tbody>
               </table>
diff --git a/web-app/src/app/layout/basic/basic.component.ts 
b/web-app/src/app/layout/basic/basic.component.ts
index f1bab7d58a..de9ef03282 100644
--- a/web-app/src/app/layout/basic/basic.component.ts
+++ b/web-app/src/app/layout/basic/basic.component.ts
@@ -44,9 +44,9 @@ import { CONSTANTS } from '../../shared/constants';
             <div nz-menu-item>
               <header-clear-storage></header-clear-storage>
             </div>
-            <div nz-menu-item routerLink="/setting/tags">
+            <div nz-menu-item routerLink="/setting/labels">
               <i nz-icon nzType="tag" class="mr-sm"></i>
-              <span style="margin-left: 4px">{{ 'menu.advanced.tags' | i18n 
}}</span>
+              <span style="margin-left: 4px">{{ 'menu.advanced.labels' | i18n 
}}</span>
             </div>
             <div nz-menu-item>
               <header-i18n></header-i18n>
diff --git 
a/web-app/src/app/routes/alert/alert-center/alert-center.component.html 
b/web-app/src/app/routes/alert/alert-center/alert-center.component.html
index a5abf297b0..7331b25b8d 100644
--- a/web-app/src/app/routes/alert/alert-center/alert-center.component.html
+++ b/web-app/src/app/routes/alert/alert-center/alert-center.component.html
@@ -174,11 +174,11 @@
                 <span class="time-label">{{ 'alert.center.first-time' | i18n 
}}:</span>
                 <span class="time-value">{{ item.startAt | date : 'yyyy-MM-dd 
HH:mm:ss' }}</span>
               </div>
-              <div *ngIf="item.activeAt" class="time-item">
+              <div *ngIf="item.status === 'firing' && item.activeAt" 
class="time-item">
                 <span class="time-label">{{ 'alert.center.last-time' | i18n 
}}:</span>
                 <span class="time-value">{{ item.activeAt | date : 'yyyy-MM-dd 
HH:mm:ss' }}</span>
               </div>
-              <div *ngIf="item.endAt" class="time-item">
+              <div *ngIf="item.status === 'resolved' && item.endAt" 
class="time-item">
                 <span class="time-label">{{ 'alert.center.end-time' | i18n 
}}:</span>
                 <span class="time-value">{{ item.endAt | date : 'yyyy-MM-dd 
HH:mm:ss' }}</span>
               </div>
diff --git 
a/web-app/src/app/routes/alert/alert-group/alert-group-converge.component.html 
b/web-app/src/app/routes/alert/alert-group/alert-group-converge.component.html
index 2580fa2834..8411610fb4 100644
--- 
a/web-app/src/app/routes/alert/alert-group/alert-group-converge.component.html
+++ 
b/web-app/src/app/routes/alert/alert-group/alert-group-converge.component.html
@@ -18,8 +18,8 @@
 -->
 
 <app-help-message-show
-  [help_message_content]="'alert.help.converge' | i18n"
-  [guild_link]="'alert.help.converge.link' | i18n"
+  [help_message_content]="'alert.help.group' | i18n"
+  [guild_link]="'alert.help.group.link' | i18n"
   [module_name]="'menu.alert.group'"
   [icon_name]="'filter'"
 ></app-help-message-show>
diff --git 
a/web-app/src/app/routes/alert/alert-setting/alert-setting.component.html 
b/web-app/src/app/routes/alert/alert-setting/alert-setting.component.html
index 473b64f876..01e366d742 100644
--- a/web-app/src/app/routes/alert/alert-setting/alert-setting.component.html
+++ b/web-app/src/app/routes/alert/alert-setting/alert-setting.component.html
@@ -636,13 +636,13 @@
   </ng-container>
 </nz-modal>
 
-<!-- 添加类型选择弹窗 -->
+<!-- type model select -->
 <nz-modal
   [(nzVisible)]="isSelectTypeModalVisible"
   [nzTitle]="'alert.setting.new' | i18n"
   (nzOnCancel)="onSelectTypeModalCancel()"
   [nzFooter]="null"
-  nzWidth="400px"
+  nzWidth="460px"
 >
   <div *nzModalContent>
     <div class="alert-type-options">
diff --git 
a/web-app/src/app/routes/alert/alert-setting/alert-setting.component.less 
b/web-app/src/app/routes/alert/alert-setting/alert-setting.component.less
index 13d33ea01d..0894920bc5 100644
--- a/web-app/src/app/routes/alert/alert-setting/alert-setting.component.less
+++ b/web-app/src/app/routes/alert/alert-setting/alert-setting.component.less
@@ -148,7 +148,7 @@
     justify-content: center;
 
     .alert-type-card {
-      width: 160px;
+      width: 200px;
       text-align: center;
       cursor: pointer;
 
diff --git 
a/web-app/src/app/shared/components/help-message-show/help-message-show.component.less
 
b/web-app/src/app/shared/components/help-message-show/help-message-show.component.less
index 955b654947..477013409b 100644
--- 
a/web-app/src/app/shared/components/help-message-show/help-message-show.component.less
+++ 
b/web-app/src/app/shared/components/help-message-show/help-message-show.component.less
@@ -31,7 +31,8 @@
 }
 
 .level2_message_show {
-  padding: 0px 9px;
+  margin: 6px;
+  padding: 0 9px;
   max-height: 76px;
   width: 99%;
   overflow-y: auto;
diff --git a/web-app/src/assets/doc/alert-integration/alertmanager.en-US.md 
b/web-app/src/assets/doc/alert-integration/alertmanager.en-US.md
index 9b57a6ffcc..63b23095c1 100644
--- a/web-app/src/assets/doc/alert-integration/alertmanager.en-US.md
+++ b/web-app/src/assets/doc/alert-integration/alertmanager.en-US.md
@@ -6,19 +6,21 @@ This document describes how to send alerts from Prometheus 
AlertManager to the H
 
 1. Add the webhook configuration to the Alertmanager configuration file.
 
-    ```yaml
-    receivers:
-      - name: 'webhook'
-        webhook_configs:
-          - url: 'http://${hertzbeat_host}:1157/api/alerts/report/alertmanager'
-            http_config:
-              headers:
-              Authorization: 'Bearer {token}'
-            send_resolved: true
-    ```
-- `http://${hertzbeat_ip}:8080/api/alerts/report` is the webhook interface 
address provided by HertzBeat.
+```yaml
+receivers:
+  - name: 'webhook'
+    webhook_configs:
+      - url: 'http://{hertzbeat_host}:1157/api/alerts/report/alertmanager'
+        send_resolved: true
+        http_config:
+          authorization: 
+            type: 'Bearer'
+            credentials: '{token}'
+```
+
+- `http://{hertzbeat_host}:1157/api/alerts/report/alertmanager` is the webhook 
interface address provided by HertzBeat.
 - `send_resolved: true` indicates that alert recovery information will be sent.
-- The {token} in `Authorization` is the token provided by HertzBeat.
+- The `{token}` in `credentials` is the token provided by HertzBeat.
 
 2. Restart the Alertmanager service.
 
diff --git a/web-app/src/assets/doc/alert-integration/alertmanager.zh-CN.md 
b/web-app/src/assets/doc/alert-integration/alertmanager.zh-CN.md
index a345e69d4f..6fea432367 100644
--- a/web-app/src/assets/doc/alert-integration/alertmanager.zh-CN.md
+++ b/web-app/src/assets/doc/alert-integration/alertmanager.zh-CN.md
@@ -4,19 +4,21 @@
 
 1. 在 Alertmanager 配置文件中添加 webhook 配置。
 
-    ```yaml
-    receivers:
-      - name: 'webhook'
-        webhook_configs:
-          - url: 'http://${hertzbeat_host}:1157/api/alerts/report/alertmanager'
-            http_config:
-              headers:
-              Authorization: 'Bearer {token}'
-            send_resolved: true
-    ```
-- `http://${hertzbeat_ip}:8080/api/alerts/report` 为 HertzBeat 提供的 webhook 接口地址。
+```yaml
+receivers:
+  - name: 'webhook'
+    webhook_configs:
+      - url: 'http://{hertzbeat_host}:1157/api/alerts/report/alertmanager'
+        send_resolved: true
+        http_config:
+          authorization: 
+            type: 'Bearer'
+            credentials: '{token}'
+```
+
+- `http://{hertzbeat_host}:1157/api/alerts/report/alertmanager` 为 HertzBeat 
提供的 webhook 接口地址。
 - `send_resolved: true` 表示发送告警恢复信息。
-- `Authorization` 内的 {token} 为 HertzBeat 提供的 token。
+- `credentials` 内的 `{token}` 为 HertzBeat 提供的 token。
 
 2. 重启 Alertmanager 服务。
 
diff --git a/web-app/src/assets/doc/alert-integration/alertmanager.zh-TW.md 
b/web-app/src/assets/doc/alert-integration/alertmanager.zh-TW.md
index b7606af054..2dab634b43 100644
--- a/web-app/src/assets/doc/alert-integration/alertmanager.zh-TW.md
+++ b/web-app/src/assets/doc/alert-integration/alertmanager.zh-TW.md
@@ -4,19 +4,21 @@
 
 1. 在 Alertmanager 配置文件中添加 webhook 配置。
 
-    ```yaml
-    receivers:
-      - name: 'webhook'
-        webhook_configs:
-          - url: 'http://${hertzbeat_host}:1157/api/alerts/report/alertmanager'
-            http_config:
-              headers:
-              Authorization: 'Bearer {token}'
-            send_resolved: true
-    ```
-- `http://${hertzbeat_ip}:8080/api/alerts/report` 為 HertzBeat 提供的 webhook 接口地址。
+```yaml
+receivers:
+  - name: 'webhook'
+    webhook_configs:
+      - url: 'http://{hertzbeat_host}:1157/api/alerts/report/alertmanager'
+        send_resolved: true
+        http_config:
+          authorization: 
+            type: 'Bearer'
+            credentials: '{token}'
+```
+
+- `http://{hertzbeat_host}:1157/api/alerts/report/alertmanager` 為 HertzBeat 
提供的 webhook 接口地址。
 - `send_resolved: true` 表示發送告警恢復信息。
-- `Authorization` 內的 {token} 為 HertzBeat 提供的 token。
+- `credentials` 內的 `{token}` 為 HertzBeat 提供的 token。
 
 2. 重啟 Alertmanager 服務。
 
diff --git a/web-app/src/assets/doc/alert-integration/prometheus.en-US.md 
b/web-app/src/assets/doc/alert-integration/prometheus.en-US.md
index 5e6f669ac4..7a2950ec5b 100644
--- a/web-app/src/assets/doc/alert-integration/prometheus.en-US.md
+++ b/web-app/src/assets/doc/alert-integration/prometheus.en-US.md
@@ -1,78 +1,41 @@
-# Prometheus Alert Integration
+Users can directly configure the HertzBeat service address in the Alertmanager 
configuration of the Prometheus Server to replace the Alertmanager for 
receiving and processing alerts from the Prometheus Server.
+
+### Prometheus Service Configuration
+
+- Edit the Prometheus configuration file `prometheus.yml` to add HertzBeat as 
the alert receiver configuration
+```yaml
+# Alertmanager configuration
+alerting:
+  alertmanagers:
+    - static_configs:
+        - targets:
+            - {hertzbeat_host}:1157
+      authorization:
+        type: 'Bearer'
+        credentials: '{token}'
 
-HertzBeat is fully compatible with Prometheus alert data format. You can 
configure Prometheus alerting rules to send alerts to HertzBeat.
-
-## Prometheus Alert Configuration
-
-> Since Prometheus Server itself doesn't support sending alerts via HTTP API, 
external scripts or Alertmanager are needed to implement alert sending.  
-> If using Alertmanager, please refer to the **Alertmanager Integration 
Documentation**. Here we provide the alert configuration method for Prometheus 
Server without deploying Alertmanager.
-
-### Prometheus Alert Configuration
-
-1. Edit Prometheus configuration file `prometheus.yml`, add alert rules 
configuration
-    ```yaml
-    rule_files:
-      - "rules/*.rules.yml"
-    ```
-    > `rules/*.rules.yml` is the path to alert rule files, which can be 
modified according to actual situations
-> 2. Create alert rules folder `rules` and create alert rule files 
`rules/*.rules.yml`
-> 3. Edit alert rule files, add alert rule configurations
-> 4. Reload Prometheus configuration
-
-### Write Scripts to Send Alerts Automatically
-
-> Since Prometheus Server itself doesn't support sending alerts via HTTP API, 
we'll use Python scripts to implement alert sending.
-
-1. Install Python requests library
-    ```bash
-    pip install requests
-    ```
-2. Write Python script `send_alerts.py`
-```python
-import requests
-
-PROMETHEUS_URL = "http://<prometheus-host>:9090/api/v1/alerts"
-WEBHOOK_URL = "http://<hertzbeat-host>:1157/api/alerts/report/prometheus"
-
-def get_prometheus_alerts():
-    response = requests.get(PROMETHEUS_URL)
-    alerts = response.json()["data"]["alerts"]
-    return alerts
-
-def send_to_webhook(alert):
-    requests.post(WEBHOOK_URL, json=alert)
-
-if __name__ == "__main__":
-    while True:
-        alerts = get_prometheus_alerts()
-        for alert in alerts:
-            send_to_webhook(alert)
-        # schedule cyclic task, every 300s once
-        time.sleep(300)  
-        
 ```
-3. Run Python script
-    ```bash
-    python send_alerts.py
-    ```
-    > This script will fetch alert data from Prometheus Server and push it to 
HertzBeat alert platform via Webhook.
+- `{hertzbeat_host}:1157` is the address and port of the HertzBeat Server, 
modify according to the actual situation, and ensure network connectivity.
+- `{token}` is the authorization Token for the HertzBeat Server, replace the 
value after applying for a new Token.
+
+- Reload and start the Prometheus Server 
 
 ## Verify Configuration
 
-1. Ensure Prometheus configuration is correct and reload configuration
+1. Ensure the Prometheus configuration is correct and reload the configuration
     ```bash
     curl -X POST http://localhost:9090/-/reload
     ```
-2. Check Prometheus alert rules status
+2. Check the status of Prometheus alert rules
     ```bash
     curl http://localhost:9090/api/v1/rules
     ```
-3. Trigger test alerts and check in HertzBeat alert center
+3. Trigger a test alert and check in the HertzBeat alert center.
 
 ## Common Issues
 
-- Ensure HertzBeat URL is accessible from Prometheus server
-- Check Prometheus logs for alert sending failure error messages
-- Verify the correctness of alert rule expressions
+- Ensure the HertzBeat URL is accessible from the Prometheus server.
+- Check the Prometheus logs for any error messages regarding alert sending 
failures.
+- Verify the correctness of the alert rule expressions.
 
-For more information, please refer to [Prometheus Alerting 
Documentation](https://prometheus.io/docs/alerting/latest/configuration/)
+For more information, please refer to the [Prometheus Alert Configuration 
Documentation](https://prometheus.io/docs/alerting/latest/configuration/)
diff --git a/web-app/src/assets/doc/alert-integration/prometheus.zh-CN.md 
b/web-app/src/assets/doc/alert-integration/prometheus.zh-CN.md
index 498d3c36d6..3b9b509868 100644
--- a/web-app/src/assets/doc/alert-integration/prometheus.zh-CN.md
+++ b/web-app/src/assets/doc/alert-integration/prometheus.zh-CN.md
@@ -1,55 +1,24 @@
-> 由于 Prometheus Server 本身并不支持 HTTP API 的告警发送,因此需要借助外部脚本或者 Alertmanager 
来实现告警发送。  
-> 若使用 Alertmanager,可参考 **Alertmanager 集成文档**。这里提供非部署 Alertmanager 的 Prometheus 
Server 的告警配置方法。
+> 可以在 Prometheus Server 的 Alertmanager 配置中直接配置 HertzBeat 的服务地址,使用 HertzBeat 替换 
Alertmanager 直接来接收处理 Prometheus Server 的告警信息。
+
+### Prometheus 服务配置
+
+- 編輯 Prometheus 配置文件 `prometheus.yml`,添加 HertzBeat 作为告警接收端配置
+```yaml
+# Alertmanager configuration
+alerting:
+  alertmanagers:
+    - static_configs:
+        - targets:
+            - {hertzbeat_host}:1157
+      authorization:
+        type: 'Bearer'
+        credentials: '{token}'
 
-### Prometheus 告警配置
-
-1. 編輯 Prometheus 配置文件 `prometheus.yml`,添加告警規則配置
-    ```yaml
-    rule_files:
-      - "rules/*.rules.yml"
-    ```
-    > `rules/*.rules.yml` 為告警規則文件路徑,可以根據實際情況修改
-> 2. 創建告警規則文件夾 `rules`,並創建告警規則文件 `rules/*.rules.yml`
-> 3. 編輯告警規則文件,添加告警規則配置
-> 4. 重新加載 Prometheus 配置
-
-### 编写脚本自动发送告警
-
-> 由于 Prometheus Server 本身并不支持 HTTP API 的告警发送,这里我们使用 Python 脚本来实现告警发送。
-
-1. 安装 Python requests 库
-    ```bash
-    pip install requests
-    ```
-2. 编写 Python 脚本 `send_alerts.py`
-```python
-import requests
-
-PROMETHEUS_URL = "http://<prometheus-host>:9090/api/v1/alerts"
-WEBHOOK_URL = "http://<hertzbeat-host>:1157/api/alerts/report/prometheus"
-
-def get_prometheus_alerts():
-    response = requests.get(PROMETHEUS_URL)
-    alerts = response.json()["data"]["alerts"]
-    return alerts
-
-def send_to_webhook(alert):
-    requests.post(WEBHOOK_URL, json=alert)
-
-if __name__ == "__main__":
-    while True:
-        alerts = get_prometheus_alerts()
-        for alert in alerts:
-            send_to_webhook(alert)
-        # 设置定时任务,例如每 300 秒即 5 分钟执行一次
-        time.sleep(300)  
-        
 ```
-3. 运行 Python 脚本
-    ```bash
-    python send_alerts.py
-    ```
-    > 该脚本会从 Prometheus Server 获取告警数据,并通过 Webhook 推送到 HertzBeat 告警平台。
+- `{hertzbeat_host}:1157` 為 HertzBeat Server 地址和短裤,根据实际情况修改,需要保证网络连通性
+- `{token}` 为 HertzBeat Server 的授权 Token,申请新 Token 后替换值
+
+- 重新加载启动 Prometheus Server 
 
 ## 验证配置
 
diff --git a/web-app/src/assets/doc/alert-integration/prometheus.zh-TW.md 
b/web-app/src/assets/doc/alert-integration/prometheus.zh-TW.md
index 7dcf5b57ae..c0a2a7f1ff 100644
--- a/web-app/src/assets/doc/alert-integration/prometheus.zh-TW.md
+++ b/web-app/src/assets/doc/alert-integration/prometheus.zh-TW.md
@@ -1,55 +1,24 @@
-> 由於 Prometheus Server 本身並不支持 HTTP API 的告警發送,因此需要借助外部腳本或者 Alertmanager 
來實現告警發送。  
-> 若使用 Alertmanager,可參考 **Alertmanager 集成文檔**。這裡提供非部署 Alertmanager 的 Prometheus 
Server 的告警配置方法。
+可以在 Prometheus Server 的 Alertmanager 配置中直接配置 HertzBeat 的服務地址,使用 HertzBeat 替換 
Alertmanager 直接來接收處理 Prometheus Server 的告警信息。
+
+### Prometheus 服務配置
+
+- 編輯 Prometheus 配置文件 `prometheus.yml`,添加 HertzBeat 作為告警接收端配置
+```yaml
+# Alertmanager configuration
+alerting:
+  alertmanagers:
+    - static_configs:
+        - targets:
+            - {hertzbeat_host}:1157
+      authorization:
+        type: 'Bearer'
+        credentials: '{token}'
 
-### Prometheus 告警配置
-
-1. 編輯 Prometheus 配置文件 `prometheus.yml`,添加告警規則配置
-    ```yaml
-    rule_files:
-      - "rules/*.rules.yml"
-    ```
-    > `rules/*.rules.yml` 為告警規則文件路徑,可以根據實際情況修改
-> 2. 創建告警規則文件夾 `rules`,並創建告警規則文件 `rules/*.rules.yml`
-> 3. 編輯告警規則文件,添加告警規則配置
-> 4. 重新加載 Prometheus 配置
-
-### 編寫腳本自動發送告警
-
-> 由於 Prometheus Server 本身並不支持 HTTP API 的告警發送,這裡我們使用 Python 腳本來實現告警發送。
-
-1. 安裝 Python requests 庫
-    ```bash
-    pip install requests
-    ```
-2. 編寫 Python 腳本 `send_alerts.py`
-```python
-import requests
-
-PROMETHEUS_URL = "http://<prometheus-host>:9090/api/v1/alerts"
-WEBHOOK_URL = "http://<hertzbeat-host>:1157/api/alerts/report/prometheus"
-
-def get_prometheus_alerts():
-    response = requests.get(PROMETHEUS_URL)
-    alerts = response.json()["data"]["alerts"]
-    return alerts
-
-def send_to_webhook(alert):
-    requests.post(WEBHOOK_URL, json=alert)
-
-if __name__ == "__main__":
-    while True:
-        alerts = get_prometheus_alerts()
-        for alert in alerts:
-            send_to_webhook(alert)
-        # 设置定时任务,例如每 300 秒即 5 分钟执行一次
-        time.sleep(300)  
-        
 ```
-3. 運行 Python 腳本
-    ```bash
-    python send_alerts.py
-    ```
-    > 該腳本會從 Prometheus Server 獲取告警數據,並通過 Webhook 推送到 HertzBeat 告警平台。
+- `{hertzbeat_host}:1157` 為 HertzBeat Server 地址和端口,根據實際情況修改,需要保證網絡連通性。
+- `{token}` 為 HertzBeat Server 的授權 Token,申請新 Token 後替換值。
+
+- 重新加載啟動 Prometheus Server 
 
 ## 驗證配置
 
@@ -61,12 +30,12 @@ if __name__ == "__main__":
     ```bash
     curl http://localhost:9090/api/v1/rules
     ```
-3. 觸發測試告警並在 HertzBeat 告警中心查看
+3. 觸發測試告警並在 HertzBeat 告警中心查看。
 
 ## 常見問題
 
-- 確保 HertzBeat URL 可以被 Prometheus 服務器訪問
-- 檢查 Prometheus 日誌中是否有告警發送失敗的錯誤信息
-- 驗證告警規則表達式的正確性
+- 確保 HertzBeat URL 可以被 Prometheus 伺服器訪問。
+- 檢查 Prometheus 日誌中是否有告警發送失敗的錯誤信息。
+- 驗證告警規則表達式的正確性。
 
 更多信息請參考 [Prometheus 
告警配置文檔](https://prometheus.io/docs/alerting/latest/configuration/)
diff --git a/web-app/src/assets/doc/alert-integration/webhook.en-US.md 
b/web-app/src/assets/doc/alert-integration/webhook.en-US.md
index f0748d18ba..0551f8f5da 100644
--- a/web-app/src/assets/doc/alert-integration/webhook.en-US.md
+++ b/web-app/src/assets/doc/alert-integration/webhook.en-US.md
@@ -7,7 +7,7 @@
 ### Request Headers
 
 - `Content-Type`: `application/json`
-- `Authorization`: `Bearer ${token}`
+- `Authorization`: `Bearer {token}`
 
 ### Request Body
 
diff --git a/web-app/src/assets/doc/alert-integration/webhook.zh-CN.md 
b/web-app/src/assets/doc/alert-integration/webhook.zh-CN.md
index 53ebbfbc55..bddead510c 100644
--- a/web-app/src/assets/doc/alert-integration/webhook.zh-CN.md
+++ b/web-app/src/assets/doc/alert-integration/webhook.zh-CN.md
@@ -7,7 +7,7 @@
 ### 请求头
 
 - `Content-Type`: `application/json`
-- `Authorization`: `Bearer ${token}`
+- `Authorization`: `Bearer {token}`
 
 ### 请求体
 
diff --git a/web-app/src/assets/doc/alert-integration/webhook.zh-TW.md 
b/web-app/src/assets/doc/alert-integration/webhook.zh-TW.md
index 873dfbfda8..57af47ce95 100644
--- a/web-app/src/assets/doc/alert-integration/webhook.zh-TW.md
+++ b/web-app/src/assets/doc/alert-integration/webhook.zh-TW.md
@@ -7,7 +7,7 @@
 ### 請求頭
 
 - `Content-Type`: `application/json`
-- `Authorization`: `Bearer ${token}`
+- `Authorization`: `Bearer {token}`
 
 ### 請求體
 
diff --git a/web-app/src/assets/i18n/en-US.json 
b/web-app/src/assets/i18n/en-US.json
index 0e01eda120..c7d7210452 100644
--- a/web-app/src/assets/i18n/en-US.json
+++ b/web-app/src/assets/i18n/en-US.json
@@ -234,11 +234,6 @@
   "alert.group-converge.delete": "Delete Converge Strategy",
   "alert.group-converge.name": "Strategy Name",
   "alert.group-converge.match-all": "Match All",
-  "alert.group-converge.priority": "Priority Match",
-  "alert.group-converge.tags": "Tag Match",
-  "alert.group-converge.repeat": "Repeat Alert Criteria",
-  "alert.group-converge.repeat-rule": "The alert tags and alert priority are 
the same",
-  "alert.group-converge.eval-interval": "Repeat Alert Converge Interval(s)",
   "alert.group-converge.enable": "Enable Converge",
   "alert.center.delete": "Delete Alerts",
   "alert.center.clear": "Clear All",
@@ -256,7 +251,7 @@
   "alert.center.time": "Alert Time",
   "alert.center.time.tip": "Alerts were triggered {{times}} times during this 
alert period",
   "alert.center.first-time": "Start Time",
-  "alert.center.last-time": "Latest Time",
+  "alert.center.last-time": "Active Time",
   "alert.center.end-time": "End Time",
   "alert.center.confirm.delete": "Please confirm whether to delete!",
   "alert.center.confirm.clear-all": "Please confirm whether to clear all 
alerts!",
@@ -267,9 +262,9 @@
   "alert.center.confirm.mark-no": "Please confirm whether to mark Pending!",
   "alert.help.notice": "Notification is used to config the receiver of alarm 
message and receiving method. The alarm message will be sent to the receiver by 
specified way(support email, discord, webhook etc). <a 
href='https://hertzbeat.apache.org/zh-cn/docs/help/alert_webhook'>Click here to 
see configuration steps.</a>.<br>“<i>Notice Template</i>” is message content 
structure template. The built-in template is used by default or you can 
customize the template to customize the message not [...]
   "alert.help.notice.link": 
"https://hertzbeat.apache.org/docs/help/alert_email";,
-  "alert.help.converge": "Alarm Converge supports deduplication and 
convergence of repeated alarm messages within a specified time period. <br> 
Click \"<i>New Converge Strategy</i>\" and configure the time period to 
avoiding a large number of repetitive alarms that may numb the receiver's 
alarm.",
-  "alert.help.converge.link": "https://hertzbeat.apache.org";,
-  "alert.help.center": "Alarm Center is the notification processing center for 
all triggered alarm messages, including alarms triggered by system internal 
thresholds and alarm information accessed through third-party external alarm 
channels. <br> Hertzbeat support batch operations such as alarm query, mark 
processing, unprocessed, alarm deletion and clearing.",
+  "alert.help.group": "Alarm Group convergence supports grouping and merging 
alarms with specified group labels, and deduplicates the same repeated alarms 
in the time period. You can click \"<i>Add grouping policy</i>\" and configure 
it.<br>When the threshold rule triggers an alarm or an external alarm is 
reported, it will enter the group convergence to group the alarms and 
deduplicate the alarms to avoid alarm storms caused by a large number of alarm 
messages.",
+  "alert.help.group.link": "https://hertzbeat.apache.org";,
+  "alert.help.center": "Alarm Center is a display platform for all alarms that 
have been processed by grouping, convergence, suppression, silencing, etc., 
including alarms triggered by internal system thresholds and third-party access 
alarms.",
   "alert.help.center.link": "https://hertzbeat.apache.org/docs/help/guide";,
   "alert.help.setting": "Threshold Rules are used for metrics alarm threshold 
rule management. Click the \"<i>New Threshold</i>\" to configure the alarm 
threshold for monitoring metrics. Hertzbeat will trigger alarms based on the 
threshold and metrics data.<br>Note⚠\uFE0F: The alarm message that has been 
triggered can be checked in [Alter Center], and you can also set the 
notification method and personnel in [Notification].",
   "alert.help.setting.link": 
"https://hertzbeat.apache.org/docs/help/alert_threshold";,
@@ -413,7 +408,7 @@
   "monitor_icon.cache": "group",
   "monitor_icon.bigdata": "dot-chart",
   "monitor_icon.webserver": "database",
-  "monitors.center.help": "Monitoring Center is the monitoring resource 
management portal of HertzBeat. Displays the currently added monitors in the 
form of list, and supports tag grouping, query filtering, and access to view 
monitoring details. <br> You can add, modify, delete, pause monitoring, 
import/export, batch management, and other operations on the monitors.",
+  "monitors.center.help": "Monitoring Center is the monitoring resource 
management portal. Displays the currently added monitors in the form of list, 
and supports label grouping, query filtering, and access to view monitoring 
details. <br> You can add, modify, delete, pause monitoring, import/export, 
batch management, and other operations on the monitors.",
   "monitors.center.help.link": "https://hertzbeat.apache.org/docs/";,
   "monitors.center.search.placeholder": "Search monitor type to add: Linux, 
Redis",
   "monitors.list": "Monitor List",
@@ -585,10 +580,10 @@
   "tag.update-time": "Update Time",
   "label.display": "Display",
   "label.bind": "Bind Labels",
-  "label.bind.tip": "You can use tags for classification management.eg: assign 
tags to resources in production environment and test environment.",
-  "labels.help": "Labels are everywhere in HertzBeat. We can apply tags in 
resource grouping, tag matching under rules and others. [Tag Manage] is used 
for unified management of tags, including adding, deleting, editing, etc. 
<br>You can use tags to classify and manage monitoring resources, such as 
binding labels for production and testing environments separately.",
+  "label.bind.tip": "You can use labels for classification management.eg: 
assign labels to resources in production environment and test environment.",
+  "labels.help": "Labels are everywhere. We can apply labels in resource 
grouping, tag matching under rules and others. [Label Manage] is used for 
unified management of labels, including adding, deleting, editing, etc. <br>You 
can use labels to classify and manage monitoring resources, such as binding 
labels for production and testing environments separately.",
   "labels.help.link": "https://hertzbeat.apache.org/zh-cn/docs/";,
-  "plugin.help": "In HertzBeat, we can use the plugin mechanism to perform 
some other operations after the alarm except notification. Plugin management is 
used for unified management of plugins, including upload and enable/disable 
operations.<br>For example, you can use the plugin mechanism to execute 
specific scripts or SQL after the alarm occurs.",
+  "plugin.help": "Plugin management is used for unified management of plugins, 
including upload and enable/disable operations, we can use the plugin mechanism 
to perform some other operations after the alarm except notification. <br>For 
example, you can use the plugin mechanism to execute specific scripts or SQL 
after the alarm occurs.",
   "plugin.help.link": "https://hertzbeat.apache.org/docs/help/plugin";,
   "plugin.upload": "Upload Plugin",
   "plugin.name": "Plugin Name",
@@ -798,7 +793,6 @@
   "alert.setting.template.vars.instance": "Instance ID",
   "alert.setting.template.vars.value": "Trigger Value",
   "alert.setting.template.vars.threshold": "Threshold Expression",
-  "alert.setting.template.vars.tags": "Tag Information",
   "alert.setting.template.vars.time": "Trigger Time",
   "alert.setting.template.vars.tip": "Insert metrics or operators",
   "alert.setting.expr.operator.equals": "Equals",
@@ -810,8 +804,8 @@
   "alert.setting.expr.operator.and": "And",
   "alert.setting.expr.operator.or": "Or",
   "alert.setting.expr.operator.brackets": "Brackets",
-  "alert.setting.type.realtime.desc": "Real-time calculation of collected 
metrics, trigger alert immediately when threshold is reached",
-  "alert.setting.type.periodic.desc": "Periodically execute PromQL queries, 
trigger alerts based on results",
+  "alert.setting.type.realtime.desc": "Real-time metric calculation with 
instant alert on threshold breach.",
+  "alert.setting.type.periodic.desc": "Periodically execute PromQL queries to 
trigger threshold alerts.",
   "alert.setting.period": "Execution Period",
   "alert.setting.period.tip": "Time interval for periodic threshold 
calculation, in seconds, minimum 60 seconds",
   "alert.setting.period.placeholder": "Please enter execution period, minimum 
60 seconds",
@@ -851,7 +845,7 @@
   "alert.inhibit.new": "New Inhibit Rule",
   "alert.inhibit.edit": "Edit Inhibit Rule",
   "alert.inhibit.delete": "Delete Inhibit Rule",
-  "alert.help.inhibit": "Alert inhibition is used to configure inhibition 
relationships between alerts. When an alert occurs, it can inhibit other alerts 
from being generated. For example, when a server goes down, all alerts on that 
server can be inhibited.",
+  "alert.help.inhibit": "Alert Inhibit is used to configure inhibition 
relationships between alerts. When an alert occurs, it can inhibit other alerts 
from being generated. For example, when a server goes down, all alerts on that 
server can be inhibited.",
   "alert.help.inhibit.link": 
"https://hertzbeat.apache.org/docs/help/alert_inhibit";,
   "common.button.confirm": "Confirm",
   "annotation": "Annotation",
diff --git a/web-app/src/assets/i18n/zh-CN.json 
b/web-app/src/assets/i18n/zh-CN.json
index 2b96a4e8d2..968c73f62a 100644
--- a/web-app/src/assets/i18n/zh-CN.json
+++ b/web-app/src/assets/i18n/zh-CN.json
@@ -235,11 +235,6 @@
   "alert.group-converge.delete": "删除分组策略",
   "alert.group-converge.name": "策略名称",
   "alert.group-converge.match-all": "应用所有",
-  "alert.group-converge.priority": "匹配级别",
-  "alert.group-converge.tags": "匹配标签",
-  "alert.group-converge.repeat": "重复告警判定条件",
-  "alert.group-converge.repeat-rule": "告警标签与告警级别相同",
-  "alert.group-converge.eval-interval": "重复告警收敛周期(秒)",
   "alert.group-converge.enable": "启用分组策略",
   "alert.center.delete": "删除告警",
   "alert.center.clear": "一键清空",
@@ -268,11 +263,11 @@
   "alert.center.confirm.mark-no": "请确认是否标记未处理!",
   "alert.help.notice": 
"消息通知用于配置告警通知的接收对象以及接收方式,使被阈值触发的告警信息,通过指定方式通知到接收对象(支持邮箱、钉钉、微信,Webhook等),<a 
href='https://hertzbeat.apache.org/zh-cn/docs/help/alert_webhook'>点击查看具体配置步骤</a>。<br>通知模版是不同通知方式对应的消息内容结构模版,默认使用内置模版或者您可以自定义模版来自定义消息通知结构。<br><span
 
class='help_module_span'>注意⚠\uFE0F:配置“<i>通知媒介后</i>”,您还需要配置“<i>通知策略</i>”来指定哪些消息发给哪些接收对象,</span><a
 
href='https://hertzbeat.apache.org/zh-cn/docs/help/alert_email#%E9%82%AE%E4%BB%B6%E9%80%9A%E7%9F%A5%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98'>点击查看可能遇见的问题</a>。",
   "alert.help.notice.link": 
"https://hertzbeat.apache.org/zh-cn/docs/help/alert_email";,
-  "alert.help.converge": 
"告警收敛支持对指定时间段内的相同重复告警消息进行去重收敛。您可以点击”<i>新增分组策略</i>“,并进行配置。<br>当阈值规则触发告警后,会进入到告警收敛,告警收敛会根据收敛规则对重复告警收敛,以避免大量重复告警消息导致接收风暴。",
-  "alert.help.converge.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E6%94%B6%E6%95%9B";,
-  "alert.help.center": 
"告警中心是所有已触发告警消息的通知处理中心,包括系统内部阈值触发的告警和第三方外部告警渠道接入的告警信息。<br>通过告警中心我们可以对告警消息进行查询,标记处理,告警标记未处理,告警删除清空等批量操作。",
+  "alert.help.group": 
"分组收敛支持对指定分组标签的告警进行分组合并,对时间段的相同重复告警去重收敛。您可以点击”<i>新增分组策略</i>“,并进行配置。<br>当阈值规则触发告警或外部告警上报后,会进入到分组收敛进行告警分组,告警去重,以避免大量告警消息导致告警风暴。",
+  "alert.help.group.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E6%94%B6%E6%95%9B";,
+  "alert.help.center": 
"告警中心是所有经过分组,收敛,抑制,静默等处理后的告警的展示平台,包括系统内部阈值触发的告警和第三方接入告警。",
   "alert.help.center.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E4%B8%AD%E5%BF%83";,
-  "alert.help.setting": 
"阈值规则用于监控指标告警阈值规则管理,点击“新增阈值”对监控指标进行告警阈值配置,系统将根据配置和采集指标数据计算触发告警。您也可以根据需要修改已有配置,如需进行阈值关联监控,请先关闭全局默认。<br>注意⚠\uFE0F:
 配置完毕后,被阈值触发的告警可以在【告警中心】中查看,您也可以在【消息通知】中设置告警消息的通知方式以及通知人员。",
+  "alert.help.setting": 
"阈值规则用于监控指标告警阈值规则管理,点击“新增阈值”对监控指标进行告警阈值配置,系统将根据配置和采集指标数据计算触发告警。<br>注意⚠\uFE0F: 
配置完毕后,被阈值触发的告警可以在【告警中心】中查看,您也可以在【消息通知】中设置告警消息的通知方式以及通知人员。",
   "alert.help.setting.link": 
"https://hertzbeat.apache.org/zh-cn/docs/help/alert_threshold";,
   "alert.help.silence": 
"告警静默管理用于您在系统维护期间或夜晚周末不想受到告警打扰时,可以点击”<i>新增静默策略</i>“,设置指定时间段内屏蔽告警通知。<br>告警静默规则支持一次性时间段或周期性时间段,支持标签匹配和告警级别匹配部分告警。",
   
"alert.help.silence.link":"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E9%9D%99%E9%BB%98";,
@@ -415,7 +410,7 @@
   "monitor_icon.cache": "group",
   "monitor_icon.bigdata": "dot-chart",
   "monitor_icon.webserver": "database",
-  "monitors.center.help": 
"监控中心是HertzBeat的监控资源管理入口,以列表的形式展示当前已添加的监控,同时支持标签分组,查询过滤,查看监控详情入口等。<br>您可以对监控资源进行新增,修改,删除,暂停监控,导入导出,批量管理等操作。",
+  "monitors.center.help": 
"监控中心是监控资源管理入口,以列表的形式展示当前已添加的监控,同时支持标签分组,查询过滤,查看监控详情等。<br>您可以对监控资源进行新增,修改,删除,暂停监控,导入导出,批量管理等操作。",
   "monitors.center.help.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E7%9B%91%E6%8E%A7%E4%B8%AD%E5%BF%83";,
   "monitors.center.search.placeholder": "搜索待添加监控任务的类型: Linux, Redis",
   "monitors.list": "监控列表",
@@ -587,12 +582,12 @@
   "label": "标签",
   "label.bind": "绑定标签",
   "label.bind.tip": "您可以使用标签进行监控资源的分类管理, 例如给资源分别绑定生产环境、测试环境的标签。",
-  "labels.help": "标签在 HertzBeat 
中无处不在,我们可以应用标签在资源分组,规则下的标签匹配等场景。标签管理用于对标签的统一管理维护,包含新增,删除,编辑等操作。<br>例如:您可以使用标签对监控资源进行分类管理,给资源分别绑定生产环境、测试环境的标签,在告警通知时通过标签匹配不同的通知人。",
+  "labels.help": 
"标签无处不在,我们可以应用标签在资源分组,规则下的标签匹配等场景。标签管理用于对标签的统一管理维护,包含新增,删除,编辑等操作。<br>例如:您可以使用标签对监控资源进行分类管理,给资源分别绑定生产环境、测试环境的标签,在告警通知时通过标签匹配不同的通知人。",
   "labels.help.link": "https://hertzbeat.apache.org/zh-cn/docs/";,
   "annotation": "注解",
   "annotation.bind": "绑定注解",
   "annotation.bind.tip": "您可以使用注解对实体信息进行标记,例如给资源绑定重要事件的注解。",
-  "plugin.help": 
"在HertzBeat中,我们可以通过插件机制在告警后执行一些除通知以外的其他操作。插件管理用于对插件的统一管理,包括上传和,启用禁用等操作。<br>例如:您可以通过插件机制实现在告警出现后,执行特定的脚本或SQL等操作。",
+  "plugin.help": 
"插件管理用于对用户自定义插件的统一管理,包括上传和,启用禁用等。我们可以通过插件机制在告警后执行一些除通知以外的其他操作。<br>例如:您可以通过插件机制实现在告警出现后,执行特定的脚本或SQL等操作。",
   "plugin.help.link": "https://hertzbeat.apache.org/zh-cn/docs/help/plugin";,
   "plugin.upload": "上传插件",
   "plugin.name": "插件名称",
@@ -808,7 +803,6 @@
   "alert.setting.template.vars.instance": "实例ID",
   "alert.setting.template.vars.value": "触发值",
   "alert.setting.template.vars.threshold": "阈值表达式",
-  "alert.setting.template.vars.tags": "标签信息",
   "alert.setting.template.vars.time": "触发时间",
   "alert.setting.template.vars.tip": "插入指标或操作符",
   "alert.setting.template.example": "请输入阈值表达式,支持使用指标和操作符",
@@ -822,8 +816,8 @@
   "alert.setting.expr.operator.or": "或",
   "alert.setting.expr.operator.brackets": "括号",
   "alert.setting.new": "新增阈值",
-  "alert.setting.type.realtime.desc": "实时计算采集的指标数据,触发阈值时立即告警",
-  "alert.setting.type.periodic.desc": "周期性执行 PromQL 查询,根据结果触发阈值告警",
+  "alert.setting.type.realtime.desc": "实时计算指标数据,触发阈值时立即告警",
+  "alert.setting.type.periodic.desc": "周期性执行 PromQL 查询触发阈值告警",
   "alert.setting.period": "执行周期",
   "alert.setting.period.tip": "周期性执行阈值计算的时间间隔,单位秒,最小60秒",
   "alert.setting.period.placeholder": "请输入执行周期,最小60秒",
diff --git a/web-app/src/assets/i18n/zh-TW.json 
b/web-app/src/assets/i18n/zh-TW.json
index 183c857b22..ca6f37c6a9 100644
--- a/web-app/src/assets/i18n/zh-TW.json
+++ b/web-app/src/assets/i18n/zh-TW.json
@@ -247,11 +247,6 @@
   "alert.group-converge.delete": "刪除收斂策略",
   "alert.group-converge.name": "策略名稱",
   "alert.group-converge.match-all": "應用所有",
-  "alert.group-converge.priority": "匹配級別",
-  "alert.group-converge.tags": "匹配標籤",
-  "alert.group-converge.repeat": "重複告警判定條件",
-  "alert.group-converge.repeat-rule": "告警標籤與告警級別相同",
-  "alert.group-converge.eval-interval": "重複告警收斂週期(秒)",
   "alert.group-converge.enable": "啟用收斂策略",
   "alert.center.delete": "刪除告警",
   "alert.center.clear": "一鍵清空",
@@ -280,11 +275,11 @@
   "alert.center.confirm.mark-no": "請確認是否標記未處理!",
   "alert.help.notice": 
"消息通知用于配置告警通知的接收对象以及接收方式,使被阈值觸發的告警信息,通過指定方式通知到接收对象(支持郵箱、釘釘、微信,Webhook等),<a 
href='https://hertzbeat.apache.org/zh-cn/docs/help/alert_webhook'>點擊查看具體配置步驟</a>。<br>通知模版是不同通知方式對應的消息內容結構模版,默認使用內置模版或者您可以自定義模版來自定義消息通知結構。<br><span
 
class='help_module_span'>注意⚠\uFE0F:配置“<i>通知媒介後</i>”,您還需要配置“<i>通知策略</i>”來指定哪些消息發給哪些接收对象,</span><a
 
href='https://hertzbeat.apache.org/zh-cn/docs/help/alert_email#%E9%82%AE%E4%BB%B6%E9%80%9A%E7%9F%A5%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98'>點擊查看可能遇見的問題</a>。",
   "alert.help.notice.link": 
"https://hertzbeat.apache.org/zh-cn/docs/help/alert_email";,
-  "alert.help.converge": 
"告警收斂支持對指定時間段內的相同重複告警消息進行去重收斂。您可以點擊”<i>新增收斂策略</i>“,並進行配置。<br>當阈值規則觸發告警後,會進入到告警收斂,告警收斂會根據收斂規則對重複告警收斂,以避免大量重複告警消息導致接收風暴。",
-  "alert.help.converge.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E6%94%B6%E6%95%9B";,
-  "alert.help.center": 
"告警中心是所有已觸發告警消息的通知處理中心,包括系統內部阈值觸發的告警和第三方外部告警渠道接入的告警信息。<br>通過告警中心我們可以對告警消息進行查詢,標記處理,告警標記未處理,告警刪除清空等批量操作。",
+  "alert.help.group": 
"分組收斂支援對指定分組標籤的警告進行分組合併,對時間段的相同重複告警去重收斂。您可以點擊”<i>新增分組策略</i>“,並進行配置。<br>當閾值規則觸發告警或外部告警上報後,會進入到分組收斂進行告警分組,告警去重,以避免大量告警消息導致告警風暴。",
+  "alert.help.group.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E6%94%B6%E6%95%9B";,
+  "alert.help.center": 
"警報中心是所有經過分組,收斂,抑制,靜默等處理後的告警的展示平台,包括系統內部閾值觸發的告警和第三方接入告警。",
   "alert.help.center.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E4%B8%AD%E5%BF%83";,
-  "alert.help.setting": 
"阈值規則用于監控指標告警阈值規則管理,點擊“新增阈值”對監控指標進行告警阈值配置,系統將根據配置和采集指標數據計算觸發告警。您也可以根據需要修改已有配置,如需進行阈值關聯監控,請先關閉全局默認。<br>注意⚠\uFE0F:
 配置完畢後,被阈值觸發的告警可以在【告警中心】中查看,您也可以在【消息通知】中設置告警消息的通知方式以及通知人員。",
+  "alert.help.setting": 
"阈值規則用于監控指標告警阈值規則管理,點擊“新增阈值”對監控指標進行告警阈值配置,系統將根據配置和采集指標數據計算觸發告警。<br>注意⚠\uFE0F: 
配置完畢後,被阈值觸發的告警可以在【告警中心】中查看,您也可以在【消息通知】中設置告警消息的通知方式以及通知人員。",
   "alert.help.setting.link": 
"https://hertzbeat.apache.org/zh-cn/docs/help/alert_threshold";,
   "alert.help.silence": 
"告警靜默管理用于您在系統維護期間或夜晚周末不想受到告警打擾時,可以點擊”<i>新增靜默策略</i>“,設置指定時間段內屏蔽告警通知。<br>告警靜默規則支持壹次性時間段或周期性時間段,支持標簽匹配和告警級別匹配部分告警。",
   "alert.help.silence.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E5%91%8A%E8%AD%A6%E9%9D%99%E9%BB%98";,
@@ -427,7 +422,7 @@
   "monitor_icon.cache": "group",
   "monitor_icon.bigdata": "dot-chart",
   "monitor_icon.webserver": "database",
-  "monitors.center.help": 
"監控中心是HertzBeat的監控資源管理入口,以清單的形式展示當前已添加的監控,同時支持標籤分組,査詢過濾,查看監控詳情入口等。<br>您可以對監控進行新增,修改,删除,暫停監控,導入匯出,批量管理等操作。",
+  "monitors.center.help": 
"監控中心是監控資源管理入口,以清單的形式展示當前已添加的監控,同時支持標籤分組,査詢過濾,查看監控詳情等。<br>您可以對監控進行新增,修改,删除,暫停監控,導入匯出,批量管理等操作。",
   "monitors.center.help.link": 
"https://hertzbeat.apache.org/zh-cn/docs/#%E7%9B%91%E6%8E%A7%E4%B8%AD%E5%BF%83";,
   "monitors.center.search.placeholder": "搜索待添加監控任務的類型: Linux, Redis",
   "monitors.list": "監控列表",
@@ -596,9 +591,9 @@
   "label.display": "效果",
   "label.bind": "綁定標簽",
   "label.bind.tip": "您可以使用標簽進行監控資源的分類管理, 例如給資源分別綁定生産環境、測試環境的標簽。",
-  "labels.help": "標簽在 HertzBeat 
中無處不在,我們可以應用標簽在資源分組,規則下的標簽匹配等場景。標簽管理用于對標簽的統壹管理維護,包含新增,刪除,編輯等操作。<br>例如:您可以使用標簽對監控資源進行分類管理,給資源分別綁定生産環境、測試環境的標簽,在告警通知時通過標簽匹配不同的通知人。",
+  "labels.help": 
"標簽無處不在,我們可以應用標簽在資源分組,規則下的標簽匹配等場景。標簽管理用于對標簽的統壹管理維護,包含新增,刪除,編輯等操作。<br>例如:您可以使用標簽對監控資源進行分類管理,給資源分別綁定生産環境、測試環境的標簽,在告警通知時通過標簽匹配不同的通知人。",
   "labels.help.link": "https://hertzbeat.apache.org/zh-cn/docs/";,
-  "plugin.help": 
"在HertzBeat中,我們可以透過外掛機制在警告後執行一些除通知以外的其他操作。外掛程式管理用於對外掛程式的統一管理,包括上傳和,啟用停用等操作。<br>例如:您可以透過外掛機制實現在警告出現後,執行特定的腳本或SQL等操作。",
+  "plugin.help": 
"外掛程式管理用於對用户自定义外掛程式的統一管理,包括上傳和,啟用停用等。我們可以透過外掛機制在警告後執行一些除通知以外的其他操作。。<br>例如:您可以透過外掛機制實現在警告出現後,執行特定的腳本或SQL等操作。",
   "plugin.help.link": "https://hertzbeat.apache.org/zh-cn/docs/help/plugin";,
   "plugin.upload": "上傳外掛",
   "plugin.name": "插件名稱",
@@ -809,7 +804,6 @@
   "alert.setting.template.vars.instance": "实例ID",
   "alert.setting.template.vars.value": "觸發值",
   "alert.setting.template.vars.threshold": "閾值表達式",
-  "alert.setting.template.vars.tags": "標籤信息",
   "alert.setting.template.vars.time": "觸發時間",
   "alert.setting.template.vars.tip": "插入指標或操作符",
   "alert.setting.expr.operator.equals": "等於",
@@ -821,8 +815,8 @@
   "alert.setting.expr.operator.and": "與",
   "alert.setting.expr.operator.or": "或",
   "alert.setting.expr.operator.brackets": "括號",
-  "alert.setting.type.realtime.desc": "實時計算採集的指標數據,觸發閾值時立即告警",
-  "alert.setting.type.periodic.desc": "週期性執行 PromQL 查詢,根據結果觸發閾值告警",
+  "alert.setting.type.realtime.desc": "即時計算指標數據,觸發閾值時立即告警",
+  "alert.setting.type.periodic.desc": "週期性執行 PromQL 查詢觸發閾值警報",
   "alert.setting.period": "執行週期",
   "alert.setting.period.tip": "週期性執行閾值計算的時間間隔,單位秒,最小60秒",
   "alert.setting.period.placeholder": "請輸入執行週期,最小60秒",


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@hertzbeat.apache.org
For additional commands, e-mail: notifications-h...@hertzbeat.apache.org

Reply via email to