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