From 92157af208be91a8ce06a88f81c6b4f0b0d7b132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=93=81=E7=94=B2=E5=B0=8F=E5=AE=9D?= <85919258+TJxiaobao@users.noreply.github.com> Date: Tue, 1 Nov 2022 23:34:06 +0800 Subject: [PATCH] [manager,collector] support dm database monitor (#410) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [manager] TagControllerTest Test class writing completed (#386) * [collector] bugfix: Fixed expression:(A | B), A and B are null, print the error log (#387) * [home] update constants.js jpom link (#388) * [doc] update commit user (#389) * [web-app] notice monitors.detail.time-series.unavailable (#390) * [home] notice jvm code_cache only support jdk8 (#391) * [home] support time-series db dependency iotdb deploy doc (#392) * [home] support time-series db dependency iotdb deploy doc * [warehouse] support iotdb connection available check when init * [home] support time-series db dependency iotdb deploy doc * [manager] add app service impl unit test (#393) * [docs] update hertzbeat arch pic (#394) * [home] update constants.js northstar (#395) * [home] update constants.js sa-token url (#396) * [docs] add hertzbeat roadmap (#397) * [docs] add roadmap * Add @click33 as a contributor * Add @bwcx-jzy as a contributor * Add @kevinhuangwl as a contributor * Add @TJxiaobao as a contributor * Update @TJxiaobao as a contributor * [docs] fix typo repair (#398) Co-authored-by: 高兴存 * DM DB monitoring * Gradual improvement of DM monitoring * [hertzbeat] update dm collect Co-authored-by: zcx <48920254+Ceilzcx@users.noreply.github.com> Co-authored-by: 蒋小小 Co-authored-by: tomsun28 Co-authored-by: Kevin Huang <12959229@qq.com> Co-authored-by: click33 <36243476+click33@users.noreply.github.com> Co-authored-by: 高兴存 --- collector/pom.xml | 6 + .../collect/database/JdbcCommonCollect.java | 5 +- .../collect/database/JdbcSpiLoader.java | 1 + .../collector/dispatch/DispatchConstants.java | 4 + .../src/main/resources/define/app/app-dm.yml | 142 ++++++++++++++++++ .../main/resources/define/param/param-dm.yml | 51 +++++++ 6 files changed, 208 insertions(+), 1 deletion(-) create mode 100644 manager/src/main/resources/define/app/app-dm.yml create mode 100644 manager/src/main/resources/define/param/param-dm.yml diff --git a/collector/pom.xml b/collector/pom.xml index 22bdb38d0a7..665e549d46d 100644 --- a/collector/pom.xml +++ b/collector/pom.xml @@ -102,6 +102,12 @@ mysql-connector-java 8.0.28 + + + com.dameng + DmJdbcDriver18 + 8.1.2.141 + org.postgresql diff --git a/collector/src/main/java/com/usthe/collector/collect/database/JdbcCommonCollect.java b/collector/src/main/java/com/usthe/collector/collect/database/JdbcCommonCollect.java index f2691a87107..b8b80ffd353 100644 --- a/collector/src/main/java/com/usthe/collector/collect/database/JdbcCommonCollect.java +++ b/collector/src/main/java/com/usthe/collector/collect/database/JdbcCommonCollect.java @@ -199,7 +199,7 @@ private void queryOneRow(Statement statement, String sql, List columns, /** * 查询一行数据, 通过查询的两列数据(key-value),key和查询的字段匹配,value为查询字段的值 * eg: - * 查询字段:one tow three four + * 查询字段:one two three four * 查询SQL:select key, value from book; * 返回的key映射查询字段 * @param statement 执行器 @@ -299,6 +299,9 @@ private String constructDatabaseUrl(JdbcProtocol jdbcProtocol) { url = "jdbc:oracle:thin:@" + jdbcProtocol.getHost() + ":" + jdbcProtocol.getPort() + "/" + (jdbcProtocol.getDatabase() == null ? "" : jdbcProtocol.getDatabase()); break; + case "dm": + url = "jdbc:dm://" + jdbcProtocol.getHost() + ":" +jdbcProtocol.getPort(); + break; default: throw new IllegalArgumentException("Not support database platform: " + jdbcProtocol.getPlatform()); diff --git a/collector/src/main/java/com/usthe/collector/collect/database/JdbcSpiLoader.java b/collector/src/main/java/com/usthe/collector/collect/database/JdbcSpiLoader.java index 601c91dfcf9..28410d209d0 100644 --- a/collector/src/main/java/com/usthe/collector/collect/database/JdbcSpiLoader.java +++ b/collector/src/main/java/com/usthe/collector/collect/database/JdbcSpiLoader.java @@ -41,6 +41,7 @@ public void run(String... args) throws Exception { Class.forName("org.postgresql.Driver"); Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Class.forName("oracle.jdbc.driver.OracleDriver"); + Class.forName("dm.jdbc.driver.DmDriver"); } catch (Exception e) { log.error("load jdbc error: {}", e.getMessage(), e); } diff --git a/collector/src/main/java/com/usthe/collector/dispatch/DispatchConstants.java b/collector/src/main/java/com/usthe/collector/dispatch/DispatchConstants.java index fb6904fda2e..93eb3bb4255 100644 --- a/collector/src/main/java/com/usthe/collector/dispatch/DispatchConstants.java +++ b/collector/src/main/java/com/usthe/collector/dispatch/DispatchConstants.java @@ -50,6 +50,10 @@ public interface DispatchConstants { * protocol redis */ String PROTOCOL_REDIS = "redis"; + /** + * protocol + */ + String PROTOCOL_DM = "dm"; /** * protocol jmx */ diff --git a/manager/src/main/resources/define/app/app-dm.yml b/manager/src/main/resources/define/app/app-dm.yml new file mode 100644 index 00000000000..35211b7b27b --- /dev/null +++ b/manager/src/main/resources/define/app/app-dm.yml @@ -0,0 +1,142 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +category: db +app: dm +name: + zh-CN: 达梦数据库 + en-US: DM DB +# 参数映射map. type是参数类型: 0-number数字, 1-string明文字符串, 2-secret加密字符串 +# 强制固定必须参数 - host +configmap: + - key: host + type: 1 + - key: port + type: 0 + - key: username + type: 1 + - key: password + type: 2 + - key: database + type: 1 + - key: timeout + type: 0 + - key: url + type: 1 +# 指标组列表 +metrics: + - name: basic + # 指标组调度优先级(0-127)越小优先级越高,优先级低的指标组会等优先级高的指标组采集完成后才会被调度,相同优先级的指标组会并行调度采集 + # 优先级为0的指标组为可用性指标组,即它会被首先调度,采集成功才会继续调度其它指标组,采集失败则中断调度 + priority: 0 + # 指标组中的具体监控指标 + fields: + # 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位 + - field: PORT_NUM + type: 1 + - field: CTL_PATH + type: 1 + - field: MAX_SESSIONS + type: 0 + # (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换 + aliasFields: + - PORT_NUM + - CTL_PATH + - MAX_SESSIONS + # (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值 + # eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime + calculates: + - PORT_NUM=PORT_NUM + - CTL_PATH=CTL_PATH + - MAX_SESSIONS=MAX_SESSIONS + protocol: jdbc + jdbc: + # 主机host: ipv4 ipv6 域名 + host: ^_^host^_^ + # 端口 + port: ^_^port^_^ + platform: dm + username: ^_^username^_^ + password: ^_^password^_^ + database: ^_^database^_^ + timeout: ^_^timeout^_^ + # SQL查询方式: oneRow, multiRow, columns + queryType: columns + # sql + sql: select PARA_NAME, PARA_VALUE from SYS."V$DM_INI" where PARA_NAME = 'MAX_SESSIONS'or PARA_NAME = 'CTL_PATH' or PARA_NAME = 'PORT_NUM'; + url: ^_^url^_^ + - name: status + priority: 1 + fields: + # 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位 + - field: status + type: 1 + protocol: jdbc + jdbc: + # 主机host: ipv4 ipv6 域名 + host: ^_^host^_^ + # 端口 + port: ^_^port^_^ + platform: dm + username: ^_^username^_^ + password: ^_^password^_^ + database: ^_^database^_^ + timeout: ^_^timeout^_^ + # SQL查询方式: oneRow, multiRow, columns + queryType: oneRow + # sql + sql: SELECT status$ as status FROM v$instance; + url: ^_^url^_^ + + + - name: thread + priority: 2 + fields: + # 指标信息 包括 field名称 type字段类型:0-number数字,1-string字符串 instance是否为实例主键 unit:指标单位 + - field: dm_sql_thd + type: 0 + - field: dm_io_thd + type: 0 + - field: dm_quit_thd + type: 0 + # (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换 + aliasFields: + - dm_sql_thd + - dm_io_thd + - dm_quit_thd + # (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值 + # eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime + calculates: + - dm_sql_thd=dm_sql_thd + - dm_io_thd=dm_io_thd + - dm_quit_thd=dm_quit_thd + protocol: jdbc + jdbc: + # 主机host: ipv4 ipv6 域名 + host: ^_^host^_^ + # 端口 + port: ^_^port^_^ + platform: dm + username: ^_^username^_^ + password: ^_^password^_^ + database: ^_^database^_^ + timeout: ^_^timeout^_^ + # SQL查询方式: oneRow, multiRow, columns + queryType: columns + # sql + sql: SELECT DISTINCT NAME, COUNT(*) AS NUM FROM V$THREADS GROUP BY NAME ORDER BY NUM DESC; + url: ^_^url^_^ + + diff --git a/manager/src/main/resources/define/param/param-dm.yml b/manager/src/main/resources/define/param/param-dm.yml new file mode 100644 index 00000000000..86bdc6b7245 --- /dev/null +++ b/manager/src/main/resources/define/param/param-dm.yml @@ -0,0 +1,51 @@ +# 监控应用类型名称(与文件名保持一致) eg: linux windows tomcat mysql aws... +app: dm +# 强制固定必须参数 - host(ipv4,ipv6,域名) +param: + # field-字段名称标识符 + - field: host + # name-参数字段显示名称 + name: + zh-CN: 主机Host + en-US: Host + # type-字段类型,样式(大部分映射input标签type属性) + type: host + # 是否是必输项 true-必填 false-可选 + required: true + - field: port + name: + zh-CN: 端口 + en-US: Port + type: number + # 当type为number时,用range表示范围 + range: '[0,65535]' + required: true + # 端口默认值 + defaultValue: 5236 + # 参数输入框提示信息 +# 这个是什么参数? + placeholder: '请输入端口' + - field: username + name: + zh-CN: 用户名 + en-US: Username + type: text + # 当type为text时,用limit表示字符串限制大小 + limit: 20 + required: false + hide: true + - field: password + name: + zh-CN: 用户密码 + en-US: Password + type: password + required: false + hide: true + - field: timeout + name: + zh-CN: 超时时间 + en-US: Timeout + type: number + range: '[0, 100000]' + required: true + defaultValue: 3000