fix(cloudmon): optimized account balance metric collect (#24010)

This commit is contained in:
屈轩
2025-12-30 19:56:42 +08:00
committed by GitHub
parent cfbec98bed
commit b91a3dd280
8 changed files with 42 additions and 140 deletions
+12
View File
@@ -198,6 +198,9 @@ func CollectServiceMetrics(ctx context.Context, userCred mcclient.TokenCredentia
}
func collectApiStatsMetrics(ctx context.Context, serviceName string, serviceType string, regionId string, url string, version, token string) ([]influxdb.SMetricData, error) {
if len(url) == 0 || utils.IsInStringArray(serviceType, []string{"mcp-server"}) {
return []influxdb.SMetricData{}, nil
}
log.Debugf("collectApiStatsMetrics %s %s %s %s %s", serviceName, serviceType, regionId, url, version)
statsUrl := httputils.JoinPath(baseUrlF(url), "stats")
hdr := http.Header{}
@@ -227,6 +230,9 @@ func collectApiStatsMetrics(ctx context.Context, serviceName string, serviceType
}
func collectWorkerMetrics(ctx context.Context, url, service, serviceType, regionId, version, token string) ([]influxdb.SMetricData, error) {
if len(url) == 0 || utils.IsInStringArray(serviceType, []string{"mcp-server"}) {
return []influxdb.SMetricData{}, nil
}
statsUrl := httputils.JoinPath(baseUrlF(url), "worker_stats")
hdr := http.Header{}
hdr.Set("X-Auth-Token", token)
@@ -319,6 +325,9 @@ func collectWorkerMetrics(ctx context.Context, url, service, serviceType, region
}
func collectDatabaseMetrics(ctx context.Context, ep api.EndpointDetails, version, token string) ([]influxdb.SMetricData, error) {
if utils.IsInStringArray(ep.ServiceType, []string{"cloudmon", "webconsole", "k8s", "vpcagent", "yunionapi", "yunionagent"}) {
return []influxdb.SMetricData{}, nil
}
statsUrl := httputils.JoinPath(baseUrlF(ep.Url), "db_stats")
hdr := http.Header{}
hdr.Set("X-Auth-Token", token)
@@ -406,6 +415,9 @@ func collectDatabaseMetrics(ctx context.Context, ep api.EndpointDetails, version
}
func collectProcessMetrics(ctx context.Context, ep api.EndpointDetails, version, token string) ([]influxdb.SMetricData, error) {
if utils.IsInStringArray(ep.ServiceType, []string{"monitor", "webconsole", "k8s", "mcp-server"}) {
return []influxdb.SMetricData{}, nil
}
statsUrl := httputils.JoinPath(baseUrlF(ep.Url), "process_stats")
hdr := http.Header{}
hdr.Set("X-Auth-Token", token)
-30
View File
@@ -15,13 +15,9 @@
package providerdriver
import (
"context"
"time"
"yunion.io/x/cloudmux/pkg/cloudprovider"
api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/util/influxdb"
)
type AliyunCollect struct {
@@ -36,32 +32,6 @@ func (self *AliyunCollect) IsSupportMetrics() bool {
return true
}
func (self *AliyunCollect) CollectAccountMetrics(ctx context.Context, account api.CloudaccountDetail) (influxdb.SMetricData, error) {
metric := influxdb.SMetricData{
Name: string(cloudprovider.METRIC_RESOURCE_TYPE_CLOUD_ACCOUNT),
Timestamp: time.Now(),
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{},
}
for k, v := range account.GetMetricTags() {
metric.Tags = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Tags...)
}
for k, v := range account.GetMetricPairs() {
metric.Metrics = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Metrics...)
}
return metric, nil
}
func (self *AliyunCollect) GetDelayDuration() time.Duration {
return time.Minute * 3
}
-26
View File
@@ -45,32 +45,6 @@ func init() {
Register(&BaiduCollect{})
}
func (self *BaiduCollect) CollectAccountMetrics(ctx context.Context, account api.CloudaccountDetail) (influxdb.SMetricData, error) {
metric := influxdb.SMetricData{
Name: string(cloudprovider.METRIC_RESOURCE_TYPE_CLOUD_ACCOUNT),
Timestamp: time.Now(),
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{},
}
for k, v := range account.GetMetricTags() {
metric.Tags = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Tags...)
}
for k, v := range account.GetMetricPairs() {
metric.Metrics = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Metrics...)
}
return metric, nil
}
func (self *BaiduCollect) CollectServerMetrics(ctx context.Context, manager api.CloudproviderDetails, provider cloudprovider.ICloudProvider, res map[string]api.ServerDetails, start, end time.Time) error {
metrics := []influxdb.SMetricData{}
regionServers := map[string][]api.ServerDetails{}
+23 -1
View File
@@ -47,7 +47,29 @@ func (self *SBaseCollectDriver) IsSupportMetrics() bool {
}
func (self *SBaseCollectDriver) CollectAccountMetrics(ctx context.Context, account api.CloudaccountDetail) (influxdb.SMetricData, error) {
return influxdb.SMetricData{}, errors.Wrapf(cloudprovider.ErrNotImplemented, "CollectAccountMetrics")
metric := influxdb.SMetricData{
Name: string(cloudprovider.METRIC_RESOURCE_TYPE_CLOUD_ACCOUNT),
Timestamp: time.Now(),
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{},
}
for k, v := range account.GetMetricTags() {
metric.Tags = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Tags...)
}
for k, v := range account.GetMetricPairs() {
metric.Metrics = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Metrics...)
}
return metric, nil
}
func (self *SBaseCollectDriver) CollectDBInstanceMetrics(ctx context.Context, manager api.CloudproviderDetails, provider cloudprovider.ICloudProvider, res map[string]api.DBInstanceDetails, start, end time.Time) error {
-26
View File
@@ -44,32 +44,6 @@ func init() {
Register(&HuaweiCollect{})
}
func (self *HuaweiCollect) CollectAccountMetrics(ctx context.Context, account api.CloudaccountDetail) (influxdb.SMetricData, error) {
metric := influxdb.SMetricData{
Name: string(cloudprovider.METRIC_RESOURCE_TYPE_CLOUD_ACCOUNT),
Timestamp: time.Now(),
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{},
}
for k, v := range account.GetMetricTags() {
metric.Tags = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Tags...)
}
for k, v := range account.GetMetricPairs() {
metric.Metrics = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Metrics...)
}
return metric, nil
}
func (self *HuaweiCollect) CollectModelartsPoolMetrics(ctx context.Context, manager api.CloudproviderDetails, provider cloudprovider.ICloudProvider, res map[string]api.ModelartsPoolDetails, start, end time.Time) error {
metrics := []influxdb.SMetricData{}
var wg sync.WaitGroup
-26
View File
@@ -45,32 +45,6 @@ func init() {
Register(&QcloudCollect{})
}
func (self *QcloudCollect) CollectAccountMetrics(ctx context.Context, account api.CloudaccountDetail) (influxdb.SMetricData, error) {
metric := influxdb.SMetricData{
Name: string(cloudprovider.METRIC_RESOURCE_TYPE_CLOUD_ACCOUNT),
Timestamp: time.Now(),
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{},
}
for k, v := range account.GetMetricTags() {
metric.Tags = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Tags...)
}
for k, v := range account.GetMetricPairs() {
metric.Metrics = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Metrics...)
}
return metric, nil
}
func (self *QcloudCollect) CollectServerMetrics(ctx context.Context, manager api.CloudproviderDetails, provider cloudprovider.ICloudProvider, res map[string]api.ServerDetails, start, end time.Time) error {
metrics := []influxdb.SMetricData{}
regionServers := map[string][]api.ServerDetails{}
-26
View File
@@ -45,32 +45,6 @@ func init() {
Register(&VolcEngineCollect{})
}
func (self *VolcEngineCollect) CollectAccountMetrics(ctx context.Context, account api.CloudaccountDetail) (influxdb.SMetricData, error) {
metric := influxdb.SMetricData{
Name: string(cloudprovider.METRIC_RESOURCE_TYPE_CLOUD_ACCOUNT),
Timestamp: time.Now(),
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{},
}
for k, v := range account.GetMetricTags() {
metric.Tags = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Tags...)
}
for k, v := range account.GetMetricPairs() {
metric.Metrics = append([]influxdb.SKeyValue{
{
Key: k,
Value: v,
},
}, metric.Metrics...)
}
return metric, nil
}
func (self *VolcEngineCollect) CollectServerMetrics(ctx context.Context, manager api.CloudproviderDetails, provider cloudprovider.ICloudProvider, res map[string]api.ServerDetails, start, end time.Time) error {
metrics := []influxdb.SMetricData{}
regionServers := map[string][]api.ServerDetails{}
+7 -5
View File
@@ -17,6 +17,7 @@ package resources
import (
"context"
"fmt"
"math"
"strings"
"sync"
"time"
@@ -967,19 +968,20 @@ func (res *SResources) CollectMetrics(ctx context.Context, userCred mcclient.Tok
driver, err := providerdriver.GetDriver(account.Provider)
if err != nil {
log.Errorf("failed get account %s(%s) driver %v", account.Name, account.Provider, err)
return
continue
}
if math.Abs(account.Balance) < 0.000001 {
continue
}
metric, err := driver.CollectAccountMetrics(ctx, account)
if err != nil {
if errors.Cause(err) != cloudprovider.ErrNotImplemented && errors.Cause(err) != cloudprovider.ErrNotSupported {
log.Errorf("CollectAccountMetrics for %s(%s) error: %v", account.Name, account.Provider, err)
continue
}
continue
}
metrics = append(metrics, metric)
}
log.Debugf("send %d account metrics to meter_db", len(metrics))
urls, err := tsdb.GetDefaultServiceSourceURLs(s, options.Options.SessionEndpointType)
if err != nil {
log.Errorf("Get influxdb %s service url: %v", options.Options.SessionEndpointType, err)