mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(cloudmon): optimized account balance metric collect (#24010)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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{}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user