Skip to content

Commit

Permalink
fix(region): volcengine monitor (#18557)
Browse files Browse the repository at this point in the history
  • Loading branch information
ioito committed Nov 3, 2023
1 parent 3025b19 commit 424ba87
Show file tree
Hide file tree
Showing 10 changed files with 408 additions and 34 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ require (
k8s.io/client-go v0.19.3
k8s.io/cluster-bootstrap v0.19.3
moul.io/http2curl/v2 v2.3.0
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231101115834-178d1dcb6b32
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231103051422-72246278640e
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32
yunion.io/x/jsonutils v1.0.1-0.20230613121553-0f3b41e2ef19
yunion.io/x/log v1.0.1-0.20230411060016-feb3f46ab361
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1179,8 +1179,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231101115834-178d1dcb6b32 h1:NfV/gBRqYsyuG7cdGZcsLDfVFnRprD8e1LqhekPHHOo=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231101115834-178d1dcb6b32/go.mod h1:McRjoG2gaOUisB+Qa41kLCNZhr0lsCu4apEjTiphXVY=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231103051422-72246278640e h1:qQ0xQBJADMkUYcxlKbnpNtXZjrjvJAebtP19MlkyeY8=
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231103051422-72246278640e/go.mod h1:McRjoG2gaOUisB+Qa41kLCNZhr0lsCu4apEjTiphXVY=
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 h1:v7POYkQwo1XzOxBoIoRVr/k0V9Y5JyjpshlIFa9raug=
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
Expand Down
170 changes: 170 additions & 0 deletions pkg/cloudmon/providerdriver/volc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
// Copyright 2019 Yunion
//
// Licensed 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.

package providerdriver

import (
"context"
"strconv"
"strings"
"sync"
"time"

"yunion.io/x/cloudmux/pkg/cloudprovider"
"yunion.io/x/log"
"yunion.io/x/pkg/errors"

api "yunion.io/x/onecloud/pkg/apis/compute"
"yunion.io/x/onecloud/pkg/util/influxdb"
)

type VolcEngineCollect struct {
SBaseCollectDriver
}

func (self *VolcEngineCollect) GetProvider() string {
return api.CLOUD_PROVIDER_VOLCENGINE
}

func (self *VolcEngineCollect) IsSupportMetrics() bool {
return true
}

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{}
for i := range res {
regionId := res[i].RegionExtId
_, ok := regionServers[regionId]
if !ok {
regionServers[regionId] = []api.ServerDetails{}
}
regionServers[regionId] = append(regionServers[regionId], res[i])
}
var wg sync.WaitGroup
var mu sync.Mutex
for regionId, servers := range regionServers {
wg.Add(1)
go func(regionId string, servers []api.ServerDetails) {
defer func() {
wg.Done()
}()
data := []cloudprovider.MetricValues{}
for i := 0; i < (len(servers)+9)/10; i++ {
for _, metricType := range cloudprovider.ALL_VM_METRIC_TYPES {
opts := &cloudprovider.MetricListOptions{
ResourceType: cloudprovider.METRIC_RESOURCE_TYPE_SERVER,
RegionExtId: regionId,
MetricType: metricType,
StartTime: start,
EndTime: end,
}
last := (i + 1) * 10
if last > len(servers) {
last = len(servers)
}
for i := range servers[i*10 : last] {
opts.ResourceIds = append(opts.ResourceIds, servers[i].ExternalId)
}
part, err := provider.GetMetrics(opts)
if err != nil {
if errors.Cause(err) != cloudprovider.ErrNotImplemented && errors.Cause(err) != cloudprovider.ErrNotSupported {
log.Errorf("get server %s(%s) error: %v", strings.Join(opts.ResourceIds, ","), regionId, err)
continue
}
continue
}
data = append(data, part...)
}
}
for _, value := range data {
server, ok := res[value.Id]
if !ok {
continue
}
tags := []influxdb.SKeyValue{}
for k, v := range server.GetMetricTags() {
tags = append(tags, influxdb.SKeyValue{
Key: k,
Value: v,
})
}
pairs := []influxdb.SKeyValue{}
for k, v := range server.GetMetricPairs() {
pairs = append(pairs, influxdb.SKeyValue{
Key: k,
Value: v,
})
}
for _, v := range value.Values {
metric := influxdb.SMetricData{
Name: value.MetricType.Name(),
Timestamp: v.Timestamp,
Tags: []influxdb.SKeyValue{},
Metrics: []influxdb.SKeyValue{
{
Key: value.MetricType.Key(),
Value: strconv.FormatFloat(v.Value, 'E', -1, 64),
},
},
}
for k, v := range v.Tags {
metric.Tags = append(metric.Tags, influxdb.SKeyValue{
Key: k,
Value: v,
})
}
metric.Metrics = append(metric.Metrics, pairs...)
metric.Tags = append(metric.Tags, tags...)
mu.Lock()
metrics = append(metrics, metric)
mu.Unlock()
}
}
}(regionId, servers)
}
wg.Wait()

return self.sendMetrics(ctx, manager, "server", len(res), metrics)
}
2 changes: 1 addition & 1 deletion pkg/compute/guestdrivers/managedvirtual.go
Original file line number Diff line number Diff line change
Expand Up @@ -884,7 +884,7 @@ func (drv *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx contex

for _, disk := range disks {
storage, _ := disk.GetStorage()
if disk.AutoDelete && !utils.IsInStringArray(storage.StorageType, api.STORAGE_LOCAL_TYPES) {
if !disk.AutoDelete && !utils.IsInStringArray(storage.StorageType, api.STORAGE_LOCAL_TYPES) && disk.DiskType != api.DISK_TYPE_SYS {
idisk, err := disk.GetIDisk(ctx)
if err != nil {
if errors.Cause(err) == cloudprovider.ErrNotFound {
Expand Down
2 changes: 1 addition & 1 deletion vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1438,7 +1438,7 @@ sigs.k8s.io/structured-merge-diff/v4/value
# sigs.k8s.io/yaml v1.2.0
## explicit; go 1.12
sigs.k8s.io/yaml
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231101115834-178d1dcb6b32
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20231103051422-72246278640e
## explicit; go 1.18
yunion.io/x/cloudmux/pkg/apis
yunion.io/x/cloudmux/pkg/apis/billing
Expand Down
26 changes: 13 additions & 13 deletions vendor/yunion.io/x/cloudmux/pkg/cloudprovider/metrics.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 424ba87

Please sign in to comment.