feat: [manager,alerter,home]feature:Add alarm template custom console and help document #wqh
This commit is contained in:
@@ -1,10 +1,12 @@
|
|||||||
package com.usthe.alert;
|
package com.usthe.alert;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据仓储配置属性
|
* 数据仓储配置属性
|
||||||
|
*
|
||||||
* @author tom
|
* @author tom
|
||||||
* @date 2021/11/24 10:38
|
* @date 2021/11/24 10:38
|
||||||
*/
|
*/
|
||||||
@@ -12,11 +14,22 @@ import org.springframework.stereotype.Component;
|
|||||||
@ConfigurationProperties(prefix = "alerter")
|
@ConfigurationProperties(prefix = "alerter")
|
||||||
public class AlerterProperties {
|
public class AlerterProperties {
|
||||||
|
|
||||||
|
private String consoleUrl = "https://console.tancloud.cn";
|
||||||
|
|
||||||
|
public String getConsoleUrl() {
|
||||||
|
return consoleUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConsoleUrl(String url) {
|
||||||
|
this.consoleUrl = url;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据入口配置属性
|
* 数据入口配置属性
|
||||||
*/
|
*/
|
||||||
private EntranceProperties entrance;
|
private EntranceProperties entrance;
|
||||||
|
|
||||||
|
|
||||||
public EntranceProperties getEntrance() {
|
public EntranceProperties getEntrance() {
|
||||||
return entrance;
|
return entrance;
|
||||||
}
|
}
|
||||||
@@ -25,6 +38,7 @@ public class AlerterProperties {
|
|||||||
this.entrance = entrance;
|
this.entrance = entrance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据入口配置属性
|
* 数据入口配置属性
|
||||||
* 入口可以是从kafka rabbitmq rocketmq等消息中间件获取数据
|
* 入口可以是从kafka rabbitmq rocketmq等消息中间件获取数据
|
||||||
@@ -98,4 +112,5 @@ public class AlerterProperties {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.usthe.common.util;
|
package com.usthe.common.util;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public Constant
|
* Public Constant
|
||||||
* 公共常量
|
* 公共常量
|
||||||
|
|||||||
18
home/docs/help/alert_console.md
Normal file
18
home/docs/help/alert_console.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
id: alert_console
|
||||||
|
title: 告警模板中自定义的控制台地址
|
||||||
|
sidebar_label: 告警模板登录台地址
|
||||||
|
---
|
||||||
|
|
||||||
|
> 阈值触发后发送告警信息,通过钉钉/企业微信/飞书机器人通知或者使用邮箱通知的时候,告警内容中有登录控制台的详情链接
|
||||||
|
|
||||||
|
|
||||||
|
### 自定义设置
|
||||||
|
|
||||||
|
在我们的启动配置文件application.yml中,找到下面的配置
|
||||||
|
```yml
|
||||||
|
alerter:
|
||||||
|
console-url: #这里就是我们的自定义控制台地址
|
||||||
|
```
|
||||||
|
|
||||||
|
默认值是赫兹跳动的官方控制台地址
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.usthe.manager.component.alerter;
|
package com.usthe.manager.component.alerter;
|
||||||
|
|
||||||
import com.usthe.alert.AlerterDataQueue;
|
import com.usthe.alert.AlerterDataQueue;
|
||||||
|
import com.usthe.alert.AlerterProperties;
|
||||||
import com.usthe.alert.AlerterWorkerPool;
|
import com.usthe.alert.AlerterWorkerPool;
|
||||||
import com.usthe.common.util.CommonUtil;
|
import com.usthe.common.util.CommonUtil;
|
||||||
import com.usthe.common.entity.alerter.Alert;
|
import com.usthe.common.entity.alerter.Alert;
|
||||||
@@ -24,6 +25,7 @@ import org.springframework.stereotype.Component;
|
|||||||
import org.springframework.web.client.ResourceAccessException;
|
import org.springframework.web.client.ResourceAccessException;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import javax.mail.internet.MimeMessage;
|
import javax.mail.internet.MimeMessage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -48,6 +50,8 @@ public class DispatchAlarm {
|
|||||||
private JavaMailSender javaMailSender;
|
private JavaMailSender javaMailSender;
|
||||||
private RestTemplate restTemplate;
|
private RestTemplate restTemplate;
|
||||||
private MailService mailService;
|
private MailService mailService;
|
||||||
|
@Resource
|
||||||
|
private AlerterProperties alerterProperties;
|
||||||
|
|
||||||
@Value("${spring.mail.username}")
|
@Value("${spring.mail.username}")
|
||||||
private String emailFromUser;
|
private String emailFromUser;
|
||||||
@@ -177,13 +181,13 @@ public class DispatchAlarm {
|
|||||||
"\n所属监控ID :" + alert.getMonitorId() +
|
"\n所属监控ID :" + alert.getMonitorId() +
|
||||||
"\n所属监控名称 :" + alert.getMonitorName() +
|
"\n所属监控名称 :" + alert.getMonitorName() +
|
||||||
"\n告警级别 :" + CommonUtil.transferAlertPriority(alert.getPriority()) +
|
"\n告警级别 :" + CommonUtil.transferAlertPriority(alert.getPriority()) +
|
||||||
"\n内容详情 : " + alert.getContent();
|
"\n内容详情 : " + alert.getContent() + "\n";
|
||||||
flyBookContent.setText(text);
|
flyBookContent.setText(text);
|
||||||
contents1.add(flyBookContent);
|
contents1.add(flyBookContent);
|
||||||
FlyBookWebHookDto.FlyBookContent bookContent = new FlyBookWebHookDto.FlyBookContent();
|
FlyBookWebHookDto.FlyBookContent bookContent = new FlyBookWebHookDto.FlyBookContent();
|
||||||
bookContent.setTag("a");
|
bookContent.setTag("a");
|
||||||
bookContent.setText("登入控制台");
|
bookContent.setText("登入控制台");
|
||||||
bookContent.setHref("https://www.tancloud.cn");
|
bookContent.setHref(alerterProperties.getConsoleUrl());
|
||||||
contents1.add(bookContent);
|
contents1.add(bookContent);
|
||||||
contents.add(contents1);
|
contents.add(contents1);
|
||||||
zhCn.setTitle("[TanCloud探云告警通知]");
|
zhCn.setTitle("[TanCloud探云告警通知]");
|
||||||
@@ -214,14 +218,16 @@ public class DispatchAlarm {
|
|||||||
private void sendDingTalkRobotAlert(NoticeReceiver receiver, Alert alert) {
|
private void sendDingTalkRobotAlert(NoticeReceiver receiver, Alert alert) {
|
||||||
DingTalkWebHookDto dingTalkWebHookDto = new DingTalkWebHookDto();
|
DingTalkWebHookDto dingTalkWebHookDto = new DingTalkWebHookDto();
|
||||||
DingTalkWebHookDto.MarkdownDTO markdownDTO = new DingTalkWebHookDto.MarkdownDTO();
|
DingTalkWebHookDto.MarkdownDTO markdownDTO = new DingTalkWebHookDto.MarkdownDTO();
|
||||||
String content = "#### [TanCloud探云告警通知]\n##### **告警目标对象** : " +
|
StringBuilder content = new StringBuilder();
|
||||||
|
content.append("#### [TanCloud探云告警通知]\n##### **告警目标对象** : " +
|
||||||
alert.getTarget() + "\n " +
|
alert.getTarget() + "\n " +
|
||||||
"##### **所属监控ID** : " + alert.getMonitorId() + "\n " +
|
"##### **所属监控ID** : " + alert.getMonitorId() + "\n " +
|
||||||
"##### **所属监控名称** : " + alert.getMonitorName() + "\n " +
|
"##### **所属监控名称** : " + alert.getMonitorName() + "\n " +
|
||||||
"##### **告警级别** : " +
|
"##### **告警级别** : " +
|
||||||
CommonUtil.transferAlertPriority(alert.getPriority()) + "\n " +
|
CommonUtil.transferAlertPriority(alert.getPriority()) + "\n " +
|
||||||
"##### **内容详情** : " + alert.getContent();
|
"##### **内容详情** : " + alert.getContent());
|
||||||
markdownDTO.setText(content);
|
content.append("[点击跳转查看详情](" + alerterProperties.getConsoleUrl() + ")");
|
||||||
|
markdownDTO.setText(content.toString());
|
||||||
markdownDTO.setTitle("TanCloud探云告警通知");
|
markdownDTO.setTitle("TanCloud探云告警通知");
|
||||||
dingTalkWebHookDto.setMarkdown(markdownDTO);
|
dingTalkWebHookDto.setMarkdown(markdownDTO);
|
||||||
String webHookUrl = DingTalkWebHookDto.WEBHOOK_URL + receiver.getAccessToken();
|
String webHookUrl = DingTalkWebHookDto.WEBHOOK_URL + receiver.getAccessToken();
|
||||||
@@ -261,8 +267,10 @@ public class DispatchAlarm {
|
|||||||
content.append("告警级别 : <font color=\"comment\">")
|
content.append("告警级别 : <font color=\"comment\">")
|
||||||
.append(CommonUtil.transferAlertPriority(alert.getPriority())).append("</font>\n");
|
.append(CommonUtil.transferAlertPriority(alert.getPriority())).append("</font>\n");
|
||||||
}
|
}
|
||||||
content.append("内容详情 : ").append(alert.getContent());
|
content.append("内容详情 : ").append(alert.getContent() + "\n");
|
||||||
|
content.append("[点击跳转查看详情](" + alerterProperties.getConsoleUrl() + ")");
|
||||||
markdownDTO.setContent(content.toString());
|
markdownDTO.setContent(content.toString());
|
||||||
|
//TODO 增加控制台地址登录可控制
|
||||||
weWorkWebHookDTO.setMarkdown(markdownDTO);
|
weWorkWebHookDTO.setMarkdown(markdownDTO);
|
||||||
String webHookUrl = WeWorkWebHookDto.WEBHOOK_URL + receiver.getWechatId();
|
String webHookUrl = WeWorkWebHookDto.WEBHOOK_URL + receiver.getWechatId();
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.usthe.manager.service.impl;
|
package com.usthe.manager.service.impl;
|
||||||
|
|
||||||
|
import com.usthe.alert.AlerterProperties;
|
||||||
import com.usthe.common.entity.alerter.Alert;
|
import com.usthe.common.entity.alerter.Alert;
|
||||||
import com.usthe.common.util.CommonUtil;
|
import com.usthe.common.util.CommonUtil;
|
||||||
import com.usthe.manager.service.MailService;
|
import com.usthe.manager.service.MailService;
|
||||||
@@ -11,6 +12,7 @@ import org.thymeleaf.context.Context;
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Mailbox sending service interface implementation class
|
||||||
* 邮箱发送服务接口实现类
|
* 邮箱发送服务接口实现类
|
||||||
*
|
*
|
||||||
* @author 花城
|
* @author 花城
|
||||||
@@ -23,16 +25,20 @@ public class MailServiceImpl implements MailService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TemplateEngine templateEngine;
|
private TemplateEngine templateEngine;
|
||||||
|
@Resource
|
||||||
|
private AlerterProperties alerterProperties;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String buildAlertHtmlTemplate(final Alert alert) {
|
public String buildAlertHtmlTemplate(final Alert alert) {
|
||||||
|
// Introduce thymeleaf context parameters to render pages
|
||||||
// 引入thymeleaf上下文参数渲染页面
|
// 引入thymeleaf上下文参数渲染页面
|
||||||
Context context = new Context();
|
Context context = new Context();
|
||||||
context.setVariable("target",alert.getTarget());
|
context.setVariable("target", alert.getTarget());
|
||||||
context.setVariable("monitorId",alert.getMonitorId());
|
context.setVariable("monitorId", alert.getMonitorId());
|
||||||
context.setVariable("monitorName",alert.getMonitorName());
|
context.setVariable("monitorName", alert.getMonitorName());
|
||||||
context.setVariable("priority", CommonUtil.transferAlertPriority(alert.getPriority()));
|
context.setVariable("priority", CommonUtil.transferAlertPriority(alert.getPriority()));
|
||||||
context.setVariable("content",alert.getContent());
|
context.setVariable("content", alert.getContent());
|
||||||
|
context.setVariable("consoleUrl", alerterProperties.getConsoleUrl());
|
||||||
return templateEngine.process("mailAlarm", context);
|
return templateEngine.process("mailAlarm", context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,4 +68,9 @@ warehouse:
|
|||||||
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
|
||||||
url: jdbc:TAOS-RS://localhost:6041/hertzbeat
|
url: jdbc:TAOS-RS://localhost:6041/hertzbeat
|
||||||
username: root
|
username: root
|
||||||
password: taosdata
|
password: taosdata
|
||||||
|
|
||||||
|
#自定义告警控制台地址
|
||||||
|
alerter:
|
||||||
|
#这里就是我们的自定义控制台地址
|
||||||
|
console-url: https://console.tancloud.cn
|
||||||
|
|||||||
@@ -700,7 +700,7 @@
|
|||||||
<span style="font-family:Arial, Verdana; font-size:14px;color:#FFFFFF;"><a
|
<span style="font-family:Arial, Verdana; font-size:14px;color:#FFFFFF;"><a
|
||||||
target="_blank"
|
target="_blank"
|
||||||
style="color:#FFFFFF;text-decoration:none;"
|
style="color:#FFFFFF;text-decoration:none;"
|
||||||
href="https://console.tancloud.cn"
|
th:href="${consoleUrl}"
|
||||||
data-link-type="web">登入控制台</a></span>
|
data-link-type="web">登入控制台</a></span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user