瀏覽代碼

新增SQL监控

liukx 4 年之前
父節點
當前提交
e304b787b2

+ 1 - 1
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/enums/AlertRuleEnums.java

@@ -7,7 +7,7 @@ package com.jay.monitor.data.server.enums;
  * @Date 2021/1/14 13:47
  */
 public enum  AlertRuleEnums {
-    REQUEST_TIME,STATUS
+    REQUEST_TIME,STATUS,AFFECTED_ROW
 
 
 }

+ 18 - 6
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/config/AlertRuleConfigModel.java

@@ -9,13 +9,25 @@ import java.util.List;
  * @Date 2021/1/14 10:55
  */
 public class AlertRuleConfigModel {
-
+    /**
+     * 最大时长
+     */
     private Integer maxTime;
 
+    /**
+     * 状态集合[500,504,503]
+     */
     private List<Integer> statusList;
 
-    private Integer maxPushRowData = 10;
+    /**
+     * 最大返回总数
+     *
+     */
+    private Integer maxResponseCount = 100;
 
+    /**
+     * 告警间隔时间 / 秒
+     */
     private Integer intervalTime = 300;
 
     public Integer getIntervalTime() {
@@ -26,12 +38,12 @@ public class AlertRuleConfigModel {
         this.intervalTime = intervalTime;
     }
 
-    public Integer getMaxPushRowData() {
-        return maxPushRowData;
+    public Integer getMaxResponseCount() {
+        return maxResponseCount;
     }
 
-    public void setMaxPushRowData(Integer maxPushRowData) {
-        this.maxPushRowData = maxPushRowData;
+    public void setMaxResponseCount(Integer maxResponseCount) {
+        this.maxResponseCount = maxResponseCount;
     }
 
     public Integer getMaxTime() {

+ 59 - 5
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/models/dto/alert/RealTimeAlert.java

@@ -45,13 +45,27 @@ public class RealTimeAlert implements ApplicationData, SearchIndexData, RequestD
     private String groupKeyName;
     @JSONField(name = "数据编号",ordinal = 13)
     private String dataId;
-    @JSONField(name = "状态",ordinal = 14)
+
+
+    //////////// SQL /////////////
+    @JSONField(name = "表名",ordinal = 20)
+    private String table;
+    @JSONField(name = "SQL类型",ordinal = 21)
+    private String commandType;
+    @JSONField(name = "SQL编号",ordinal = 22)
+    private String sqlId;
+    @JSONField(name = "原始SQL",ordinal = 23)
+    private String sql;
+    @JSONField(name = "影响行数",ordinal = 24)
+    private Integer affectedRows;
+
+    @JSONField(name = "请求时长",ordinal = 998)
+    private Long requestTime;
+    @JSONField(name = "状态",ordinal = 999)
     private Integer status;
-    @JSONField(name = "错误信息",ordinal = 15)
+    @JSONField(name = "错误信息",ordinal = 999)
     private String errorMessage;
-    @JSONField(name = "请求时长",ordinal = 15)
-    private Long requestTime;
-    @JSONField(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss",ordinal = 16)
+    @JSONField(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss",ordinal = 1000)
     private Date createDate;
 
     private transient Map<String,Object> extMap;
@@ -233,4 +247,44 @@ public class RealTimeAlert implements ApplicationData, SearchIndexData, RequestD
     public void setDataId(String dataId) {
         this.dataId = dataId;
     }
+
+    public Integer getAffectedRows() {
+        return affectedRows;
+    }
+
+    public void setAffectedRows(Integer affectedRows) {
+        this.affectedRows = affectedRows;
+    }
+
+    public String getSqlId() {
+        return sqlId;
+    }
+
+    public void setSqlId(String sqlId) {
+        this.sqlId = sqlId;
+    }
+
+    public String getSql() {
+        return sql;
+    }
+
+    public void setSql(String sql) {
+        this.sql = sql;
+    }
+
+    public String getCommandType() {
+        return commandType;
+    }
+
+    public void setCommandType(String commandType) {
+        this.commandType = commandType;
+    }
+
+    public String getTable() {
+        return table;
+    }
+
+    public void setTable(String table) {
+        this.table = table;
+    }
 }

+ 5 - 1
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/RealtimeAlertProcess.java

@@ -5,6 +5,7 @@ import com.jay.monitor.data.server.enums.AlertRuleEnums;
 import com.jay.monitor.data.server.models.dto.alert.RealTimeAlert;
 import com.jay.monitor.data.server.report.alert.notify.AlertRealTimeMsg;
 import com.jay.monitor.data.server.report.alert.rule.AlertRule;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -28,6 +29,9 @@ public class RealtimeAlertProcess {
     @Autowired(required = false)
     private List<AlertRealTimeMsg> realTimeMsgProcesses;
 
+    @Autowired
+    private ConfigStoreManager configStoreManager;
+
     private Logger logger = LoggerFactory.getLogger(getClass());
 
     /**
@@ -48,7 +52,7 @@ public class RealtimeAlertProcess {
             for (int j = 0; j < this.alertRules.size(); j++) {
                 // 进行规则验证
                 AlertRule alertRule = this.alertRules.get(j);
-                if (alertRule.isTrigger(baseDTO)) {
+                if (configStoreManager.alertEnable() && alertRule.isTrigger(baseDTO)) {
                     RealTimeAlert realTimeAlert = new RealTimeAlert();
                     AlertRuleEnums alertRuleEnums = alertRule.ruleType();
                     BeanUtils.copyProperties(baseDTO, realTimeAlert);

+ 42 - 0
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/AffectedRowRule.java

@@ -0,0 +1,42 @@
+package com.jay.monitor.data.server.report.alert.rule;
+
+import com.jay.monitor.data.core.model.serializable.SQLMonitorDTO;
+import com.jay.monitor.data.core.model.serializable.base.BaseDTO;
+import com.jay.monitor.data.server.enums.AlertRuleEnums;
+import com.jay.monitor.data.server.models.config.AlertRuleConfigModel;
+import com.jay.monitor.data.server.store.ConfigStoreManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * 影响行数规则处理
+ *
+ * @author liukx
+ */
+@Component
+public class AffectedRowRule implements AlertRule {
+
+    @Autowired
+    private ConfigStoreManager configStoreManager;
+
+    @Override
+    public AlertRuleEnums ruleType() {
+        return AlertRuleEnums.AFFECTED_ROW;
+    }
+
+    @Override
+    public boolean isTrigger(BaseDTO baseDTO) {
+        if (baseDTO instanceof SQLMonitorDTO) {
+            SQLMonitorDTO sqlMonitor = (SQLMonitorDTO)baseDTO;
+            AlertRuleConfigModel alertConfigModel = configStoreManager.getAlertRuleConfigModel(baseDTO.getType());
+            if (alertConfigModel != null) {
+                Integer maxResponseCount = alertConfigModel.getMaxResponseCount();
+                Integer affectedRows = sqlMonitor.getAffectedRows();
+                if (affectedRows != null && affectedRows > maxResponseCount) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+}

+ 0 - 4
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/RequestTimeAlertRule.java

@@ -33,10 +33,6 @@ public class RequestTimeAlertRule implements AlertRule {
     @Override
     public boolean isTrigger(BaseDTO baseDTO) {
 
-        if (!configStoreManager.alertEnable()) {
-            return false;
-        }
-
         if (baseDTO instanceof RequestDataData) {
             MsgTypeEnums type = baseDTO.getType();
             RequestDataData requestData = (RequestDataData) baseDTO;

+ 0 - 4
jay-monitor-data-server/src/main/java/com/jay/monitor/data/server/report/alert/rule/StatusAlertRule.java

@@ -26,10 +26,6 @@ public class StatusAlertRule implements AlertRule {
 
     @Override
     public boolean isTrigger(BaseDTO baseDTO) {
-
-        if (!this.configStoreManager.alertEnable()) {
-            return false;
-        }
         Integer status = baseDTO.getStatus();
         AlertRuleConfigModel alertConfigModel = configStoreManager.getAlertRuleConfigModel(baseDTO.getType());
         if (alertConfigModel != null) {

+ 13 - 0
jay-monitor-data-server/src/main/resources/application-com.yml

@@ -35,9 +35,22 @@ spring:
       MQ:
         max-time: 3000
         status-list: [ -1 ]
+      SQL:
+        max-response-count: 150
+        max-time: 1000
     log-monitor-url: http://106.14.4.198:2281/cat/r/m/
     server-domain: http://47.103.148.74:5800
     console-url: ${spring.alert.server-domain}/index.html
     server-log-console: ${spring.alert.server-domain}/api/log/console
+
+elasticsearch:
+  host: 172.19.189.149:9200
+  enable-env-prefix: true
+  max_connect_total: 30
+  max_connect_per_route: 30
+  connection_request_timeout_millis: 2000
+  socket_timeout_millis: 30000
+  connect_timeout_millis: 2000
+
 logging:
   config: classpath:logback/logback.xml

+ 4 - 1
jay-monitor-data-server/src/main/resources/application-test.yml

@@ -35,6 +35,9 @@ spring:
       MQ:
         max-time: 1000
         status-list: [ -1 ]
+      SQL:
+        max-response-count: 150
+        max-time: 1000
     log-monitor-url: http://101.231.166.56:2281/cat/r/m/
     server-domain: http://101.133.210.230:5800
     console-url: ${spring.alert.server-domain}/index.html
@@ -44,7 +47,7 @@ spring:
 #  level:
 #    com.jay.monitor.data.server: debug
 elasticsearch:
-  host: 172.19.189.149:9200
+  host: 101.133.210.230:9200
   enable-env-prefix: true
   max_connect_total: 30
   max_connect_per_route: 30

+ 1 - 1
jay-monitor-data-server/src/main/resources/application.yml

@@ -5,7 +5,7 @@ server:
     uri-encoding: UTF-8
 spring:
   profiles:
-    active: dev
+    active: test
   application:
     name: jay-monitor-server
   http:

+ 2 - 1
jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/SpringRunCase.java

@@ -1,5 +1,4 @@
 package com.jay.monitor.data.server;
-
 import org.junit.runner.RunWith;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
@@ -7,4 +6,6 @@ import org.springframework.test.context.junit4.SpringRunner;
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = {MonitorServerApplication.class})
 public class SpringRunCase {
+    public static void main(String[] args) {
+    }
 }

File diff suppressed because it is too large
+ 1 - 4
jay-monitor-data-server/src/test/java/com/jay/monitor/data/server/process/SQLUserProcessTest.java


+ 3 - 1
jay-monitor-data-server/src/test/resources/application-dev.yml

@@ -7,7 +7,6 @@ spring:
           jay_monitor_mq: day
           jay_monitor_url: day
           jay_monitor_sql: day
-
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: com.mysql.jdbc.Driver
@@ -30,6 +29,9 @@ spring:
       MQ:
         max-time: 1000
         status-list: [ -1 ]
+      SQL:
+        max-response-count: 150
+        max-time: 1000
     log-monitor-url: http://192.168.0.90:2281/cat/r/m/
     server-domain: http://127.0.0.1:5800
     console-url: ${spring.alert.server-domain}/index.html