From cb0977d6fb92ed61b071a76187fca0c314b1ee8b Mon Sep 17 00:00:00 2001 From: ioito Date: Wed, 13 Jul 2022 16:30:37 +0800 Subject: [PATCH] fix(cloudmon): azure rds metric --- .../collectors/azuremon/azureservice.go | 87 ++++++++++--------- .../collectors/azuremon/azureutils.go | 8 +- pkg/cloudmon/collectors/common/basemon.go | 7 +- pkg/multicloud/aws/region.go | 4 - 4 files changed, 53 insertions(+), 53 deletions(-) diff --git a/pkg/cloudmon/collectors/azuremon/azureservice.go b/pkg/cloudmon/collectors/azuremon/azureservice.go index 9da35a2206..2158395562 100644 --- a/pkg/cloudmon/collectors/azuremon/azureservice.go +++ b/pkg/cloudmon/collectors/azuremon/azureservice.go @@ -38,70 +38,80 @@ func (self *SAzureCloudReport) CollectRegionMetric(region cloudprovider.ICloudRe func (self *SAzureCloudReport) collectRegionMetricOfHost(region cloudprovider.ICloudRegion, servers []jsonutils.JSONObject) error { - dataList := make([]influxdb.SMetricData, 0) azureReg := region.(*azure.SRegion) since, until, err := common.TimeRangeFromArgs(self.Args) if err != nil { return err } for _, server := range servers { + dataList := make([]influxdb.SMetricData, 0) srvId, _ := server.GetString("id") srvName, _ := server.GetString("name") srvPrefix := srvId + "/" + "srvName" - external_id, err := server.GetString("external_id") + externalId, err := server.GetString("external_id") if err != nil { continue } classicKey := "microsoft.classiccompute/virtualmachines" ns, metricSpecs := self.getMetricSpecs(server) - if strings.Contains(strings.ToLower(external_id), classicKey) { + if strings.Contains(strings.ToLower(externalId), classicKey) { ns = classicKey metricSpecs = azureClassicMetricsSpec } - metricNameArr := make([]string, 0) - for metricName := range metricSpecs { - metricNameArr = append(metricNameArr, metricName) + // SQLServer with databases/master + if strings.Contains(strings.ToLower(externalId), "microsoft.sql/servers") { + externalId = fmt.Sprintf("%s/databases/master", externalId) } - metricNames := strings.Join(metricNameArr, ",") - azureReg.GetClient().Debug(true) - rtnMetrics, err := azureReg.GetMonitorData(metricNames, ns, external_id, since, until, self.Args.MetricInterval, "") - if err != nil { - log.Errorf("get metrics for server %s error: %v", srvPrefix, err) - continue - } - if rtnMetrics == nil || rtnMetrics.Value == nil { - log.Warningf("server %s metrics is nil", srvPrefix) - continue - } - for metricName, influxDbSpecs := range metricSpecs { - for _, value := range *rtnMetrics.Value { - if value.Name.LocalizedValue != nil { - if metricName == *(value.Name.LocalizedValue) || (value.Name.Value != nil && *value.Name.Value == metricName) { - if self.Operator == string(common.SERVER) { - metric, err := common.FillVMCapacity(server.(*jsonutils.JSONDict)) - if err != nil { - return errors.Wrapf(err, "fill vm %q capacity", srvPrefix) - } - dataList = append(dataList, metric) - } - if value.Timeseries != nil { - for _, timeserie := range *value.Timeseries { - serverMetric, err := self.collectMetricFromThisServer(server, timeserie, influxDbSpecs) + + err = func() error { + metricNameArr := make([]string, 0) + for metricName := range metricSpecs { + metricNameArr = append(metricNameArr, metricName) + } + metricNames := strings.Join(metricNameArr, ",") + rtnMetrics, err := azureReg.GetMonitorData(metricNames, ns, externalId, since, until, self.Args.MetricInterval, "") + if err != nil { + return errors.Wrapf(err, "GetMonitorData") + } + if rtnMetrics == nil || rtnMetrics.Value == nil { + return fmt.Errorf("server %s metic is nil", srvPrefix) + } + + for metricName, influxDbSpecs := range metricSpecs { + for _, value := range *rtnMetrics.Value { + if value.Name.LocalizedValue != nil { + if metricName == *(value.Name.LocalizedValue) || (value.Name.Value != nil && *value.Name.Value == metricName) { + if self.Operator == string(common.SERVER) { + metric, err := common.FillVMCapacity(server.(*jsonutils.JSONDict)) if err != nil { - return errors.Wrapf(err, "collect metrics from server %q", srvPrefix) + return errors.Wrapf(err, "fill vm %q capacity", srvPrefix) + } + dataList = append(dataList, metric) + } + if value.Timeseries != nil { + for _, timeserie := range *value.Timeseries { + serverMetric, err := self.collectMetricFromThisServer(server, timeserie, influxDbSpecs) + if err != nil { + return errors.Wrapf(err, "collect metrics from server %q", srvPrefix) + } + dataList = append(dataList, serverMetric...) } - dataList = append(dataList, serverMetric...) } } } } } + return nil + }() + if err != nil { + log.Errorf("collect azure %s %s %s metric error: %v", externalId, ns, srvName, err) + continue } + log.Infof("send %s %s %d metrics", ns, externalId, len(dataList)) err = common.SendMetrics(self.Session, dataList, self.Args.Debug, "") if err != nil { log.Errorf("send %q metrics error: %v", srvName, err) } - dataList = dataList[:0] } return nil } @@ -182,7 +192,7 @@ func (self *SAzureCloudReport) getRdsMetricSpecsByEngine(res jsonutils.JSONObjec } switch engine { case com_api.DBINSTANCE_TYPE_SQLSERVER: - return "Microsoft.Sql/servers/databases", azureRdsMetricsSpec + return "Microsoft.Sql/servers/databases", azureRdsMetricsSpecSqlserver case com_api.DBINSTANCE_TYPE_MYSQL: return fmt.Sprintf("Microsoft.DBforMySQL/%s", suffix), azureRdsMetricsSpec case com_api.DBINSTANCE_TYPE_POSTGRESQL: @@ -201,10 +211,9 @@ func (self *SAzureCloudReport) CollectK8sModuleMetric(region cloudprovider.IClou id, _ := cluster.GetString("id") resources, err := self.getClusterModuleResourceByType(helper.MyModuleType(), id, self.Session, nil) if err != nil { - log.Errorf("getClusterModuleResourceByType err: %v", err) - return err + return errors.Wrapf(err, "getClusterModuleResourceByType") } - external_id, _ := cluster.GetString("external_cloud_cluster_id") + externalId, _ := cluster.GetString("external_cloud_cluster_id") namespace, metricSpecs := helper.MyNamespaceAndMetrics() metricNameArr := make([]string, 0) @@ -216,7 +225,7 @@ func (self *SAzureCloudReport) CollectK8sModuleMetric(region cloudprovider.IClou for _, resource := range resources { parentName, _ := resource.GetString("name") filter := helper.(ik8sModuleFilterHelper).filter(resource) - rtnMetrics, err := azureReg.GetMonitorData(metricNames, namespace, external_id, since, until, + rtnMetrics, err := azureReg.GetMonitorData(metricNames, namespace, externalId, since, until, self.Args.MetricInterval, filter) if err != nil { log.Errorf("get deploy/daemonset: %s metrics err %v", parentName, err) diff --git a/pkg/cloudmon/collectors/azuremon/azureutils.go b/pkg/cloudmon/collectors/azuremon/azureutils.go index 987a1deb31..cbf9599ca5 100644 --- a/pkg/cloudmon/collectors/azuremon/azureutils.go +++ b/pkg/cloudmon/collectors/azuremon/azureutils.go @@ -85,10 +85,10 @@ var azureRdsMetricsSpec = map[string][]string{ } var azureRdsMetricsSpecSqlserver = map[string][]string{ - "cpu_percent": {common.DEFAULT_STATISTICS, common.UNIT_PERCENT, common.INFLUXDB_FIELD_RDS_CPU_USAGE}, - "memory_usage_percent": {common.DEFAULT_STATISTICS, common.UNIT_PERCENT, common.INFLUXDB_FIELD_RDS_MEM_USAGE}, - "storage_percent": {common.DEFAULT_STATISTICS, common.UNIT_PERCENT, common.INFLUXDB_FIELD_RDS_DISK_USAGE}, - "connections_failed": {common.DEFAULT_STATISTICS, common.UNIT_COUNT, common.INFLUXDB_FIELD_RDS_CONN_FAILED}, + "cpu_percent": {common.DEFAULT_STATISTICS, common.UNIT_PERCENT, common.INFLUXDB_FIELD_RDS_CPU_USAGE}, + "sqlserver_process_memory_percent": {common.DEFAULT_STATISTICS, common.UNIT_PERCENT, common.INFLUXDB_FIELD_RDS_MEM_USAGE}, + "storage_percent": {common.DEFAULT_STATISTICS, common.UNIT_PERCENT, common.INFLUXDB_FIELD_RDS_DISK_USAGE}, + "connection_failed": {common.DEFAULT_STATISTICS, common.UNIT_COUNT, common.INFLUXDB_FIELD_RDS_CONN_FAILED}, } var azureElbMetricSpecs = map[string][]string{ diff --git a/pkg/cloudmon/collectors/common/basemon.go b/pkg/cloudmon/collectors/common/basemon.go index 3a5d7d1676..100cadcb14 100644 --- a/pkg/cloudmon/collectors/common/basemon.go +++ b/pkg/cloudmon/collectors/common/basemon.go @@ -160,10 +160,6 @@ func (self *CloudReportBase) InitProviderInstance() (cloudprovider.ICloudProvide if err != nil { return nil, errors.Wrap(err, "getCloudAccount error") } - options, err := cloudAccout.Get("options") - if err != nil { - log.Errorf("get cloudAccout options err:%v", err) - } cfg := cloudprovider.ProviderConfig{ Id: self.SProvider.Id, Name: self.SProvider.Name, @@ -173,11 +169,10 @@ func (self *CloudReportBase) InitProviderInstance() (cloudprovider.ICloudProvide Vendor: self.SProvider.Provider, ProxyFunc: proxyFunc, } - if options != nil { + if options, _ := cloudAccout.Get("options"); options != nil { cfg.Options = options.(*jsonutils.JSONDict) defaultRegion, _ := options.GetString("default_region") cfg.DefaultRegion = defaultRegion - } return cloudprovider.GetProvider(cfg) } diff --git a/pkg/multicloud/aws/region.go b/pkg/multicloud/aws/region.go index f3a73a2f25..0fbfd967cb 100644 --- a/pkg/multicloud/aws/region.go +++ b/pkg/multicloud/aws/region.go @@ -264,10 +264,6 @@ func (self *SRegion) cloudWatchRequest(apiName string, params *cloudwatch.GetMet APIVersion: "2010-08-01", } - requestErr := aws.LogDebugWithRequestErrors - - c.Config.LogLevel = &requestErr - client := client.New(*c.Config, metadata, c.Handlers) client.Handlers.Sign.PushBackNamed(v4.SignRequestHandler) client.Handlers.Build.PushBackNamed(query.BuildHandler)