From b3623b4cd5ed9cab68761f7c8f503fc13a5c0987 Mon Sep 17 00:00:00 2001 From: Jinyao Ma Date: Mon, 4 Dec 2023 14:42:08 +0800 Subject: [PATCH] update windows define and accept snmp leaf (#1379) --- .../collect/snmp/SnmpCollectImpl.java | 11 + .../src/main/resources/define/app-windows.yml | 267 +++++++++++------- 2 files changed, 172 insertions(+), 106 deletions(-) diff --git a/collector/src/main/java/org/dromara/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java b/collector/src/main/java/org/dromara/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java index 3778dfe929a..2963643924b 100644 --- a/collector/src/main/java/org/dromara/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java +++ b/collector/src/main/java/org/dromara/hertzbeat/collector/collect/snmp/SnmpCollectImpl.java @@ -41,6 +41,8 @@ import org.springframework.util.StringUtils; import java.io.IOException; +import java.nio.Buffer; +import java.nio.charset.Charset; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; @@ -181,6 +183,15 @@ public void collect(CollectRep.MetricsData.Builder builder, long monitorId, Stri } else { String oid = oidMap.get(alias); String value = oidsValueMap.get(oid); + if (value == null) { + // get leaf + for (String key : oidsValueMap.keySet()) { + if (key.startsWith(oid)){ + value = oidsValueMap.get(key); + break; + } + } + } if (value != null) { valueRowBuilder.addColumns(value); } else { diff --git a/manager/src/main/resources/define/app-windows.yml b/manager/src/main/resources/define/app-windows.yml index 48019f8c719..26f5ee918ad 100644 --- a/manager/src/main/resources/define/app-windows.yml +++ b/manager/src/main/resources/define/app-windows.yml @@ -13,17 +13,15 @@ # See the License for the specific language governing permissions and # limitations under the License. + # The monitoring type category:service-application service monitoring db-database monitoring mid-middleware custom-custom monitoring os-operating system monitoring # 监控类型所属类别:service-应用服务 program-应用程序 db-数据库 custom-自定义 os-操作系统 bigdata-大数据 mid-中间件 webserver-web服务器 cache-缓存 cn-云原生 network-网络监控等等 category: os -# The monitoring type eg: linux windows tomcat mysql aws... -# 监控类型 eg: linux windows tomcat mysql aws... app: windows -# The monitoring i18n name -# 监控类型国际化名称 name: zh-CN: Windows操作系统 en-US: OS Windows + # The description and help of this monitoring type # 监控类型的帮助描述信息 help: @@ -36,103 +34,49 @@ helpLink: # 监控所需输入参数定义(根据定义渲染页面UI) # Input params define for monitoring(render web ui by the definition) params: - # field-param field key - # field-变量字段标识符 - field: host - # name-param field display i18n name - # name-参数字段显示名称 name: - zh-CN: 目标Host - en-US: Target Host + zh-CN: 主机Host + en-US: Host # type-param field type(most mapping the html input type) # type-字段类型,样式(大部分映射input标签type属性) type: host - # required-true or false - # required-是否是必输项 true-必填 false-可选 required: true - # field-param field key - # field-变量字段标识符 - field: port - # name-param field display i18n name - # name-参数字段显示名称 name: zh-CN: 端口 en-US: Port - # type-param field type(most mapping the html input type) - # type-字段类型,样式(大部分映射input标签type属性) type: number - # when type is number, range is required - # 当type为number时,用range表示范围 range: '[0,65535]' - # required-true or false - # required-是否是必输项 true-必填 false-可选 required: true - # default value - # 默认值 defaultValue: 161 - # field-param field key - # field-变量字段标识符 - field: version - # name-param field display i18n name - # name-参数字段显示名称 name: zh-CN: SNMP 版本 en-US: SNMP Version - # type-param field type(radio mapping the html radio tag) - # type-当type为radio时,前端用radio展示开关 type: radio - # required-true or false - # required-是否是必输项 true-必填 false-可选 required: true - # when type is radio checkbox, use option to show optional values {name1:value1,name2:value2} - # 当type为radio单选框, checkbox复选框时, option表示可选项值列表 {name1:value1,name2:value2} options: - label: SNMPv1 value: 0 - label: SNMPv2c value: 1 - # field-param field key - # field-变量字段标识符 - field: community - # name-param field display i18n name - # name-参数字段显示名称 name: zh-CN: SNMP 团体字 en-US: SNMP Community - # type-param field type(most mapping the html input type) - # type-字段类型,样式(大部分映射input标签type属性) type: text - # when type is text, use limit to limit string length - # 当type为text时,用limit表示字符串限制大小 limit: 100 - # required-true or false - # required-是否是必输项 true-必填 false-可选 required: true - # 参数输入框提示信息 - # param field input placeholder placeholder: 'Snmp community for v1 v2c' - # field-param field key - # field-变量字段标识符 - field: timeout - # name-param field display i18n name - # name-参数字段显示名称 name: zh-CN: 超时时间(ms) en-US: Timeout(ms) - # type-param field type(most mapping the html input type) - # type-字段类型,样式(大部分映射input标签type属性) type: number - # when type is number, range is required - # 当type为number时,用range表示范围 range: '[0,100000]' - # required-true or false - # required-是否是必输项 true-必填 false-可选 required: false - # hide-is hide this field and put it in advanced layout - # hide-是否隐藏此参数将其放入高级设置中 hide: true - # default value - # 默认值 defaultValue: 6000 # collect metrics config list # 采集指标配置列表 @@ -145,11 +89,7 @@ metrics: # 指标采集调度优先级(0->127)->(优先级高->低) 优先级低的指标会等优先级高的指标采集完成后才会被调度, 相同优先级的指标会并行调度采集 # 优先级为0的指标为可用性指标,即它会被首先调度,采集成功才会继续调度其它指标,采集失败则中断调度 priority: 0 - # collect metrics content - # 具体监控指标列表 fields: - # field-metric name, type-metric type(0-number,1-string), unit-metric unit('%','ms','MB'), label-whether it is a metrics label field - # field-指标名称, type-指标类型(0-number数字,1-string字符串), unit-指标单位('%','ms','MB'), label-是否是指标标签字段 - field: name type: 1 - field: descr @@ -167,24 +107,19 @@ metrics: unit: ms - field: location type: 1 - # the protocol used for monitoring, eg: sql, ssh, http, telnet, wmi, snmp, sdk + - field: memory + type: 0 + unit: GB + units: + - memory=KB->GB protocol: snmp - # the config content when protocol is snmp snmp: - # server host: ipv4 ipv6 domain host: ^_^host^_^ - # server port port: ^_^port^_^ - # snmp connect timeout timeout: ^_^timeout^_^ - # snmp community - # snmp 团体字 community: ^_^community^_^ - # snmp version version: ^_^version^_^ - # snmp operation: get, walk operation: get - # metrics oids: metric_name - oid_value oids: name: 1.3.6.1.2.1.1.5.0 descr: 1.3.6.1.2.1.1.1.0 @@ -193,35 +128,34 @@ metrics: services: 1.3.6.1.2.1.1.7.0 processes: 1.3.6.1.2.1.25.1.6.0 location: 1.3.6.1.2.1.1.6.0 + memory: 1.3.6.1.2.1.25.2.2.0 - - name: memory + - name: processes priority: 1 fields: - - field: total + - field: hrSWRunIndex type: 0 - unit: GB - - field: used + - field: hrSWRunName + type: 1 + label: true + - field: hrSWRunID + type: 1 + - field: hrSWRunPath + type: 1 + - field: hrSWRunParameters + type: 1 + - field: hrSWRunType type: 0 - unit: GB - - field: usage + - field: hrSWRunStatus type: 0 - unit: '%' - # (optional)metrics field alias name, it is used as an alias field to map and convert the collected data and metrics field - # (可选)监控指标别名, 做为中间字段与采集数据字段和指标字段映射转换 - aliasFields: - - hrMemorySize - - hrStorageUsed - - hrStorageAllocationUnits - # mapping and conversion expressions, use these and aliasField above to calculate metrics value - # (可选)指标映射转换计算表达式,与上面的别名一起作用,计算出最终需要的指标值 - # eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime + - field: hrSWRunPerfCPU + type: 0 + unit: 's' + - field: hrSWRunPerfMem + type: 0 + unit: 'KB' calculates: - - total=hrMemorySize - - used=hrStorageUsed * hrStorageAllocationUnits - - usage= hrStorageUsed * hrStorageAllocationUnits / (hrMemorySize * 1024) * 100 - units: - - total=KB->GB - - used=B->GB + - hrSWRunPerfCPU = hrSWRunPerfCPU / 100 protocol: snmp snmp: host: ^_^host^_^ @@ -229,40 +163,132 @@ metrics: timeout: ^_^timeout^_^ community: ^_^community^_^ version: ^_^version^_^ - operation: get + operation: walk + oids: + hrSWRunIndex: 1.3.6.1.2.1.25.4.2.1.1 + hrSWRunName: 1.3.6.1.2.1.25.4.2.1.2 + hrSWRunID: 1.3.6.1.2.1.25.4.2.1.3 + hrSWRunPath: 1.3.6.1.2.1.25.4.2.1.4 + hrSWRunParameters: 1.3.6.1.2.1.25.4.2.1.5 + hrSWRunType: 1.3.6.1.2.1.25.4.2.1.6 + hrSWRunStatus: 1.3.6.1.2.1.25.4.2.1.7 + hrSWRunPerfCPU: 1.3.6.1.2.1.25.5.1.1.1 + hrSWRunPerfMem: 1.3.6.1.2.1.25.5.1.1.2 + + - name: services + priority: 1 + fields: + - field: svSvcName + type: 1 + label: true + - field: svSvcInstalledState + type: 0 + - field: svSvcOperatingState + type: 0 + - field: svSvcCanBeUninstalled + type: 0 + - field: svSvcCanBePaused + type: 0 + protocol: snmp + snmp: + host: ^_^host^_^ + port: ^_^port^_^ + timeout: ^_^timeout^_^ + community: ^_^community^_^ + version: ^_^version^_^ + operation: walk oids: - hrMemorySize: 1.3.6.1.2.1.25.2.2.0 - hrStorageUsed: 1.3.6.1.2.1.25.2.3.1.6.5 - hrStorageAllocationUnits: 1.3.6.1.2.1.25.2.3.1.4.5 + svSvcName: 1.3.6.1.4.1.77.1.2.3.1.1 + svSvcInstalledState: 1.3.6.1.4.1.77.1.2.3.1.2 + svSvcOperatingState: 1.3.6.1.4.1.77.1.2.3.1.3 + svSvcCanBeUninstalled: 1.3.6.1.4.1.77.1.2.3.1.4 + svSvcCanBePaused: 1.3.6.1.4.1.77.1.2.3.1.5 + + - name: installed + priority: 1 + fields: + - field: hrSWInstalledIndex + type: 0 + - field: hrSWInstalledName + type: 1 + label: true + - field: hrSWInstalledID + type: 1 + - field: hrSWInstalledType + type: 0 + protocol: snmp + snmp: + host: ^_^host^_^ + port: ^_^port^_^ + timeout: ^_^timeout^_^ + community: ^_^community^_^ + version: ^_^version^_^ + operation: walk + oids: + hrSWInstalledIndex: 1.3.6.1.2.1.25.6.3.1.1 + hrSWInstalledName: 1.3.6.1.2.1.25.6.3.1.2 + hrSWInstalledID: 1.3.6.1.2.1.25.6.3.1.3 + hrSWInstalledType: 1.3.6.1.2.1.25.6.3.1.4 + + - name: cpu + priority: 1 + fields: + - field: hrProcessorFrwID + type: 1 + - field: hrProcessorLoad + type: 0 + unit: '%' + protocol: snmp + snmp: + host: ^_^host^_^ + port: ^_^port^_^ + timeout: ^_^timeout^_^ + community: ^_^community^_^ + version: ^_^version^_^ + operation: walk + oids: + hrProcessorFrwID: 1.3.6.1.2.1.25.3.3.1.1 + hrProcessorLoad: 1.3.6.1.2.1.25.3.3.1.2 - name: storages priority: 1 fields: + - field: index + type: 0 - field: descr type: 1 label: true - field: size type: 0 - unit: GB + unit: MB + - field: free + type: 0 + unit: MB - field: used type: 0 - unit: GB + unit: MB - field: usage type: 0 unit: '%' + # (非必须)监控指标别名,与上面的指标名映射。用于采集接口数据字段不直接是最终指标名称,需要此别名做映射转换 aliasFields: + - hrStorageIndex - hrStorageDescr - hrStorageSize - hrStorageUsed - hrStorageAllocationUnits + # (非必须)指标计算表达式,与上面的别名一起作用,计算出最终需要的指标值 + # eg: cores=core1+core2, usage=usage, waitTime=allTime-runningTime calculates: + - index=hrStorageIndex - descr=hrStorageDescr - size=hrStorageSize * hrStorageAllocationUnits + - free=(hrStorageSize - hrStorageUsed) * hrStorageAllocationUnits - used=hrStorageUsed * hrStorageAllocationUnits - usage= hrStorageUsed / hrStorageSize * 100 units: - - size=B->GB - - used=B->GB + - size=B->MB + - used=B->MB protocol: snmp snmp: host: ^_^host^_^ @@ -273,10 +299,39 @@ metrics: operation: walk oids: hrStorageDescr: 1.3.6.1.2.1.25.2.3.1.3 + hrStorageIndex: 1.3.6.1.2.1.25.2.3.1.1 hrStorageSize: 1.3.6.1.2.1.25.2.3.1.5 hrStorageUsed: 1.3.6.1.2.1.25.2.3.1.6 hrStorageAllocationUnits: 1.3.6.1.2.1.25.2.3.1.4 + - name: disk + priority: 2 + fields: + - field: hrDiskStorageAccess + type: 0 + - field: hrDiskStorageMedia + type: 0 + - field: hrDiskStorageRemoveble + type: 0 + - field: hrDiskStorageCapacity + type: 0 + unit: MB + units: + - hrDiskStorageCapacity=KB->MB + protocol: snmp + snmp: + host: ^_^host^_^ + port: ^_^port^_^ + timeout: ^_^timeout^_^ + community: ^_^community^_^ + version: ^_^version^_^ + operation: walk + oids: + hrDiskStorageAccess: 1.3.6.1.2.1.25.3.6.1.1 + hrDiskStorageMedia: 1.3.6.1.2.1.25.3.6.1.2 + hrDiskStorageRemoveble: 1.3.6.1.2.1.25.3.6.1.3 + hrDiskStorageCapacity: 1.3.6.1.2.1.25.3.6.1.4 + - name: network priority: 3 fields: @@ -296,7 +351,7 @@ metrics: priority: 4 fields: - field: index - type: 1 + type: 0 - field: descr type: 1 label: true @@ -405,4 +460,4 @@ metrics: oids: hrDeviceIndex: 1.3.6.1.2.1.25.3.2.1.1 hrDeviceDescr: 1.3.6.1.2.1.25.3.2.1.3 - hrDeviceStatus: 1.3.6.1.2.1.25.3.2.1.5 + hrDeviceStatus: 1.3.6.1.2.1.25.3.2.1.5 \ No newline at end of file