resource_metric_driver.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package models
  15. import (
  16. "yunion.io/x/onecloud/pkg/apis/monitor"
  17. )
  18. // IResourceMetricDriver 定义资源监控指标的驱动接口
  19. type IResourceMetricDriver interface {
  20. // GetResType 返回资源类型标识
  21. GetResType() string
  22. // GetTagKey 返回 InfluxDB 中用于标识资源 ID 的 tag key
  23. GetTagKey() string
  24. // GetMetricSpecs 返回该资源类型的所有指标查询规格
  25. GetMetricSpecs() []ResourceMetricSpec
  26. }
  27. // ResourceMetricSpec 描述一个 measurement 下需要查询的字段及其输出映射
  28. type ResourceMetricSpec struct {
  29. Measurement string
  30. Fields []string
  31. OutputKeys []string
  32. }
  33. var resourceMetricDrivers = make(map[string]IResourceMetricDriver)
  34. // RegisterResourceMetricDriver 注册资源监控指标驱动
  35. func RegisterResourceMetricDriver(drv IResourceMetricDriver) {
  36. resourceMetricDrivers[drv.GetResType()] = drv
  37. }
  38. // GetResourceMetricDriver 根据资源类型获取对应驱动
  39. func GetResourceMetricDriver(resType string) IResourceMetricDriver {
  40. return resourceMetricDrivers[resType]
  41. }
  42. // SetResourceMetricValue 将查询结果赋值到 ResourceMetricValues 对应字段
  43. func SetResourceMetricValue(rv *monitor.ResourceMetricValues, key string, val float64) {
  44. switch key {
  45. case "cpu_usage":
  46. rv.CpuUsage = &val
  47. case "mem_usage":
  48. rv.MemUsage = &val
  49. case "disk_usage":
  50. rv.DiskUsage = &val
  51. case "disk_read_rate":
  52. rv.DiskReadRate = &val
  53. case "disk_write_rate":
  54. rv.DiskWriteRate = &val
  55. case "net_in_rate":
  56. rv.NetInRate = &val
  57. case "net_out_rate":
  58. rv.NetOutRate = &val
  59. }
  60. }
  61. // sHostMetricDriver 宿主机监控指标驱动
  62. type sHostMetricDriver struct{}
  63. func (d *sHostMetricDriver) GetResType() string {
  64. return monitor.METRIC_RES_TYPE_HOST
  65. }
  66. func (d *sHostMetricDriver) GetTagKey() string {
  67. return monitor.MEASUREMENT_TAG_ID[monitor.METRIC_RES_TYPE_HOST]
  68. }
  69. func (d *sHostMetricDriver) GetMetricSpecs() []ResourceMetricSpec {
  70. return []ResourceMetricSpec{
  71. {"cpu", []string{"usage_active"}, []string{"cpu_usage"}},
  72. {"mem", []string{"used_percent"}, []string{"mem_usage"}},
  73. {"disk", []string{"used_percent"}, []string{"disk_usage"}},
  74. {"diskio", []string{"read_bps", "write_bps"}, []string{"disk_read_rate", "disk_write_rate"}},
  75. {"net", []string{"bps_recv", "bps_sent"}, []string{"net_in_rate", "net_out_rate"}},
  76. }
  77. }
  78. // sGuestMetricDriver 虚拟机监控指标驱动
  79. type sGuestMetricDriver struct{}
  80. func (d *sGuestMetricDriver) GetResType() string {
  81. return monitor.METRIC_RES_TYPE_GUEST
  82. }
  83. func (d *sGuestMetricDriver) GetTagKey() string {
  84. return monitor.MEASUREMENT_TAG_ID[monitor.METRIC_RES_TYPE_GUEST]
  85. }
  86. func (d *sGuestMetricDriver) GetMetricSpecs() []ResourceMetricSpec {
  87. return []ResourceMetricSpec{
  88. {"vm_cpu", []string{"usage_active"}, []string{"cpu_usage"}},
  89. {"vm_mem", []string{"used_percent"}, []string{"mem_usage"}},
  90. {"vm_disk", []string{"used_percent"}, []string{"disk_usage"}},
  91. {"vm_diskio", []string{"read_bps", "write_bps"}, []string{"disk_read_rate", "disk_write_rate"}},
  92. {"vm_netio", []string{"bps_recv", "bps_sent"}, []string{"net_in_rate", "net_out_rate"}},
  93. }
  94. }
  95. func init() {
  96. RegisterResourceMetricDriver(&sHostMetricDriver{})
  97. RegisterResourceMetricDriver(&sGuestMetricDriver{})
  98. }