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 <srikanth.chekuri92@gmail.com>
This commit is contained in:
Raj Kamal Singh 2025-02-13 19:45:51 +05:30 committed by GitHub
parent 50ecf768fa
commit 169bd3f65b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 3544 additions and 48 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -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 {

View File

@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -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"
}
]
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@ -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"
}
]
}
}

View File

@ -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
}
}
}

View File

@ -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)

View File

@ -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)