提交 366edaf7 编写于 作者: Y youyong205

Merge pull request #388 from leonindy/master

add send weixin feature for ExceptionALert
......@@ -165,6 +165,7 @@
${basedir}/src/main/resources/META-INF/dal/model/alert-report-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/monitor-rules-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alertconfig-manifest.xml,
${basedir}/src/main/resources/META-INF/dal/model/alertsummary-manifest.xml,
</manifest>
</configuration>
</execution>
......
......@@ -34,7 +34,7 @@ public class BusinessAlert extends BaseAlert implements Task, LogEnabled {
@Override
public String getName() {
return "metric-alert";
return "business-alert";
}
@Override
......
......@@ -66,16 +66,16 @@ public class ExceptionAlert implements Task, LogEnabled {
private Alert buildAlert(String domainName, AlertException exception, String mailContent) {
Alert alert = new Alert();
alert.setDomain(domainName);
alert.setAlertTime(new Date());
alert.setCategory(getName());
alert.setType(exception.getType());
alert.setContent(mailContent);
alert.setMetric(exception.getName());
return alert;
}
return alert;
}
private TopMetric buildTopMetric(Date date) {
TopReport topReport = queryTopReport(date);
......@@ -91,7 +91,6 @@ public class ExceptionAlert implements Task, LogEnabled {
m_logger = logger;
}
@Override
public String getName() {
return "exception-alert";
}
......@@ -178,12 +177,18 @@ public class ExceptionAlert implements Task, LogEnabled {
Project project = queryProjectByDomain(domain);
List<String> emails = m_alertConfig.buildMailReceivers(project);
List<String> phones = m_alertConfig.buildSMSReceivers(project);
String weixins = m_alertConfig.buildWeiXinReceivers(project);
String mailTitle = m_alertConfig.buildMailTitle(domain, null);
String mailContent = m_alertBuilder.buildMailContent(exceptions.toString(), domain);
m_mailSms.sendEmail(mailTitle, mailContent, emails);
m_logger.info(mailTitle + " " + mailContent + " " + emails);
Cat.logEvent("ExceptionAlert", domain, Event.SUCCESS, "[邮件告警] " + mailTitle + " " + mailContent);
m_mailSms.sendWeiXin(mailTitle, mailContent, domain, weixins);
m_logger.info(mailTitle + " " + mailContent + " " + domain + " " + weixins);
Cat.logEvent("ExceptionAlert", domain, Event.SUCCESS, "[微信告警] " + mailTitle + " " + mailContent + " " + domain
+ " " + weixins);
storeAlerts(domain, exceptions, mailTitle + "<br/>" + mailContent);
......
......@@ -25,6 +25,38 @@ public class ExceptionAlertConfig extends BaseAlertConfig {
}
}
public String buildWeiXinReceivers(Project project) {
StringBuilder builder = new StringBuilder();
Receiver receiver = m_manager.queryReceiverById(getId());
if (receiver != null && !receiver.isEnable()) {
return null;
} else {
builder.append(buildDefaultWeixinReceivers(receiver));
builder.append(project.getEmail());
String result = builder.toString();
if (result.endsWith(",")) {
return result.substring(0, result.length() - 1);
} else {
return result;
}
}
}
private String buildDefaultWeixinReceivers(Receiver receiver) {
StringBuilder builder = new StringBuilder();
if (receiver != null) {
for (String weixin : receiver.getWeixins()) {
builder.append(weixin + ",");
}
}
return builder.toString();
}
@Override
public String buildMailTitle(String domain, String configTitle) {
StringBuilder sb = new StringBuilder();
......
package com.dianping.cat.report.task.alert.summary;
import com.dianping.cat.home.alert.summary.entity.AlertSummary;
public class AlertSummaryDecorator {
public String generateHtml(AlertSummary alertSummary) {
return null;
}
}
package com.dianping.cat.report.task.alert.summary;
import java.util.Date;
import java.util.List;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.home.alert.summary.entity.AlertSummary;
public class AlertSummaryExecutor {
@Inject
AlertSummaryGenerator m_alertSummaryGenerator;
@Inject
AlertSummaryManager m_alertSummaryManager;
@Inject
AlertSummaryDecorator m_alertSummaryDecorator;
@Inject
AlertSummarySender m_alertSummarySender;
public String execute(String domain, Date date, List<String> receivers) {
try {
AlertSummary alertSummary = m_alertSummaryGenerator.generateAlertSummary(domain, date);
m_alertSummaryManager.insert(alertSummary);
String content = m_alertSummaryDecorator.generateHtml(alertSummary);
m_alertSummarySender.send(content, receivers);
return content;
} catch (Exception e) {
Cat.logError("generate alert summary fail:" + domain + " " + date, e);
return null;
}
}
}
package com.dianping.cat.report.task.alert.summary;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.home.alert.summary.entity.AlertSummary;
import com.dianping.cat.home.alert.summary.entity.Category;
import com.dianping.cat.home.dal.report.Alert;
import com.dianping.cat.home.dal.report.AlertDao;
import com.dianping.cat.home.dal.report.AlertEntity;
import com.dianping.cat.home.dependency.graph.entity.TopologyGraph;
import com.dianping.cat.report.page.dependency.graph.TopologyGraphManager;
public class AlertSummaryGenerator {
@Inject
private AlertDao m_alertDao;
@Inject
private TopologyGraphManager m_topologyManager;
// fetch alerts during this period, time unit is ms, default value is 1 hour
private final long DURATION = 60 * 60 * 1000L;
private com.dianping.cat.home.alert.summary.entity.Alert convertToAlert(Alert dbAlert) {
com.dianping.cat.home.alert.summary.entity.Alert alert = new com.dianping.cat.home.alert.summary.entity.Alert();
alert.setAlertTime(dbAlert.getAlertTime());
alert.setContext(dbAlert.getContent());
alert.setMetric(dbAlert.getMetric());
alert.setType(dbAlert.getType());
return alert;
}
private com.dianping.cat.home.alert.summary.entity.Alert convertToDependAlert(String domain, Alert dbAlert) {
com.dianping.cat.home.alert.summary.entity.Alert alert = new com.dianping.cat.home.alert.summary.entity.Alert();
alert.setAlertTime(dbAlert.getAlertTime());
alert.setContext(dbAlert.getContent());
alert.setMetric(domain + ":" + dbAlert.getMetric());
alert.setType(dbAlert.getType());
return alert;
}
public AlertSummary generateAlertSummary(String domain, Date date) {
AlertSummary alertSummary = new AlertSummary();
alertSummary.setDomain(domain);
alertSummary.setAlertDate(date);
alertSummary.addCategory(generateCategoryByTimeCategory(date, "network"));
alertSummary.addCategory(generateCategoryByTimeCateDomain(date, "business", domain));
alertSummary.addCategory(generateCategoryByTimeCateDomain(date, "exception", domain));
alertSummary.addCategory(generateCategoryByTimeCateDomain(date, "system", domain));
List<String> dependencyDomains = queryDependencyDomains(date, domain);
alertSummary.addCategory(generateDependCategoryByTimeCateDomain(date, "business", dependencyDomains));
alertSummary.addCategory(generateDependCategoryByTimeCateDomain(date, "exception", dependencyDomains));
return alertSummary;
}
private Category generateCategoryByTimeCateDomain(Date date, String cate, String domain) {
Category category = new Category(cate);
String dbCategoryName = cate + "-alert";
Date startTime = new Date(date.getTime() - DURATION / 2);
Date endTime = new Date(date.getTime() + DURATION / 2);
try {
List<Alert> dbAlerts = m_alertDao.queryAlertsByTimeCategoryDomain(startTime, endTime, dbCategoryName, domain,
AlertEntity.READSET_FULL);
setDBAlertsToCategory(category, dbAlerts);
} catch (DalException e) {
Cat.logError("find alerts error for category:" + cate + " domain:" + domain + " date:" + date, e);
}
return category;
}
private Category generateCategoryByTimeCategory(Date date, String cate) {
Category category = new Category(cate);
String dbCategoryName = cate + "-alert";
Date startTime = new Date(date.getTime() - DURATION / 2);
Date endTime = new Date(date.getTime() + DURATION / 2);
try {
List<Alert> dbAlerts = m_alertDao.queryAlertsByTimeCategory(startTime, endTime, dbCategoryName,
AlertEntity.READSET_FULL);
setDBAlertsToCategory(category, dbAlerts);
} catch (DalException e) {
Cat.logError("find alerts error for category:" + cate + " date:" + date, e);
}
return category;
}
private Category generateDependCategoryByTimeCateDomain(Date date, String cate, List<String> dependencyDomains) {
String categoryName = "dependency-" + cate;
String dbCategoryName = cate + "-alert";
Category category = new Category(categoryName);
Date startTime = new Date(date.getTime() - DURATION / 2);
Date endTime = new Date(date.getTime() + DURATION / 2);
for (String domain : dependencyDomains) {
try {
List<Alert> dbAlerts = m_alertDao.queryAlertsByTimeCategoryDomain(startTime, endTime, dbCategoryName,
domain, AlertEntity.READSET_FULL);
setDBAlertsToDependCategory(category, domain, dbAlerts);
} catch (DalException e) {
Cat.logError("find dependency alerts error for category:" + cate + " domain:" + domain + " date:" + date, e);
}
}
return category;
}
private List<String> queryDependencyDomains(Date date, String domain) {
List<String> domains = new ArrayList<String>();
TopologyGraph topology = m_topologyManager.buildTopologyGraph(domain, date.getTime());
for (String dependencyDomain : topology.getNodes().keySet()) {
domains.add(dependencyDomain);
}
return domains;
}
private void setDBAlertsToCategory(Category category, List<Alert> dbAlerts) {
for (Alert dbAlert : dbAlerts) {
category.addAlert(convertToAlert(dbAlert));
}
}
private void setDBAlertsToDependCategory(Category category, String domain, List<Alert> dbAlerts) {
for (Alert dbAlert : dbAlerts) {
category.addAlert(convertToDependAlert(domain, dbAlert));
}
}
}
package com.dianping.cat.report.task.alert.summary;
import org.unidal.dal.jdbc.DalException;
import org.unidal.lookup.annotation.Inject;
import com.dianping.cat.Cat;
import com.dianping.cat.home.dal.report.AlertSummary;
import com.dianping.cat.home.dal.report.AlertSummaryDao;
public class AlertSummaryManager {
@Inject
private AlertSummaryDao m_alertSummaryDao;
public void insert(com.dianping.cat.home.alert.summary.entity.AlertSummary alertSummary) {
AlertSummary summary = new AlertSummary();
String content = alertSummary.toString();
summary.setDomain(alertSummary.getDomain());
summary.setAlertTime(alertSummary.getAlertDate());
summary.setContent(content);
try {
m_alertSummaryDao.insert(summary);
} catch (DalException e) {
Cat.logError("insert alert summary error: " + content, e);
}
}
}
package com.dianping.cat.report.task.alert.summary;
import java.util.List;
public class AlertSummarySender {
public void send(String content, List<String> receivers) {
}
}
package com.dianping.cat.system.tool;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
......@@ -43,6 +48,10 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
private Logger m_logger;
private static final String WEIXIN_URL = "http://dpoa-monitorapp-web01.beta/app/monitor/cat/push";
private static final String SUCCESS_TEXT = "{\"success\":\"1\"}";
private HtmlEmail createHtmlEmail() throws EmailException {
HtmlEmail email = new HtmlEmail();
......@@ -151,7 +160,7 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
@Override
public boolean sendSms(String title, String content, List<String> phones) {
StringBuilder sb = new StringBuilder();
for (String phone : phones) {
InputStream in = null;
try {
......@@ -179,6 +188,74 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
return false;
}
}
@Override
public boolean sendWeiXin(String title, String content, String domain, String weixins) {
String urlDomain = null;
String urlTitle = null;
String urlContent = null;
String urlWeixins = null;
try {
urlDomain = URLEncoder.encode(domain, "UTF-8");
urlTitle = URLEncoder.encode(title, "UTF-8");
urlContent = URLEncoder.encode(content.replaceAll("<a href.*(?=</a>)</a>", ""), "UTF-8");
urlWeixins = URLEncoder.encode(weixins, "UTF-8");
} catch (UnsupportedEncodingException e) {
Cat.logError("transfer weixin content error:" + title + " " + content + " " + domain + " " + weixins, e);
return false;
}
String urlParameters = "domain=" + urlDomain + "&email=" + urlWeixins + "&title=" + urlTitle + "&content="
+ urlContent;
try {
HttpURLConnection connection = (HttpURLConnection) new URL(WEIXIN_URL).openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder builder = new StringBuilder();
while ((inputLine = reader.readLine()) != null) {
builder.append(inputLine);
}
reader.close();
String responseText = builder.toString();
if (responseText.equals(SUCCESS_TEXT)) {
Cat.logEvent("WeiXinSend", "send_success", Event.SUCCESS, "send success:" + domain + " " + title + " "
+ content + " " + weixins + " " + responseText);
return true;
} else {
Cat.logEvent("WeiXinSend", "send_fail", Event.SUCCESS, "send fail:" + domain + " " + title + " "
+ content + " " + weixins + " " + responseText);
return false;
}
} else {
Cat.logEvent("WeiXinSend", "network_fail", Event.SUCCESS, "network fail:" + domain + " " + title + " "
+ content + " " + weixins);
return false;
}
} catch (Exception ex) {
Cat.logEvent("WeiXinSend", "error", Event.SUCCESS, "error:" + domain + " " + title + " " + content + " "
+ weixins);
Cat.logError("send weixin error:" + domain + " " + title + " " + content + " " + weixins, ex);
return false;
}
}
public static class Item {
private String m_title;
......@@ -252,4 +329,5 @@ public class DefaultMailImpl implements MailSMS, Initializable, LogEnabled {
}
}
}
......@@ -9,5 +9,7 @@ public interface MailSMS {
public boolean sendEmailByGmail(String title,String content,List<String> emails);
public boolean sendSms(String title,String content,List<String> phones);
public boolean sendWeiXin(String title, String content, String domain, String weixins);
}
<?xml version="1.0" encoding="UTF-8"?>
<entities>
<entity name="alert" table="alert" alias="a">
<entity name="alert" table="alert" alias="a">
<member name="id" field="id" value-type="int" length="10" nullable="false" key="true" auto-increment="true" />
<member name="domain" field="domain" value-type="String" length="128" nullable="false" />
<member name="alert-time" field="alert_time" value-type="Date" nullable="false" />
......@@ -41,7 +41,46 @@
</query>
</query-defs>
</entity>
<entity name="alteration" table="alteration" alias="a">
<entity name="alert-summary" table="alert_summary" alias="as">
<member name="id" field="id" value-type="int" length="10" nullable="false" key="true" auto-increment="true" />
<member name="domain" field="domain" value-type="String" length="128" nullable="false" />
<member name="alert-time" field="alert_time" value-type="Date" nullable="false" />
<member name="content" field="content" value-type="String" length="65535" nullable="false" />
<member name="creation-date" field="creation_date" value-type="Date" nullable="false" />
<var name="key-id" value-type="int" key-member="id" />
<primary-key name="PRIMARY" members="id" />
<index name="alert_summary_index" members="alert_time ASC, domain ASC" />
<readsets>
<readset name="FULL" all="true" />
</readsets>
<updatesets>
<updateset name="FULL" all="true" />
</updatesets>
<query-defs>
<query name="find-by-PK" type="SELECT">
<param name="key-id" />
<statement><![CDATA[SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='id'/> = ${key-id}]]></statement>
</query>
<query name="insert" type="INSERT">
<statement><![CDATA[INSERT INTO <TABLE/>(<FIELDS/>)
VALUES(<VALUES/>)]]></statement>
</query>
<query name="update-by-PK" type="UPDATE">
<param name="key-id" />
<statement><![CDATA[UPDATE <TABLE/>
SET <FIELDS/>
WHERE <FIELD name='id'/> = ${key-id}]]></statement>
</query>
<query name="delete-by-PK" type="DELETE">
<param name="key-id" />
<statement><![CDATA[DELETE FROM <TABLE/>
WHERE <FIELD name='id'/> = ${key-id}]]></statement>
</query>
</query-defs>
</entity>
<entity name="alteration" table="alteration" alias="a2">
<member name="id" field="id" value-type="int" length="10" nullable="false" key="true" auto-increment="true" />
<member name="type" field="type" value-type="String" length="64" nullable="false" />
<member name="title" field="title" value-type="String" length="128" nullable="false" />
......@@ -90,7 +129,7 @@
<entity name="baseline" table="baseline" alias="b">
<member name="id" field="id" value-type="int" length="10" nullable="false" key="true" auto-increment="true" />
<member name="report-name" field="report_name" value-type="String" length="100" />
<member name="index-key" field="index_key" value-type="String" length="256" nullable="false" />
<member name="index-key" field="index_key" value-type="String" length="256" nullable="false" />
<member name="report-period" field="report_period" value-type="Date" />
<member name="data" field="data" value-type="byte[]" length="65535" />
<member name="creation-date" field="creation_date" value-type="Date" />
......
......@@ -2,6 +2,47 @@
<entities do-package="com.dianping.cat.home.dal.report" gen="true">
<entity name="alert" table="alert" alias="al">
<member name="creation-date" insert-expr="NOW()" />
<var name="start-time" value-type="Date" />
<var name="end-time" value-type="Date" />
<param name="domain" />
<query-defs>
<query name="query-alerts-by-time-category-domain" type="SELECT"
multiple="true">
<param name="start-time" />
<param name="end-time" />
<param name="category" />
<param name="domain" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='alert_time'/> >= ${start-time}
AND <FIELD name='alert_time'/> <= ${end-time}
<IF type='NOT_NULL' field='category'>
AND <FIELD name='category'/> = ${category}
</IF>
<IF type='NOT_NULL' field='domain'>
AND <FIELD name='domain'/> = ${domain}
</IF>
ORDER BY <FIELD name='alert_time'/> asc
]]></statement>
</query>
<query name="query-alerts-by-time-category" type="SELECT"
multiple="true">
<param name="start-time" />
<param name="end-time" />
<param name="category" />
<statement><![CDATA[
SELECT <FIELDS/>
FROM <TABLE/>
WHERE <FIELD name='alert_time'/> >= ${start-time}
AND <FIELD name='alert_time'/> <= ${end-time}
<IF type='NOT_NULL' field='category'>
AND <FIELD name='category'/> = ${category}
</IF>
ORDER BY <FIELD name='alert_time'/> asc
]]></statement>
</query>
</query-defs>
</entity>
<entity name="alteration" table="alteration" alias="a">
<member name="creation-date" insert-expr="NOW()" />
......
......@@ -8,6 +8,7 @@
<attribute name="enable" value-type="boolean" />
<element name="email" value-type="String" type="list" names="emails" />
<element name="phone" value-type="String" type="list" names="phones" />
<element name="weixin" value-type="String" type="list" names="weixins" />
</entity>
</model>
......@@ -10,6 +10,7 @@
<attribute name="enable" value-type="boolean" />
<element name="email" value-type="String" type="list" names="emails" />
<element name="phone" value-type="String" type="list" names="phones" />
<element name="weixin" value-type="String" type="list" names="weixins" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<model>
<entity name="alert-summary" root="true">
<attribute name="alert-date" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="domain" value-type="String" />
<entity-ref name="category" type="map" names="categories" method-find-or-create='true' />
</entity>
<entity name="category">
<attribute name="name" value-type="String" key="true" />
<entity-ref name="alert" type="list" names="alerts" />
</entity>
<entity name="alert">
<attribute name="alertTime" value-type="Date" format="yyyy-MM-dd HH:mm:ss" />
<attribute name="type" value-type="String" />
<attribute name="metric" value-type="String" />
<attribute name="context" value-type="String" />
</entity>
</model>
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<file path="alertsummary-codegen.xml" />
<file path="alertsummary-model.xml" />
</manifest>
<?xml version="1.0" encoding="UTF-8"?>
<model model-package="com.dianping.cat.home.alert.summary"
enable-sax-parser="true" enable-xml-parser="true" enable-xml-builder="true">
</model>
\ No newline at end of file
......@@ -17,6 +17,7 @@
<table name="monthly_report_content"/>
<table name="weekly_report_content"/>
<table name="alert"/>
<table name="alert_summary"/>
</group>
<group name="alarm" package="com.dianping.cat.home.dal.alarm">
<table name="mailRecord"/>
......
......@@ -51,4 +51,7 @@
<model package="com.dianping.cat.home.alertconfig" name="alertconfig">
<sample-model>/Users/leon/Documents/GitRepo/cat/cat-home/src/test/resources/config/alert-config.xml</sample-model>
</model>
<model package="com.dianping.cat.home.alertsummary" name="alertsummary">
<sample-model>/Users/leon/Desktop/AlertSummary.xml</sample-model>
</model>
</wizard>
<?xml version="1.0" encoding="utf-8"?>
<monitor-rules>
<rule id="CPUIdle">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_cpu)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_cpu)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="warning">
<sub-condition type="MaxVal" text="0.8"/>
......@@ -12,7 +12,7 @@
</config>
</rule>
<rule id="DataUsage">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_/data-usage)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_/data-usage)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="error">
<sub-condition type="MaxVal" text="0.9"/>
......@@ -20,7 +20,7 @@
</config>
</rule>
<rule id="UsrUsage">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_/usr-usage)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_/usr-usage)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="error">
<sub-condition type="MaxVal" text="0.9"/>
......@@ -28,7 +28,7 @@
</config>
</rule>
<rule id="VarUsage">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_/var-usage)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_/var-usage)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="error">
<sub-condition type="MaxVal" text="0.9"/>
......@@ -36,7 +36,7 @@
</config>
</rule>
<rule id="UptimeDown">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_uptime)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_uptime)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="2" alertType="error">
<sub-condition type="FluDescPer" text="0"/>
......@@ -44,7 +44,7 @@
</config>
</rule>
<rule id="MD5Change">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_md5Change)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_md5Change)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="error">
<sub-condition type="MinVal" text="0.9"/>
......@@ -52,7 +52,7 @@
</config>
</rule>
<rule id="HostNameChange">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_hostNameChange)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_hostNameChange)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="error">
<sub-condition type="MinVal" text="0.9"/>
......@@ -60,7 +60,7 @@
</config>
</rule>
<rule id="HostIpChange">
<metric-item type="regex" monitorAvg="true" text=".*(?=system_hostIpChange)"/>
<metric-item monitorAvg="true" metricItemText=".*(?=system_hostIpChange)"/>
<config starttime="00:00" endtime="24:00">
<condition minute="1" alertType="error">
<sub-condition type="MinVal" text="0.9"/>
......
......@@ -321,4 +321,13 @@ CREATE TABLE `alert` (
`metric` varchar(128) NOT NULL COMMENT '告警指标',
`creation_date` datetime NOT NULL COMMENT '数据插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存储告警信息';
\ No newline at end of file
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='存储告警信息';
CREATE TABLE `alert_summary` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`domain` varchar(128) NOT NULL COMMENT '告警项目',
`alert_time` datetime NOT NULL COMMENT '告警时间',
`content` text NOT NULL COMMENT '统一告警内容',
`creation_date` datetime NOT NULL COMMENT '数据插入时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='统一告警信息';
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册