From 169bd3f65b41df8d7a14129dab9879cc6b22b148 Mon Sep 17 00:00:00 2001 From: Raj Kamal Singh <1133322+raj-k-singh@users.noreply.github.com> Date: Thu, 13 Feb 2025 19:45:51 +0530 Subject: [PATCH] Feat: aws integrations: dashboards (#7058) * chore: get started on dashboards plumbing for AWS integration services * feat: cloud integrations: include cloud integrations dashboards in dashboards list * feat: cloud integrations: get cloud integration dashboard by id * feat: dashboard url in cloud integrations svc detail * feat: ec2 overview dashboard * chore: add ec2 overview dashboard image * chore: finish up with v0 definitions for EC2 and RDS * chore: some cleanup * chore: fix broken test * chore: add connection url composition --------- Co-authored-by: Srikanth Chekuri --- .../cloudintegrations/availableServices.go | 14 +- .../app/cloudintegrations/controller.go | 168 ++- .../app/cloudintegrations/model.go | 11 +- .../aws/ec2/assets/dashboards/overview.json | 884 +++++++++++++ .../aws/ec2/assets/dashboards/overview.png | Bin 0 -> 96334 bytes .../aws/ec2/integration.json | 360 ++++- .../aws/rds/assets/dashboards/overview.json | 1160 +++++++++++++++++ .../aws/rds/assets/dashboards/overview.png | Bin 0 -> 64743 bytes .../aws/rds/integration.json | 936 ++++++++++++- pkg/query-service/app/http_handler.go | 34 +- pkg/query-service/app/integrations/builtin.go | 10 + .../integration/signoz_integrations_test.go | 15 +- 12 files changed, 3544 insertions(+), 48 deletions(-) create mode 100644 pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.json create mode 100644 pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.png create mode 100644 pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.json create mode 100644 pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.png diff --git a/pkg/query-service/app/cloudintegrations/availableServices.go b/pkg/query-service/app/cloudintegrations/availableServices.go index f2cf7c8067..bf2262e7f8 100644 --- a/pkg/query-service/app/cloudintegrations/availableServices.go +++ b/pkg/query-service/app/cloudintegrations/availableServices.go @@ -190,18 +190,10 @@ func validateServiceDefinition(s *CloudServiceDetails) error { // Validate dashboard data seenDashboardIds := map[string]interface{}{} for _, dd := range s.Assets.Dashboards { - did, exists := dd["id"] - if !exists { - return fmt.Errorf("id is required. not specified in dashboard titled %v", dd["title"]) + if _, seen := seenDashboardIds[dd.Id]; seen { + return fmt.Errorf("multiple dashboards found with id %s", dd.Id) } - dashboardId, ok := did.(string) - if !ok { - return fmt.Errorf("id must be string in dashboard titled %v", dd["title"]) - } - if _, seen := seenDashboardIds[dashboardId]; seen { - return fmt.Errorf("multiple dashboards found with id %s", dashboardId) - } - seenDashboardIds[dashboardId] = nil + seenDashboardIds[dd.Id] = nil } if s.TelemetryCollectionStrategy == nil { diff --git a/pkg/query-service/app/cloudintegrations/controller.go b/pkg/query-service/app/cloudintegrations/controller.go index 7d7bab77bf..8f0d69194e 100644 --- a/pkg/query-service/app/cloudintegrations/controller.go +++ b/pkg/query-service/app/cloudintegrations/controller.go @@ -3,10 +3,13 @@ package cloudintegrations import ( "context" "fmt" + "net/url" "slices" + "strings" "time" "github.com/jmoiron/sqlx" + "go.signoz.io/signoz/pkg/query-service/app/dashboards" "go.signoz.io/signoz/pkg/query-service/model" "golang.org/x/exp/maps" ) @@ -120,12 +123,30 @@ func (c *Controller) GenerateConnectionUrl( return nil, model.WrapApiError(apiErr, "couldn't upsert cloud account") } - // TODO(Raj): Add actual cloudformation template for AWS integration after it has been shipped. + // TODO(Raj): parameterized this in follow up changes + agentVersion := "latest" + connectionUrl := fmt.Sprintf( - "https://%s.console.aws.amazon.com/cloudformation/home?region=%s#/stacks/quickcreate?stackName=SigNozIntegration/", + "https://%s.console.aws.amazon.com/cloudformation/home?region=%s#/stacks/quickcreate?", req.AgentConfig.Region, req.AgentConfig.Region, ) + for qp, value := range map[string]string{ + "param_SigNozIntegrationAgentVersion": agentVersion, + "param_SigNozApiUrl": req.AgentConfig.SigNozAPIUrl, + "param_SigNozApiKey": req.AgentConfig.SigNozAPIKey, + "param_SigNozAccountId": account.Id, + "param_IngestionUrl": req.AgentConfig.IngestionUrl, + "param_IngestionKey": req.AgentConfig.IngestionKey, + "stackName": "signoz-integration", + "templateURL": fmt.Sprintf( + "https://signoz-integrations.s3.us-east-1.amazonaws.com/aws-quickcreate-template-%s.json", + agentVersion, + ), + } { + connectionUrl += fmt.Sprintf("&%s=%s", qp, url.QueryEscape(value)) + } + return &GenerateConnectionUrlResponse{ AccountId: account.Id, ConnectionUrl: connectionUrl, @@ -403,6 +424,18 @@ func (c *Controller) GetServiceDetails( if config != nil { service.Config = config + + if config.Metrics != nil && config.Metrics.Enabled { + // add links to service dashboards, making them clickable. + for i, d := range service.Assets.Dashboards { + dashboardUuid := c.dashboardUuid( + cloudProvider, serviceId, d.Id, + ) + service.Assets.Dashboards[i].Url = fmt.Sprintf( + "/dashboard/%s", dashboardUuid, + ) + } + } } } @@ -456,3 +489,134 @@ func (c *Controller) UpdateServiceConfig( Config: *updatedConfig, }, nil } + +// All dashboards that are available based on cloud integrations configuration +// across all cloud providers +func (c *Controller) AvailableDashboards(ctx context.Context) ( + []dashboards.Dashboard, *model.ApiError, +) { + allDashboards := []dashboards.Dashboard{} + + for _, provider := range []string{"aws"} { + providerDashboards, apiErr := c.AvailableDashboardsForCloudProvider(ctx, provider) + if apiErr != nil { + return nil, model.WrapApiError( + apiErr, fmt.Sprintf("couldn't get available dashboards for %s", provider), + ) + } + + allDashboards = append(allDashboards, providerDashboards...) + } + + return allDashboards, nil +} + +func (c *Controller) AvailableDashboardsForCloudProvider( + ctx context.Context, cloudProvider string, +) ([]dashboards.Dashboard, *model.ApiError) { + + accountRecords, apiErr := c.accountsRepo.listConnected(ctx, cloudProvider) + if apiErr != nil { + return nil, model.WrapApiError(apiErr, "couldn't list connected cloud accounts") + } + + // for v0, service dashboards are only available when metrics are enabled. + servicesWithAvailableMetrics := map[string]*time.Time{} + + for _, ar := range accountRecords { + if ar.CloudAccountId != nil { + configsBySvcId, apiErr := c.serviceConfigRepo.getAllForAccount( + ctx, cloudProvider, *ar.CloudAccountId, + ) + if apiErr != nil { + return nil, apiErr + } + + for svcId, config := range configsBySvcId { + if config.Metrics != nil && config.Metrics.Enabled { + servicesWithAvailableMetrics[svcId] = &ar.CreatedAt + } + } + } + } + + allServices, apiErr := listCloudProviderServices(cloudProvider) + if apiErr != nil { + return nil, apiErr + } + + svcDashboards := []dashboards.Dashboard{} + for _, svc := range allServices { + serviceDashboardsCreatedAt := servicesWithAvailableMetrics[svc.Id] + if serviceDashboardsCreatedAt != nil { + for _, d := range svc.Assets.Dashboards { + isLocked := 1 + author := fmt.Sprintf("%s-integration", cloudProvider) + svcDashboards = append(svcDashboards, dashboards.Dashboard{ + Uuid: c.dashboardUuid(cloudProvider, svc.Id, d.Id), + Locked: &isLocked, + Data: *d.Definition, + CreatedAt: *serviceDashboardsCreatedAt, + CreateBy: &author, + UpdatedAt: *serviceDashboardsCreatedAt, + UpdateBy: &author, + }) + } + servicesWithAvailableMetrics[svc.Id] = nil + } + } + + return svcDashboards, nil +} +func (c *Controller) GetDashboardById( + ctx context.Context, + dashboardUuid string, +) (*dashboards.Dashboard, *model.ApiError) { + cloudProvider, _, _, apiErr := c.parseDashboardUuid(dashboardUuid) + if apiErr != nil { + return nil, apiErr + } + + allDashboards, apiErr := c.AvailableDashboardsForCloudProvider(ctx, cloudProvider) + if apiErr != nil { + return nil, model.WrapApiError( + apiErr, fmt.Sprintf("couldn't list available dashboards"), + ) + } + + for _, d := range allDashboards { + if d.Uuid == dashboardUuid { + return &d, nil + } + } + + return nil, model.NotFoundError(fmt.Errorf( + "couldn't find dashboard with uuid: %s", dashboardUuid, + )) +} + +func (c *Controller) dashboardUuid( + cloudProvider string, svcId string, dashboardId string, +) string { + return fmt.Sprintf( + "cloud-integration--%s--%s--%s", cloudProvider, svcId, dashboardId, + ) +} + +func (c *Controller) parseDashboardUuid(dashboardUuid string) ( + cloudProvider string, svcId string, dashboardId string, apiErr *model.ApiError, +) { + parts := strings.SplitN(dashboardUuid, "--", 4) + if len(parts) != 4 || parts[0] != "cloud-integration" { + return "", "", "", model.BadRequest(fmt.Errorf( + "invalid cloud integration dashboard id", + )) + } + + return parts[1], parts[2], parts[3], nil +} + +func (c *Controller) IsCloudIntegrationDashboardUuid(dashboardUuid string) bool { + _, _, _, apiErr := c.parseDashboardUuid(dashboardUuid) + return apiErr == nil +} diff --git a/pkg/query-service/app/cloudintegrations/model.go b/pkg/query-service/app/cloudintegrations/model.go index f64def30bb..909d13c5ab 100644 --- a/pkg/query-service/app/cloudintegrations/model.go +++ b/pkg/query-service/app/cloudintegrations/model.go @@ -183,7 +183,16 @@ type CloudServiceMetricsConfig struct { } type CloudServiceAssets struct { - Dashboards []dashboards.Data `json:"dashboards"` + Dashboards []CloudServiceDashboard `json:"dashboards"` +} + +type CloudServiceDashboard struct { + Id string `json:"id"` + Url string `json:"url"` + Title string `json:"title"` + Description string `json:"description"` + Image string `json:"image"` + Definition *dashboards.Data `json:"definition,omitempty"` } type SupportedSignals struct { diff --git a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.json b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.json new file mode 100644 index 0000000000..85d61f992f --- /dev/null +++ b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.json @@ -0,0 +1,884 @@ +{ + "description": "Overview of EC2 instances", + "image": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iODAwcHgiIGhlaWdodD0iODAwcHgiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBmaWxsPSJub25lIj4KICA8cGF0aCBmaWxsPSIjOUQ1MDI1IiBkPSJNMS43MDIgMi45OEwxIDMuMzEydjkuMzc2bC43MDIuMzMyIDIuODQyLTQuNzc3TDEuNzAyIDIuOTh6IiAvPgogIDxwYXRoIGZpbGw9IiNGNTg1MzYiIGQ9Ik0zLjMzOSAxMi42NTdsLTEuNjM3LjM2M1YyLjk4bDEuNjM3LjM1M3Y5LjMyNHoiIC8+CiAgPHBhdGggZmlsbD0iIzlENTAyNSIgZD0iTTIuNDc2IDIuNjEybC44NjMtLjQwNiA0LjA5NiA2LjIxNi00LjA5NiA1LjM3Mi0uODYzLS40MDZWMi42MTJ6IiAvPgogIDxwYXRoIGZpbGw9IiNGNTg1MzYiIGQ9Ik01LjM4IDEzLjI0OGwtMi4wNDEuNTQ2VjIuMjA2bDIuMDQuNTQ4djEwLjQ5NHoiIC8+CiAgPHBhdGggZmlsbD0iIzlENTAyNSIgZD0iTTQuMyAxLjc1bDEuMDgtLjUxMiA2LjA0MyA3Ljg2NC02LjA0MyA1LjY2LTEuMDgtLjUxMVYxLjc0OXoiIC8+CiAgPHBhdGggZmlsbD0iI0Y1ODUzNiIgZD0iTTcuOTk4IDEzLjg1NmwtMi42MTguOTA2VjEuMjM4bDIuNjE4LjkwOHYxMS43MXoiIC8+CiAgPHBhdGggZmlsbD0iIzlENTAyNSIgZD0iTTYuNjAyLjY2TDcuOTk4IDBsNi41MzggOC40NTNMNy45OTggMTZsLTEuMzk2LS42NlYuNjZ6IiAvPgogIDxwYXRoIGZpbGw9IiNGNTg1MzYiIGQ9Ik0xNSAxMi42ODZMNy45OTggMTZWMEwxNSAzLjMxNHY5LjM3MnoiIC8+Cjwvc3ZnPg==", + "layout": [ + { + "h": 6, + "i": "b7a8d21e-d0e9-42de-a83f-5399f37db96c", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 0 + }, + { + "h": 6, + "i": "24b502cc-8f30-4a72-9dce-b6ee4555643a", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 0 + }, + { + "h": 6, + "i": "87422d3b-4128-4450-a0fe-317dbdcb9f83", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 6 + }, + { + "h": 6, + "i": "676c985b-de96-490f-ae1c-b2843deba7f8", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 6 + }, + { + "h": 6, + "i": "1f0c2eea-3f63-4c38-93e1-eff6d3981dfd", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 12 + }, + { + "h": 6, + "i": "0548fe05-e13d-4110-b012-013b675f690f", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 12 + } + ], + "panelMap": {}, + "tags": [], + "title": "EC2 Overview", + "uploadedGrafana": false, + "variables": { + "1de21552-5c52-4484-ad9f-065ec51fd8e9": { + "allSelected": false, + "customValue": "", + "description": "AWS Account", + "id": "1de21552-5c52-4484-ad9f-065ec51fd8e9", + "key": "1de21552-5c52-4484-ad9f-065ec51fd8e9", + "modificationUUID": "a48382b3-010e-45e1-8e77-a6a3f5e8d138", + "multiSelect": false, + "name": "Account", + "order": 0, + "queryValue": "SELECT JSONExtractString(labels, 'cloud_account_id') as cloud_account_id\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE \n metric_name like 'CPUUtilization'\n and JSONExtractString(labels, 'cloud_provider') like 'aws'\n and JSONExtractString(labels, 'service_name') like 'EC2'\nGROUP BY cloud_account_id", + "showALLOption": false, + "sort": "DISABLED", + "textboxValue": "", + "type": "QUERY" + }, + "d4088f55-111c-479c-84bd-445dce8ba210": { + "allSelected": false, + "customValue": "", + "description": "AWS Region", + "id": "d4088f55-111c-479c-84bd-445dce8ba210", + "modificationUUID": "fc1b8b85-dfa9-4250-a04a-ff77bca0398c", + "multiSelect": false, + "name": "Region", + "order": 0, + "queryValue": "SELECT JSONExtractString(labels, 'cloud_region') as cloud_region\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE \n metric_name like 'CPUUtilization'\n and JSONExtractString(labels, 'cloud_account_id') IN {{.Account}}\n and JSONExtractString(labels, 'cloud_provider') like 'aws'\n and JSONExtractString(labels, 'service_name') like 'EC2'\nGROUP BY cloud_region", + "showALLOption": false, + "sort": "DISABLED", + "textboxValue": "", + "type": "QUERY" + } + }, + "version": "v4", + "widgets": [ + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "b7a8d21e-d0e9-42de-a83f-5399f37db96c", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "float64", + "id": "CPUUtilization_count--float64--Sum--true", + "isColumn": true, + "isJSON": false, + "key": "CPUUtilization_count", + "type": "Sum" + }, + "aggregateOperator": "increase", + "dataSource": "metrics", + "disabled": false, + "expression": "B", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [ + { + "dataType": "string", + "id": "service_instance_id--string--tag--false", + "isColumn": false, + "isJSON": false, + "key": "service_instance_id", + "type": "tag" + } + ], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "B", + "reduceTo": "avg", + "spaceAggregation": "max", + "stepInterval": 60, + "timeAggregation": "increase" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "c933d8b2-036b-4a64-8935-6c253c1da6a3", + "promql": [ + { + "disabled": false, + "legend": "{{service_instance_id}} ", + "name": "A", + "query": "CPUUtilization{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "CPU Utilization", + "yAxisUnit": "percent" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "Percentage of available CPU credits that were utilizaed", + "fillSpans": false, + "id": "24b502cc-8f30-4a72-9dce-b6ee4555643a", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "CPUCredit------false", + "isColumn": false, + "key": "CPUCredit", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "", + "stepInterval": 60, + "timeAggregation": "" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "d97f6a4d-f66e-4688-9daf-172f24c87984", + "promql": [ + { + "disabled": false, + "legend": "{{service_instance_id}}", + "name": "A", + "query": "CPUCreditUsage{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "CPU Credits Utilization", + "yAxisUnit": "percentunit" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "676c985b-de96-490f-ae1c-b2843deba7f8", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "EBSRea------false", + "isColumn": false, + "key": "EBSRea", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "", + "stepInterval": 60, + "timeAggregation": "" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "8267701a-10e4-4405-bb1c-53f0dba4b711", + "promql": [ + { + "disabled": false, + "legend": "{{service_instance_id}} - Reads", + "name": "A", + "query": "EBSReadOps{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + }, + { + "disabled": false, + "legend": "{{service_instance_id}} - Writes", + "name": "B", + "query": "EBSWriteOps{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "EBS Ops", + "yAxisUnit": "none" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "87422d3b-4128-4450-a0fe-317dbdcb9f83", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "EBS------false", + "isColumn": false, + "key": "EBS", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "", + "stepInterval": 60, + "timeAggregation": "" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "0cf58200-a2bc-4a08-ab41-7b2a7d2ec92e", + "promql": [ + { + "disabled": false, + "legend": "{{service_instance_id}} - Reads", + "name": "A", + "query": "EBSReadBytes{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + }, + { + "disabled": false, + "legend": "{{service_instance_id}} - Writes", + "name": "B", + "query": "EBSWriteBytes{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "EBS Read/Write Bytes", + "yAxisUnit": "binBps" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "1f0c2eea-3f63-4c38-93e1-eff6d3981dfd", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "", + "stepInterval": 60, + "timeAggregation": "" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "6378c4a2-d0fd-485f-a768-89910ff2d934", + "promql": [ + { + "disabled": false, + "legend": "{{service_instance_id}}", + "name": "A", + "query": "NetworkIn{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Network Incoming", + "yAxisUnit": "binBps" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "0548fe05-e13d-4110-b012-013b675f690f", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "", + "stepInterval": 60, + "timeAggregation": "" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "5c1479bc-1e10-4643-b797-006e97f42b6d", + "promql": [ + { + "disabled": false, + "legend": "{{service_instance_id}}", + "name": "A", + "query": "NetworkOut{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"EC2\", service_instance_id!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Network Outgoing", + "yAxisUnit": "binBps" + } + ] +} \ No newline at end of file diff --git a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.png b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/assets/dashboards/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2740c2942f42dcb0f730d332845f48180e3cf9 GIT binary patch literal 96334 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 literal 0 HcmV?d00001 diff --git a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/integration.json b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/integration.json index e9ef4944d8..7a96405c16 100644 --- a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/integration.json +++ b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/ec2/integration.json @@ -3,9 +3,6 @@ "title": "EC2", "icon": "file://icon.svg", "overview": "file://overview.md", - "assets": { - "dashboards": [] - }, "supported_signals": { "metrics": true, "logs": false @@ -13,16 +10,346 @@ "data_collected": { "metrics": [ { - "name": "ec2_cpuutilization_average", - "type": "Gauge", - "unit": "number", - "description": "CloudWatch metric CPUUtilization" + "name": "CPUCreditBalance", + "unit": "Count", + "type": "Summary", + "description": "" }, { - "name": "ec2_cpuutilization_maximum", - "type": "Gauge", - "unit": "number", - "description": "CloudWatch metric CPUUtilization" + "name": "CPUCreditBalance_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditBalance_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditUsage", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUCreditUsage_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditUsage_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditBalance", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUSurplusCreditBalance_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditBalance_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditsCharged", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUSurplusCreditsCharged_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditsCharged_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUUtilization", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "CPUUtilization_count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "CPUUtilization_sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSByteBalance_", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "EBSByteBalance__count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSByteBalance__sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSIOBalance_", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "EBSIOBalance__count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSIOBalance__sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSReadBytes", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "EBSReadBytes_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "EBSReadBytes_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "EBSReadOps", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "EBSReadOps_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "EBSReadOps_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "EBSWriteBytes", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "EBSWriteBytes_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "EBSWriteBytes_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "EBSWriteOps", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "EBSWriteOps_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "EBSWriteOps_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "MetadataNoToken", + "unit": "None", + "type": "Summary", + "description": "" + }, + { + "name": "MetadataNoToken_count", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "MetadataNoToken_sum", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkIn", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkIn_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkIn_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkOut", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkOut_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkOut_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkPacketsIn", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkPacketsIn_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkPacketsIn_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkPacketsOut", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkPacketsOut_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkPacketsOut_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "StatusCheckFailed", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "StatusCheckFailed_Instance", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "StatusCheckFailed_Instance_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "StatusCheckFailed_Instance_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "StatusCheckFailed_System", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "StatusCheckFailed_System_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "StatusCheckFailed_System_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "StatusCheckFailed_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "StatusCheckFailed_sum", + "unit": "Count", + "type": "Sum", + "description": "" } ], "logs": [] @@ -35,5 +362,16 @@ } ] } + }, + "assets": { + "dashboards": [ + { + "id": "overview", + "title": "EC2 Overview", + "description": "Overview of EC2", + "image": "file://assets/dashboards/overview.png", + "definition": "file://assets/dashboards/overview.json" + } + ] } } \ No newline at end of file diff --git a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.json b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.json new file mode 100644 index 0000000000..dcab95f4f1 --- /dev/null +++ b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.json @@ -0,0 +1,1160 @@ +{ + "description": "Overview of RDS instances in a region", + "image": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iODBweCIgaGVpZ2h0PSI4MHB4IiB2aWV3Qm94PSIwIDAgODAgODAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KICA8dGl0bGU+SWNvbi1BcmNoaXRlY3R1cmUvNjQvQXJjaF9BbWF6b24tUkRTXzY0PC90aXRsZT4KICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICA8ZGVmcz4KICAgIDxsaW5lYXJHcmFkaWVudCB4MT0iMCUiIHkxPSIxMDAlIiB4Mj0iMTAwJSIgeTI9IjAlIiBpZD0ibGluZWFyR3JhZGllbnQtMSI+CiAgICAgIDxzdG9wIHN0b3AtY29sb3I9IiMyRTI3QUQiIG9mZnNldD0iMCUiPjwvc3RvcD4KICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iIzUyN0ZGRiIgb2Zmc2V0PSIxMDAlIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8ZyBpZD0iSWNvbi1BcmNoaXRlY3R1cmUvNjQvQXJjaF9BbWF6b24tUkRTXzY0IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIKICAgIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICA8ZyBpZD0iSWNvbi1BcmNoaXRlY3R1cmUtQkcvNjQvRGF0YWJhc2UiIGZpbGw9InVybCgjbGluZWFyR3JhZGllbnQtMSkiPgogICAgICA8cmVjdCBpZD0iUmVjdGFuZ2xlIiB4PSIwIiB5PSIwIiB3aWR0aD0iODAiIGhlaWdodD0iODAiPjwvcmVjdD4KICAgIDwvZz4KICAgIDxwYXRoCiAgICAgIGQ9Ik0xNS40MTQsMTQgTDI0LjcwNywyMy4yOTMgTDIzLjI5MywyNC43MDcgTDE0LDE1LjQxNCBMMTQsMjMgTDEyLDIzIEwxMiwxMyBDMTIsMTIuNDQ4IDEyLjQ0NywxMiAxMywxMiBMMjMsMTIgTDIzLDE0IEwxNS40MTQsMTQgWiBNNjgsMTMgTDY4LDIzIEw2NiwyMyBMNjYsMTUuNDE0IEw1Ni43MDcsMjQuNzA3IEw1NS4yOTMsMjMuMjkzIEw2NC41ODYsMTQgTDU3LDE0IEw1NywxMiBMNjcsMTIgQzY3LjU1MywxMiA2OCwxMi40NDggNjgsMTMgTDY4LDEzIFogTTY2LDU3IEw2OCw1NyBMNjgsNjcgQzY4LDY3LjU1MiA2Ny41NTMsNjggNjcsNjggTDU3LDY4IEw1Nyw2NiBMNjQuNTg2LDY2IEw1NS4yOTMsNTYuNzA3IEw1Ni43MDcsNTUuMjkzIEw2Niw2NC41ODYgTDY2LDU3IFogTTY1LjUsMzkuMjEzIEM2NS41LDM1Ljg5NCA2MS42NjgsMzIuNjE1IDU1LjI1LDMwLjQ0MiBMNTUuODkxLDI4LjU0OCBDNjMuMjY4LDMxLjA0NSA2Ny41LDM0LjkzMiA2Ny41LDM5LjIxMyBDNjcuNSw0My40OTUgNjMuMjY4LDQ3LjM4MyA1NS44OSw0OS44NzkgTDU1LjI0OSw0Ny45ODQgQzYxLjY2OCw0NS44MTIgNjUuNSw0Mi41MzQgNjUuNSwzOS4yMTMgTDY1LjUsMzkuMjEzIFogTTE0LjU1NiwzOS4yMTMgQzE0LjU1Niw0Mi4zOTMgMTguMTQzLDQ1LjU4NSAyNC4xNTIsNDcuNzUzIEwyMy40NzMsNDkuNjM0IEMxNi41MzUsNDcuMTMxIDEyLjU1Niw0My4zMzMgMTIuNTU2LDM5LjIxMyBDMTIuNTU2LDM1LjA5NCAxNi41MzUsMzEuMjk2IDIzLjQ3MywyOC43OTIgTDI0LjE1MiwzMC42NzMgQzE4LjE0MywzMi44NDIgMTQuNTU2LDM2LjAzNCAxNC41NTYsMzkuMjEzIEwxNC41NTYsMzkuMjEzIFogTTI0LjcwNyw1Ni43MDcgTDE1LjQxNCw2NiBMMjMsNjYgTDIzLDY4IEwxMyw2OCBDMTIuNDQ3LDY4IDEyLDY3LjU1MiAxMiw2NyBMMTIsNTcgTDE0LDU3IEwxNCw2NC41ODYgTDIzLjI5Myw1NS4yOTMgTDI0LjcwNyw1Ni43MDcgWiBNNDAsMzEuMjg2IEMzMi44NTQsMzEuMjg2IDI5LDI5LjQ0IDI5LDI4LjY4NiBDMjksMjcuOTMxIDMyLjg1NCwyNi4wODYgNDAsMjYuMDg2IEM0Ny4xNDUsMjYuMDg2IDUxLDI3LjkzMSA1MSwyOC42ODYgQzUxLDI5LjQ0IDQ3LjE0NSwzMS4yODYgNDAsMzEuMjg2IEw0MCwzMS4yODYgWiBNNDAuMDI5LDM5LjAzMSBDMzMuMTg3LDM5LjAzMSAyOSwzNy4xNjIgMjksMzYuMTQ1IEwyOSwzMS4yODQgQzMxLjQ2MywzMi42NDMgMzUuODMyLDMzLjI4NiA0MCwzMy4yODYgQzQ0LjE2OCwzMy4yODYgNDguNTM3LDMyLjY0MyA1MSwzMS4yODQgTDUxLDM2LjE0NSBDNTEsMzcuMTYzIDQ2LjgzNSwzOS4wMzEgNDAuMDI5LDM5LjAzMSBMNDAuMDI5LDM5LjAzMSBaIE00MC4wMjksNDYuNjY3IEMzMy4xODcsNDYuNjY3IDI5LDQ0Ljc5OCAyOSw0My43ODEgTDI5LDM4Ljg2MiBDMzEuNDMxLDQwLjI5MSAzNS43NDIsNDEuMDMxIDQwLjAyOSw0MS4wMzEgQzQ0LjI5Miw0MS4wMzEgNDguNTc4LDQwLjI5MiA1MSwzOC44NjcgTDUxLDQzLjc4MSBDNTEsNDQuNzk5IDQ2LjgzNSw0Ni42NjcgNDAuMDI5LDQ2LjY2NyBMNDAuMDI5LDQ2LjY2NyBaIE00MCw1My41MTggQzMyLjg4Myw1My41MTggMjksNTEuNjA1IDI5LDUwLjYyMiBMMjksNDYuNDk4IEMzMS40MzEsNDcuOTI3IDM1Ljc0Miw0OC42NjcgNDAuMDI5LDQ4LjY2NyBDNDQuMjkyLDQ4LjY2NyA0OC41NzgsNDcuOTI5IDUxLDQ2LjUwMyBMNTEsNTAuNjIyIEM1MSw1MS42MDUgNDcuMTE3LDUzLjUxOCA0MCw1My41MTggTDQwLDUzLjUxOCBaIE00MCwyNC4wODYgQzMzLjczOSwyNC4wODYgMjcsMjUuNTI1IDI3LDI4LjY4NiBMMjcsNTAuNjIyIEMyNyw1My44MzYgMzMuNTQsNTUuNTE4IDQwLDU1LjUxOCBDNDYuNDYsNTUuNTE4IDUzLDUzLjgzNiA1Myw1MC42MjIgTDUzLDI4LjY4NiBDNTMsMjUuNTI1IDQ2LjI2MSwyNC4wODYgNDAsMjQuMDg2IEw0MCwyNC4wODYgWiIKICAgICAgaWQ9IkFtYXpvbi1SRFNfSWNvbl82NF9TcXVpZCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogIDwvZz4KPC9zdmc+", + "layout": [ + { + "h": 5, + "i": "85a58979-a0d5-4bea-8e8b-2141bbe9a3de", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 0 + }, + { + "h": 5, + "i": "d4dd7bc0-7fbd-4697-aed5-870de8dd26d8", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 0 + }, + { + "h": 5, + "i": "5145172f-69ce-4b9a-b96c-7e7c46c9435d", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 5 + }, + { + "h": 5, + "i": "935ce065-35bf-442b-be8a-df3231e53862", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 5 + }, + { + "h": 6, + "i": "ac41a973-1d06-44d6-9609-de0fa3211ae0", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 10 + }, + { + "h": 6, + "i": "b9bd5864-6317-43f6-af2a-f595c3206216", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 10 + }, + { + "h": 6, + "i": "ca60d14e-c0d1-4764-b24d-06fe7104ab50", + "moved": false, + "static": false, + "w": 6, + "x": 0, + "y": 16 + }, + { + "h": 6, + "i": "cadb30be-31f6-4cb9-ad75-6a3d140d4325", + "moved": false, + "static": false, + "w": 6, + "x": 6, + "y": 16 + } + ], + "panelMap": {}, + "tags": [], + "title": "RDS Overview", + "uploadedGrafana": false, + "variables": { + "Account": { + "allSelected": false, + "customValue": "", + "description": "AWS Account", + "id": "b3e3a481-f198-472c-9e3f-e38ebe3c4141", + "key": "b3e3a481-f198-472c-9e3f-e38ebe3c4141", + "modificationUUID": "0b1d4ccd-3722-4026-9a5d-a45e5023b8bb", + "multiSelect": false, + "name": "Account", + "order": 0, + "queryValue": "SELECT JSONExtractString(labels, 'cloud_account_id') as cloud_account_id\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE \n metric_name like 'CPUUtilization'\n and JSONExtractString(labels, 'cloud_provider') like 'aws'\n and JSONExtractString(labels, 'service_name') like 'RDS'\nGROUP BY cloud_account_id", + "showALLOption": false, + "sort": "DISABLED", + "textboxValue": "", + "type": "QUERY" + }, + "Region": { + "allSelected": false, + "customValue": "", + "description": "AWS Region", + "id": "5aaf8d9a-deeb-4a36-8f01-70ee4afe86f6", + "key": "5aaf8d9a-deeb-4a36-8f01-70ee4afe86f6", + "modificationUUID": "75cf9374-61a8-4885-9fd9-6e003eb99f81", + "multiSelect": false, + "name": "Region", + "order": 1, + "queryValue": "SELECT JSONExtractString(labels, 'cloud_region') as cloud_region\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE \n metric_name like 'CPUUtilization'\n and JSONExtractString(labels, 'cloud_account_id') IN {{.Account}}\n and JSONExtractString(labels, 'cloud_provider') like 'aws'\n and JSONExtractString(labels, 'service_name') like 'RDS'\nGROUP BY cloud_region", + "showALLOption": false, + "sort": "DISABLED", + "textboxValue": "", + "type": "QUERY" + } + }, + "version": "v4", + "widgets": [ + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "85a58979-a0d5-4bea-8e8b-2141bbe9a3de", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "a1ba90cd-81cf-492f-b387-760bf776ef03", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}}", + "name": "A", + "query": "CPUUtilization{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "CPU Utilization", + "yAxisUnit": "percent" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "The amount of available random access memory.\n\nFor MariaDB, MySQL, Oracle, and PostgreSQL DB instances, this metric reports the value of the MemAvailable field of /proc/meminfo.", + "fillSpans": false, + "id": "d4dd7bc0-7fbd-4697-aed5-870de8dd26d8", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "d5e59d39-8c7a-4614-8e20-651bf140eb80", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}}", + "name": "A", + "query": "FreeableMemory{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Free Memory", + "yAxisUnit": "decbytes" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "cadb30be-31f6-4cb9-ad75-6a3d140d4325", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "", + "stepInterval": 60, + "timeAggregation": "" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "bd011f26-5da1-4163-9dc0-951c3c364143", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}}", + "name": "A", + "query": "FreeStorageSpace{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Free Storage Space", + "yAxisUnit": "decbytes" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "b9bd5864-6317-43f6-af2a-f595c3206216", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "8e79fb06-8089-4d14-afe0-af914d13dca9", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}}", + "name": "A", + "query": "DiskQueueDepth{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Disk Queue Depth", + "yAxisUnit": "none" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "ac41a973-1d06-44d6-9609-de0fa3211ae0", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "a8394fa7-fd1e-4051-a738-146f64240174", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}} - Reads", + "name": "A", + "query": "ReadIOPS{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + }, + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}} - Writes", + "name": "B", + "query": "WriteIOPS{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Disk Read / Write IOPS", + "yAxisUnit": "cps" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "935ce065-35bf-442b-be8a-df3231e53862", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "d584298b-ee0e-4cf1-8333-edc4f286878d", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}} - Reads", + "name": "A", + "query": "ReadLatency{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + }, + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}} - Writes", + "name": "B", + "query": "WriteLatency{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Disk Read / Write Latency", + "yAxisUnit": "s" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "ca60d14e-c0d1-4764-b24d-06fe7104ab50", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "10f91076-5aa2-4c56-986c-397b208a7165", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}} - Reads", + "name": "A", + "query": "ReadThroughput{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + }, + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}} - Writes", + "name": "B", + "query": "WriteThroughput{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Disk Read / Write Throughput", + "yAxisUnit": "decbytes" + }, + { + "bucketCount": 30, + "bucketWidth": 0, + "columnUnits": {}, + "description": "", + "fillSpans": false, + "id": "5145172f-69ce-4b9a-b96c-7e7c46c9435d", + "isStacked": false, + "mergeAllActiveQueries": false, + "nullZeroValues": "zero", + "opacity": "1", + "panelTypes": "graph", + "query": { + "builder": { + "queryData": [ + { + "aggregateAttribute": { + "dataType": "", + "id": "------false", + "isColumn": false, + "isJSON": false, + "key": "", + "type": "" + }, + "aggregateOperator": "count", + "dataSource": "metrics", + "disabled": false, + "expression": "A", + "filters": { + "items": [], + "op": "AND" + }, + "functions": [], + "groupBy": [], + "having": [], + "legend": "", + "limit": null, + "orderBy": [], + "queryName": "A", + "reduceTo": "avg", + "spaceAggregation": "sum", + "stepInterval": 60, + "timeAggregation": "rate" + } + ], + "queryFormulas": [] + }, + "clickhouse_sql": [ + { + "disabled": false, + "legend": "", + "name": "A", + "query": "" + } + ], + "id": "0444bb20-3b72-4907-96a6-d3e7c48cab9f", + "promql": [ + { + "disabled": false, + "legend": "{{DBInstanceIdentifier}}", + "name": "A", + "query": "DatabaseConnections{cloud_provider=\"aws\",cloud_account_id=\"$Account\",cloud_region=\"$Region\",service_name=\"RDS\", DBInstanceIdentifier!=\"\",quantile=\"1\"}" + } + ], + "queryType": "promql" + }, + "selectedLogFields": [ + { + "dataType": "string", + "name": "body", + "type": "" + }, + { + "dataType": "string", + "name": "timestamp", + "type": "" + } + ], + "selectedTracesFields": [ + { + "dataType": "string", + "id": "serviceName--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "serviceName", + "type": "tag" + }, + { + "dataType": "string", + "id": "name--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "name", + "type": "tag" + }, + { + "dataType": "float64", + "id": "durationNano--float64--tag--true", + "isColumn": true, + "isJSON": false, + "key": "durationNano", + "type": "tag" + }, + { + "dataType": "string", + "id": "httpMethod--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "httpMethod", + "type": "tag" + }, + { + "dataType": "string", + "id": "responseStatusCode--string--tag--true", + "isColumn": true, + "isJSON": false, + "key": "responseStatusCode", + "type": "tag" + } + ], + "softMax": 0, + "softMin": 0, + "stackedBarChart": false, + "thresholds": [], + "timePreferance": "GLOBAL_TIME", + "title": "Database Connections", + "yAxisUnit": "none" + } + ] +} \ No newline at end of file diff --git a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.png b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/assets/dashboards/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..d50277c533ad4c59ec582267c7a6b98c3612212a GIT binary patch literal 64743 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 literal 0 HcmV?d00001 diff --git a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/integration.json b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/integration.json index 396b4dfb62..cd51dae7c8 100644 --- a/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/integration.json +++ b/pkg/query-service/app/cloudintegrations/serviceDefinitions/aws/rds/integration.json @@ -3,9 +3,6 @@ "title": "Amazon RDS", "icon": "file://icon.svg", "overview": "file://overview.md", - "assets": { - "dashboards": [] - }, "supported_signals": { "metrics": true, "logs": true @@ -13,19 +10,923 @@ "data_collected": { "metrics": [ { - "name": "rds_postgres_cpuutilization_average", - "type": "Gauge", - "unit": "number", - "description": "CloudWatch metric CPUUtilization" + "name": "BurstBalance", + "unit": "Percent", + "type": "Summary", + "description": "" }, { - "name": "rds_postgres_cpuutilization_maximum", - "type": "Gauge", - "unit": "number", - "description": "CloudWatch metric CPUUtilization" + "name": "BurstBalance_count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "BurstBalance_sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditBalance", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUCreditBalance_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditBalance_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditUsage", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUCreditUsage_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUCreditUsage_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditBalance", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUSurplusCreditBalance_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditBalance_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditsCharged", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "CPUSurplusCreditsCharged_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUSurplusCreditsCharged_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "CPUUtilization", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "CPUUtilization_count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "CPUUtilization_sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "CheckpointLag", + "unit": "Seconds", + "type": "Summary", + "description": "" + }, + { + "name": "CheckpointLag_count", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "CheckpointLag_sum", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoad", + "unit": "None", + "type": "Summary", + "description": "" + }, + { + "name": "DBLoadCPU", + "unit": "None", + "type": "Summary", + "description": "" + }, + { + "name": "DBLoadCPU_count", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoadCPU_sum", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoadNonCPU", + "unit": "None", + "type": "Summary", + "description": "" + }, + { + "name": "DBLoadNonCPU_count", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoadNonCPU_sum", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoadRelativeToNumVCPUs", + "unit": "None", + "type": "Summary", + "description": "" + }, + { + "name": "DBLoadRelativeToNumVCPUs_count", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoadRelativeToNumVCPUs_sum", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoad_count", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DBLoad_sum", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "DatabaseConnections", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "DatabaseConnections_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "DatabaseConnections_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "DiskQueueDepth", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "DiskQueueDepth_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "DiskQueueDepth_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "EBSByteBalance_", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "EBSByteBalance__count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSByteBalance__sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSIOBalance_", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "EBSIOBalance__count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "EBSIOBalance__sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "FreeStorageSpace", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "FreeStorageSpace_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "FreeStorageSpace_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "FreeableMemory", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "FreeableMemory_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "FreeableMemory_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "MaximumUsedTransactionIDs", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "MaximumUsedTransactionIDs_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "MaximumUsedTransactionIDs_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkReceiveThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkReceiveThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkReceiveThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkTransmitThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkTransmitThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkTransmitThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "OldestReplicationSlotLag", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "OldestReplicationSlotLag_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "OldestReplicationSlotLag_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "ReadIOPS", + "unit": "Count/Second", + "type": "Summary", + "description": "" + }, + { + "name": "ReadIOPS_count", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "ReadIOPS_sum", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "ReadLatency", + "unit": "Seconds", + "type": "Summary", + "description": "" + }, + { + "name": "ReadLatency_count", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "ReadLatency_sum", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "ReadThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "ReadThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "ReadThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "ReplicationSlotDiskUsage", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "ReplicationSlotDiskUsage_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "ReplicationSlotDiskUsage_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "SwapUsage", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "SwapUsage_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "SwapUsage_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "TransactionLogsDiskUsage", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "TransactionLogsDiskUsage_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "TransactionLogsDiskUsage_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "TransactionLogsGeneration", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "TransactionLogsGeneration_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "TransactionLogsGeneration_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "WriteIOPS", + "unit": "Count/Second", + "type": "Summary", + "description": "" + }, + { + "name": "WriteIOPS_count", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "WriteIOPS_sum", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "WriteLatency", + "unit": "Seconds", + "type": "Summary", + "description": "" + }, + { + "name": "WriteLatency_count", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "WriteLatency_sum", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "WriteThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "WriteThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "WriteThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "ACUUtilization", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "ACUUtilization_count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "ACUUtilization_sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "BackupRetentionPeriodStorageUsed", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "BackupRetentionPeriodStorageUsed_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "BackupRetentionPeriodStorageUsed_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "BufferCacheHitRatio", + "unit": "Percent", + "type": "Summary", + "description": "" + }, + { + "name": "BufferCacheHitRatio_count", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "BufferCacheHitRatio_sum", + "unit": "Percent", + "type": "Sum", + "description": "" + }, + { + "name": "CommitLatency", + "unit": "Milliseconds", + "type": "Summary", + "description": "" + }, + { + "name": "CommitLatency_count", + "unit": "Milliseconds", + "type": "Sum", + "description": "" + }, + { + "name": "CommitLatency_sum", + "unit": "Milliseconds", + "type": "Sum", + "description": "" + }, + { + "name": "CommitThroughput", + "unit": "Count/Second", + "type": "Summary", + "description": "" + }, + { + "name": "CommitThroughput_count", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "CommitThroughput_sum", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "Deadlocks", + "unit": "Count/Second", + "type": "Summary", + "description": "" + }, + { + "name": "Deadlocks_count", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "Deadlocks_sum", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "EngineUptime", + "unit": "Seconds", + "type": "Summary", + "description": "" + }, + { + "name": "EngineUptime_count", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "EngineUptime_sum", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "NetworkThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "NetworkThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "RDSToAuroraPostgreSQLReplicaLag", + "unit": "Seconds", + "type": "Summary", + "description": "" + }, + { + "name": "RDSToAuroraPostgreSQLReplicaLag_count", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "RDSToAuroraPostgreSQLReplicaLag_sum", + "unit": "Seconds", + "type": "Sum", + "description": "" + }, + { + "name": "ServerlessDatabaseCapacity", + "unit": "None", + "type": "Summary", + "description": "" + }, + { + "name": "ServerlessDatabaseCapacity_count", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "ServerlessDatabaseCapacity_sum", + "unit": "None", + "type": "Sum", + "description": "" + }, + { + "name": "StorageNetworkReceiveThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "StorageNetworkReceiveThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "StorageNetworkReceiveThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "StorageNetworkThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "StorageNetworkThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "StorageNetworkThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "StorageNetworkTransmitThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "StorageNetworkTransmitThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "StorageNetworkTransmitThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "TempStorageIOPS", + "unit": "Count/Second", + "type": "Summary", + "description": "" + }, + { + "name": "TempStorageIOPS_count", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "TempStorageIOPS_sum", + "unit": "Count/Second", + "type": "Sum", + "description": "" + }, + { + "name": "TempStorageThroughput", + "unit": "Bytes/Second", + "type": "Summary", + "description": "" + }, + { + "name": "TempStorageThroughput_count", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "TempStorageThroughput_sum", + "unit": "Bytes/Second", + "type": "Sum", + "description": "" + }, + { + "name": "TotalBackupStorageBilled", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "TotalBackupStorageBilled_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "TotalBackupStorageBilled_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "VolumeBytesUsed", + "unit": "Bytes", + "type": "Summary", + "description": "" + }, + { + "name": "VolumeBytesUsed_count", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "VolumeBytesUsed_sum", + "unit": "Bytes", + "type": "Sum", + "description": "" + }, + { + "name": "VolumeReadIOPs", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "VolumeReadIOPs_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "VolumeReadIOPs_sum", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "VolumeWriteIOPs", + "unit": "Count", + "type": "Summary", + "description": "" + }, + { + "name": "VolumeWriteIOPs_count", + "unit": "Count", + "type": "Sum", + "description": "" + }, + { + "name": "VolumeWriteIOPs_sum", + "unit": "Count", + "type": "Sum", + "description": "" } ], - "logs": [] + "logs": [ + { + "name": "Account Id", + "path": "resources.cloud.account.id", + "type": "string" + }, + { + "name": "Log Group Name", + "path": "resources.aws.cloudwatch.log_group_name", + "type": "string" + }, + { + "name": "Log Stream Name", + "path": "resources.aws.cloudwatch.log_stream_name", + "type": "string" + } + ] }, "telemetry_collection_strategy": { "aws_metrics": { @@ -43,5 +944,16 @@ } ] } + }, + "assets": { + "dashboards": [ + { + "id": "overview", + "title": "RDS Overview", + "description": "Overview of RDS", + "image": "file://assets/dashboards/overview.png", + "definition": "file://assets/dashboards/overview.json" + } + ] } } \ No newline at end of file diff --git a/pkg/query-service/app/http_handler.go b/pkg/query-service/app/http_handler.go index 1b20f06711..d406bb8c63 100644 --- a/pkg/query-service/app/http_handler.go +++ b/pkg/query-service/app/http_handler.go @@ -1026,8 +1026,16 @@ func (aH *APIHandler) getDashboards(w http.ResponseWriter, r *http.Request) { installedIntegrationDashboards, err := ic.GetDashboardsForInstalledIntegrations(r.Context()) if err != nil { zap.L().Error("failed to get dashboards for installed integrations", zap.Error(err)) + } else { + allDashboards = append(allDashboards, installedIntegrationDashboards...) + } + + cloudIntegrationDashboards, err := aH.CloudIntegrationsController.AvailableDashboards(r.Context()) + if err != nil { + zap.L().Error("failed to get cloud dashboards", zap.Error(err)) + } else { + allDashboards = append(allDashboards, cloudIntegrationDashboards...) } - allDashboards = append(allDashboards, installedIntegrationDashboards...) tagsFromReq, ok := r.URL.Query()["tags"] if !ok || len(tagsFromReq) == 0 || tagsFromReq[0] == "" { @@ -1183,12 +1191,24 @@ func (aH *APIHandler) getDashboard(w http.ResponseWriter, r *http.Request) { return } - dashboard, apiError = aH.IntegrationsController.GetInstalledIntegrationDashboardById( - r.Context(), uuid, - ) - if apiError != nil { - RespondError(w, apiError, nil) - return + if aH.CloudIntegrationsController.IsCloudIntegrationDashboardUuid(uuid) { + dashboard, apiError = aH.CloudIntegrationsController.GetDashboardById( + r.Context(), uuid, + ) + if apiError != nil { + RespondError(w, apiError, nil) + return + } + + } else { + dashboard, apiError = aH.IntegrationsController.GetInstalledIntegrationDashboardById( + r.Context(), uuid, + ) + if apiError != nil { + RespondError(w, apiError, nil) + return + } + } } diff --git a/pkg/query-service/app/integrations/builtin.go b/pkg/query-service/app/integrations/builtin.go index 77e31df001..5314412c9f 100644 --- a/pkg/query-service/app/integrations/builtin.go +++ b/pkg/query-service/app/integrations/builtin.go @@ -231,6 +231,16 @@ func readFileIfUri(fs embed.FS, maybeFileUri string, basedir string) (interface{ dataUri := fmt.Sprintf("data:image/svg+xml;base64,%s", base64Svg) return dataUri, nil + } else if strings.HasSuffix(maybeFileUri, ".jpeg") || strings.HasSuffix(maybeFileUri, ".jpg") { + base64Contents := base64.StdEncoding.EncodeToString(fileContents) + dataUri := fmt.Sprintf("data:image/jpeg;base64,%s", base64Contents) + return dataUri, nil + + } else if strings.HasSuffix(maybeFileUri, ".png") { + base64Contents := base64.StdEncoding.EncodeToString(fileContents) + dataUri := fmt.Sprintf("data:image/png;base64,%s", base64Contents) + return dataUri, nil + } return nil, fmt.Errorf("unsupported file type %s", maybeFileUri) diff --git a/pkg/query-service/tests/integration/signoz_integrations_test.go b/pkg/query-service/tests/integration/signoz_integrations_test.go index 778a87cd6b..9c124e9fc4 100644 --- a/pkg/query-service/tests/integration/signoz_integrations_test.go +++ b/pkg/query-service/tests/integration/signoz_integrations_test.go @@ -12,6 +12,7 @@ import ( mockhouse "github.com/srikanthccv/ClickHouse-go-mock" "github.com/stretchr/testify/require" "go.signoz.io/signoz/pkg/query-service/app" + "go.signoz.io/signoz/pkg/query-service/app/cloudintegrations" "go.signoz.io/signoz/pkg/query-service/app/dashboards" "go.signoz.io/signoz/pkg/query-service/app/integrations" "go.signoz.io/signoz/pkg/query-service/app/logparsingpipeline" @@ -557,11 +558,17 @@ func NewIntegrationsTestBed(t *testing.T, testDB *sqlx.DB) *IntegrationsTestBed reader, mockClickhouse := NewMockClickhouseReader(t, testDB, fm) mockClickhouse.MatchExpectationsInOrder(false) + cloudIntegrationsController, err := cloudintegrations.NewController(testDB) + if err != nil { + t.Fatalf("could not create cloud integrations controller: %v", err) + } + apiHandler, err := app.NewAPIHandler(app.APIHandlerOpts{ - Reader: reader, - AppDao: dao.DB(), - IntegrationsController: controller, - FeatureFlags: fm, + Reader: reader, + AppDao: dao.DB(), + IntegrationsController: controller, + FeatureFlags: fm, + CloudIntegrationsController: cloudIntegrationsController, }) if err != nil { t.Fatalf("could not create a new ApiHandler: %v", err)