Compare commits
21 Commits
refactor/c
...
fix/array-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b30bfa6371 | ||
|
|
e7f4a04b36 | ||
|
|
0687634da3 | ||
|
|
7e7732243e | ||
|
|
2f952e402f | ||
|
|
a12febca4a | ||
|
|
cb71c9c3f7 | ||
|
|
1cd4ce6509 | ||
|
|
9299c8ab18 | ||
|
|
24749de269 | ||
|
|
39098ec3f4 | ||
|
|
fe554f5c94 | ||
|
|
8a60a041a6 | ||
|
|
541f19c34a | ||
|
|
010db03d6e | ||
|
|
5408acbd8c | ||
|
|
0de6c85f81 | ||
|
|
69ec24fa05 | ||
|
|
539d732b65 | ||
|
|
843d5fb199 | ||
|
|
fabdfb8cc1 |
@@ -19,12 +19,9 @@ import (
|
|||||||
"github.com/SigNoz/signoz/pkg/gateway/noopgateway"
|
"github.com/SigNoz/signoz/pkg/gateway/noopgateway"
|
||||||
"github.com/SigNoz/signoz/pkg/licensing"
|
"github.com/SigNoz/signoz/pkg/licensing"
|
||||||
"github.com/SigNoz/signoz/pkg/licensing/nooplicensing"
|
"github.com/SigNoz/signoz/pkg/licensing/nooplicensing"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration/implcloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/dashboard"
|
"github.com/SigNoz/signoz/pkg/modules/dashboard"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
|
"github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/organization"
|
"github.com/SigNoz/signoz/pkg/modules/organization"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/serviceaccount"
|
|
||||||
"github.com/SigNoz/signoz/pkg/querier"
|
"github.com/SigNoz/signoz/pkg/querier"
|
||||||
"github.com/SigNoz/signoz/pkg/query-service/app"
|
"github.com/SigNoz/signoz/pkg/query-service/app"
|
||||||
"github.com/SigNoz/signoz/pkg/queryparser"
|
"github.com/SigNoz/signoz/pkg/queryparser"
|
||||||
@@ -32,7 +29,6 @@ import (
|
|||||||
"github.com/SigNoz/signoz/pkg/sqlschema"
|
"github.com/SigNoz/signoz/pkg/sqlschema"
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore"
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/version"
|
"github.com/SigNoz/signoz/pkg/version"
|
||||||
"github.com/SigNoz/signoz/pkg/zeus"
|
"github.com/SigNoz/signoz/pkg/zeus"
|
||||||
"github.com/SigNoz/signoz/pkg/zeus/noopzeus"
|
"github.com/SigNoz/signoz/pkg/zeus/noopzeus"
|
||||||
@@ -100,9 +96,6 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
|
|||||||
func(ps factory.ProviderSettings, q querier.Querier, a analytics.Analytics) querier.Handler {
|
func(ps factory.ProviderSettings, q querier.Querier, a analytics.Analytics) querier.Handler {
|
||||||
return querier.NewHandler(ps, q, a)
|
return querier.NewHandler(ps, q, a)
|
||||||
},
|
},
|
||||||
func(_ cloudintegrationtypes.Store, _ zeus.Zeus, _ gateway.Gateway, _ licensing.Licensing, _ serviceaccount.Module) (cloudintegration.Module, error) {
|
|
||||||
return implcloudintegration.NewModule(), nil
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.ErrorContext(ctx, "failed to create signoz", errors.Attr(err))
|
logger.ErrorContext(ctx, "failed to create signoz", errors.Attr(err))
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ import (
|
|||||||
"github.com/SigNoz/signoz/ee/gateway/httpgateway"
|
"github.com/SigNoz/signoz/ee/gateway/httpgateway"
|
||||||
enterpriselicensing "github.com/SigNoz/signoz/ee/licensing"
|
enterpriselicensing "github.com/SigNoz/signoz/ee/licensing"
|
||||||
"github.com/SigNoz/signoz/ee/licensing/httplicensing"
|
"github.com/SigNoz/signoz/ee/licensing/httplicensing"
|
||||||
"github.com/SigNoz/signoz/ee/modules/cloudintegration/implcloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/ee/modules/dashboard/impldashboard"
|
"github.com/SigNoz/signoz/ee/modules/dashboard/impldashboard"
|
||||||
eequerier "github.com/SigNoz/signoz/ee/querier"
|
eequerier "github.com/SigNoz/signoz/ee/querier"
|
||||||
enterpriseapp "github.com/SigNoz/signoz/ee/query-service/app"
|
enterpriseapp "github.com/SigNoz/signoz/ee/query-service/app"
|
||||||
@@ -31,11 +30,9 @@ import (
|
|||||||
"github.com/SigNoz/signoz/pkg/factory"
|
"github.com/SigNoz/signoz/pkg/factory"
|
||||||
"github.com/SigNoz/signoz/pkg/gateway"
|
"github.com/SigNoz/signoz/pkg/gateway"
|
||||||
"github.com/SigNoz/signoz/pkg/licensing"
|
"github.com/SigNoz/signoz/pkg/licensing"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/dashboard"
|
"github.com/SigNoz/signoz/pkg/modules/dashboard"
|
||||||
pkgimpldashboard "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
|
pkgimpldashboard "github.com/SigNoz/signoz/pkg/modules/dashboard/impldashboard"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/organization"
|
"github.com/SigNoz/signoz/pkg/modules/organization"
|
||||||
"github.com/SigNoz/signoz/pkg/modules/serviceaccount"
|
|
||||||
"github.com/SigNoz/signoz/pkg/querier"
|
"github.com/SigNoz/signoz/pkg/querier"
|
||||||
"github.com/SigNoz/signoz/pkg/queryparser"
|
"github.com/SigNoz/signoz/pkg/queryparser"
|
||||||
"github.com/SigNoz/signoz/pkg/signoz"
|
"github.com/SigNoz/signoz/pkg/signoz"
|
||||||
@@ -43,7 +40,6 @@ import (
|
|||||||
"github.com/SigNoz/signoz/pkg/sqlstore"
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
|
"github.com/SigNoz/signoz/pkg/sqlstore/sqlstorehook"
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/version"
|
"github.com/SigNoz/signoz/pkg/version"
|
||||||
"github.com/SigNoz/signoz/pkg/zeus"
|
"github.com/SigNoz/signoz/pkg/zeus"
|
||||||
)
|
)
|
||||||
@@ -129,6 +125,7 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return openfgaauthz.NewProviderFactory(sqlstore, openfgaschema.NewSchema().Get(ctx), openfgaDataStore, licensing, dashboardModule), nil
|
return openfgaauthz.NewProviderFactory(sqlstore, openfgaschema.NewSchema().Get(ctx), openfgaDataStore, licensing, dashboardModule), nil
|
||||||
|
|
||||||
},
|
},
|
||||||
func(store sqlstore.SQLStore, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, queryParser queryparser.QueryParser, querier querier.Querier, licensing licensing.Licensing) dashboard.Module {
|
func(store sqlstore.SQLStore, settings factory.ProviderSettings, analytics analytics.Analytics, orgGetter organization.Getter, queryParser queryparser.QueryParser, querier querier.Querier, licensing licensing.Licensing) dashboard.Module {
|
||||||
return impldashboard.NewModule(pkgimpldashboard.NewStore(store), settings, analytics, orgGetter, queryParser, querier, licensing)
|
return impldashboard.NewModule(pkgimpldashboard.NewStore(store), settings, analytics, orgGetter, queryParser, querier, licensing)
|
||||||
@@ -140,10 +137,8 @@ func runServer(ctx context.Context, config signoz.Config, logger *slog.Logger) e
|
|||||||
communityHandler := querier.NewHandler(ps, q, a)
|
communityHandler := querier.NewHandler(ps, q, a)
|
||||||
return eequerier.NewHandler(ps, q, communityHandler)
|
return eequerier.NewHandler(ps, q, communityHandler)
|
||||||
},
|
},
|
||||||
func(store cloudintegrationtypes.Store, zeus zeus.Zeus, gateway gateway.Gateway, licensing licensing.Licensing, serviceAccount serviceaccount.Module) (cloudintegration.Module, error) {
|
|
||||||
return implcloudintegration.NewModule(store, config.Global, zeus, gateway, licensing, serviceAccount)
|
|
||||||
},
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.ErrorContext(ctx, "failed to create signoz", errors.Attr(err))
|
logger.ErrorContext(ctx, "failed to create signoz", errors.Attr(err))
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -421,11 +421,11 @@ components:
|
|||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesAWSCollectionStrategy:
|
CloudintegrationtypesAWSCollectionStrategy:
|
||||||
properties:
|
properties:
|
||||||
logs:
|
aws_logs:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesAWSLogsStrategy'
|
$ref: '#/components/schemas/CloudintegrationtypesAWSLogsStrategy'
|
||||||
metrics:
|
aws_metrics:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesAWSMetricsStrategy'
|
$ref: '#/components/schemas/CloudintegrationtypesAWSMetricsStrategy'
|
||||||
s3Buckets:
|
s3_buckets:
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
@@ -465,12 +465,12 @@ components:
|
|||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesAWSLogsStrategy:
|
CloudintegrationtypesAWSLogsStrategy:
|
||||||
properties:
|
properties:
|
||||||
cloudwatchLogsSubscriptions:
|
cloudwatch_logs_subscriptions:
|
||||||
items:
|
items:
|
||||||
properties:
|
properties:
|
||||||
filterPattern:
|
filter_pattern:
|
||||||
type: string
|
type: string
|
||||||
logGroupNamePrefix:
|
log_group_name_prefix:
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
nullable: true
|
nullable: true
|
||||||
@@ -478,7 +478,7 @@ components:
|
|||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesAWSMetricsStrategy:
|
CloudintegrationtypesAWSMetricsStrategy:
|
||||||
properties:
|
properties:
|
||||||
cloudwatchMetricStreamFilters:
|
cloudwatch_metric_stream_filters:
|
||||||
items:
|
items:
|
||||||
properties:
|
properties:
|
||||||
MetricNames:
|
MetricNames:
|
||||||
@@ -577,26 +577,6 @@ components:
|
|||||||
nullable: true
|
nullable: true
|
||||||
type: array
|
type: array
|
||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesCloudIntegrationService:
|
|
||||||
nullable: true
|
|
||||||
properties:
|
|
||||||
cloudIntegrationId:
|
|
||||||
type: string
|
|
||||||
config:
|
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesServiceConfig'
|
|
||||||
createdAt:
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesServiceID'
|
|
||||||
updatedAt:
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- id
|
|
||||||
type: object
|
|
||||||
CloudintegrationtypesCollectedLogAttribute:
|
CloudintegrationtypesCollectedLogAttribute:
|
||||||
properties:
|
properties:
|
||||||
name:
|
name:
|
||||||
@@ -730,54 +710,11 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
type: array
|
type: array
|
||||||
telemetry:
|
telemetry:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesOldAWSCollectionStrategy'
|
$ref: '#/components/schemas/CloudintegrationtypesAWSCollectionStrategy'
|
||||||
required:
|
required:
|
||||||
- enabled_regions
|
- enabled_regions
|
||||||
- telemetry
|
- telemetry
|
||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesOldAWSCollectionStrategy:
|
|
||||||
properties:
|
|
||||||
aws_logs:
|
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesOldAWSLogsStrategy'
|
|
||||||
aws_metrics:
|
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesOldAWSMetricsStrategy'
|
|
||||||
provider:
|
|
||||||
type: string
|
|
||||||
s3_buckets:
|
|
||||||
additionalProperties:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
CloudintegrationtypesOldAWSLogsStrategy:
|
|
||||||
properties:
|
|
||||||
cloudwatch_logs_subscriptions:
|
|
||||||
items:
|
|
||||||
properties:
|
|
||||||
filter_pattern:
|
|
||||||
type: string
|
|
||||||
log_group_name_prefix:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
nullable: true
|
|
||||||
type: array
|
|
||||||
type: object
|
|
||||||
CloudintegrationtypesOldAWSMetricsStrategy:
|
|
||||||
properties:
|
|
||||||
cloudwatch_metric_stream_filters:
|
|
||||||
items:
|
|
||||||
properties:
|
|
||||||
MetricNames:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
Namespace:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
nullable: true
|
|
||||||
type: array
|
|
||||||
type: object
|
|
||||||
CloudintegrationtypesPostableAgentCheckInRequest:
|
CloudintegrationtypesPostableAgentCheckInRequest:
|
||||||
properties:
|
properties:
|
||||||
account_id:
|
account_id:
|
||||||
@@ -806,8 +743,6 @@ components:
|
|||||||
properties:
|
properties:
|
||||||
assets:
|
assets:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesAssets'
|
$ref: '#/components/schemas/CloudintegrationtypesAssets'
|
||||||
cloudIntegrationService:
|
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesCloudIntegrationService'
|
|
||||||
dataCollected:
|
dataCollected:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesDataCollected'
|
$ref: '#/components/schemas/CloudintegrationtypesDataCollected'
|
||||||
icon:
|
icon:
|
||||||
@@ -816,7 +751,9 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
overview:
|
overview:
|
||||||
type: string
|
type: string
|
||||||
supportedSignals:
|
serviceConfig:
|
||||||
|
$ref: '#/components/schemas/CloudintegrationtypesServiceConfig'
|
||||||
|
supported_signals:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesSupportedSignals'
|
$ref: '#/components/schemas/CloudintegrationtypesSupportedSignals'
|
||||||
telemetryCollectionStrategy:
|
telemetryCollectionStrategy:
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesCollectionStrategy'
|
$ref: '#/components/schemas/CloudintegrationtypesCollectionStrategy'
|
||||||
@@ -828,10 +765,9 @@ components:
|
|||||||
- icon
|
- icon
|
||||||
- overview
|
- overview
|
||||||
- assets
|
- assets
|
||||||
- supportedSignals
|
- supported_signals
|
||||||
- dataCollected
|
- dataCollected
|
||||||
- telemetryCollectionStrategy
|
- telemetryCollectionStrategy
|
||||||
- cloudIntegrationService
|
|
||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesServiceConfig:
|
CloudintegrationtypesServiceConfig:
|
||||||
properties:
|
properties:
|
||||||
@@ -840,22 +776,6 @@ components:
|
|||||||
required:
|
required:
|
||||||
- aws
|
- aws
|
||||||
type: object
|
type: object
|
||||||
CloudintegrationtypesServiceID:
|
|
||||||
enum:
|
|
||||||
- alb
|
|
||||||
- api-gateway
|
|
||||||
- dynamodb
|
|
||||||
- ec2
|
|
||||||
- ecs
|
|
||||||
- eks
|
|
||||||
- elasticache
|
|
||||||
- lambda
|
|
||||||
- msk
|
|
||||||
- rds
|
|
||||||
- s3sync
|
|
||||||
- sns
|
|
||||||
- sqs
|
|
||||||
type: string
|
|
||||||
CloudintegrationtypesServiceMetadata:
|
CloudintegrationtypesServiceMetadata:
|
||||||
properties:
|
properties:
|
||||||
enabled:
|
enabled:
|
||||||
@@ -3490,61 +3410,6 @@ paths:
|
|||||||
summary: Update account
|
summary: Update account
|
||||||
tags:
|
tags:
|
||||||
- cloudintegration
|
- cloudintegration
|
||||||
/api/v1/cloud_integrations/{cloud_provider}/accounts/{id}/services/{service_id}:
|
|
||||||
put:
|
|
||||||
deprecated: false
|
|
||||||
description: This endpoint updates a service for the specified cloud provider
|
|
||||||
operationId: UpdateService
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
name: cloud_provider
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- in: path
|
|
||||||
name: id
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- in: path
|
|
||||||
name: service_id
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
requestBody:
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/CloudintegrationtypesUpdatableService'
|
|
||||||
responses:
|
|
||||||
"204":
|
|
||||||
description: No Content
|
|
||||||
"401":
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/RenderErrorResponse'
|
|
||||||
description: Unauthorized
|
|
||||||
"403":
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/RenderErrorResponse'
|
|
||||||
description: Forbidden
|
|
||||||
"500":
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/RenderErrorResponse'
|
|
||||||
description: Internal Server Error
|
|
||||||
security:
|
|
||||||
- api_key:
|
|
||||||
- ADMIN
|
|
||||||
- tokenizer:
|
|
||||||
- ADMIN
|
|
||||||
summary: Update service
|
|
||||||
tags:
|
|
||||||
- cloudintegration
|
|
||||||
/api/v1/cloud_integrations/{cloud_provider}/accounts/check_in:
|
/api/v1/cloud_integrations/{cloud_provider}/accounts/check_in:
|
||||||
post:
|
post:
|
||||||
deprecated: false
|
deprecated: false
|
||||||
@@ -3712,6 +3577,55 @@ paths:
|
|||||||
summary: Get service
|
summary: Get service
|
||||||
tags:
|
tags:
|
||||||
- cloudintegration
|
- cloudintegration
|
||||||
|
put:
|
||||||
|
deprecated: false
|
||||||
|
description: This endpoint updates a service for the specified cloud provider
|
||||||
|
operationId: UpdateService
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: cloud_provider
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
- in: path
|
||||||
|
name: service_id
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/CloudintegrationtypesUpdatableService'
|
||||||
|
responses:
|
||||||
|
"204":
|
||||||
|
description: No Content
|
||||||
|
"401":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/RenderErrorResponse'
|
||||||
|
description: Unauthorized
|
||||||
|
"403":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/RenderErrorResponse'
|
||||||
|
description: Forbidden
|
||||||
|
"500":
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/RenderErrorResponse'
|
||||||
|
description: Internal Server Error
|
||||||
|
security:
|
||||||
|
- api_key:
|
||||||
|
- ADMIN
|
||||||
|
- tokenizer:
|
||||||
|
- ADMIN
|
||||||
|
summary: Update service
|
||||||
|
tags:
|
||||||
|
- cloudintegration
|
||||||
/api/v1/complete/google:
|
/api/v1/complete/google:
|
||||||
get:
|
get:
|
||||||
deprecated: false
|
deprecated: false
|
||||||
|
|||||||
@@ -76,12 +76,12 @@ func (provider *provider) Start(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (provider *provider) Audit(ctx context.Context, event audittypes.AuditEvent) {
|
func (provider *provider) Audit(ctx context.Context, event audittypes.AuditEvent) {
|
||||||
if event.PrincipalAttributes.PrincipalOrgID.IsZero() {
|
if event.PrincipalOrgID.IsZero() {
|
||||||
provider.settings.Logger().WarnContext(ctx, "audit event dropped as org_id is zero")
|
provider.settings.Logger().WarnContext(ctx, "audit event dropped as org_id is zero")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := provider.licensing.GetActive(ctx, event.PrincipalAttributes.PrincipalOrgID); err != nil {
|
if _, err := provider.licensing.GetActive(ctx, event.PrincipalOrgID); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,184 +0,0 @@
|
|||||||
package implcloudprovider
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"net/url"
|
|
||||||
"sort"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
)
|
|
||||||
|
|
||||||
type awscloudprovider struct {
|
|
||||||
serviceDefinitions cloudintegrationtypes.ServiceDefinitionStore
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAWSCloudProvider(defStore cloudintegrationtypes.ServiceDefinitionStore) (cloudintegration.CloudProviderModule, error) {
|
|
||||||
return &awscloudprovider{serviceDefinitions: defStore}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) GetConnectionArtifact(ctx context.Context, creds *cloudintegrationtypes.SignozCredentials, account *cloudintegrationtypes.Account, req *cloudintegrationtypes.ConnectionArtifactRequest) (*cloudintegrationtypes.ConnectionArtifact, error) {
|
|
||||||
// TODO: get this from config
|
|
||||||
agentVersion := "v0.0.8"
|
|
||||||
|
|
||||||
baseURL := fmt.Sprintf("https://%s.console.aws.amazon.com/cloudformation/home", req.Aws.DeploymentRegion)
|
|
||||||
u, _ := url.Parse(baseURL)
|
|
||||||
|
|
||||||
q := u.Query()
|
|
||||||
q.Set("region", req.Aws.DeploymentRegion)
|
|
||||||
u.Fragment = "/stacks/quickcreate"
|
|
||||||
|
|
||||||
u.RawQuery = q.Encode()
|
|
||||||
|
|
||||||
q = u.Query()
|
|
||||||
q.Set("stackName", "signoz-integration")
|
|
||||||
q.Set("templateURL", fmt.Sprintf("https://signoz-integrations.s3.us-east-1.amazonaws.com/aws-quickcreate-template-%s.json", agentVersion))
|
|
||||||
q.Set("param_SigNozIntegrationAgentVersion", agentVersion)
|
|
||||||
q.Set("param_SigNozApiUrl", creds.SigNozAPIURL)
|
|
||||||
q.Set("param_SigNozApiKey", creds.SigNozAPIKey)
|
|
||||||
q.Set("param_SigNozAccountId", account.ID.StringValue())
|
|
||||||
q.Set("param_IngestionUrl", creds.IngestionURL)
|
|
||||||
q.Set("param_IngestionKey", creds.IngestionKey)
|
|
||||||
|
|
||||||
return &cloudintegrationtypes.ConnectionArtifact{
|
|
||||||
Aws: &cloudintegrationtypes.AWSConnectionArtifact{
|
|
||||||
ConnectionURL: u.String() + "?&" + q.Encode(), // this format is required by AWS
|
|
||||||
},
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) ListServiceDefinitions(ctx context.Context) ([]*cloudintegrationtypes.ServiceDefinition, error) {
|
|
||||||
return provider.serviceDefinitions.List(ctx, cloudintegrationtypes.CloudProviderTypeAWS)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) GetServiceDefinition(ctx context.Context, serviceID cloudintegrationtypes.ServiceID) (*cloudintegrationtypes.ServiceDefinition, error) {
|
|
||||||
return provider.serviceDefinitions.Get(ctx, cloudintegrationtypes.CloudProviderTypeAWS, serviceID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) StorableConfigFromServiceConfig(ctx context.Context, cfg *cloudintegrationtypes.ServiceConfig, supported cloudintegrationtypes.SupportedSignals) (string, error) {
|
|
||||||
if cfg == nil || cfg.AWS == nil {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
// Strip signal configs the service does not support before storing.
|
|
||||||
if !supported.Logs {
|
|
||||||
cfg.AWS.Logs = nil
|
|
||||||
}
|
|
||||||
if !supported.Metrics {
|
|
||||||
cfg.AWS.Metrics = nil
|
|
||||||
}
|
|
||||||
b, err := json.Marshal(cfg.AWS)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return string(b), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) ServiceConfigFromStorableServiceConfig(ctx context.Context, config string) (*cloudintegrationtypes.ServiceConfig, error) {
|
|
||||||
if config == "" {
|
|
||||||
return nil, errors.NewInternalf(errors.CodeInternal, "service config is empty")
|
|
||||||
}
|
|
||||||
|
|
||||||
var awsCfg cloudintegrationtypes.AWSServiceConfig
|
|
||||||
if err := json.Unmarshal([]byte(config), &awsCfg); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &cloudintegrationtypes.ServiceConfig{AWS: &awsCfg}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) IsServiceEnabled(ctx context.Context, config *cloudintegrationtypes.ServiceConfig) bool {
|
|
||||||
if config == nil || config.AWS == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
logsEnabled := config.AWS.Logs != nil && config.AWS.Logs.Enabled
|
|
||||||
metricsEnabled := config.AWS.Metrics != nil && config.AWS.Metrics.Enabled
|
|
||||||
return logsEnabled || metricsEnabled
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) IsMetricsEnabled(ctx context.Context, config *cloudintegrationtypes.ServiceConfig) bool {
|
|
||||||
if config == nil || config.AWS == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return awsMetricsEnabled(config.AWS)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *awscloudprovider) BuildIntegrationConfig(
|
|
||||||
ctx context.Context,
|
|
||||||
account *cloudintegrationtypes.Account,
|
|
||||||
services []*cloudintegrationtypes.StorableCloudIntegrationService,
|
|
||||||
) (*cloudintegrationtypes.ProviderIntegrationConfig, error) {
|
|
||||||
// Sort services for deterministic output
|
|
||||||
sort.Slice(services, func(i, j int) bool {
|
|
||||||
return services[i].Type.StringValue() < services[j].Type.StringValue()
|
|
||||||
})
|
|
||||||
|
|
||||||
compiledMetrics := &cloudintegrationtypes.AWSMetricsStrategy{}
|
|
||||||
compiledLogs := &cloudintegrationtypes.AWSLogsStrategy{}
|
|
||||||
var compiledS3Buckets map[string][]string
|
|
||||||
|
|
||||||
for _, storedSvc := range services {
|
|
||||||
svcCfg, err := provider.ServiceConfigFromStorableServiceConfig(ctx, storedSvc.Config)
|
|
||||||
if err != nil || svcCfg == nil || svcCfg.AWS == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
svcDef, err := provider.GetServiceDefinition(ctx, storedSvc.Type)
|
|
||||||
if err != nil || svcDef == nil || svcDef.Strategy == nil || svcDef.Strategy.AWS == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
strategy := svcDef.Strategy.AWS
|
|
||||||
|
|
||||||
// S3Sync: logs come directly from configured S3 buckets, not CloudWatch subscriptions
|
|
||||||
if storedSvc.Type == cloudintegrationtypes.AWSServiceS3Sync {
|
|
||||||
if awsLogsEnabled(svcCfg.AWS) && svcCfg.AWS.Logs.S3Buckets != nil {
|
|
||||||
compiledS3Buckets = svcCfg.AWS.Logs.S3Buckets
|
|
||||||
}
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if awsLogsEnabled(svcCfg.AWS) && strategy.Logs != nil {
|
|
||||||
compiledLogs.Subscriptions = append(compiledLogs.Subscriptions, strategy.Logs.Subscriptions...)
|
|
||||||
}
|
|
||||||
|
|
||||||
if awsMetricsEnabled(svcCfg.AWS) && strategy.Metrics != nil {
|
|
||||||
compiledMetrics.StreamFilters = append(compiledMetrics.StreamFilters, strategy.Metrics.StreamFilters...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
awsTelemetry := &cloudintegrationtypes.AWSCollectionStrategy{}
|
|
||||||
if len(compiledMetrics.StreamFilters) > 0 {
|
|
||||||
awsTelemetry.Metrics = compiledMetrics
|
|
||||||
}
|
|
||||||
if len(compiledLogs.Subscriptions) > 0 {
|
|
||||||
awsTelemetry.Logs = compiledLogs
|
|
||||||
}
|
|
||||||
if compiledS3Buckets != nil {
|
|
||||||
awsTelemetry.S3Buckets = compiledS3Buckets
|
|
||||||
}
|
|
||||||
|
|
||||||
enabledRegions := []string{}
|
|
||||||
if account.Config != nil && account.Config.AWS != nil && account.Config.AWS.Regions != nil {
|
|
||||||
enabledRegions = account.Config.AWS.Regions
|
|
||||||
}
|
|
||||||
|
|
||||||
return &cloudintegrationtypes.ProviderIntegrationConfig{
|
|
||||||
AWS: &cloudintegrationtypes.AWSIntegrationConfig{
|
|
||||||
EnabledRegions: enabledRegions,
|
|
||||||
Telemetry: awsTelemetry,
|
|
||||||
},
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// awsLogsEnabled returns true if the AWS service config has logs explicitly enabled.
|
|
||||||
func awsLogsEnabled(cfg *cloudintegrationtypes.AWSServiceConfig) bool {
|
|
||||||
return cfg.Logs != nil && cfg.Logs.Enabled
|
|
||||||
}
|
|
||||||
|
|
||||||
// awsMetricsEnabled returns true if the AWS service config has metrics explicitly enabled.
|
|
||||||
func awsMetricsEnabled(cfg *cloudintegrationtypes.AWSServiceConfig) bool {
|
|
||||||
return cfg.Metrics != nil && cfg.Metrics.Enabled
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package implcloudprovider
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
)
|
|
||||||
|
|
||||||
type azurecloudprovider struct{}
|
|
||||||
|
|
||||||
func NewAzureCloudProvider() cloudintegration.CloudProviderModule {
|
|
||||||
return &azurecloudprovider{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) GetConnectionArtifact(ctx context.Context, creds *cloudintegrationtypes.SignozCredentials, account *cloudintegrationtypes.Account, req *cloudintegrationtypes.ConnectionArtifactRequest) (*cloudintegrationtypes.ConnectionArtifact, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) ListServiceDefinitions(ctx context.Context) ([]*cloudintegrationtypes.ServiceDefinition, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) GetServiceDefinition(ctx context.Context, serviceID cloudintegrationtypes.ServiceID) (*cloudintegrationtypes.ServiceDefinition, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) StorableConfigFromServiceConfig(ctx context.Context, cfg *cloudintegrationtypes.ServiceConfig, supported cloudintegrationtypes.SupportedSignals) (string, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) ServiceConfigFromStorableServiceConfig(ctx context.Context, config string) (*cloudintegrationtypes.ServiceConfig, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) IsServiceEnabled(ctx context.Context, config *cloudintegrationtypes.ServiceConfig) bool {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) IsMetricsEnabled(ctx context.Context, config *cloudintegrationtypes.ServiceConfig) bool {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *azurecloudprovider) BuildIntegrationConfig(
|
|
||||||
ctx context.Context,
|
|
||||||
account *cloudintegrationtypes.Account,
|
|
||||||
services []*cloudintegrationtypes.StorableCloudIntegrationService,
|
|
||||||
) (*cloudintegrationtypes.ProviderIntegrationConfig, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
||||||
@@ -1,533 +0,0 @@
|
|||||||
package implcloudintegration
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"sort"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/ee/modules/cloudintegration/implcloudintegration/implcloudprovider"
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
|
||||||
"github.com/SigNoz/signoz/pkg/gateway"
|
|
||||||
"github.com/SigNoz/signoz/pkg/global"
|
|
||||||
"github.com/SigNoz/signoz/pkg/licensing"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
|
||||||
pkgimpl "github.com/SigNoz/signoz/pkg/modules/cloudintegration/implcloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/serviceaccount"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/dashboardtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/serviceaccounttypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/zeustypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/valuer"
|
|
||||||
"github.com/SigNoz/signoz/pkg/zeus"
|
|
||||||
)
|
|
||||||
|
|
||||||
type module struct {
|
|
||||||
store cloudintegrationtypes.Store
|
|
||||||
gateway gateway.Gateway
|
|
||||||
zeus zeus.Zeus
|
|
||||||
licensing licensing.Licensing
|
|
||||||
globalConfig global.Config
|
|
||||||
serviceAccount serviceaccount.Module
|
|
||||||
cloudProvidersMap map[cloudintegrationtypes.CloudProviderType]cloudintegration.CloudProviderModule
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewModule(
|
|
||||||
store cloudintegrationtypes.Store,
|
|
||||||
globalConfig global.Config,
|
|
||||||
zeus zeus.Zeus,
|
|
||||||
gateway gateway.Gateway,
|
|
||||||
licensing licensing.Licensing,
|
|
||||||
serviceAccount serviceaccount.Module,
|
|
||||||
) (cloudintegration.Module, error) {
|
|
||||||
defStore := pkgimpl.NewServiceDefinitionStore()
|
|
||||||
awsCloudProviderModule, err := implcloudprovider.NewAWSCloudProvider(defStore)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
azureCloudProviderModule := implcloudprovider.NewAzureCloudProvider()
|
|
||||||
cloudProvidersMap := map[cloudintegrationtypes.CloudProviderType]cloudintegration.CloudProviderModule{
|
|
||||||
cloudintegrationtypes.CloudProviderTypeAWS: awsCloudProviderModule,
|
|
||||||
cloudintegrationtypes.CloudProviderTypeAzure: azureCloudProviderModule,
|
|
||||||
}
|
|
||||||
|
|
||||||
return &module{
|
|
||||||
store: store,
|
|
||||||
globalConfig: globalConfig,
|
|
||||||
zeus: zeus,
|
|
||||||
gateway: gateway,
|
|
||||||
licensing: licensing,
|
|
||||||
serviceAccount: serviceAccount,
|
|
||||||
cloudProvidersMap: cloudProvidersMap,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) CreateAccount(ctx context.Context, account *cloudintegrationtypes.Account) error {
|
|
||||||
_, err := module.licensing.GetActive(ctx, account.OrgID)
|
|
||||||
if err != nil {
|
|
||||||
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
storableCloudIntegration, err := cloudintegrationtypes.NewStorableCloudIntegration(account)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return module.store.CreateAccount(ctx, storableCloudIntegration)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetConnectionArtifact(ctx context.Context, account *cloudintegrationtypes.Account, req *cloudintegrationtypes.ConnectionArtifactRequest) (*cloudintegrationtypes.ConnectionArtifact, error) {
|
|
||||||
// TODO: evaluate if this check is really required and remove if the deployment promises to always have this configured.
|
|
||||||
if module.globalConfig.IngestionURL == nil {
|
|
||||||
return nil, errors.New(errors.TypeInternal, errors.CodeInternal, "ingestion URL is not configured")
|
|
||||||
}
|
|
||||||
|
|
||||||
// get license to get the deployment details
|
|
||||||
license, err := module.licensing.GetActive(ctx, account.OrgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// get deployment details from zeus
|
|
||||||
respBytes, err := module.zeus.GetDeployment(ctx, license.Key)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't get deployment")
|
|
||||||
}
|
|
||||||
|
|
||||||
// parse deployment details
|
|
||||||
deployment, err := zeustypes.NewGettableDeployment(respBytes)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
apiKey, err := module.getOrCreateAPIKey(ctx, account.OrgID, account.Provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ingestionKey, err := module.getOrCreateIngestionKey(ctx, account.OrgID, account.Provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
creds := &cloudintegrationtypes.SignozCredentials{
|
|
||||||
SigNozAPIURL: deployment.SignozAPIUrl,
|
|
||||||
SigNozAPIKey: apiKey,
|
|
||||||
IngestionURL: module.globalConfig.IngestionURL.String(),
|
|
||||||
IngestionKey: ingestionKey,
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudProviderModule, err := module.GetCloudProvider(account.Provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return cloudProviderModule.GetConnectionArtifact(ctx, creds, account, req)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetAccount(ctx context.Context, orgID valuer.UUID, accountID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) (*cloudintegrationtypes.Account, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
storableAccount, err := module.store.GetAccountByID(ctx, orgID, accountID, provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return cloudintegrationtypes.NewAccountFromStorable(storableAccount)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListAccounts return only agent connected accounts.
|
|
||||||
func (module *module) ListAccounts(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) ([]*cloudintegrationtypes.Account, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
storableAccounts, err := module.store.ListConnectedAccounts(ctx, orgID, provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return cloudintegrationtypes.NewAccountsFromStorables(storableAccounts)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) AgentCheckIn(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, req *cloudintegrationtypes.AgentCheckInRequest) (*cloudintegrationtypes.AgentCheckInResponse, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
connectedAccount, err := module.store.GetConnectedAccount(ctx, orgID, provider, req.ProviderAccountID)
|
|
||||||
if err != nil && !errors.Ast(err, errors.TypeNotFound) {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// If a different integration is already connected to this provider account ID, reject the check-in.
|
|
||||||
// Allow re-check-in from the same integration (e.g. agent restarting).
|
|
||||||
if connectedAccount != nil && connectedAccount.ID != req.CloudIntegrationID {
|
|
||||||
errMessage := fmt.Sprintf("provider account id %s is already connected to cloud integration id %s", req.ProviderAccountID, connectedAccount.ID)
|
|
||||||
return nil, errors.New(errors.TypeAlreadyExists, cloudintegrationtypes.ErrCodeCloudIntegrationAlreadyConnected, errMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
account, err := module.store.GetAccountByID(ctx, orgID, req.CloudIntegrationID, provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
account.AccountID = &req.ProviderAccountID
|
|
||||||
account.LastAgentReport = &cloudintegrationtypes.StorableAgentReport{
|
|
||||||
TimestampMillis: time.Now().UnixMilli(),
|
|
||||||
Data: req.Data,
|
|
||||||
}
|
|
||||||
|
|
||||||
err = module.store.UpdateAccount(ctx, account)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// If account has been removed (disconnected), return a minimal response with empty integration config.
|
|
||||||
// The agent doesn't act on config for removed accounts.
|
|
||||||
if account.RemovedAt != nil {
|
|
||||||
return &cloudintegrationtypes.AgentCheckInResponse{
|
|
||||||
CloudIntegrationID: account.ID.StringValue(),
|
|
||||||
ProviderAccountID: req.ProviderAccountID,
|
|
||||||
IntegrationConfig: &cloudintegrationtypes.ProviderIntegrationConfig{},
|
|
||||||
RemovedAt: account.RemovedAt,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get account as domain object for config access (enabled regions, etc.)
|
|
||||||
accountDomain, err := cloudintegrationtypes.NewAccountFromStorable(account)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudProvider, err := module.GetCloudProvider(provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
storedServices, err := module.store.ListServices(ctx, req.CloudIntegrationID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delegate integration config building entirely to the provider module
|
|
||||||
integrationConfig, err := cloudProvider.BuildIntegrationConfig(ctx, accountDomain, storedServices)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &cloudintegrationtypes.AgentCheckInResponse{
|
|
||||||
CloudIntegrationID: account.ID.StringValue(),
|
|
||||||
ProviderAccountID: req.ProviderAccountID,
|
|
||||||
IntegrationConfig: integrationConfig,
|
|
||||||
RemovedAt: account.RemovedAt,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) UpdateAccount(ctx context.Context, account *cloudintegrationtypes.Account) error {
|
|
||||||
_, err := module.licensing.GetActive(ctx, account.OrgID)
|
|
||||||
if err != nil {
|
|
||||||
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
storableAccount, err := cloudintegrationtypes.NewStorableCloudIntegration(account)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return module.store.UpdateAccount(ctx, storableAccount)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) DisconnectAccount(ctx context.Context, orgID valuer.UUID, accountID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) error {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
return module.store.RemoveAccount(ctx, orgID, accountID, provider)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) ListServicesMetadata(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, integrationID *valuer.UUID) ([]*cloudintegrationtypes.ServiceMetadata, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudProvider, err := module.GetCloudProvider(provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceDefinitions, err := cloudProvider.ListServiceDefinitions(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
enabledServiceIDs := map[string]bool{}
|
|
||||||
if integrationID != nil {
|
|
||||||
_, err := module.store.GetAccountByID(ctx, orgID, *integrationID, provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
storedServices, err := module.store.ListServices(ctx, *integrationID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, svc := range storedServices {
|
|
||||||
serviceConfig, err := cloudProvider.ServiceConfigFromStorableServiceConfig(ctx, svc.Config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if cloudProvider.IsServiceEnabled(ctx, serviceConfig) {
|
|
||||||
enabledServiceIDs[svc.Type.StringValue()] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resp := make([]*cloudintegrationtypes.ServiceMetadata, 0, len(serviceDefinitions))
|
|
||||||
for _, serviceDefinition := range serviceDefinitions {
|
|
||||||
resp = append(resp, cloudintegrationtypes.NewServiceMetadata(*serviceDefinition, enabledServiceIDs[serviceDefinition.ID]))
|
|
||||||
}
|
|
||||||
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetService(ctx context.Context, orgID valuer.UUID, integrationID *valuer.UUID, serviceID cloudintegrationtypes.ServiceID, provider cloudintegrationtypes.CloudProviderType) (*cloudintegrationtypes.Service, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudProvider, err := module.GetCloudProvider(provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceDefinition, err := cloudProvider.GetServiceDefinition(ctx, serviceID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var integrationService *cloudintegrationtypes.CloudIntegrationService
|
|
||||||
|
|
||||||
if integrationID != nil {
|
|
||||||
_, err := module.store.GetAccountByID(ctx, orgID, *integrationID, provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
storedService, err := module.store.GetServiceByServiceID(ctx, *integrationID, serviceID)
|
|
||||||
if err != nil && !errors.Ast(err, errors.TypeNotFound) {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if storedService != nil {
|
|
||||||
serviceConfig, err := cloudProvider.ServiceConfigFromStorableServiceConfig(ctx, storedService.Config)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
integrationService = cloudintegrationtypes.NewCloudIntegrationServiceFromStorable(storedService, serviceConfig)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return cloudintegrationtypes.NewService(*serviceDefinition, integrationService), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudProvider, err := module.GetCloudProvider(provider)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceDefinition, err := cloudProvider.GetServiceDefinition(ctx, service.Type)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
configJSON, err := cloudProvider.StorableConfigFromServiceConfig(ctx, service.Config, serviceDefinition.SupportedSignals)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return module.store.CreateService(ctx, cloudintegrationtypes.NewStorableCloudIntegrationService(service, configJSON))
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, integrationService *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudProvider, err := module.GetCloudProvider(provider)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceDefinition, err := cloudProvider.GetServiceDefinition(ctx, integrationService.Type)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
configJSON, err := cloudProvider.StorableConfigFromServiceConfig(ctx, integrationService.Config, serviceDefinition.SupportedSignals)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
storableService := cloudintegrationtypes.NewStorableCloudIntegrationService(integrationService, configJSON)
|
|
||||||
|
|
||||||
return module.store.UpdateService(ctx, storableService)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: use the function in dashboard APIs during removal of older cloud integration code.
|
|
||||||
func (module *module) listDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
|
|
||||||
var allDashboards []*dashboardtypes.Dashboard
|
|
||||||
|
|
||||||
for provider := range module.cloudProvidersMap {
|
|
||||||
cloudProvider, err := module.GetCloudProvider(provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
connectedAccounts, err := module.store.ListConnectedAccounts(ctx, orgID, provider)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, storableAccount := range connectedAccounts {
|
|
||||||
storedServices, err := module.store.ListServices(ctx, storableAccount.ID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, storedSvc := range storedServices {
|
|
||||||
serviceConfig, err := cloudProvider.ServiceConfigFromStorableServiceConfig(ctx, storedSvc.Config)
|
|
||||||
if err != nil || !cloudProvider.IsMetricsEnabled(ctx, serviceConfig) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
svcDef, err := cloudProvider.GetServiceDefinition(ctx, storedSvc.Type)
|
|
||||||
if err != nil || svcDef == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
dashboards := cloudintegrationtypes.GetDashboardsFromAssets(
|
|
||||||
storedSvc.Type.StringValue(),
|
|
||||||
orgID,
|
|
||||||
provider,
|
|
||||||
storableAccount.CreatedAt,
|
|
||||||
svcDef.Assets,
|
|
||||||
)
|
|
||||||
allDashboards = append(allDashboards, dashboards...)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Slice(allDashboards, func(i, j int) bool {
|
|
||||||
return allDashboards[i].ID < allDashboards[j].ID
|
|
||||||
})
|
|
||||||
|
|
||||||
return allDashboards, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: use the function in dashboard APIs during removal of older cloud integration code.
|
|
||||||
func (module *module) GetDashboardByID(ctx context.Context, orgID valuer.UUID, id string) (*dashboardtypes.Dashboard, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
_, _, _, err = cloudintegrationtypes.ParseCloudIntegrationDashboardID(id)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
allDashboards, err := module.listDashboards(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, d := range allDashboards {
|
|
||||||
if d.ID == id {
|
|
||||||
return d, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, errors.New(errors.TypeNotFound, cloudintegrationtypes.ErrCodeCloudIntegrationNotFound, "cloud integration dashboard not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: use the function in dashboard APIs during removal of older cloud integration code.
|
|
||||||
func (module *module) ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
|
|
||||||
_, err := module.licensing.GetActive(ctx, orgID)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeLicenseUnavailable, errors.CodeLicenseUnavailable, "a valid license is not available").WithAdditional("this feature requires a valid license").WithAdditional(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
return module.listDashboards(ctx, orgID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetCloudProvider(provider cloudintegrationtypes.CloudProviderType) (cloudintegration.CloudProviderModule, error) {
|
|
||||||
if cloudProviderModule, ok := module.cloudProvidersMap[provider]; ok {
|
|
||||||
return cloudProviderModule, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil, errors.NewInvalidInputf(cloudintegrationtypes.ErrCodeCloudProviderInvalidInput, "invalid cloud provider: %s", provider.StringValue())
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) getOrCreateIngestionKey(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) (string, error) {
|
|
||||||
keyName := cloudintegrationtypes.NewIngestionKeyName(provider)
|
|
||||||
|
|
||||||
result, err := module.gateway.SearchIngestionKeysByName(ctx, orgID, keyName, 1, 10)
|
|
||||||
if err != nil {
|
|
||||||
return "", errors.WrapInternalf(err, errors.CodeInternal, "couldn't search ingestion keys")
|
|
||||||
}
|
|
||||||
|
|
||||||
// ideally there should be only one key per cloud integration provider
|
|
||||||
if len(result.Keys) > 0 {
|
|
||||||
return result.Keys[0].Value, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
createdIngestionKey, err := module.gateway.CreateIngestionKey(ctx, orgID, keyName, []string{"integration"}, time.Time{})
|
|
||||||
if err != nil {
|
|
||||||
return "", errors.WrapInternalf(err, errors.CodeInternal, "couldn't create ingestion key")
|
|
||||||
}
|
|
||||||
|
|
||||||
return createdIngestionKey.Value, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) getOrCreateAPIKey(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) (string, error) {
|
|
||||||
domain := module.serviceAccount.Config().Email.Domain
|
|
||||||
serviceAccount := serviceaccounttypes.NewServiceAccount("integration", domain, serviceaccounttypes.ServiceAccountStatusActive, orgID)
|
|
||||||
serviceAccount, err := module.serviceAccount.GetOrCreate(ctx, orgID, serviceAccount)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
err = module.serviceAccount.SetRoleByName(ctx, orgID, serviceAccount.ID, authtypes.SigNozViewerRoleName)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
factorAPIKey, err := serviceAccount.NewFactorAPIKey(provider.StringValue(), 0)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
factorAPIKey, err = module.serviceAccount.GetOrCreateFactorAPIKey(ctx, factorAPIKey)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return factorAPIKey.Key, nil
|
|
||||||
}
|
|
||||||
@@ -229,7 +229,7 @@ func (s *Server) createPublicServer(apiHandler *api.APIHandler, web web.Web) (*h
|
|||||||
s.config.APIServer.Timeout.Default,
|
s.config.APIServer.Timeout.Default,
|
||||||
s.config.APIServer.Timeout.Max,
|
s.config.APIServer.Timeout.Max,
|
||||||
).Wrap)
|
).Wrap)
|
||||||
r.Use(middleware.NewAudit(s.signoz.Instrumentation.Logger(), s.config.APIServer.Logging.ExcludedRoutes, nil).Wrap)
|
r.Use(middleware.NewLogging(s.signoz.Instrumentation.Logger(), s.config.APIServer.Logging.ExcludedRoutes).Wrap)
|
||||||
r.Use(middleware.NewComment().Wrap)
|
r.Use(middleware.NewComment().Wrap)
|
||||||
|
|
||||||
apiHandler.RegisterRoutes(r, am)
|
apiHandler.RegisterRoutes(r, am)
|
||||||
|
|||||||
@@ -628,103 +628,6 @@ export const useUpdateAccount = <
|
|||||||
|
|
||||||
return useMutation(mutationOptions);
|
return useMutation(mutationOptions);
|
||||||
};
|
};
|
||||||
/**
|
|
||||||
* This endpoint updates a service for the specified cloud provider
|
|
||||||
* @summary Update service
|
|
||||||
*/
|
|
||||||
export const updateService = (
|
|
||||||
{ cloudProvider, id, serviceId }: UpdateServicePathParameters,
|
|
||||||
cloudintegrationtypesUpdatableServiceDTO: BodyType<CloudintegrationtypesUpdatableServiceDTO>,
|
|
||||||
) => {
|
|
||||||
return GeneratedAPIInstance<void>({
|
|
||||||
url: `/api/v1/cloud_integrations/${cloudProvider}/accounts/${id}/services/${serviceId}`,
|
|
||||||
method: 'PUT',
|
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
data: cloudintegrationtypesUpdatableServiceDTO,
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getUpdateServiceMutationOptions = <
|
|
||||||
TError = ErrorType<RenderErrorResponseDTO>,
|
|
||||||
TContext = unknown
|
|
||||||
>(options?: {
|
|
||||||
mutation?: UseMutationOptions<
|
|
||||||
Awaited<ReturnType<typeof updateService>>,
|
|
||||||
TError,
|
|
||||||
{
|
|
||||||
pathParams: UpdateServicePathParameters;
|
|
||||||
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
|
||||||
},
|
|
||||||
TContext
|
|
||||||
>;
|
|
||||||
}): UseMutationOptions<
|
|
||||||
Awaited<ReturnType<typeof updateService>>,
|
|
||||||
TError,
|
|
||||||
{
|
|
||||||
pathParams: UpdateServicePathParameters;
|
|
||||||
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
|
||||||
},
|
|
||||||
TContext
|
|
||||||
> => {
|
|
||||||
const mutationKey = ['updateService'];
|
|
||||||
const { mutation: mutationOptions } = options
|
|
||||||
? options.mutation &&
|
|
||||||
'mutationKey' in options.mutation &&
|
|
||||||
options.mutation.mutationKey
|
|
||||||
? options
|
|
||||||
: { ...options, mutation: { ...options.mutation, mutationKey } }
|
|
||||||
: { mutation: { mutationKey } };
|
|
||||||
|
|
||||||
const mutationFn: MutationFunction<
|
|
||||||
Awaited<ReturnType<typeof updateService>>,
|
|
||||||
{
|
|
||||||
pathParams: UpdateServicePathParameters;
|
|
||||||
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
|
||||||
}
|
|
||||||
> = (props) => {
|
|
||||||
const { pathParams, data } = props ?? {};
|
|
||||||
|
|
||||||
return updateService(pathParams, data);
|
|
||||||
};
|
|
||||||
|
|
||||||
return { mutationFn, ...mutationOptions };
|
|
||||||
};
|
|
||||||
|
|
||||||
export type UpdateServiceMutationResult = NonNullable<
|
|
||||||
Awaited<ReturnType<typeof updateService>>
|
|
||||||
>;
|
|
||||||
export type UpdateServiceMutationBody = BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
|
||||||
export type UpdateServiceMutationError = ErrorType<RenderErrorResponseDTO>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @summary Update service
|
|
||||||
*/
|
|
||||||
export const useUpdateService = <
|
|
||||||
TError = ErrorType<RenderErrorResponseDTO>,
|
|
||||||
TContext = unknown
|
|
||||||
>(options?: {
|
|
||||||
mutation?: UseMutationOptions<
|
|
||||||
Awaited<ReturnType<typeof updateService>>,
|
|
||||||
TError,
|
|
||||||
{
|
|
||||||
pathParams: UpdateServicePathParameters;
|
|
||||||
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
|
||||||
},
|
|
||||||
TContext
|
|
||||||
>;
|
|
||||||
}): UseMutationResult<
|
|
||||||
Awaited<ReturnType<typeof updateService>>,
|
|
||||||
TError,
|
|
||||||
{
|
|
||||||
pathParams: UpdateServicePathParameters;
|
|
||||||
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
|
||||||
},
|
|
||||||
TContext
|
|
||||||
> => {
|
|
||||||
const mutationOptions = getUpdateServiceMutationOptions(options);
|
|
||||||
|
|
||||||
return useMutation(mutationOptions);
|
|
||||||
};
|
|
||||||
/**
|
/**
|
||||||
* This endpoint is called by the deployed agent to check in
|
* This endpoint is called by the deployed agent to check in
|
||||||
* @summary Agent check-in
|
* @summary Agent check-in
|
||||||
@@ -1038,3 +941,101 @@ export const invalidateGetService = async (
|
|||||||
|
|
||||||
return queryClient;
|
return queryClient;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This endpoint updates a service for the specified cloud provider
|
||||||
|
* @summary Update service
|
||||||
|
*/
|
||||||
|
export const updateService = (
|
||||||
|
{ cloudProvider, serviceId }: UpdateServicePathParameters,
|
||||||
|
cloudintegrationtypesUpdatableServiceDTO: BodyType<CloudintegrationtypesUpdatableServiceDTO>,
|
||||||
|
) => {
|
||||||
|
return GeneratedAPIInstance<void>({
|
||||||
|
url: `/api/v1/cloud_integrations/${cloudProvider}/services/${serviceId}`,
|
||||||
|
method: 'PUT',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
data: cloudintegrationtypesUpdatableServiceDTO,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getUpdateServiceMutationOptions = <
|
||||||
|
TError = ErrorType<RenderErrorResponseDTO>,
|
||||||
|
TContext = unknown
|
||||||
|
>(options?: {
|
||||||
|
mutation?: UseMutationOptions<
|
||||||
|
Awaited<ReturnType<typeof updateService>>,
|
||||||
|
TError,
|
||||||
|
{
|
||||||
|
pathParams: UpdateServicePathParameters;
|
||||||
|
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
||||||
|
},
|
||||||
|
TContext
|
||||||
|
>;
|
||||||
|
}): UseMutationOptions<
|
||||||
|
Awaited<ReturnType<typeof updateService>>,
|
||||||
|
TError,
|
||||||
|
{
|
||||||
|
pathParams: UpdateServicePathParameters;
|
||||||
|
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
||||||
|
},
|
||||||
|
TContext
|
||||||
|
> => {
|
||||||
|
const mutationKey = ['updateService'];
|
||||||
|
const { mutation: mutationOptions } = options
|
||||||
|
? options.mutation &&
|
||||||
|
'mutationKey' in options.mutation &&
|
||||||
|
options.mutation.mutationKey
|
||||||
|
? options
|
||||||
|
: { ...options, mutation: { ...options.mutation, mutationKey } }
|
||||||
|
: { mutation: { mutationKey } };
|
||||||
|
|
||||||
|
const mutationFn: MutationFunction<
|
||||||
|
Awaited<ReturnType<typeof updateService>>,
|
||||||
|
{
|
||||||
|
pathParams: UpdateServicePathParameters;
|
||||||
|
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
||||||
|
}
|
||||||
|
> = (props) => {
|
||||||
|
const { pathParams, data } = props ?? {};
|
||||||
|
|
||||||
|
return updateService(pathParams, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
return { mutationFn, ...mutationOptions };
|
||||||
|
};
|
||||||
|
|
||||||
|
export type UpdateServiceMutationResult = NonNullable<
|
||||||
|
Awaited<ReturnType<typeof updateService>>
|
||||||
|
>;
|
||||||
|
export type UpdateServiceMutationBody = BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
||||||
|
export type UpdateServiceMutationError = ErrorType<RenderErrorResponseDTO>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @summary Update service
|
||||||
|
*/
|
||||||
|
export const useUpdateService = <
|
||||||
|
TError = ErrorType<RenderErrorResponseDTO>,
|
||||||
|
TContext = unknown
|
||||||
|
>(options?: {
|
||||||
|
mutation?: UseMutationOptions<
|
||||||
|
Awaited<ReturnType<typeof updateService>>,
|
||||||
|
TError,
|
||||||
|
{
|
||||||
|
pathParams: UpdateServicePathParameters;
|
||||||
|
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
||||||
|
},
|
||||||
|
TContext
|
||||||
|
>;
|
||||||
|
}): UseMutationResult<
|
||||||
|
Awaited<ReturnType<typeof updateService>>,
|
||||||
|
TError,
|
||||||
|
{
|
||||||
|
pathParams: UpdateServicePathParameters;
|
||||||
|
data: BodyType<CloudintegrationtypesUpdatableServiceDTO>;
|
||||||
|
},
|
||||||
|
TContext
|
||||||
|
> => {
|
||||||
|
const mutationOptions = getUpdateServiceMutationOptions(options);
|
||||||
|
|
||||||
|
return useMutation(mutationOptions);
|
||||||
|
};
|
||||||
|
|||||||
@@ -550,12 +550,12 @@ export type CloudintegrationtypesAWSCollectionStrategyDTOS3Buckets = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export interface CloudintegrationtypesAWSCollectionStrategyDTO {
|
export interface CloudintegrationtypesAWSCollectionStrategyDTO {
|
||||||
logs?: CloudintegrationtypesAWSLogsStrategyDTO;
|
aws_logs?: CloudintegrationtypesAWSLogsStrategyDTO;
|
||||||
metrics?: CloudintegrationtypesAWSMetricsStrategyDTO;
|
aws_metrics?: CloudintegrationtypesAWSMetricsStrategyDTO;
|
||||||
/**
|
/**
|
||||||
* @type object
|
* @type object
|
||||||
*/
|
*/
|
||||||
s3Buckets?: CloudintegrationtypesAWSCollectionStrategyDTOS3Buckets;
|
s3_buckets?: CloudintegrationtypesAWSCollectionStrategyDTOS3Buckets;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface CloudintegrationtypesAWSConnectionArtifactDTO {
|
export interface CloudintegrationtypesAWSConnectionArtifactDTO {
|
||||||
@@ -588,11 +588,11 @@ export type CloudintegrationtypesAWSLogsStrategyDTOCloudwatchLogsSubscriptionsIt
|
|||||||
/**
|
/**
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
filterPattern?: string;
|
filter_pattern?: string;
|
||||||
/**
|
/**
|
||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
logGroupNamePrefix?: string;
|
log_group_name_prefix?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface CloudintegrationtypesAWSLogsStrategyDTO {
|
export interface CloudintegrationtypesAWSLogsStrategyDTO {
|
||||||
@@ -600,7 +600,7 @@ export interface CloudintegrationtypesAWSLogsStrategyDTO {
|
|||||||
* @type array
|
* @type array
|
||||||
* @nullable true
|
* @nullable true
|
||||||
*/
|
*/
|
||||||
cloudwatchLogsSubscriptions?:
|
cloudwatch_logs_subscriptions?:
|
||||||
| CloudintegrationtypesAWSLogsStrategyDTOCloudwatchLogsSubscriptionsItem[]
|
| CloudintegrationtypesAWSLogsStrategyDTOCloudwatchLogsSubscriptionsItem[]
|
||||||
| null;
|
| null;
|
||||||
}
|
}
|
||||||
@@ -621,7 +621,7 @@ export interface CloudintegrationtypesAWSMetricsStrategyDTO {
|
|||||||
* @type array
|
* @type array
|
||||||
* @nullable true
|
* @nullable true
|
||||||
*/
|
*/
|
||||||
cloudwatchMetricStreamFilters?:
|
cloudwatch_metric_stream_filters?:
|
||||||
| CloudintegrationtypesAWSMetricsStrategyDTOCloudwatchMetricStreamFiltersItem[]
|
| CloudintegrationtypesAWSMetricsStrategyDTOCloudwatchMetricStreamFiltersItem[]
|
||||||
| null;
|
| null;
|
||||||
}
|
}
|
||||||
@@ -726,32 +726,6 @@ export interface CloudintegrationtypesAssetsDTO {
|
|||||||
dashboards?: CloudintegrationtypesDashboardDTO[] | null;
|
dashboards?: CloudintegrationtypesDashboardDTO[] | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @nullable
|
|
||||||
*/
|
|
||||||
export type CloudintegrationtypesCloudIntegrationServiceDTO = {
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
cloudIntegrationId?: string;
|
|
||||||
config?: CloudintegrationtypesServiceConfigDTO;
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
* @format date-time
|
|
||||||
*/
|
|
||||||
createdAt?: Date;
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
id: string;
|
|
||||||
type?: CloudintegrationtypesServiceIDDTO;
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
* @format date-time
|
|
||||||
*/
|
|
||||||
updatedAt?: Date;
|
|
||||||
} | null;
|
|
||||||
|
|
||||||
export interface CloudintegrationtypesCollectedLogAttributeDTO {
|
export interface CloudintegrationtypesCollectedLogAttributeDTO {
|
||||||
/**
|
/**
|
||||||
* @type string
|
* @type string
|
||||||
@@ -890,68 +864,9 @@ export type CloudintegrationtypesIntegrationConfigDTO = {
|
|||||||
* @type array
|
* @type array
|
||||||
*/
|
*/
|
||||||
enabled_regions: string[];
|
enabled_regions: string[];
|
||||||
telemetry: CloudintegrationtypesOldAWSCollectionStrategyDTO;
|
telemetry: CloudintegrationtypesAWSCollectionStrategyDTO;
|
||||||
} | null;
|
} | null;
|
||||||
|
|
||||||
export type CloudintegrationtypesOldAWSCollectionStrategyDTOS3Buckets = {
|
|
||||||
[key: string]: string[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export interface CloudintegrationtypesOldAWSCollectionStrategyDTO {
|
|
||||||
aws_logs?: CloudintegrationtypesOldAWSLogsStrategyDTO;
|
|
||||||
aws_metrics?: CloudintegrationtypesOldAWSMetricsStrategyDTO;
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
provider?: string;
|
|
||||||
/**
|
|
||||||
* @type object
|
|
||||||
*/
|
|
||||||
s3_buckets?: CloudintegrationtypesOldAWSCollectionStrategyDTOS3Buckets;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type CloudintegrationtypesOldAWSLogsStrategyDTOCloudwatchLogsSubscriptionsItem = {
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
filter_pattern?: string;
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
log_group_name_prefix?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export interface CloudintegrationtypesOldAWSLogsStrategyDTO {
|
|
||||||
/**
|
|
||||||
* @type array
|
|
||||||
* @nullable true
|
|
||||||
*/
|
|
||||||
cloudwatch_logs_subscriptions?:
|
|
||||||
| CloudintegrationtypesOldAWSLogsStrategyDTOCloudwatchLogsSubscriptionsItem[]
|
|
||||||
| null;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type CloudintegrationtypesOldAWSMetricsStrategyDTOCloudwatchMetricStreamFiltersItem = {
|
|
||||||
/**
|
|
||||||
* @type array
|
|
||||||
*/
|
|
||||||
MetricNames?: string[];
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
Namespace?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export interface CloudintegrationtypesOldAWSMetricsStrategyDTO {
|
|
||||||
/**
|
|
||||||
* @type array
|
|
||||||
* @nullable true
|
|
||||||
*/
|
|
||||||
cloudwatch_metric_stream_filters?:
|
|
||||||
| CloudintegrationtypesOldAWSMetricsStrategyDTOCloudwatchMetricStreamFiltersItem[]
|
|
||||||
| null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @nullable
|
* @nullable
|
||||||
*/
|
*/
|
||||||
@@ -989,7 +904,6 @@ export interface CloudintegrationtypesProviderIntegrationConfigDTO {
|
|||||||
|
|
||||||
export interface CloudintegrationtypesServiceDTO {
|
export interface CloudintegrationtypesServiceDTO {
|
||||||
assets: CloudintegrationtypesAssetsDTO;
|
assets: CloudintegrationtypesAssetsDTO;
|
||||||
cloudIntegrationService: CloudintegrationtypesCloudIntegrationServiceDTO;
|
|
||||||
dataCollected: CloudintegrationtypesDataCollectedDTO;
|
dataCollected: CloudintegrationtypesDataCollectedDTO;
|
||||||
/**
|
/**
|
||||||
* @type string
|
* @type string
|
||||||
@@ -1003,7 +917,8 @@ export interface CloudintegrationtypesServiceDTO {
|
|||||||
* @type string
|
* @type string
|
||||||
*/
|
*/
|
||||||
overview: string;
|
overview: string;
|
||||||
supportedSignals: CloudintegrationtypesSupportedSignalsDTO;
|
serviceConfig?: CloudintegrationtypesServiceConfigDTO;
|
||||||
|
supported_signals: CloudintegrationtypesSupportedSignalsDTO;
|
||||||
telemetryCollectionStrategy: CloudintegrationtypesCollectionStrategyDTO;
|
telemetryCollectionStrategy: CloudintegrationtypesCollectionStrategyDTO;
|
||||||
/**
|
/**
|
||||||
* @type string
|
* @type string
|
||||||
@@ -1015,21 +930,6 @@ export interface CloudintegrationtypesServiceConfigDTO {
|
|||||||
aws: CloudintegrationtypesAWSServiceConfigDTO;
|
aws: CloudintegrationtypesAWSServiceConfigDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum CloudintegrationtypesServiceIDDTO {
|
|
||||||
alb = 'alb',
|
|
||||||
'api-gateway' = 'api-gateway',
|
|
||||||
dynamodb = 'dynamodb',
|
|
||||||
ec2 = 'ec2',
|
|
||||||
ecs = 'ecs',
|
|
||||||
eks = 'eks',
|
|
||||||
elasticache = 'elasticache',
|
|
||||||
lambda = 'lambda',
|
|
||||||
msk = 'msk',
|
|
||||||
rds = 'rds',
|
|
||||||
s3sync = 's3sync',
|
|
||||||
sns = 'sns',
|
|
||||||
sqs = 'sqs',
|
|
||||||
}
|
|
||||||
export interface CloudintegrationtypesServiceMetadataDTO {
|
export interface CloudintegrationtypesServiceMetadataDTO {
|
||||||
/**
|
/**
|
||||||
* @type boolean
|
* @type boolean
|
||||||
@@ -3632,11 +3532,6 @@ export type UpdateAccountPathParameters = {
|
|||||||
cloudProvider: string;
|
cloudProvider: string;
|
||||||
id: string;
|
id: string;
|
||||||
};
|
};
|
||||||
export type UpdateServicePathParameters = {
|
|
||||||
cloudProvider: string;
|
|
||||||
id: string;
|
|
||||||
serviceId: string;
|
|
||||||
};
|
|
||||||
export type AgentCheckInPathParameters = {
|
export type AgentCheckInPathParameters = {
|
||||||
cloudProvider: string;
|
cloudProvider: string;
|
||||||
};
|
};
|
||||||
@@ -3671,6 +3566,10 @@ export type GetService200 = {
|
|||||||
status: string;
|
status: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type UpdateServicePathParameters = {
|
||||||
|
cloudProvider: string;
|
||||||
|
serviceId: string;
|
||||||
|
};
|
||||||
export type CreateSessionByGoogleCallback303 = {
|
export type CreateSessionByGoogleCallback303 = {
|
||||||
data: AuthtypesGettableTokenDTO;
|
data: AuthtypesGettableTokenDTO;
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -284,15 +284,6 @@ export default function TableViewActions(
|
|||||||
error,
|
error,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// If the value is valid JSON (object or array), pretty-print it for copying
|
|
||||||
try {
|
|
||||||
const parsed = JSON.parse(text);
|
|
||||||
if (typeof parsed === 'object' && parsed !== null) {
|
|
||||||
return JSON.stringify(parsed, null, 2);
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
// not JSON, return as-is
|
|
||||||
}
|
|
||||||
return text;
|
return text;
|
||||||
}, [fieldData.value]);
|
}, [fieldData.value]);
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ func (provider *provider) addCloudIntegrationRoutes(router *mux.Router) error {
|
|||||||
Description: "This endpoint gets an account for the specified cloud provider",
|
Description: "This endpoint gets an account for the specified cloud provider",
|
||||||
Request: nil,
|
Request: nil,
|
||||||
RequestContentType: "",
|
RequestContentType: "",
|
||||||
Response: new(citypes.Account),
|
Response: new(citypes.GettableAccount),
|
||||||
ResponseContentType: "application/json",
|
ResponseContentType: "application/json",
|
||||||
SuccessStatusCode: http.StatusOK,
|
SuccessStatusCode: http.StatusOK,
|
||||||
ErrorStatusCodes: []int{http.StatusBadRequest, http.StatusNotFound},
|
ErrorStatusCodes: []int{http.StatusBadRequest, http.StatusNotFound},
|
||||||
@@ -139,7 +139,7 @@ func (provider *provider) addCloudIntegrationRoutes(router *mux.Router) error {
|
|||||||
Description: "This endpoint gets a service for the specified cloud provider",
|
Description: "This endpoint gets a service for the specified cloud provider",
|
||||||
Request: nil,
|
Request: nil,
|
||||||
RequestContentType: "",
|
RequestContentType: "",
|
||||||
Response: new(citypes.Service),
|
Response: new(citypes.GettableService),
|
||||||
ResponseContentType: "application/json",
|
ResponseContentType: "application/json",
|
||||||
SuccessStatusCode: http.StatusOK,
|
SuccessStatusCode: http.StatusOK,
|
||||||
ErrorStatusCodes: []int{},
|
ErrorStatusCodes: []int{},
|
||||||
@@ -150,7 +150,7 @@ func (provider *provider) addCloudIntegrationRoutes(router *mux.Router) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := router.Handle("/api/v1/cloud_integrations/{cloud_provider}/accounts/{id}/services/{service_id}", handler.New(
|
if err := router.Handle("/api/v1/cloud_integrations/{cloud_provider}/services/{service_id}", handler.New(
|
||||||
provider.authZ.AdminAccess(provider.cloudIntegrationHandler.UpdateService),
|
provider.authZ.AdminAccess(provider.cloudIntegrationHandler.UpdateService),
|
||||||
handler.OpenAPIDef{
|
handler.OpenAPIDef{
|
||||||
ID: "UpdateService",
|
ID: "UpdateService",
|
||||||
|
|||||||
@@ -50,11 +50,6 @@ func (handler *healthOpenAPIHandler) ServeOpenAPI(opCtx openapi.OperationContext
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *healthOpenAPIHandler) AuditDef() *pkghandler.AuditDef {
|
|
||||||
// Health endpoints are not audited since they don't represent user actions and are called frequently by monitoring systems, which would create noise in the audit logs.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (provider *provider) addRegistryRoutes(router *mux.Router) error {
|
func (provider *provider) addRegistryRoutes(router *mux.Router) error {
|
||||||
if err := router.Handle("/api/v2/healthz", newHealthOpenAPIHandler(
|
if err := router.Handle("/api/v2/healthz", newHealthOpenAPIHandler(
|
||||||
provider.authZ.OpenAccess(provider.factoryHandler.Healthz),
|
provider.authZ.OpenAccess(provider.factoryHandler.Healthz),
|
||||||
|
|||||||
@@ -21,15 +21,11 @@ func newTestSettings() factory.ScopedProviderSettings {
|
|||||||
|
|
||||||
func newTestEvent(resource string, action audittypes.Action) audittypes.AuditEvent {
|
func newTestEvent(resource string, action audittypes.Action) audittypes.AuditEvent {
|
||||||
return audittypes.AuditEvent{
|
return audittypes.AuditEvent{
|
||||||
Timestamp: time.Now(),
|
Timestamp: time.Now(),
|
||||||
EventName: audittypes.NewEventName(resource, action),
|
EventName: audittypes.NewEventName(resource, action),
|
||||||
AuditAttributes: audittypes.AuditAttributes{
|
ResourceName: resource,
|
||||||
Action: action,
|
Action: action,
|
||||||
Outcome: audittypes.OutcomeSuccess,
|
Outcome: audittypes.OutcomeSuccess,
|
||||||
},
|
|
||||||
ResourceAttributes: audittypes.ResourceAttributes{
|
|
||||||
ResourceName: resource,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,6 @@ var (
|
|||||||
CodeLicenseUnavailable = Code{"license_unavailable"}
|
CodeLicenseUnavailable = Code{"license_unavailable"}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
// Used when reverse engineering an error from a response that doesn't have a code.
|
|
||||||
// This should never be used in the codebase, and if it is, it's a bug that should be fixed by using proper error handling and including error codes in responses.
|
|
||||||
CodeUnset = Code{"unset"}
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
codeRegex = regexp.MustCompile(`^[a-z_]+$`)
|
codeRegex = regexp.MustCompile(`^[a-z_]+$`)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -15,16 +15,14 @@ type ServeOpenAPIFunc func(openapi.OperationContext)
|
|||||||
type Handler interface {
|
type Handler interface {
|
||||||
http.Handler
|
http.Handler
|
||||||
ServeOpenAPI(openapi.OperationContext)
|
ServeOpenAPI(openapi.OperationContext)
|
||||||
AuditDef() *AuditDef
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type handler struct {
|
type handler struct {
|
||||||
handlerFunc http.HandlerFunc
|
handlerFunc http.HandlerFunc
|
||||||
openAPIDef OpenAPIDef
|
openAPIDef OpenAPIDef
|
||||||
auditDef *AuditDef
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(handlerFunc http.HandlerFunc, openAPIDef OpenAPIDef, opts ...Option) Handler {
|
func New(handlerFunc http.HandlerFunc, openAPIDef OpenAPIDef) Handler {
|
||||||
// Remove duplicate error status codes
|
// Remove duplicate error status codes
|
||||||
openAPIDef.ErrorStatusCodes = slices.DeleteFunc(openAPIDef.ErrorStatusCodes, func(statusCode int) bool {
|
openAPIDef.ErrorStatusCodes = slices.DeleteFunc(openAPIDef.ErrorStatusCodes, func(statusCode int) bool {
|
||||||
return statusCode == http.StatusUnauthorized || statusCode == http.StatusForbidden || statusCode == http.StatusInternalServerError
|
return statusCode == http.StatusUnauthorized || statusCode == http.StatusForbidden || statusCode == http.StatusInternalServerError
|
||||||
@@ -38,16 +36,10 @@ func New(handlerFunc http.HandlerFunc, openAPIDef OpenAPIDef, opts ...Option) Ha
|
|||||||
openAPIDef.ErrorStatusCodes = append(openAPIDef.ErrorStatusCodes, http.StatusUnauthorized, http.StatusForbidden)
|
openAPIDef.ErrorStatusCodes = append(openAPIDef.ErrorStatusCodes, http.StatusUnauthorized, http.StatusForbidden)
|
||||||
}
|
}
|
||||||
|
|
||||||
handler := &handler{
|
return &handler{
|
||||||
handlerFunc: handlerFunc,
|
handlerFunc: handlerFunc,
|
||||||
openAPIDef: openAPIDef,
|
openAPIDef: openAPIDef,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, opt := range opts {
|
|
||||||
opt(handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
return handler
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
func (handler *handler) ServeHTTP(rw http.ResponseWriter, req *http.Request) {
|
||||||
@@ -128,8 +120,5 @@ func (handler *handler) ServeOpenAPI(opCtx openapi.OperationContext) {
|
|||||||
openapi.WithHTTPStatus(statusCode),
|
openapi.WithHTTPStatus(statusCode),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func (handler *handler) AuditDef() *AuditDef {
|
|
||||||
return handler.auditDef
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
package handler
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/audittypes"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Option configures optional behaviour on a handler created by New.
|
|
||||||
type Option func(*handler)
|
|
||||||
|
|
||||||
type AuditDef struct {
|
|
||||||
ResourceName string // AuthZ Typeable.Name() value, e.g. "dashboard", "user".
|
|
||||||
Action audittypes.Action // create, update, delete, login, etc.
|
|
||||||
Category audittypes.ActionCategory // access_control, configuration_change, etc.
|
|
||||||
ResourceIDParam string // Gorilla mux path param name for the resource ID.
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithAudit attaches an AuditDef to the handler. The actual audit event
|
|
||||||
// emission is handled by the middleware layer, which reads the AuditDef
|
|
||||||
// from the matched route's handler.
|
|
||||||
func WithAuditDef(def AuditDef) Option {
|
|
||||||
return func(h *handler) {
|
|
||||||
h.auditDef = &def
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,169 +0,0 @@
|
|||||||
package middleware
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log/slog"
|
|
||||||
"net"
|
|
||||||
"net/http"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
|
||||||
"go.opentelemetry.io/otel/trace"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/auditor"
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
|
||||||
"github.com/SigNoz/signoz/pkg/http/handler"
|
|
||||||
"github.com/SigNoz/signoz/pkg/http/render"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/audittypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
logMessage = "::RECEIVED-REQUEST::"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Audit struct {
|
|
||||||
logger *slog.Logger
|
|
||||||
excludedRoutes map[string]struct{}
|
|
||||||
auditor auditor.Auditor
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAudit(logger *slog.Logger, excludedRoutes []string, auditor auditor.Auditor) *Audit {
|
|
||||||
excludedRoutesMap := make(map[string]struct{})
|
|
||||||
for _, route := range excludedRoutes {
|
|
||||||
excludedRoutesMap[route] = struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Audit{
|
|
||||||
logger: logger.With(slog.String("pkg", pkgname)),
|
|
||||||
excludedRoutes: excludedRoutesMap,
|
|
||||||
auditor: auditor,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (middleware *Audit) Wrap(next http.Handler) http.Handler {
|
|
||||||
return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
||||||
start := time.Now()
|
|
||||||
host, port, _ := net.SplitHostPort(req.Host)
|
|
||||||
path, err := mux.CurrentRoute(req).GetPathTemplate()
|
|
||||||
if err != nil {
|
|
||||||
path = req.URL.Path
|
|
||||||
}
|
|
||||||
|
|
||||||
fields := []any{
|
|
||||||
string(semconv.ClientAddressKey), req.RemoteAddr,
|
|
||||||
string(semconv.UserAgentOriginalKey), req.UserAgent(),
|
|
||||||
string(semconv.ServerAddressKey), host,
|
|
||||||
string(semconv.ServerPortKey), port,
|
|
||||||
string(semconv.HTTPRequestSizeKey), req.ContentLength,
|
|
||||||
string(semconv.HTTPRouteKey), path,
|
|
||||||
}
|
|
||||||
|
|
||||||
responseBuffer := &byteBuffer{}
|
|
||||||
writer := newResponseCapture(rw, responseBuffer)
|
|
||||||
next.ServeHTTP(writer, req)
|
|
||||||
|
|
||||||
statusCode, writeErr := writer.StatusCode(), writer.WriteError()
|
|
||||||
|
|
||||||
// Logging or Audit: skip if the matched route is in the excluded list. This allows us to exclude noisy routes (e.g. health checks) from both logging and audit.
|
|
||||||
if _, ok := middleware.excludedRoutes[path]; ok {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
middleware.emitAuditEvent(req, writer, path)
|
|
||||||
|
|
||||||
fields = append(fields,
|
|
||||||
string(semconv.HTTPResponseStatusCodeKey), statusCode,
|
|
||||||
string(semconv.HTTPServerRequestDurationName), time.Since(start),
|
|
||||||
)
|
|
||||||
if writeErr != nil {
|
|
||||||
fields = append(fields, errors.Attr(writeErr))
|
|
||||||
middleware.logger.ErrorContext(req.Context(), logMessage, fields...)
|
|
||||||
} else {
|
|
||||||
if responseBuffer.Len() != 0 {
|
|
||||||
fields = append(fields, "response.body", responseBuffer.String())
|
|
||||||
}
|
|
||||||
|
|
||||||
middleware.logger.InfoContext(req.Context(), logMessage, fields...)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (middleware *Audit) emitAuditEvent(req *http.Request, writer responseCapture, routeTemplate string) {
|
|
||||||
if middleware.auditor == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
def := auditDefFromRequest(req)
|
|
||||||
if def == nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// extract claims
|
|
||||||
claims, _ := authtypes.ClaimsFromContext(req.Context())
|
|
||||||
|
|
||||||
// extract status code
|
|
||||||
statusCode := writer.StatusCode()
|
|
||||||
|
|
||||||
// extract traces.
|
|
||||||
span := trace.SpanFromContext(req.Context())
|
|
||||||
|
|
||||||
// extract error details.
|
|
||||||
var errorType, errorCode string
|
|
||||||
if statusCode >= 400 {
|
|
||||||
errorType = render.ErrorTypeFromStatusCode(statusCode)
|
|
||||||
errorCode = render.ErrorCodeFromBody(writer.BodyBytes())
|
|
||||||
}
|
|
||||||
|
|
||||||
event := audittypes.NewAuditEventFromHTTPRequest(
|
|
||||||
req,
|
|
||||||
routeTemplate,
|
|
||||||
statusCode,
|
|
||||||
span.SpanContext().TraceID(),
|
|
||||||
span.SpanContext().SpanID(),
|
|
||||||
def.Action,
|
|
||||||
def.Category,
|
|
||||||
claims,
|
|
||||||
resourceIDFromRequest(req, def.ResourceIDParam),
|
|
||||||
def.ResourceName,
|
|
||||||
errorType,
|
|
||||||
errorCode,
|
|
||||||
)
|
|
||||||
|
|
||||||
middleware.auditor.Audit(req.Context(), event)
|
|
||||||
}
|
|
||||||
|
|
||||||
func auditDefFromRequest(req *http.Request) *handler.AuditDef {
|
|
||||||
route := mux.CurrentRoute(req)
|
|
||||||
if route == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
actualHandler := route.GetHandler()
|
|
||||||
if actualHandler == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// The type assertion is necessary because route.GetHandler() returns
|
|
||||||
// http.Handler, and not every http.Handler on the mux is a handler.Handler
|
|
||||||
// (e.g. middleware wrappers, raw http.HandlerFunc registrations).
|
|
||||||
provider, ok := actualHandler.(handler.Handler)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return provider.AuditDef()
|
|
||||||
}
|
|
||||||
|
|
||||||
func resourceIDFromRequest(req *http.Request, param string) string {
|
|
||||||
if param == "" {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
vars := mux.Vars(req)
|
|
||||||
if vars == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return vars[param]
|
|
||||||
}
|
|
||||||
81
pkg/http/middleware/logging.go
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"log/slog"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gorilla/mux"
|
||||||
|
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||||
|
|
||||||
|
"github.com/SigNoz/signoz/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
logMessage string = "::RECEIVED-REQUEST::"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Logging struct {
|
||||||
|
logger *slog.Logger
|
||||||
|
excludedRoutes map[string]struct{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewLogging(logger *slog.Logger, excludedRoutes []string) *Logging {
|
||||||
|
excludedRoutesMap := make(map[string]struct{})
|
||||||
|
for _, route := range excludedRoutes {
|
||||||
|
excludedRoutesMap[route] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Logging{
|
||||||
|
logger: logger.With(slog.String("pkg", pkgname)),
|
||||||
|
excludedRoutes: excludedRoutesMap,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (middleware *Logging) Wrap(next http.Handler) http.Handler {
|
||||||
|
return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
||||||
|
start := time.Now()
|
||||||
|
host, port, _ := net.SplitHostPort(req.Host)
|
||||||
|
path, err := mux.CurrentRoute(req).GetPathTemplate()
|
||||||
|
if err != nil {
|
||||||
|
path = req.URL.Path
|
||||||
|
}
|
||||||
|
|
||||||
|
fields := []any{
|
||||||
|
string(semconv.ClientAddressKey), req.RemoteAddr,
|
||||||
|
string(semconv.UserAgentOriginalKey), req.UserAgent(),
|
||||||
|
string(semconv.ServerAddressKey), host,
|
||||||
|
string(semconv.ServerPortKey), port,
|
||||||
|
string(semconv.HTTPRequestSizeKey), req.ContentLength,
|
||||||
|
string(semconv.HTTPRouteKey), path,
|
||||||
|
}
|
||||||
|
|
||||||
|
badResponseBuffer := new(bytes.Buffer)
|
||||||
|
writer := newBadResponseLoggingWriter(rw, badResponseBuffer)
|
||||||
|
next.ServeHTTP(writer, req)
|
||||||
|
|
||||||
|
// if the path is in the excludedRoutes map, don't log
|
||||||
|
if _, ok := middleware.excludedRoutes[path]; ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
statusCode, err := writer.StatusCode(), writer.WriteError()
|
||||||
|
fields = append(fields,
|
||||||
|
string(semconv.HTTPResponseStatusCodeKey), statusCode,
|
||||||
|
string(semconv.HTTPServerRequestDurationName), time.Since(start),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
fields = append(fields, errors.Attr(err))
|
||||||
|
middleware.logger.ErrorContext(req.Context(), logMessage, fields...)
|
||||||
|
} else {
|
||||||
|
// when the status code is 400 or >=500, and the response body is not empty.
|
||||||
|
if badResponseBuffer.Len() != 0 {
|
||||||
|
fields = append(fields, "response.body", badResponseBuffer.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
middleware.logger.InfoContext(req.Context(), logMessage, fields...)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package middleware
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
@@ -9,156 +10,118 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
maxResponseBodyCapture int = 4096 // At most 4k bytes from response bodies.
|
maxResponseBodyInLogs = 4096 // At most 4k bytes from response bodies in our logs.
|
||||||
)
|
)
|
||||||
|
|
||||||
// Wraps an http.ResponseWriter to capture the status code,
|
type badResponseLoggingWriter interface {
|
||||||
// write errors, and (for error responses) a bounded slice of the body.
|
|
||||||
type responseCapture interface {
|
|
||||||
http.ResponseWriter
|
http.ResponseWriter
|
||||||
|
// Get the status code.
|
||||||
// StatusCode returns the HTTP status code written to the response.
|
|
||||||
StatusCode() int
|
StatusCode() int
|
||||||
|
// Get the error while writing.
|
||||||
// WriteError returns the error (if any) from the downstream Write call.
|
|
||||||
WriteError() error
|
WriteError() error
|
||||||
|
|
||||||
// BodyBytes returns the captured response body bytes. Only populated
|
|
||||||
// for error responses (status >= 400).
|
|
||||||
BodyBytes() []byte
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func newResponseCapture(rw http.ResponseWriter, buffer *byteBuffer) responseCapture {
|
func newBadResponseLoggingWriter(rw http.ResponseWriter, buffer io.Writer) badResponseLoggingWriter {
|
||||||
b := nonFlushingResponseCapture{
|
b := nonFlushingBadResponseLoggingWriter{
|
||||||
rw: rw,
|
rw: rw,
|
||||||
buffer: buffer,
|
buffer: buffer,
|
||||||
captureBody: false,
|
logBody: false,
|
||||||
bodyBytesLeft: maxResponseBodyCapture,
|
bodyBytesLeft: maxResponseBodyInLogs,
|
||||||
statusCode: http.StatusOK,
|
statusCode: http.StatusOK,
|
||||||
}
|
}
|
||||||
|
|
||||||
if f, ok := rw.(http.Flusher); ok {
|
if f, ok := rw.(http.Flusher); ok {
|
||||||
return &flushingResponseCapture{nonFlushingResponseCapture: b, f: f}
|
return &flushingBadResponseLoggingWriter{b, f}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &b
|
return &b
|
||||||
}
|
}
|
||||||
|
|
||||||
// byteBuffer is a minimal write-only buffer used to capture response bodies.
|
type nonFlushingBadResponseLoggingWriter struct {
|
||||||
type byteBuffer struct {
|
|
||||||
buf []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *byteBuffer) Write(p []byte) (int, error) {
|
|
||||||
b.buf = append(b.buf, p...)
|
|
||||||
return len(p), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *byteBuffer) WriteString(s string) (int, error) {
|
|
||||||
b.buf = append(b.buf, s...)
|
|
||||||
return len(s), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *byteBuffer) Bytes() []byte {
|
|
||||||
return b.buf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *byteBuffer) Len() int {
|
|
||||||
return len(b.buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *byteBuffer) String() string {
|
|
||||||
return string(b.buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
type nonFlushingResponseCapture struct {
|
|
||||||
rw http.ResponseWriter
|
rw http.ResponseWriter
|
||||||
buffer *byteBuffer
|
buffer io.Writer
|
||||||
captureBody bool
|
logBody bool
|
||||||
bodyBytesLeft int
|
bodyBytesLeft int
|
||||||
statusCode int
|
statusCode int
|
||||||
writeError error
|
writeError error // The error returned when downstream Write() fails.
|
||||||
}
|
}
|
||||||
|
|
||||||
type flushingResponseCapture struct {
|
// Extends nonFlushingBadResponseLoggingWriter that implements http.Flusher.
|
||||||
nonFlushingResponseCapture
|
type flushingBadResponseLoggingWriter struct {
|
||||||
|
nonFlushingBadResponseLoggingWriter
|
||||||
f http.Flusher
|
f http.Flusher
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unwrap is used by http.ResponseController to get access to original http.ResponseWriter.
|
// Unwrap method is used by http.ResponseController to get access to original http.ResponseWriter.
|
||||||
func (writer *nonFlushingResponseCapture) Unwrap() http.ResponseWriter {
|
func (writer *nonFlushingBadResponseLoggingWriter) Unwrap() http.ResponseWriter {
|
||||||
return writer.rw
|
return writer.rw
|
||||||
}
|
}
|
||||||
|
|
||||||
// Header returns the header map that will be sent by WriteHeader.
|
// Header returns the header map that will be sent by WriteHeader.
|
||||||
func (writer *nonFlushingResponseCapture) Header() http.Header {
|
// Implements ResponseWriter.
|
||||||
|
func (writer *nonFlushingBadResponseLoggingWriter) Header() http.Header {
|
||||||
return writer.rw.Header()
|
return writer.rw.Header()
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteHeader writes the HTTP response header.
|
// WriteHeader writes the HTTP response header.
|
||||||
func (writer *nonFlushingResponseCapture) WriteHeader(statusCode int) {
|
func (writer *nonFlushingBadResponseLoggingWriter) WriteHeader(statusCode int) {
|
||||||
writer.statusCode = statusCode
|
writer.statusCode = statusCode
|
||||||
if statusCode >= 400 {
|
if statusCode >= 500 || statusCode == 400 {
|
||||||
writer.captureBody = true
|
writer.logBody = true
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.rw.WriteHeader(statusCode)
|
writer.rw.WriteHeader(statusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write writes HTTP response data.
|
// Writes HTTP response data.
|
||||||
func (writer *nonFlushingResponseCapture) Write(data []byte) (int, error) {
|
func (writer *nonFlushingBadResponseLoggingWriter) Write(data []byte) (int, error) {
|
||||||
if writer.statusCode == 0 {
|
if writer.statusCode == 0 {
|
||||||
|
// WriteHeader has (probably) not been called, so we need to call it with StatusOK to fulfill the interface contract.
|
||||||
|
// https://godoc.org/net/http#ResponseWriter
|
||||||
writer.WriteHeader(http.StatusOK)
|
writer.WriteHeader(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 204 No Content is a success response that indicates that the request has been successfully processed and that the response body is intentionally empty.
|
||||||
if writer.statusCode == 204 {
|
if writer.statusCode == 204 {
|
||||||
return 0, nil
|
return 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
n, err := writer.rw.Write(data)
|
n, err := writer.rw.Write(data)
|
||||||
if writer.captureBody {
|
if writer.logBody {
|
||||||
writer.captureResponseBody(data)
|
writer.captureResponseBody(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
writer.writeError = err
|
writer.writeError = err
|
||||||
}
|
}
|
||||||
|
|
||||||
return n, err
|
return n, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hijack hijacks the first response writer that is a Hijacker.
|
// Hijack hijacks the first response writer that is a Hijacker.
|
||||||
func (writer *nonFlushingResponseCapture) Hijack() (net.Conn, *bufio.ReadWriter, error) {
|
func (writer *nonFlushingBadResponseLoggingWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) {
|
||||||
hj, ok := writer.rw.(http.Hijacker)
|
hj, ok := writer.rw.(http.Hijacker)
|
||||||
if ok {
|
if ok {
|
||||||
return hj.Hijack()
|
return hj.Hijack()
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil, errors.NewInternalf(errors.CodeInternal, "cannot cast underlying response writer to Hijacker")
|
return nil, nil, errors.NewInternalf(errors.CodeInternal, "cannot cast underlying response writer to Hijacker")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (writer *nonFlushingResponseCapture) StatusCode() int {
|
func (writer *nonFlushingBadResponseLoggingWriter) StatusCode() int {
|
||||||
return writer.statusCode
|
return writer.statusCode
|
||||||
}
|
}
|
||||||
|
|
||||||
func (writer *nonFlushingResponseCapture) WriteError() error {
|
func (writer *nonFlushingBadResponseLoggingWriter) WriteError() error {
|
||||||
return writer.writeError
|
return writer.writeError
|
||||||
}
|
}
|
||||||
|
|
||||||
func (writer *nonFlushingResponseCapture) BodyBytes() []byte {
|
func (writer *flushingBadResponseLoggingWriter) Flush() {
|
||||||
return writer.buffer.Bytes()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (writer *flushingResponseCapture) Flush() {
|
|
||||||
writer.f.Flush()
|
writer.f.Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (writer *nonFlushingResponseCapture) captureResponseBody(data []byte) {
|
func (writer *nonFlushingBadResponseLoggingWriter) captureResponseBody(data []byte) {
|
||||||
if len(data) > writer.bodyBytesLeft {
|
if len(data) > writer.bodyBytesLeft {
|
||||||
_, _ = writer.buffer.Write(data[:writer.bodyBytesLeft])
|
_, _ = writer.buffer.Write(data[:writer.bodyBytesLeft])
|
||||||
_, _ = writer.buffer.WriteString("...")
|
_, _ = io.WriteString(writer.buffer, "...")
|
||||||
writer.bodyBytesLeft = 0
|
writer.bodyBytesLeft = 0
|
||||||
writer.captureBody = false
|
writer.logBody = false
|
||||||
} else {
|
} else {
|
||||||
_, _ = writer.buffer.Write(data)
|
_, _ = writer.buffer.Write(data)
|
||||||
writer.bodyBytesLeft -= len(data)
|
writer.bodyBytesLeft -= len(data)
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
package middleware
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
"net/http"
|
|
||||||
"net/http/httptest"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestResponseCapture(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
testCases := []struct {
|
|
||||||
name string
|
|
||||||
handler http.HandlerFunc
|
|
||||||
expectedStatus int
|
|
||||||
expectedBodyBytes string
|
|
||||||
expectedClientBody string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "Success_DoesNotCaptureBody",
|
|
||||||
handler: func(rw http.ResponseWriter, req *http.Request) {
|
|
||||||
rw.WriteHeader(http.StatusOK)
|
|
||||||
_, _ = rw.Write([]byte(`{"status":"success","data":{"id":"123"}}`))
|
|
||||||
},
|
|
||||||
expectedStatus: http.StatusOK,
|
|
||||||
expectedBodyBytes: "",
|
|
||||||
expectedClientBody: `{"status":"success","data":{"id":"123"}}`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Error_CapturesBody",
|
|
||||||
handler: func(rw http.ResponseWriter, req *http.Request) {
|
|
||||||
rw.WriteHeader(http.StatusForbidden)
|
|
||||||
_, _ = rw.Write([]byte(`{"status":"error","error":{"code":"authz_forbidden","message":"forbidden"}}`))
|
|
||||||
},
|
|
||||||
expectedStatus: http.StatusForbidden,
|
|
||||||
expectedBodyBytes: `{"status":"error","error":{"code":"authz_forbidden","message":"forbidden"}}`,
|
|
||||||
expectedClientBody: `{"status":"error","error":{"code":"authz_forbidden","message":"forbidden"}}`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Error_TruncatesAtMaxCapture",
|
|
||||||
handler: func(rw http.ResponseWriter, req *http.Request) {
|
|
||||||
rw.WriteHeader(http.StatusInternalServerError)
|
|
||||||
_, _ = rw.Write([]byte(strings.Repeat("x", maxResponseBodyCapture+100)))
|
|
||||||
},
|
|
||||||
expectedStatus: http.StatusInternalServerError,
|
|
||||||
expectedBodyBytes: strings.Repeat("x", maxResponseBodyCapture) + "...",
|
|
||||||
expectedClientBody: strings.Repeat("x", maxResponseBodyCapture+100),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "NoContent_SuppressesWrite",
|
|
||||||
handler: func(rw http.ResponseWriter, req *http.Request) {
|
|
||||||
rw.WriteHeader(http.StatusNoContent)
|
|
||||||
_, _ = rw.Write([]byte("should be suppressed"))
|
|
||||||
},
|
|
||||||
expectedStatus: http.StatusNoContent,
|
|
||||||
expectedBodyBytes: "",
|
|
||||||
expectedClientBody: "",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
|
||||||
t.Run(testCase.name, func(t *testing.T) {
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
var captured responseCapture
|
|
||||||
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
|
|
||||||
buf := &byteBuffer{}
|
|
||||||
captured = newResponseCapture(rw, buf)
|
|
||||||
testCase.handler(captured, req)
|
|
||||||
}))
|
|
||||||
defer server.Close()
|
|
||||||
|
|
||||||
resp, err := http.Get(server.URL)
|
|
||||||
assert.NoError(t, err)
|
|
||||||
defer resp.Body.Close()
|
|
||||||
|
|
||||||
clientBody, _ := io.ReadAll(resp.Body)
|
|
||||||
|
|
||||||
assert.Equal(t, testCase.expectedStatus, captured.StatusCode())
|
|
||||||
assert.Equal(t, testCase.expectedBodyBytes, string(captured.BodyBytes()))
|
|
||||||
assert.Equal(t, testCase.expectedClientBody, string(clientBody))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,6 @@ import (
|
|||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
"github.com/SigNoz/signoz/pkg/errors"
|
||||||
jsoniter "github.com/json-iterator/go"
|
jsoniter "github.com/json-iterator/go"
|
||||||
"github.com/tidwall/gjson"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -43,45 +42,6 @@ func Success(rw http.ResponseWriter, httpCode int, data interface{}) {
|
|||||||
_, _ = rw.Write(body)
|
_, _ = rw.Write(body)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ErrorCodeFromBody(body []byte) string {
|
|
||||||
code := gjson.GetBytes(body, "error.code").String()
|
|
||||||
|
|
||||||
// This should never return empty since we only call this function on responses that were generated by us.
|
|
||||||
// If it does return empty, the codebase has failed to use render package for error responses somewhere, and we should fix that instead of trying to handle it here.
|
|
||||||
if code == "" {
|
|
||||||
return errors.CodeUnset.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
return code
|
|
||||||
}
|
|
||||||
|
|
||||||
func ErrorTypeFromStatusCode(statusCode int) string {
|
|
||||||
// We are losing the exact type information here, but we can at least capture the error code and message for better observability.
|
|
||||||
// To get the exact type, we would need some changes in the render package to include the error type in the response, which we can consider in the future if there is a need for it.
|
|
||||||
switch statusCode {
|
|
||||||
case http.StatusBadRequest:
|
|
||||||
return errors.TypeInvalidInput.String()
|
|
||||||
case http.StatusNotFound:
|
|
||||||
return errors.TypeNotFound.String()
|
|
||||||
case http.StatusConflict:
|
|
||||||
return errors.TypeAlreadyExists.String()
|
|
||||||
case http.StatusUnauthorized:
|
|
||||||
return errors.TypeUnauthenticated.String()
|
|
||||||
case http.StatusNotImplemented:
|
|
||||||
return errors.TypeUnsupported.String()
|
|
||||||
case http.StatusForbidden:
|
|
||||||
return errors.TypeForbidden.String()
|
|
||||||
case statusClientClosedConnection:
|
|
||||||
return errors.TypeCanceled.String()
|
|
||||||
case http.StatusGatewayTimeout:
|
|
||||||
return errors.TypeTimeout.String()
|
|
||||||
case http.StatusUnavailableForLegalReasons:
|
|
||||||
return errors.TypeLicenseUnavailable.String()
|
|
||||||
default:
|
|
||||||
return errors.TypeInternal.String()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func Error(rw http.ResponseWriter, cause error) {
|
func Error(rw http.ResponseWriter, cause error) {
|
||||||
// Derive the http code from the error type
|
// Derive the http code from the error type
|
||||||
t, _, _, _, _, _ := errors.Unwrapb(cause)
|
t, _, _, _, _, _ := errors.Unwrapb(cause)
|
||||||
|
|||||||
@@ -58,31 +58,6 @@ func TestSuccess(t *testing.T) {
|
|||||||
assert.Equal(t, expected, actual)
|
assert.Equal(t, expected, actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestErrorCodeFromBody(t *testing.T) {
|
|
||||||
testCases := []struct {
|
|
||||||
name string
|
|
||||||
body []byte
|
|
||||||
wantCode string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
name: "ValidErrorResponse",
|
|
||||||
body: []byte(`{"status":"error","error":{"code":"authz_forbidden","message":"only admins can access this resource"}}`),
|
|
||||||
wantCode: "authz_forbidden",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "InvalidJSON",
|
|
||||||
body: []byte(`not json`),
|
|
||||||
wantCode: "unset",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, testCase := range testCases {
|
|
||||||
t.Run(testCase.name, func(t *testing.T) {
|
|
||||||
assert.Equal(t, testCase.wantCode, ErrorCodeFromBody(testCase.body))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestError(t *testing.T) {
|
func TestError(t *testing.T) {
|
||||||
listener, err := net.Listen("tcp", "localhost:0")
|
listener, err := net.Listen("tcp", "localhost:0")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ type Module interface {
|
|||||||
CreateAccount(ctx context.Context, account *citypes.Account) error
|
CreateAccount(ctx context.Context, account *citypes.Account) error
|
||||||
|
|
||||||
// GetAccount returns cloud integration account
|
// GetAccount returns cloud integration account
|
||||||
GetAccount(ctx context.Context, orgID, accountID valuer.UUID, provider citypes.CloudProviderType) (*citypes.Account, error)
|
GetAccount(ctx context.Context, orgID, accountID valuer.UUID) (*citypes.Account, error)
|
||||||
|
|
||||||
// ListAccounts lists accounts where agent is connected
|
// ListAccounts lists accounts where agent is connected
|
||||||
ListAccounts(ctx context.Context, orgID valuer.UUID, provider citypes.CloudProviderType) ([]*citypes.Account, error)
|
ListAccounts(ctx context.Context, orgID valuer.UUID) ([]*citypes.Account, error)
|
||||||
|
|
||||||
// UpdateAccount updates the cloud integration account for a specific organization.
|
// UpdateAccount updates the cloud integration account for a specific organization.
|
||||||
UpdateAccount(ctx context.Context, account *citypes.Account) error
|
UpdateAccount(ctx context.Context, account *citypes.Account) error
|
||||||
|
|
||||||
// DisconnectAccount soft deletes/removes a cloud integration account.
|
// DisconnectAccount soft deletes/removes a cloud integration account.
|
||||||
DisconnectAccount(ctx context.Context, orgID, accountID valuer.UUID, provider citypes.CloudProviderType) error
|
DisconnectAccount(ctx context.Context, orgID, accountID valuer.UUID) error
|
||||||
|
|
||||||
// GetConnectionArtifact returns cloud provider specific connection information,
|
// GetConnectionArtifact returns cloud provider specific connection information,
|
||||||
// client side handles how this information is shown
|
// client side handles how this information is shown
|
||||||
@@ -30,20 +30,17 @@ type Module interface {
|
|||||||
|
|
||||||
// ListServicesMetadata returns the list of services metadata for a cloud provider attached with the integrationID.
|
// ListServicesMetadata returns the list of services metadata for a cloud provider attached with the integrationID.
|
||||||
// This just returns a summary of the service and not the whole service definition
|
// This just returns a summary of the service and not the whole service definition
|
||||||
ListServicesMetadata(ctx context.Context, orgID valuer.UUID, provider citypes.CloudProviderType, integrationID *valuer.UUID) ([]*citypes.ServiceMetadata, error)
|
ListServicesMetadata(ctx context.Context, orgID valuer.UUID, integrationID *valuer.UUID) ([]*citypes.ServiceMetadata, error)
|
||||||
|
|
||||||
// GetService returns service definition details for a serviceID. This returns config and
|
// GetService returns service definition details for a serviceID. This returns config and
|
||||||
// other details required to show in service details page on web client.
|
// other details required to show in service details page on web client.
|
||||||
GetService(ctx context.Context, orgID valuer.UUID, integrationID *valuer.UUID, serviceID citypes.ServiceID, provider citypes.CloudProviderType) (*citypes.Service, error)
|
GetService(ctx context.Context, orgID valuer.UUID, integrationID *valuer.UUID, serviceID string) (*citypes.Service, error)
|
||||||
|
|
||||||
// CreateService creates a new service for a cloud integration account.
|
|
||||||
CreateService(ctx context.Context, orgID valuer.UUID, service *citypes.CloudIntegrationService, provider citypes.CloudProviderType) error
|
|
||||||
|
|
||||||
// UpdateService updates cloud integration service
|
// UpdateService updates cloud integration service
|
||||||
UpdateService(ctx context.Context, orgID valuer.UUID, service *citypes.CloudIntegrationService, provider citypes.CloudProviderType) error
|
UpdateService(ctx context.Context, orgID valuer.UUID, service *citypes.CloudIntegrationService) error
|
||||||
|
|
||||||
// AgentCheckIn is called by agent to heartbeat and get latest config in response.
|
// AgentCheckIn is called by agent to heartbeat and get latest config in response.
|
||||||
AgentCheckIn(ctx context.Context, orgID valuer.UUID, provider citypes.CloudProviderType, req *citypes.AgentCheckInRequest) (*citypes.AgentCheckInResponse, error)
|
AgentCheckIn(ctx context.Context, orgID valuer.UUID, req *citypes.AgentCheckInRequest) (*citypes.AgentCheckInResponse, error)
|
||||||
|
|
||||||
// GetDashboardByID returns dashboard JSON for a given dashboard id.
|
// GetDashboardByID returns dashboard JSON for a given dashboard id.
|
||||||
// this only returns the dashboard when the service (embedded in dashboard id) is enabled
|
// this only returns the dashboard when the service (embedded in dashboard id) is enabled
|
||||||
@@ -53,39 +50,6 @@ type Module interface {
|
|||||||
// ListDashboards returns list of dashboards across all connected cloud integration accounts
|
// ListDashboards returns list of dashboards across all connected cloud integration accounts
|
||||||
// for enabled services in the org. This list gets added to dashboard list page
|
// for enabled services in the org. This list gets added to dashboard list page
|
||||||
ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error)
|
ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error)
|
||||||
|
|
||||||
// GetCloudProvider returns cloud provider specific module
|
|
||||||
GetCloudProvider(provider citypes.CloudProviderType) (CloudProviderModule, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
type CloudProviderModule interface {
|
|
||||||
GetConnectionArtifact(ctx context.Context, creds *citypes.SignozCredentials, account *citypes.Account, req *citypes.ConnectionArtifactRequest) (*citypes.ConnectionArtifact, error)
|
|
||||||
|
|
||||||
// ListServiceDefinitions returns all service definitions for this cloud provider.
|
|
||||||
ListServiceDefinitions(ctx context.Context) ([]*citypes.ServiceDefinition, error)
|
|
||||||
|
|
||||||
// GetServiceDefinition returns the service definition for the given service ID.
|
|
||||||
GetServiceDefinition(ctx context.Context, serviceID citypes.ServiceID) (*citypes.ServiceDefinition, error)
|
|
||||||
|
|
||||||
// IsServiceEnabled returns true if the service has at least one signal (logs or metrics) enabled.
|
|
||||||
IsServiceEnabled(ctx context.Context, config *citypes.ServiceConfig) bool
|
|
||||||
|
|
||||||
// IsMetricsEnabled returns true if the service config has metrics explicitly enabled.
|
|
||||||
// Used to gate dashboard availability — dashboards are only shown when metrics are enabled.
|
|
||||||
IsMetricsEnabled(ctx context.Context, config *citypes.ServiceConfig) bool
|
|
||||||
|
|
||||||
// ServiceConfigFromStorableServiceConfig converts a stored service's provider-specific JSON config
|
|
||||||
// into a *ServiceConfig wrapper.
|
|
||||||
ServiceConfigFromStorableServiceConfig(ctx context.Context, config string) (*citypes.ServiceConfig, error)
|
|
||||||
|
|
||||||
// StorableConfigFromServiceConfig serializes a ServiceConfig into the raw provider-specific
|
|
||||||
// JSON string suitable for storing in StorableCloudIntegrationService.Config.
|
|
||||||
// It strips any signal config (logs/metrics) that the service's SupportedSignals declares unsupported.
|
|
||||||
StorableConfigFromServiceConfig(ctx context.Context, cfg *citypes.ServiceConfig, supported citypes.SupportedSignals) (string, error)
|
|
||||||
|
|
||||||
// BuildIntegrationConfig compiles the provider-specific integration config from the account
|
|
||||||
// and list of configured services. This is the config returned to the agent on check-in.
|
|
||||||
BuildIntegrationConfig(ctx context.Context, account *citypes.Account, services []*citypes.StorableCloudIntegrationService) (*citypes.ProviderIntegrationConfig, error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Handler interface {
|
type Handler interface {
|
||||||
|
|||||||
@@ -1,174 +0,0 @@
|
|||||||
package implcloudintegration
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"context"
|
|
||||||
"embed"
|
|
||||||
"encoding/base64"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"io/fs"
|
|
||||||
"path"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
|
||||||
citypes "github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
)
|
|
||||||
|
|
||||||
const definitionsRoot = "fs/definitions"
|
|
||||||
|
|
||||||
//go:embed fs/definitions/*
|
|
||||||
var definitionFiles embed.FS
|
|
||||||
|
|
||||||
type definitionStore struct{}
|
|
||||||
|
|
||||||
// NewServiceDefinitionStore creates a new ServiceDefinitionStore backed by the embedded filesystem.
|
|
||||||
func NewServiceDefinitionStore() citypes.ServiceDefinitionStore {
|
|
||||||
return &definitionStore{}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get reads and hydrates the service definition for the given provider and service ID.
|
|
||||||
func (s *definitionStore) Get(ctx context.Context, provider citypes.CloudProviderType, serviceID citypes.ServiceID) (*citypes.ServiceDefinition, error) {
|
|
||||||
svcDir := path.Join(definitionsRoot, provider.StringValue(), serviceID.StringValue())
|
|
||||||
def, err := readServiceDefinition(svcDir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New(errors.TypeNotFound, citypes.ErrCodeServiceDefinitionNotFound, fmt.Sprintf("service definition not found for service id %q", serviceID.StringValue()))
|
|
||||||
}
|
|
||||||
return def, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// List reads and hydrates all service definitions for the given provider, sorted by ID.
|
|
||||||
func (s *definitionStore) List(ctx context.Context, provider citypes.CloudProviderType) ([]*citypes.ServiceDefinition, error) {
|
|
||||||
providerDir := path.Join(definitionsRoot, provider.StringValue())
|
|
||||||
entries, err := fs.ReadDir(definitionFiles, providerDir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't read service definition dirs for %s", provider.StringValue())
|
|
||||||
}
|
|
||||||
|
|
||||||
var result []*citypes.ServiceDefinition
|
|
||||||
for _, entry := range entries {
|
|
||||||
if !entry.IsDir() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
svcDir := path.Join(providerDir, entry.Name())
|
|
||||||
def, err := readServiceDefinition(svcDir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't read service definition for %s/%s", provider.StringValue(), entry.Name())
|
|
||||||
}
|
|
||||||
result = append(result, def)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Slice(result, func(i, j int) bool {
|
|
||||||
return result[i].ID < result[j].ID
|
|
||||||
})
|
|
||||||
return result, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func readServiceDefinition(svcDir string) (*citypes.ServiceDefinition, error) {
|
|
||||||
integrationJSONPath := path.Join(svcDir, "integration.json")
|
|
||||||
raw, err := definitionFiles.ReadFile(integrationJSONPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't read %s", integrationJSONPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
var specMap map[string]any
|
|
||||||
if err := json.Unmarshal(raw, &specMap); err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't parse %s", integrationJSONPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
hydrated, err := hydrateFileURIs(specMap, definitionFiles, svcDir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't hydrate file URIs in %s", integrationJSONPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
reEncoded, err := json.Marshal(hydrated)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't re-encode hydrated spec from %s", integrationJSONPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
var def citypes.ServiceDefinition
|
|
||||||
decoder := json.NewDecoder(bytes.NewReader(reEncoded))
|
|
||||||
decoder.DisallowUnknownFields()
|
|
||||||
if err := decoder.Decode(&def); err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't decode service definition from %s", integrationJSONPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := validateServiceDefinition(&def); err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "invalid service definition in %s", svcDir)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &def, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func validateServiceDefinition(def *citypes.ServiceDefinition) error {
|
|
||||||
if def.Strategy == nil {
|
|
||||||
return errors.NewInternalf(errors.CodeInternal, "telemetryCollectionStrategy is required")
|
|
||||||
}
|
|
||||||
|
|
||||||
seenDashboardIDs := map[string]struct{}{}
|
|
||||||
for _, d := range def.Assets.Dashboards {
|
|
||||||
if _, seen := seenDashboardIDs[d.ID]; seen {
|
|
||||||
return errors.NewInternalf(errors.CodeInternal, "duplicate dashboard id %q", d.ID)
|
|
||||||
}
|
|
||||||
seenDashboardIDs[d.ID] = struct{}{}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// hydrateFileURIs walks a JSON-decoded value and replaces any "file://<path>" strings
|
|
||||||
// with the actual file contents (text for .md, base64 data URI for .svg, parsed JSON for .json).
|
|
||||||
func hydrateFileURIs(v any, embeddedFS embed.FS, basedir string) (any, error) {
|
|
||||||
switch val := v.(type) {
|
|
||||||
case map[string]any:
|
|
||||||
result := make(map[string]any, len(val))
|
|
||||||
for k, child := range val {
|
|
||||||
hydrated, err := hydrateFileURIs(child, embeddedFS, basedir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
result[k] = hydrated
|
|
||||||
}
|
|
||||||
return result, nil
|
|
||||||
|
|
||||||
case []any:
|
|
||||||
result := make([]any, len(val))
|
|
||||||
for i, child := range val {
|
|
||||||
hydrated, err := hydrateFileURIs(child, embeddedFS, basedir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
result[i] = hydrated
|
|
||||||
}
|
|
||||||
return result, nil
|
|
||||||
|
|
||||||
case string:
|
|
||||||
if !strings.HasPrefix(val, "file://") {
|
|
||||||
return val, nil
|
|
||||||
}
|
|
||||||
return readEmbeddedFile(embeddedFS, path.Join(basedir, val[len("file://"):]))
|
|
||||||
}
|
|
||||||
return v, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func readEmbeddedFile(embeddedFS embed.FS, filePath string) (any, error) {
|
|
||||||
contents, err := embeddedFS.ReadFile(filePath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't read embedded file %s", filePath)
|
|
||||||
}
|
|
||||||
switch {
|
|
||||||
case strings.HasSuffix(filePath, ".md"):
|
|
||||||
return string(contents), nil
|
|
||||||
case strings.HasSuffix(filePath, ".svg"):
|
|
||||||
return fmt.Sprintf("data:image/svg+xml;base64,%s", base64.StdEncoding.EncodeToString(contents)), nil
|
|
||||||
case strings.HasSuffix(filePath, ".json"):
|
|
||||||
var parsed any
|
|
||||||
if err := json.Unmarshal(contents, &parsed); err != nil {
|
|
||||||
return nil, errors.WrapInternalf(err, errors.CodeInternal, "couldn't parse JSON file %s", filePath)
|
|
||||||
}
|
|
||||||
return parsed, nil
|
|
||||||
default:
|
|
||||||
return nil, errors.NewInternalf(errors.CodeInternal, "unsupported file type for embedded reference: %s", filePath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 85 85" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round"><use xlink:href="#A" x="2.5" y="2.5"/><symbol id="A" overflow="visible"><g stroke="none"><path d="M0 41.579C0 20.293 17.84 3.157 40 3.157s40 17.136 40 38.422S62.16 80 40 80 0 62.864 0 41.579z" fill="#9d5025"/><path d="M0 38.422C0 17.136 17.84 0 40 0s40 17.136 40 38.422-17.84 38.422-40 38.422S0 59.707 0 38.422z" fill="#f58536"/><path d="M51.672 7.387v13.952H28.327V7.387zm18.061 40.378v11.364h-11.83V47.765zm-14.958 0v11.364h-11.83V47.765zm-18.206 0v11.364h-11.83V47.765zm-14.959 0v11.364H9.78V47.765z"/><path d="M14.63 37.929h2.13v11.149h-2.13z"/><path d="M14.63 37.929h17.088v2.045H14.63z"/><path d="M29.589 37.929h2.13v11.149H29.59zm18.206 0h2.13v11.149h-2.13z"/><path d="M47.795 37.929h17.088v2.045H47.795z"/><path d="M62.754 37.929h2.13v11.149h-2.129zm-40.631-7.954h2.13v8.977h-2.13zM38.935 19.28h2.13v10.859h-2.129z"/><path d="M22.123 29.116h35.32v2.045h-35.32z"/><path d="M55.314 29.975h2.13v8.977h-2.129z"/></g></symbol></svg>
|
|
||||||
|
Before Width: | Height: | Size: 1.1 KiB |
@@ -1,468 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "alb",
|
|
||||||
"title": "ALB",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": false
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ActiveConnectionCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ActiveConnectionCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ActiveConnectionCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ActiveConnectionCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_AnomalousHostCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_AnomalousHostCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_AnomalousHostCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_AnomalousHostCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ConsumedLCUs_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ConsumedLCUs_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ConsumedLCUs_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ConsumedLCUs_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_2XX_Count_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_2XX_Count_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_2XX_Count_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_2XX_Count_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_4XX_Count_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_4XX_Count_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_4XX_Count_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HTTPCode_Target_4XX_Count_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyHostCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyHostCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyHostCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyHostCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateDNS_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateDNS_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateDNS_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateDNS_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateRouting_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateRouting_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateRouting_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_HealthyStateRouting_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_MitigatedHostCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_MitigatedHostCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_MitigatedHostCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_MitigatedHostCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_NewConnectionCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_NewConnectionCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_NewConnectionCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_NewConnectionCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_PeakLCUs_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_PeakLCUs_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_PeakLCUs_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_PeakLCUs_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ProcessedBytes_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ProcessedBytes_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ProcessedBytes_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_ProcessedBytes_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCountPerTarget_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCountPerTarget_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCountPerTarget_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCountPerTarget_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_RequestCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_TargetResponseTime_count",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_TargetResponseTime_max",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_TargetResponseTime_min",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_TargetResponseTime_sum",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnHealthyHostCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnHealthyHostCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnHealthyHostCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnHealthyHostCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateDNS_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateDNS_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateDNS_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateDNS_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateRouting_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateRouting_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateRouting_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApplicationELB_UnhealthyStateRouting_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/ApplicationELB"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "ALB Overview",
|
|
||||||
"description": "Overview of Application Load Balancer",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor Application Load Balancers with SigNoz
|
|
||||||
|
|
||||||
Collect key ALB metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#4D27A8" offset="0%"></stop>
|
|
||||||
<stop stop-color="#A166FF" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g fill="url(#linearGradient-1)">
|
|
||||||
<rect id="Rectangle" x="0" y="0" width="24" height="24"></rect>
|
|
||||||
</g>
|
|
||||||
<path d="M6,6.76751613 L8,5.43446738 L8,18.5659476 L6,17.2328988 L6,6.76751613 Z M5,6.49950633 L5,17.4999086 C5,17.6669147 5.084,17.8239204 5.223,17.9159238 L8.223,19.9159969 C8.307,19.971999 8.403,20 8.5,20 C8.581,20 8.662,19.9809993 8.736,19.9409978 C8.898,19.8539947 9,19.6849885 9,19.4999817 L9,16.9998903 L10,16.9998903 L10,15.9998537 L9,15.9998537 L9,7.99956118 L10,7.99956118 L10,6.99952461 L9,6.99952461 L9,4.49943319 C9,4.31542646 8.898,4.14542025 8.736,4.0594171 C8.574,3.97241392 8.377,3.98141425 8.223,4.08341798 L5.223,6.08349112 C5.084,6.17649452 5,6.33250022 5,6.49950633 L5,6.49950633 Z M19,17.2328988 L17,18.5659476 L17,5.43446738 L19,6.76751613 L19,17.2328988 Z M19.777,6.08349112 L16.777,4.08341798 C16.623,3.98141425 16.426,3.97241392 16.264,4.0594171 C16.102,4.14542025 16,4.31542646 16,4.49943319 L16,6.99952461 L15,6.99952461 L15,7.99956118 L16,7.99956118 L16,15.9998537 L15,15.9998537 L15,16.9998903 L16,16.9998903 L16,19.4999817 C16,19.6849885 16.102,19.8539947 16.264,19.9409978 C16.338,19.9809993 16.419,20 16.5,20 C16.597,20 16.693,19.971999 16.777,19.9159969 L19.777,17.9159238 C19.916,17.8239204 20,17.6669147 20,17.4999086 L20,6.49950633 C20,6.33250022 19.916,6.17649452 19.777,6.08349112 L19.777,6.08349112 Z M13,7.99956118 L14,7.99956118 L14,6.99952461 L13,6.99952461 L13,7.99956118 Z M11,7.99956118 L12,7.99956118 L12,6.99952461 L11,6.99952461 L11,7.99956118 Z M13,16.9998903 L14,16.9998903 L14,15.9998537 L13,15.9998537 L13,16.9998903 Z M11,16.9998903 L12,16.9998903 L12,15.9998537 L11,15.9998537 L11,16.9998903 Z M13.18,14.884813 L10.18,12.3847215 C10.065,12.288718 10,12.1487129 10,11.9997075 C10,11.851702 10.065,11.7106969 10.18,11.6156934 L13.18,9.11560199 L13.82,9.88463011 L11.281,11.9997075 L13.82,14.1157848 L13.18,14.884813 Z" id="Amazon-API-Gateway_Icon_16_Squid" fill="#FFFFFF"></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.4 KiB |
@@ -1,200 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "api-gateway",
|
|
||||||
"title": "API Gateway",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": true
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_4XXError_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_4XXError_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_4XXError_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_4XXError_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_5XXError_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_5XXError_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_5XXError_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_5XXError_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheHitCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheHitCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheHitCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheHitCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheMissCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheMissCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheMissCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_CacheMissCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Count_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Count_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Count_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Count_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_IntegrationLatency_count",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_IntegrationLatency_max",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_IntegrationLatency_min",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_IntegrationLatency_sum",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Latency_count",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Latency_max",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Latency_min",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ApiGateway_Latency_sum",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/ApiGateway"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"logs": {
|
|
||||||
"cloudwatchLogsSubscriptions": [
|
|
||||||
{
|
|
||||||
"logGroupNamePrefix": "API-Gateway",
|
|
||||||
"filterPattern": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "API Gateway Overview",
|
|
||||||
"description": "Overview of API Gateway",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor API Gateway with SigNoz
|
|
||||||
|
|
||||||
Collect key API Gateway metrics and view them with an out of the box dashboard.
|
|
||||||
|
Before Width: | Height: | Size: 6.2 KiB |
@@ -1,395 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "dynamodb",
|
|
||||||
"title": "DynamoDB",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": false
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxReads_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxReads_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxReads_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxReads_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelReads_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelReads_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelReads_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelReads_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelWrites_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelWrites_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelWrites_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxTableLevelWrites_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxWrites_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxWrites_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxWrites_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountMaxWrites_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedReadCapacityUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedReadCapacityUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedReadCapacityUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedReadCapacityUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedWriteCapacityUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedWriteCapacityUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedWriteCapacityUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_AccountProvisionedWriteCapacityUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedReadCapacityUnits_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedReadCapacityUnits_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedReadCapacityUnits_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedReadCapacityUnits_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedWriteCapacityUnits_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedWriteCapacityUnits_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedWriteCapacityUnits_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ConsumedWriteCapacityUnits_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableReadCapacityUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableReadCapacityUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableReadCapacityUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableReadCapacityUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableWriteCapacityUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableWriteCapacityUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableWriteCapacityUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_MaxProvisionedTableWriteCapacityUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ReturnedItemCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ReturnedItemCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ReturnedItemCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ReturnedItemCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_SuccessfulRequestLatency_count",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_SuccessfulRequestLatency_max",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_SuccessfulRequestLatency_min",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_SuccessfulRequestLatency_sum",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ThrottledRequests_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ThrottledRequests_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ThrottledRequests_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_ThrottledRequests_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_UserErrors_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_UserErrors_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_UserErrors_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_UserErrors_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_WriteThrottleEvents_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_WriteThrottleEvents_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_WriteThrottleEvents_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_DynamoDB_WriteThrottleEvents_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/DynamoDB"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "DynamoDB Overview",
|
|
||||||
"description": "Overview of DynamoDB",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor DynamoDB with SigNoz
|
|
||||||
|
|
||||||
Collect DynamoDB Key Metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<svg width="800px" height="800px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="none">
|
|
||||||
<path fill="#9D5025" d="M1.702 2.98L1 3.312v9.376l.702.332 2.842-4.777L1.702 2.98z" />
|
|
||||||
<path fill="#F58536" d="M3.339 12.657l-1.637.363V2.98l1.637.353v9.324z" />
|
|
||||||
<path fill="#9D5025" d="M2.476 2.612l.863-.406 4.096 6.216-4.096 5.372-.863-.406V2.612z" />
|
|
||||||
<path fill="#F58536" d="M5.38 13.248l-2.041.546V2.206l2.04.548v10.494z" />
|
|
||||||
<path fill="#9D5025" d="M4.3 1.75l1.08-.512 6.043 7.864-6.043 5.66-1.08-.511V1.749z" />
|
|
||||||
<path fill="#F58536" d="M7.998 13.856l-2.618.906V1.238l2.618.908v11.71z" />
|
|
||||||
<path fill="#9D5025" d="M6.602.66L7.998 0l6.538 8.453L7.998 16l-1.396-.66V.66z" />
|
|
||||||
<path fill="#F58536" d="M15 12.686L7.998 16V0L15 3.314v9.372z" />
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 805 B |
@@ -1,519 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "ec2",
|
|
||||||
"title": "EC2",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": false
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditBalance_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditBalance_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditBalance_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditBalance_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditUsage_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditUsage_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditUsage_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUCreditUsage_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditBalance_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditBalance_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditBalance_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditBalance_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditsCharged_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditsCharged_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditsCharged_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUSurplusCreditsCharged_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_CPUUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSByteBalance__count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSByteBalance__max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSByteBalance__min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSByteBalance__sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSIOBalance__count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSIOBalance__max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSIOBalance__min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSIOBalance__sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadBytes_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadBytes_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadBytes_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadBytes_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadOps_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadOps_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadOps_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSReadOps_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteBytes_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteBytes_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteBytes_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteBytes_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteOps_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteOps_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteOps_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_EBSWriteOps_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_MetadataNoToken_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_MetadataNoToken_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_MetadataNoToken_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_MetadataNoToken_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkIn_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkIn_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkIn_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkIn_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkOut_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkOut_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkOut_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkOut_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsIn_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsIn_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsIn_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsIn_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsOut_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsOut_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsOut_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_NetworkPacketsOut_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_AttachedEBS_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_AttachedEBS_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_AttachedEBS_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_AttachedEBS_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_Instance_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_Instance_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_Instance_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_Instance_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_System_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_System_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_System_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_System_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_EC2_StatusCheckFailed_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"logs": []
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/EC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Namespace": "CWAgent"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "EC2 Overview",
|
|
||||||
"description": "Overview of EC2",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor EC2 with SigNoz
|
|
||||||
|
|
||||||
Collect key EC2 metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1,851 +0,0 @@
|
|||||||
{
|
|
||||||
"description": "View key AWS ECS metrics with an out of the box dashboard.\n",
|
|
||||||
"image":"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%2280px%22%20height%3D%2280px%22%20viewBox%3D%220%200%2080%2080%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3C!--%20Generator%3A%20Sketch%2064%20(93537)%20-%20https%3A%2F%2Fsketch.com%20--%3E%3Ctitle%3EIcon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20x1%3D%220%25%22%20y1%3D%22100%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%20id%3D%22linearGradient-1%22%3E%3Cstop%20stop-color%3D%22%23C8511B%22%20offset%3D%220%25%22%3E%3C%2Fstop%3E%3Cstop%20stop-color%3D%22%23FF9900%22%20offset%3D%22100%25%22%3E%3C%2Fstop%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22Icon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Cg%20id%3D%22Icon-Architecture-BG%2F64%2FContainers%22%20fill%3D%22url(%23linearGradient-1)%22%3E%3Crect%20id%3D%22Rectangle%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2280%22%20height%3D%2280%22%3E%3C%2Frect%3E%3C%2Fg%3E%3Cpath%20d%3D%22M64%2C48.2340095%20L56%2C43.4330117%20L56%2C32.0000169%20C56%2C31.6440171%2055.812%2C31.3150172%2055.504%2C31.1360173%20L44%2C24.4260204%20L44%2C14.7520248%20L64%2C26.5710194%20L64%2C48.2340095%20Z%20M65.509%2C25.13902%20L43.509%2C12.139026%20C43.199%2C11.9560261%2042.818%2C11.9540261%2042.504%2C12.131026%20C42.193%2C12.3090259%2042%2C12.6410257%2042%2C13.0000256%20L42%2C25.0000201%20C42%2C25.3550199%2042.189%2C25.6840198%2042.496%2C25.8640197%20L54%2C32.5740166%20L54%2C44.0000114%20C54%2C44.3510113%2054.185%2C44.6770111%2054.486%2C44.857011%20L64.486%2C50.8570083%20C64.644%2C50.9520082%2064.822%2C51%2065%2C51%20C65.17%2C51%2065.34%2C50.9570082%2065.493%2C50.8700083%20C65.807%2C50.6930084%2066%2C50.3600085%2066%2C50%20L66%2C26.0000196%20C66%2C25.6460198%2065.814%2C25.31902%2065.509%2C25.13902%20L65.509%2C25.13902%20Z%20M40.445%2C66.863001%20L17%2C54.3990067%20L17%2C26.5710194%20L37%2C14.7520248%20L37%2C24.4510204%20L26.463%2C31.1560173%20C26.175%2C31.3400172%2026%2C31.6580171%2026%2C32.0000169%20L26%2C49.0000091%20C26%2C49.373009%2026.208%2C49.7150088%2026.538%2C49.8870087%20L39.991%2C56.8870055%20C40.28%2C57.0370055%2040.624%2C57.0380055%2040.912%2C56.8880055%20L53.964%2C50.1440086%20L61.996%2C54.9640064%20L40.445%2C66.863001%20Z%20M64.515%2C54.1420068%20L54.515%2C48.1420095%20C54.217%2C47.9640096%2053.849%2C47.9520096%2053.541%2C48.1120095%20L40.455%2C54.8730065%20L28%2C48.3930094%20L28%2C32.5490167%20L38.537%2C25.8440197%20C38.825%2C25.6600198%2039%2C25.3420199%2039%2C25.0000201%20L39%2C13.0000256%20C39%2C12.6410257%2038.808%2C12.3090259%2038.496%2C12.131026%20C38.184%2C11.9540261%2037.802%2C11.9560261%2037.491%2C12.139026%20L15.491%2C25.13902%20C15.187%2C25.31902%2015%2C25.6460198%2015%2C26.0000196%20L15%2C55%20C15%2C55.3690062%2015.204%2C55.7090061%2015.53%2C55.883006%20L39.984%2C68.8830001%20C40.131%2C68.961%2040.292%2C69%2040.453%2C69%20C40.62%2C69%2040.786%2C68.958%2040.937%2C68.8750001%20L64.484%2C55.875006%20C64.797%2C55.7020061%2064.993%2C55.3750062%2065.0001416%2C55.0180064%20C65.006%2C54.6600066%2064.821%2C54.3260067%2064.515%2C54.1420068%20L64.515%2C54.1420068%20Z%22%20id%3D%22Amazon-Elastic-Container-Service_Icon_64_Squid%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E",
|
|
||||||
"layout": [
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "f78becf8-0328-48b4-84b6-ff4dac325940",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "2b4eac06-b426-4f78-b874-2e1734c4104b",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "5bea2bc0-13a2-4937-bccb-60ffe8a43ad5",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "6fac67b0-50ec-4b43-ac4b-320a303d0369",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 6
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"panelMap": {},
|
|
||||||
"tags": [],
|
|
||||||
"title": "AWS ECS Overview",
|
|
||||||
"uploadedGrafana": false,
|
|
||||||
"variables": {
|
|
||||||
"51f4fa2b-89c7-47c2-9795-f32cffaab985": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "AWS Account ID",
|
|
||||||
"id": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"key": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"modificationUUID": "7b814d17-8fff-4ed6-a4ea-90e3b1a97584",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Account",
|
|
||||||
"order": 0,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud_account_id') AS cloud_account_id\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_ECS_MemoryUtilization_max' GROUP BY cloud_account_id",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "DISABLED",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "Account Region",
|
|
||||||
"id": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"key": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"modificationUUID": "3b5f499b-22a3-4c8a-847c-8d3811c9e6b2",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Region",
|
|
||||||
"order": 1,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud_region') AS region\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_ECS_MemoryUtilization_max' AND JSONExtractString(labels, 'cloud_account_id') IN {{.Account}} GROUP BY region",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"bfbdbcbe-a168-4d81-b108-36339e249116": {
|
|
||||||
"allSelected": true,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "ECS Cluster Name",
|
|
||||||
"id": "bfbdbcbe-a168-4d81-b108-36339e249116",
|
|
||||||
"key": "bfbdbcbe-a168-4d81-b108-36339e249116",
|
|
||||||
"modificationUUID": "9fb0d63c-ac6c-497d-82b3-17d95944e245",
|
|
||||||
"multiSelect": true,
|
|
||||||
"name": "Cluster",
|
|
||||||
"order": 2,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'ClusterName') AS cluster\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_ECS_MemoryUtilization_max' AND JSONExtractString(labels, 'cloud_account_id') IN {{.Account}} AND JSONExtractString(labels, 'cloud_region') IN {{.Region}}\nGROUP BY cluster",
|
|
||||||
"showALLOption": true,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "v4",
|
|
||||||
"widgets": [
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "f78becf8-0328-48b4-84b6-ff4dac325940",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_MemoryUtilization_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_MemoryUtilization_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "26ac617d",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "57172ed9",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "49b9f85e",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "56068fdd-d523-4117-92fa-87c6518ad07c",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Maximum Memory Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "2b4eac06-b426-4f78-b874-2e1734c4104b",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_MemoryUtilization_min--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_MemoryUtilization_min",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "min",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "cd4b8848",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "aa5115c6",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "f60677b6",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "min",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "min"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "fb19342e-cbde-40d8-b12f-ad108698356b",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Minimum Memory Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "5bea2bc0-13a2-4937-bccb-60ffe8a43ad5",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_CPUUtilization_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_CPUUtilization_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "2c13c8ee",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "f489f6a8",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "94012320",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "273e0a76-c780-4b9a-9b03-2649d4227173",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Maximum CPU Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "6fac67b0-50ec-4b43-ac4b-320a303d0369",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_CPUUtilization_min--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_CPUUtilization_min",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "min",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "758ba906",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "4ffe6bf7",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "53d98059",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "min",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "min"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "c89482b3-5a98-4e2c-be0d-ef036d7dac05",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Minimum CPU Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,851 +0,0 @@
|
|||||||
{
|
|
||||||
"description": "View key AWS ECS metrics with an out of the box dashboard.\n",
|
|
||||||
"image":"data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%3Csvg%20width%3D%2280px%22%20height%3D%2280px%22%20viewBox%3D%220%200%2080%2080%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%3E%3C!--%20Generator%3A%20Sketch%2064%20(93537)%20-%20https%3A%2F%2Fsketch.com%20--%3E%3Ctitle%3EIcon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%3C%2Ftitle%3E%3Cdesc%3ECreated%20with%20Sketch.%3C%2Fdesc%3E%3Cdefs%3E%3ClinearGradient%20x1%3D%220%25%22%20y1%3D%22100%25%22%20x2%3D%22100%25%22%20y2%3D%220%25%22%20id%3D%22linearGradient-1%22%3E%3Cstop%20stop-color%3D%22%23C8511B%22%20offset%3D%220%25%22%3E%3C%2Fstop%3E%3Cstop%20stop-color%3D%22%23FF9900%22%20offset%3D%22100%25%22%3E%3C%2Fstop%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Cg%20id%3D%22Icon-Architecture%2F64%2FArch_Amazon-Elastic-Container-Service_64%22%20stroke%3D%22none%22%20stroke-width%3D%221%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Cg%20id%3D%22Icon-Architecture-BG%2F64%2FContainers%22%20fill%3D%22url(%23linearGradient-1)%22%3E%3Crect%20id%3D%22Rectangle%22%20x%3D%220%22%20y%3D%220%22%20width%3D%2280%22%20height%3D%2280%22%3E%3C%2Frect%3E%3C%2Fg%3E%3Cpath%20d%3D%22M64%2C48.2340095%20L56%2C43.4330117%20L56%2C32.0000169%20C56%2C31.6440171%2055.812%2C31.3150172%2055.504%2C31.1360173%20L44%2C24.4260204%20L44%2C14.7520248%20L64%2C26.5710194%20L64%2C48.2340095%20Z%20M65.509%2C25.13902%20L43.509%2C12.139026%20C43.199%2C11.9560261%2042.818%2C11.9540261%2042.504%2C12.131026%20C42.193%2C12.3090259%2042%2C12.6410257%2042%2C13.0000256%20L42%2C25.0000201%20C42%2C25.3550199%2042.189%2C25.6840198%2042.496%2C25.8640197%20L54%2C32.5740166%20L54%2C44.0000114%20C54%2C44.3510113%2054.185%2C44.6770111%2054.486%2C44.857011%20L64.486%2C50.8570083%20C64.644%2C50.9520082%2064.822%2C51%2065%2C51%20C65.17%2C51%2065.34%2C50.9570082%2065.493%2C50.8700083%20C65.807%2C50.6930084%2066%2C50.3600085%2066%2C50%20L66%2C26.0000196%20C66%2C25.6460198%2065.814%2C25.31902%2065.509%2C25.13902%20L65.509%2C25.13902%20Z%20M40.445%2C66.863001%20L17%2C54.3990067%20L17%2C26.5710194%20L37%2C14.7520248%20L37%2C24.4510204%20L26.463%2C31.1560173%20C26.175%2C31.3400172%2026%2C31.6580171%2026%2C32.0000169%20L26%2C49.0000091%20C26%2C49.373009%2026.208%2C49.7150088%2026.538%2C49.8870087%20L39.991%2C56.8870055%20C40.28%2C57.0370055%2040.624%2C57.0380055%2040.912%2C56.8880055%20L53.964%2C50.1440086%20L61.996%2C54.9640064%20L40.445%2C66.863001%20Z%20M64.515%2C54.1420068%20L54.515%2C48.1420095%20C54.217%2C47.9640096%2053.849%2C47.9520096%2053.541%2C48.1120095%20L40.455%2C54.8730065%20L28%2C48.3930094%20L28%2C32.5490167%20L38.537%2C25.8440197%20C38.825%2C25.6600198%2039%2C25.3420199%2039%2C25.0000201%20L39%2C13.0000256%20C39%2C12.6410257%2038.808%2C12.3090259%2038.496%2C12.131026%20C38.184%2C11.9540261%2037.802%2C11.9560261%2037.491%2C12.139026%20L15.491%2C25.13902%20C15.187%2C25.31902%2015%2C25.6460198%2015%2C26.0000196%20L15%2C55%20C15%2C55.3690062%2015.204%2C55.7090061%2015.53%2C55.883006%20L39.984%2C68.8830001%20C40.131%2C68.961%2040.292%2C69%2040.453%2C69%20C40.62%2C69%2040.786%2C68.958%2040.937%2C68.8750001%20L64.484%2C55.875006%20C64.797%2C55.7020061%2064.993%2C55.3750062%2065.0001416%2C55.0180064%20C65.006%2C54.6600066%2064.821%2C54.3260067%2064.515%2C54.1420068%20L64.515%2C54.1420068%20Z%22%20id%3D%22Amazon-Elastic-Container-Service_Icon_64_Squid%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E",
|
|
||||||
"layout": [
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "f78becf8-0328-48b4-84b6-ff4dac325940",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "2b4eac06-b426-4f78-b874-2e1734c4104b",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "5bea2bc0-13a2-4937-bccb-60ffe8a43ad5",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "6fac67b0-50ec-4b43-ac4b-320a303d0369",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 6
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"panelMap": {},
|
|
||||||
"tags": [],
|
|
||||||
"title": "AWS ECS Overview",
|
|
||||||
"uploadedGrafana": false,
|
|
||||||
"variables": {
|
|
||||||
"51f4fa2b-89c7-47c2-9795-f32cffaab985": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "AWS Account ID",
|
|
||||||
"id": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"key": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"modificationUUID": "7b814d17-8fff-4ed6-a4ea-90e3b1a97584",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Account",
|
|
||||||
"order": 0,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud.account.id') AS `cloud.account.id`\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_ECS_MemoryUtilization_max' GROUP BY `cloud.account.id`",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "DISABLED",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "Account Region",
|
|
||||||
"id": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"key": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"modificationUUID": "3b5f499b-22a3-4c8a-847c-8d3811c9e6b2",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Region",
|
|
||||||
"order": 1,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud.region') AS region\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_ECS_MemoryUtilization_max' AND JSONExtractString(labels, 'cloud.account.id') IN {{.Account}} GROUP BY region",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"bfbdbcbe-a168-4d81-b108-36339e249116": {
|
|
||||||
"allSelected": true,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "ECS Cluster Name",
|
|
||||||
"id": "bfbdbcbe-a168-4d81-b108-36339e249116",
|
|
||||||
"key": "bfbdbcbe-a168-4d81-b108-36339e249116",
|
|
||||||
"modificationUUID": "9fb0d63c-ac6c-497d-82b3-17d95944e245",
|
|
||||||
"multiSelect": true,
|
|
||||||
"name": "Cluster",
|
|
||||||
"order": 2,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'ClusterName') AS cluster\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_ECS_MemoryUtilization_max' AND JSONExtractString(labels, 'cloud.account.id') IN {{.Account}} AND JSONExtractString(labels, 'cloud.region') IN {{.Region}}\nGROUP BY cluster",
|
|
||||||
"showALLOption": true,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "v4",
|
|
||||||
"widgets": [
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "f78becf8-0328-48b4-84b6-ff4dac325940",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_MemoryUtilization_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_MemoryUtilization_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "26ac617d",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "57172ed9",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "49b9f85e",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "56068fdd-d523-4117-92fa-87c6518ad07c",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Maximum Memory Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "2b4eac06-b426-4f78-b874-2e1734c4104b",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_MemoryUtilization_min--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_MemoryUtilization_min",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "min",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "cd4b8848",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "aa5115c6",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "f60677b6",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "min",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "min"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "fb19342e-cbde-40d8-b12f-ad108698356b",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Minimum Memory Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "5bea2bc0-13a2-4937-bccb-60ffe8a43ad5",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_CPUUtilization_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_CPUUtilization_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "2c13c8ee",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "f489f6a8",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "94012320",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "273e0a76-c780-4b9a-9b03-2649d4227173",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Maximum CPU Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "6fac67b0-50ec-4b43-ac4b-320a303d0369",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_ECS_CPUUtilization_min--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_ECS_CPUUtilization_min",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "min",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "758ba906",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "4ffe6bf7",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "53d98059",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Cluster"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ServiceName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ServiceName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "ClusterName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "ClusterName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{ServiceName}} ({{ClusterName}})",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "min",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "min"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "c89482b3-5a98-4e2c-be0d-ef036d7dac05",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Minimum CPU Utilization",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<!-- Generator: Sketch 64 (93537) - https://sketch.com -->
|
|
||||||
<title>Icon-Architecture/64/Arch_Amazon-Elastic-Container-Service_64</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#C8511B" offset="0%"></stop>
|
|
||||||
<stop stop-color="#FF9900" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Icon-Architecture/64/Arch_Amazon-Elastic-Container-Service_64" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g id="Icon-Architecture-BG/64/Containers" fill="url(#linearGradient-1)">
|
|
||||||
<rect id="Rectangle" x="0" y="0" width="80" height="80"></rect>
|
|
||||||
</g>
|
|
||||||
<path d="M64,48.2340095 L56,43.4330117 L56,32.0000169 C56,31.6440171 55.812,31.3150172 55.504,31.1360173 L44,24.4260204 L44,14.7520248 L64,26.5710194 L64,48.2340095 Z M65.509,25.13902 L43.509,12.139026 C43.199,11.9560261 42.818,11.9540261 42.504,12.131026 C42.193,12.3090259 42,12.6410257 42,13.0000256 L42,25.0000201 C42,25.3550199 42.189,25.6840198 42.496,25.8640197 L54,32.5740166 L54,44.0000114 C54,44.3510113 54.185,44.6770111 54.486,44.857011 L64.486,50.8570083 C64.644,50.9520082 64.822,51 65,51 C65.17,51 65.34,50.9570082 65.493,50.8700083 C65.807,50.6930084 66,50.3600085 66,50 L66,26.0000196 C66,25.6460198 65.814,25.31902 65.509,25.13902 L65.509,25.13902 Z M40.445,66.863001 L17,54.3990067 L17,26.5710194 L37,14.7520248 L37,24.4510204 L26.463,31.1560173 C26.175,31.3400172 26,31.6580171 26,32.0000169 L26,49.0000091 C26,49.373009 26.208,49.7150088 26.538,49.8870087 L39.991,56.8870055 C40.28,57.0370055 40.624,57.0380055 40.912,56.8880055 L53.964,50.1440086 L61.996,54.9640064 L40.445,66.863001 Z M64.515,54.1420068 L54.515,48.1420095 C54.217,47.9640096 53.849,47.9520096 53.541,48.1120095 L40.455,54.8730065 L28,48.3930094 L28,32.5490167 L38.537,25.8440197 C38.825,25.6600198 39,25.3420199 39,25.0000201 L39,13.0000256 C39,12.6410257 38.808,12.3090259 38.496,12.131026 C38.184,11.9540261 37.802,11.9560261 37.491,12.139026 L15.491,25.13902 C15.187,25.31902 15,25.6460198 15,26.0000196 L15,55 C15,55.3690062 15.204,55.7090061 15.53,55.883006 L39.984,68.8830001 C40.131,68.961 40.292,69 40.453,69 C40.62,69 40.786,68.958 40.937,68.8750001 L64.484,55.875006 C64.797,55.7020061 64.993,55.3750062 65.0001416,55.0180064 C65.006,54.6600066 64.821,54.3260067 64.515,54.1420068 L64.515,54.1420068 Z" id="Amazon-Elastic-Container-Service_Icon_64_Squid" fill="#FFFFFF"></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,871 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "ecs",
|
|
||||||
"title": "ECS",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": true
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_CPUUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_CPUUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_CPUUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_CPUUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuReserved_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuReserved_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuReserved_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuReserved_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilized_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilized_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilized_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerCpuUtilized_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerInstanceCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerInstanceCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerInstanceCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerInstanceCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryReserved_count",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryReserved_max",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryReserved_min",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryReserved_sum",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilized_count",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilized_max",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilized_min",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerMemoryUtilized_sum",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkRxBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkRxBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkRxBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkRxBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkTxBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkTxBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkTxBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerNetworkTxBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageReadBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageReadBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageReadBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageReadBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageWriteBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageWriteBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageWriteBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ContainerStorageWriteBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuReserved_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuReserved_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuReserved_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuReserved_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuUtilized_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuUtilized_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuUtilized_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_CpuUtilized_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DeploymentCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DeploymentCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DeploymentCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DeploymentCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DesiredTaskCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DesiredTaskCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DesiredTaskCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_DesiredTaskCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageReserved_count",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageReserved_max",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageReserved_min",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageReserved_sum",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageUtilized_count",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageUtilized_max",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageUtilized_min",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_EphemeralStorageUtilized_sum",
|
|
||||||
"unit": "Gigabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryReserved_count",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryReserved_max",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryReserved_min",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryReserved_sum",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryUtilized_count",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryUtilized_max",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryUtilized_min",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_MemoryUtilized_sum",
|
|
||||||
"unit": "Megabytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkRxBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkRxBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkRxBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkRxBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkTxBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkTxBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkTxBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_NetworkTxBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_PendingTaskCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_PendingTaskCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_PendingTaskCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_PendingTaskCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_RunningTaskCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_RunningTaskCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_RunningTaskCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_RunningTaskCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ServiceCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ServiceCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ServiceCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_ServiceCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageReadBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageReadBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageReadBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageReadBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageWriteBytes_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageWriteBytes_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageWriteBytes_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_StorageWriteBytes_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCpuUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCpuUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCpuUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskCpuUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskEphemeralStorageUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskEphemeralStorageUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskEphemeralStorageUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskEphemeralStorageUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskMemoryUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskMemoryUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskMemoryUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskMemoryUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskSetCount_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskSetCount_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskSetCount_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_ContainerInsights_TaskSetCount_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_MemoryUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_MemoryUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_MemoryUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_ECS_MemoryUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/ECS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Namespace": "ECS/ContainerInsights"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"logs": {
|
|
||||||
"cloudwatchLogsSubscriptions": [
|
|
||||||
{
|
|
||||||
"logGroupNamePrefix": "/ecs",
|
|
||||||
"filterPattern": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"logGroupNamePrefix": "/aws/ecs/containerinsights",
|
|
||||||
"filterPattern": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "AWS ECS Overview",
|
|
||||||
"description": "Overview of ECS",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "containerinsights",
|
|
||||||
"title": "ECS ContainerInsights",
|
|
||||||
"description": "Overview of ECS ContainerInsights",
|
|
||||||
"definition": "file://assets/dashboards/containerinsights.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "enhanced_containerinsights",
|
|
||||||
"title": "ECS Enhanced ContainerInsights",
|
|
||||||
"description": "Enhanced ECS ContainerInsights",
|
|
||||||
"definition": "file://assets/dashboards/enhanced_containerinsights.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor Elastic Container Service with SigNoz
|
|
||||||
|
|
||||||
Collect ECS Logs and key Metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<title>Icon-Architecture/64/Arch_Amazon-EKS-Cloud_64</title>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#C8511B" offset="0%"></stop>
|
|
||||||
<stop stop-color="#FF9900" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Icon-Architecture/64/Arch_Amazon-EKS-Cloud_64" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g id="Rectangle" fill="url(#linearGradient-1)">
|
|
||||||
<rect x="0" y="0" width="80" height="80"></rect>
|
|
||||||
</g>
|
|
||||||
<g id="Icon-Service/64/Amazon-EKS-Cloud_64" transform="translate(8.000000, 8.000000)" fill="#FFFFFF">
|
|
||||||
<path d="M53.239,53.377026 L31.737,53.355026 C29.133,53.352026 26.906,51.416026 26.667,48.949026 C26.647,48.743026 26.636,48.528026 26.636,48.305026 C26.636,44.929026 28.968,43.798026 30.391,43.422026 C30.849,43.328026 31.189,42.922026 31.189,42.441026 C31.189,42.394026 31.186,42.347026 31.179,42.300026 C31.145,42.004026 31.128,41.702026 31.128,41.396026 C31.128,38.613026 33.046,35.621026 35.494,34.584026 C39.745,32.786026 42.754,35.151026 43.852,36.253026 C44.751,37.154026 45.453,38.309026 45.938,39.684026 C46.062,40.033026 46.368,40.286026 46.734,40.340026 C47.097,40.394026 47.467,40.243026 47.686,39.945026 C48.322,39.085026 49.352,38.708026 50.307,38.988026 C51.477,39.330026 52.253,40.541026 52.393,42.238026 C52.342,42.756026 52.7,43.231026 53.218,43.320026 C54.587,43.556026 57.769,44.517026 57.769,48.356026 C57.769,52.839026 53.626,53.338026 53.239,53.377026 L53.239,53.377026 Z M29.444,57.862026 L6,45.398026 L6,18.570026 L26,6.75202604 L26,16.451026 L15.463,23.156026 C15.175,23.339026 15,23.658026 15,24.000026 L15,40.000026 C15,40.373026 15.208,40.714026 15.538,40.887026 L24.901,45.758026 L25.04,45.835026 C24.784,46.592026 24.636,47.415026 24.636,48.305026 C24.636,48.594026 24.651,48.872026 24.677,49.140026 C25.012,52.621026 28.113,55.351026 31.735,55.355026 L33.982,55.356026 L29.444,57.862026 Z M44.504,23.136026 L33,16.425026 L33,6.75202604 L53,18.570026 L53,38.467026 C52.431,37.803026 51.716,37.316026 50.868,37.068026 C49.616,36.703026 48.308,36.926026 47.245,37.637026 C46.718,36.567026 46.056,35.631026 45.268,34.841026 C45.182,34.755026 45.088,34.689026 45,34.606026 L45,24.000026 C45,23.644026 44.811,23.315026 44.504,23.136026 L44.504,23.136026 Z M55,41.726026 L55,18.000026 C55,17.646026 54.813,17.318026 54.509,17.139026 L32.509,4.13902604 C32.199,3.95602604 31.817,3.95402604 31.504,4.13102604 C31.192,4.30902604 31,4.64102604 31,5.00002604 L31,17.000026 C31,17.355026 31.188,17.684026 31.496,17.863026 L43,24.574026 L43,33.118026 C40.483,31.714026 37.537,31.548026 34.715,32.742026 C33.725,33.161026 32.827,33.828026 32.037,34.629026 L29.011,31.120026 L35.842,23.199026 L33.18,23.199026 L27,30.000026 L27,23.000026 L25,23.000026 L25,40.000026 L27,40.000026 L27,32.000026 L30.682,36.311026 C29.714,37.841026 29.128,39.633026 29.128,41.396026 C29.128,41.505026 29.13,41.614026 29.133,41.723026 C27.785,42.216026 26.712,43.027026 25.946,44.073026 L17,39.393026 L17,24.548026 L27.537,17.843026 C27.825,17.660026 28,17.341026 28,17.000026 L28,5.00002604 C28,4.64102604 27.807,4.30902604 27.496,4.13102604 C27.183,3.95402604 26.802,3.95602604 26.491,4.13902604 L4.491,17.139026 C4.186,17.318026 4,17.646026 4,18.000026 L4,46.000026 C4,46.369026 4.204,46.709026 4.53,46.882026 L28.983,59.882026 C29.131,59.960026 29.292,60.000026 29.453,60.000026 C29.62,60.000026 29.786,59.958026 29.936,59.875026 L38.114,55.360026 L53.319,55.374026 C55.551,55.192026 59.769,53.492026 59.769,48.356026 C59.769,44.678026 57.505,42.603026 55,41.726026 L55,41.726026 Z" id="Fill-1"></path>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.8 KiB |
@@ -1,3 +0,0 @@
|
|||||||
### Monitor EKS with SigNoz
|
|
||||||
|
|
||||||
Collect EKS key Metrics and ContainerInsights Metrics(if enabled in EKS) and view them with an out of the box dashboard.
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<!-- Generator: Sketch 64 (93537) - https://sketch.com -->
|
|
||||||
<title>Icon-Architecture/64/Arch_Amazon-ElastiCache_64</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#2E27AD" offset="0%"></stop>
|
|
||||||
<stop stop-color="#527FFF" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Icon-Architecture/64/Arch_Amazon-ElastiCache_64" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g id="Icon-Architecture-BG/64/Database" fill="url(#linearGradient-1)">
|
|
||||||
<rect id="Rectangle" x="0" y="0" width="80" height="80"></rect>
|
|
||||||
</g>
|
|
||||||
<path d="M51,61.5554864 L51,55.7029342 C48.466,57.3400887 43.904,58.1131616 39.556,58.1131616 C34.816,58.1131616 31.121,57.2860836 29,55.8679498 L29,61.5554864 C29,63.2486461 32.948,64.9998113 39.556,64.9998113 C46.3,64.9998113 51,63.1846401 51,61.5554864 L51,61.5554864 Z M39.556,49.2203227 C34.816,49.2203227 31.121,48.3942447 29,46.976111 L29,52.6866497 C29.031,54.3738088 32.973,56.1129729 39.556,56.1129729 C46.279,56.1129729 50.969,54.3088027 51,52.6826493 L51,46.8100953 C48.466,48.4482498 43.904,49.2203227 39.556,49.2203227 L39.556,49.2203227 Z M51,43.7908105 L51,37.0291726 C48.466,38.666327 43.904,39.4393999 39.556,39.4393999 C34.816,39.4393999 31.121,38.613322 29,37.1951882 L29,43.7948108 C29.031,45.48197 32.973,47.220134 39.556,47.220134 C46.279,47.220134 50.969,45.4159638 51,43.7908105 L51,43.7908105 Z M28.997,33.9928861 C28.997,33.9958864 28.998,33.9988867 28.998,34.001887 L29,34.001887 L29,34.012888 C29.031,35.7000472 32.973,37.4392112 39.556,37.4392112 C46.898,37.4392112 50.969,35.4170205 51,34.0098877 L51,34.001887 L51.002,34.001887 C51.002,33.9988867 51.003,33.9958864 51.003,33.9928861 C51.003,32.5847533 46.927,30.546561 39.556,30.546561 C32.946,30.546561 28.997,32.2987263 28.997,33.9928861 L28.997,33.9928861 Z M53,34.0178885 L53,43.7738088 L53.003,43.7738088 C53.003,43.7828097 53,43.7898104 53,43.7988112 L53,52.6666478 L53.003,52.6666478 C53.003,52.6756486 53,52.6826493 53,52.6916502 L53,61.5554864 C53,65.2968393 46.031,67 39.556,67 C31.929,67 27,64.8627984 27,61.5554864 L27,52.6976507 C27,52.6866497 26.997,52.6776488 26.997,52.6666478 L27,52.6666478 L27,43.8048118 C27,43.7948108 26.997,43.7848099 26.997,43.7738088 L27,43.7738088 L27,34.023889 C27,34.012888 26.997,34.0038872 26.997,33.9928861 C26.997,30.684574 31.927,28.5463723 39.556,28.5463723 C46.032,28.5463723 53.003,30.2505331 53.003,33.9928861 C53.003,34.001887 53,34.0088876 53,34.0178885 L53,34.0178885 Z M67,21.1206718 C67.553,21.1206718 68,20.6726295 68,20.1205774 L68,15.0000943 C68,14.4470422 67.553,14 67,14 L13,14 C12.447,14 12,14.4470422 12,15.0000943 L12,20.1205774 C12,20.6726295 12.447,21.1206718 13,21.1206718 C14.221,21.1206718 15.214,22.1077649 15.214,23.3208793 C15.214,24.5339938 14.221,25.5210869 13,25.5210869 C12.447,25.5210869 12,25.9691292 12,26.5211812 L12,47.0031135 C12,47.5551656 12.447,48.0032078 13,48.0032078 L23,48.0032078 L23,46.0030192 L18,46.0030192 L18,43.0027361 L23,43.0027361 L23,41.0025474 L17,41.0025474 C16.447,41.0025474 16,41.4495896 16,42.0026418 L16,46.0030192 L14,46.0030192 L14,27.4012643 C15.843,26.9522219 17.214,25.2930654 17.214,23.3208793 C17.214,21.3476932 15.843,19.6885367 14,19.2394943 L14,16.0001887 L66,16.0001887 L66,19.2394943 C64.157,19.6885367 62.786,21.3476932 62.786,23.3208793 C62.786,25.2930654 64.157,26.9522219 66,27.4012643 L66,46.0030192 L64,46.0030192 L64,42.0026418 C64,41.4495896 63.553,41.0025474 63,41.0025474 L57,41.0025474 L57,43.0027361 L62,43.0027361 L62,46.0030192 L57,46.0030192 L57,48.0032078 L67,48.0032078 C67.553,48.0032078 68,47.5551656 68,47.0031135 L68,26.5211812 C68,25.9691292 67.553,25.5210869 67,25.5210869 C65.779,25.5210869 64.786,24.5339938 64.786,23.3208793 C64.786,22.1077649 65.779,21.1206718 67,21.1206718 L67,21.1206718 Z M28,28.0013209 L28,20.0005661 C28,19.4475139 27.553,19.0004717 27,19.0004717 L21,19.0004717 C20.447,19.0004717 20,19.4475139 20,20.0005661 L20,37.00217 C20,37.5542221 20.447,38.0022644 21,38.0022644 L24,38.0022644 L24,36.0020757 L22,36.0020757 L22,21.0006604 L26,21.0006604 L26,28.0013209 L28,28.0013209 Z M58,36.0020757 L57,36.0020757 L57,38.0022644 L59,38.0022644 C59.553,38.0022644 60,37.5542221 60,37.00217 L60,20.0005661 C60,19.4475139 59.553,19.0004717 59,19.0004717 L53,19.0004717 C52.447,19.0004717 52,19.4475139 52,20.0005661 L52,28.0013209 L54,28.0013209 L54,21.0006604 L58,21.0006604 L58,36.0020757 Z M50,27.0012265 L50,20.0005661 C50,19.4475139 49.553,19.0004717 49,19.0004717 L42,19.0004717 C41.447,19.0004717 41,19.4475139 41,20.0005661 L41,26.0011322 L43,26.0011322 L43,21.0006604 L48,21.0006604 L48,27.0012265 L50,27.0012265 Z M37,26.0011322 L37,21.0006604 L32,21.0006604 L32,27.0012265 L30,27.0012265 L30,20.0005661 C30,19.4475139 30.447,19.0004717 31,19.0004717 L38,19.0004717 C38.553,19.0004717 39,19.4475139 39,20.0005661 L39,26.0011322 L37,26.0011322 Z" id="Amazon-ElastiCache_Icon_64_Squid" fill="#FFFFFF"></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 5.2 KiB |
@@ -1,3 +0,0 @@
|
|||||||
### Monitor ElastiCache with SigNoz
|
|
||||||
|
|
||||||
Collect ElastiCache key Metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg width="800px" height="800px" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" fill="none"><path fill="#FA7E14" d="M7.983 8.37c-.053.073-.098.133-.141.194L5.775 11.5c-.64.91-1.282 1.82-1.924 2.73a.128.128 0 01-.092.051c-.906-.007-1.813-.017-2.719-.028-.01 0-.02-.003-.04-.006a.455.455 0 01.025-.053 13977.496 13977.496 0 015.446-8.146c.092-.138.188-.273.275-.413a.165.165 0 00.018-.124c-.167-.515-.338-1.03-.508-1.543-.073-.22-.15-.44-.218-.66-.022-.072-.059-.094-.134-.093-.57.002-1.136.001-1.704.001-.108 0-.108 0-.108-.103 0-.674 0-1.347-.002-2.021 0-.075.026-.092.099-.092 1.143.002 2.286.002 3.43 0a.113.113 0 01.076.017.107.107 0 01.045.061 18266.184 18266.184 0 003.92 9.51c.218.53.438 1.059.654 1.59.026.064.053.076.12.056.6-.178 1.2-.352 1.8-.531.075-.023.102-.008.126.064.204.62.412 1.239.62 1.858l.02.073c-.043.015-.083.032-.124.043l-4.085 1.25c-.065.02-.085 0-.106-.054l-1.25-3.048-1.226-2.984-.183-.449c-.01-.026-.023-.048-.043-.087z"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 965 B |
@@ -1,300 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "lambda",
|
|
||||||
"title": "Lambda",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": true
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventAge_count",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventAge_max",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventAge_min",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventAge_sum",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsDropped_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsDropped_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsDropped_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsDropped_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsReceived_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsReceived_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsReceived_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_AsyncEventsReceived_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ClaimedAccountConcurrency_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ClaimedAccountConcurrency_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ClaimedAccountConcurrency_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ClaimedAccountConcurrency_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ConcurrentExecutions_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ConcurrentExecutions_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ConcurrentExecutions_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_ConcurrentExecutions_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Duration_count",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Duration_max",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Duration_min",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Duration_sum",
|
|
||||||
"unit": "Milliseconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Errors_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Errors_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Errors_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Errors_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Invocations_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Invocations_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Invocations_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Invocations_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Throttles_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Throttles_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Throttles_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_Throttles_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_UnreservedConcurrentExecutions_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_UnreservedConcurrentExecutions_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_UnreservedConcurrentExecutions_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_Lambda_UnreservedConcurrentExecutions_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/Lambda"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"logs": {
|
|
||||||
"cloudwatchLogsSubscriptions": [
|
|
||||||
{
|
|
||||||
"logGroupNamePrefix": "/aws/lambda",
|
|
||||||
"filterPattern": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "AWS Lambda Overview",
|
|
||||||
"description": "Overview of AWS Lambda",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor AWS Lambda with SigNoz
|
|
||||||
|
|
||||||
Collect key AWS Lambda metrics and view them with an out of the box dashboard.
|
|
||||||
|
Before Width: | Height: | Size: 6.0 KiB |
@@ -1,3 +0,0 @@
|
|||||||
### Monitor Managed Streaming Kafka with SigNoz
|
|
||||||
|
|
||||||
Collect key MSK metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<title>Icon-Architecture/64/Arch_Amazon-RDS_64</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#2E27AD" offset="0%"></stop>
|
|
||||||
<stop stop-color="#527FFF" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Icon-Architecture/64/Arch_Amazon-RDS_64" stroke="none" stroke-width="1" fill="none"
|
|
||||||
fill-rule="evenodd">
|
|
||||||
<g id="Icon-Architecture-BG/64/Database" fill="url(#linearGradient-1)">
|
|
||||||
<rect id="Rectangle" x="0" y="0" width="80" height="80"></rect>
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
d="M15.414,14 L24.707,23.293 L23.293,24.707 L14,15.414 L14,23 L12,23 L12,13 C12,12.448 12.447,12 13,12 L23,12 L23,14 L15.414,14 Z M68,13 L68,23 L66,23 L66,15.414 L56.707,24.707 L55.293,23.293 L64.586,14 L57,14 L57,12 L67,12 C67.553,12 68,12.448 68,13 L68,13 Z M66,57 L68,57 L68,67 C68,67.552 67.553,68 67,68 L57,68 L57,66 L64.586,66 L55.293,56.707 L56.707,55.293 L66,64.586 L66,57 Z M65.5,39.213 C65.5,35.894 61.668,32.615 55.25,30.442 L55.891,28.548 C63.268,31.045 67.5,34.932 67.5,39.213 C67.5,43.495 63.268,47.383 55.89,49.879 L55.249,47.984 C61.668,45.812 65.5,42.534 65.5,39.213 L65.5,39.213 Z M14.556,39.213 C14.556,42.393 18.143,45.585 24.152,47.753 L23.473,49.634 C16.535,47.131 12.556,43.333 12.556,39.213 C12.556,35.094 16.535,31.296 23.473,28.792 L24.152,30.673 C18.143,32.842 14.556,36.034 14.556,39.213 L14.556,39.213 Z M24.707,56.707 L15.414,66 L23,66 L23,68 L13,68 C12.447,68 12,67.552 12,67 L12,57 L14,57 L14,64.586 L23.293,55.293 L24.707,56.707 Z M40,31.286 C32.854,31.286 29,29.44 29,28.686 C29,27.931 32.854,26.086 40,26.086 C47.145,26.086 51,27.931 51,28.686 C51,29.44 47.145,31.286 40,31.286 L40,31.286 Z M40.029,39.031 C33.187,39.031 29,37.162 29,36.145 L29,31.284 C31.463,32.643 35.832,33.286 40,33.286 C44.168,33.286 48.537,32.643 51,31.284 L51,36.145 C51,37.163 46.835,39.031 40.029,39.031 L40.029,39.031 Z M40.029,46.667 C33.187,46.667 29,44.798 29,43.781 L29,38.862 C31.431,40.291 35.742,41.031 40.029,41.031 C44.292,41.031 48.578,40.292 51,38.867 L51,43.781 C51,44.799 46.835,46.667 40.029,46.667 L40.029,46.667 Z M40,53.518 C32.883,53.518 29,51.605 29,50.622 L29,46.498 C31.431,47.927 35.742,48.667 40.029,48.667 C44.292,48.667 48.578,47.929 51,46.503 L51,50.622 C51,51.605 47.117,53.518 40,53.518 L40,53.518 Z M40,24.086 C33.739,24.086 27,25.525 27,28.686 L27,50.622 C27,53.836 33.54,55.518 40,55.518 C46.46,55.518 53,53.836 53,50.622 L53,28.686 C53,25.525 46.261,24.086 40,24.086 L40,24.086 Z"
|
|
||||||
id="Amazon-RDS_Icon_64_Squid" fill="#FFFFFF"></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1,804 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "rds",
|
|
||||||
"title": "RDS",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": true
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_BurstBalance_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_BurstBalance_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_BurstBalance_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_BurstBalance_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditBalance_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditBalance_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditBalance_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditBalance_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditUsage_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditUsage_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditUsage_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUCreditUsage_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditBalance_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditBalance_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditBalance_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditBalance_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditsCharged_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditsCharged_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditsCharged_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUSurplusCreditsCharged_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUUtilization_count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUUtilization_max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUUtilization_min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CPUUtilization_sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CheckpointLag_count",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CheckpointLag_max",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CheckpointLag_min",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_CheckpointLag_sum",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadCPU_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadCPU_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadCPU_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadCPU_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadNonCPU_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadNonCPU_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadNonCPU_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadNonCPU_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadRelativeToNumVCPUs_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadRelativeToNumVCPUs_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadRelativeToNumVCPUs_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoadRelativeToNumVCPUs_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoad_count",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoad_max",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoad_min",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DBLoad_sum",
|
|
||||||
"unit": "None",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DatabaseConnections_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DatabaseConnections_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DatabaseConnections_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DatabaseConnections_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DiskQueueDepth_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DiskQueueDepth_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DiskQueueDepth_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_DiskQueueDepth_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSByteBalance__count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSByteBalance__max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSByteBalance__min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSByteBalance__sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSIOBalance__count",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSIOBalance__max",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSIOBalance__min",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_EBSIOBalance__sum",
|
|
||||||
"unit": "Percent",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeStorageSpace_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeStorageSpace_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeStorageSpace_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeStorageSpace_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeableMemory_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeableMemory_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeableMemory_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_FreeableMemory_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_MaximumUsedTransactionIDs_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_MaximumUsedTransactionIDs_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_MaximumUsedTransactionIDs_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_MaximumUsedTransactionIDs_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkReceiveThroughput_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkReceiveThroughput_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkReceiveThroughput_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkReceiveThroughput_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkTransmitThroughput_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkTransmitThroughput_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkTransmitThroughput_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_NetworkTransmitThroughput_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_OldestReplicationSlotLag_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_OldestReplicationSlotLag_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_OldestReplicationSlotLag_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_OldestReplicationSlotLag_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadIOPS_count",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadIOPS_max",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadIOPS_min",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadIOPS_sum",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadLatency_count",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadLatency_max",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadLatency_min",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadLatency_sum",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadThroughput_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadThroughput_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadThroughput_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReadThroughput_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReplicationSlotDiskUsage_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReplicationSlotDiskUsage_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReplicationSlotDiskUsage_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_ReplicationSlotDiskUsage_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_SwapUsage_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_SwapUsage_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_SwapUsage_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_SwapUsage_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsDiskUsage_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsDiskUsage_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsDiskUsage_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsDiskUsage_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsGeneration_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsGeneration_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsGeneration_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_TransactionLogsGeneration_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteIOPS_count",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteIOPS_max",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteIOPS_min",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteIOPS_sum",
|
|
||||||
"unit": "Count/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteLatency_count",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteLatency_max",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteLatency_min",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteLatency_sum",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteThroughput_count",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteThroughput_max",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteThroughput_min",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_RDS_WriteThroughput_sum",
|
|
||||||
"unit": "Bytes/Second",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/RDS"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"logs": {
|
|
||||||
"cloudwatchLogsSubscriptions": [
|
|
||||||
{
|
|
||||||
"logGroupNamePrefix": "/aws/rds",
|
|
||||||
"filterPattern": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "RDS Overview",
|
|
||||||
"description": "Overview of RDS",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor RDS with SigNoz
|
|
||||||
|
|
||||||
Collect key RDS metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid"><title>AWS Simple Storage Service (S3)</title><defs><linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="a"><stop stop-color="#1B660F" offset="0%"/><stop stop-color="#6CAE3E" offset="100%"/></linearGradient></defs><g><rect fill="url(#a)" width="256" height="256"/><path d="M194.67488,137.25632 L195.90368,128.60352 C207.23488,135.39072 207.38208,138.19392 207.378964,138.27072 C207.35968,138.28672 205.42688,139.89952 194.67488,137.25632 L194.67488,137.25632 Z M188.45728,135.52832 C168.87328,129.60192 141.59968,117.08992 130.56288,111.87392 C130.56288,111.82912 130.57568,111.78752 130.57568,111.74272 C130.57568,107.50272 127.12608,104.05312 122.88288,104.05312 C118.64608,104.05312 115.19648,107.50272 115.19648,111.74272 C115.19648,115.98272 118.64608,119.43232 122.88288,119.43232 C124.74528,119.43232 126.43488,118.73792 127.76928,117.63392 C140.75488,123.78112 167.81728,136.11072 187.54528,141.93472 L179.74368,196.99392 C179.72128,197.14432 179.71168,197.29472 179.71168,197.44512 C179.71168,202.29312 158.24928,211.19872 123.18048,211.19872 C87.74048,211.19872 66.05088,202.29312 66.05088,197.44512 C66.05088,197.29792 66.04128,197.15392 66.02208,197.00992 L49.72128,77.94752 C63.83008,87.65952 94.17568,92.79872 123.19968,92.79872 C152.17888,92.79872 182.47328,87.67872 196.61088,77.99552 L188.45728,135.52832 Z M47.99968,65.52832 C48.23008,61.31712 72.42848,44.79872 123.19968,44.79872 C173.96448,44.79872 198.16608,61.31392 198.39968,65.52832 L198.39968,66.96512 C195.61568,76.40832 164.25568,86.39872 123.19968,86.39872 C82.07328,86.39872 50.69728,76.37632 47.99968,66.92032 L47.99968,65.52832 Z M204.79968,65.59872 C204.79968,54.51072 173.01088,38.39872 123.19968,38.39872 C73.38848,38.39872 41.59968,54.51072 41.59968,65.59872 L41.90048,68.01152 L59.65408,197.68832 C60.07968,212.19072 98.75488,217.59872 123.18048,217.59872 C153.49088,217.59872 185.69248,210.62912 186.10848,197.69792 L193.77568,143.62752 C198.04128,144.64832 201.55168,145.16992 204.37088,145.16992 C208.15648,145.16992 210.71648,144.24512 212.26848,142.39552 C213.54208,140.87872 214.02848,139.04192 213.66368,137.08672 C212.83488,132.65792 207.57728,127.88352 196.87008,121.77472 L204.47328,68.13632 L204.79968,65.59872 Z" fill="#FFFFFF"/></g></svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.3 KiB |
@@ -1,54 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "s3sync",
|
|
||||||
"title": "S3 Sync",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": false,
|
|
||||||
"logs": true
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"logs": [
|
|
||||||
{
|
|
||||||
"name": "Account ID",
|
|
||||||
"path": "resources.cloud.account.id",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Account Region",
|
|
||||||
"path": "resources.cloud.account.region",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Bucket Name",
|
|
||||||
"path": "resources.cloud.bucket.name",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Object Key",
|
|
||||||
"path": "attributes.object.key",
|
|
||||||
"type": "string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Object S3 Event Time",
|
|
||||||
"path": "attributes.object.event_time",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"logs": {
|
|
||||||
"cloudwatchLogsSubscriptions": [
|
|
||||||
{
|
|
||||||
"logGroupNamePrefix": "x/signoz/forwarder",
|
|
||||||
"filterPattern": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Sync logs stored in S3 Object Store with SigNoz
|
|
||||||
|
|
||||||
Collect logs stored by AWS Services in S3 Object Store and explore them in SigNoz.
|
|
||||||
@@ -1,818 +0,0 @@
|
|||||||
{
|
|
||||||
"description": "View key AWS SNS metrics with an out of the box dashboard.",
|
|
||||||
"image": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iODBweCIgaGVpZ2h0PSI4MHB4IiB2aWV3Qm94PSIwIDAgODAgODAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDY0ICg5MzUzNykgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+SWNvbi1BcmNoaXRlY3R1cmUvNjQvQXJjaF9BV1MtU2ltcGxlLU5vdGlmaWNhdGlvbi1TZXJ2aWNlXzY0PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjEwMCUiIHgyPSIxMDAlIiB5Mj0iMCUiIGlkPSJsaW5lYXJHcmFkaWVudC0xIj4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0IwMDg0RCIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRkY0RjhCIiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPC9kZWZzPgogICAgPGcgaWQ9Ikljb24tQXJjaGl0ZWN0dXJlLzY0L0FyY2hfQVdTLVNpbXBsZS1Ob3RpZmljYXRpb24tU2VydmljZV82NCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ikljb24tQXJjaGl0ZWN0dXJlLUJHLzY0L0FwcGxpY2F0aW9uLUludGVncmF0aW9uIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50LTEpIj4KICAgICAgICAgICAgPHJlY3QgaWQ9IlJlY3RhbmdsZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIj48L3JlY3Q+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoIGQ9Ik0xNywzOCBDMTguMTAzLDM4IDE5LDM4Ljg5NyAxOSw0MCBDMTksNDEuMTAzIDE4LjEwMyw0MiAxNyw0MiBDMTUuODk3LDQyIDE1LDQxLjEwMyAxNSw0MCBDMTUsMzguODk3IDE1Ljg5NywzOCAxNywzOCBMMTcsMzggWiBNNDEsNjQgQzI5LjMxNCw2NCAxOS4yODksNTUuNDY2IDE3LjE5NCw0My45OCBDMTguOTY1LDQzLjg5NCAyMC40MjcsNDIuNjU5IDIwLjg1Nyw0MSBMMjcsNDEgTDI3LDM5IEwyMC44NTcsMzkgQzIwLjQyNywzNy4zNDIgMTguOTY2LDM2LjEwNyAxNy4xOTUsMzYuMDIgQzE5LjI4NSwyNC43MSAyOS41MTEsMTYgNDEsMTYgQzQ1LjMxMywxNiA0OS44MzIsMTcuNjIyIDU0LjQyOSwyMC44MjEgTDU1LjU3MSwxOS4xNzkgQzUwLjYzMywxNS43NDMgNDUuNzMsMTQgNDEsMTQgQzI4LjI3LDE0IDE2Ljk0OSwyMy44NjUgMTUuMDYzLDM2LjUyMSBDMTMuODM5LDM3LjIwNyAxMywzOC41IDEzLDQwIEMxMyw0MS41IDEzLjgzOSw0Mi43OTMgMTUuMDYzLDQzLjQ3OCBDMTYuOTcsNTYuMzQxIDI4LjA1Niw2NiA0MSw2NiBDNDYuNDA3LDY2IDUxLjk0Miw2NC4xNTcgNTYuNTg1LDYwLjgxMSBMNTUuNDE1LDU5LjE4OSBDNTEuMTEsNjIuMjkyIDQ1Ljk5MSw2NCA0MSw2NCBMNDEsNjQgWiBNMzAuMTAxLDM2LjQ0MiBDMzEuOTU1LDM2Ljg5NSAzNC4yNzUsMzcgMzYsMzcgQzM3LjY0MiwzNyAzOS44MjMsMzYuOTA1IDQxLjYyOSwzNi41MDYgTDM3LjEwNSw0NS41NTMgQzM3LjAzNiw0NS42OTEgMzcsNDUuODQ1IDM3LDQ2IEwzNyw1MC40NTMgQzM2LjE5OSw1MC45NjQgMzQuODMzLDUxLjgxMiAzNCw1MS45ODYgTDM0LDQ2IEMzNCw0NS44NjggMzMuOTc0LDQ1LjczNyAzMy45MjMsNDUuNjE1IEwzMC4xMDEsMzYuNDQyIFogTTM2LDMzIEM0MC4wMjUsMzMgNDIuMTc0LDMzLjYwNCA0Mi44NDEsMzQgQzQyLjE3NCwzNC4zOTYgNDAuMDI1LDM1IDM2LDM1IEMzMS45NzUsMzUgMjkuODI2LDM0LjM5NiAyOS4xNTksMzQgQzI5LjgyNiwzMy42MDQgMzEuOTc1LDMzIDM2LDMzIEwzNiwzMyBaIE0zMyw1NCBMMzQsNTQgQzM0LjA0Myw1NCAzNC4wODYsNTMuOTk3IDM0LjEyOCw1My45OTIgQzM1LjM1Miw1My44MzMgMzYuOTA5LDUyLjg4NyAzOC4yNzIsNTIuMDEzIEwzOC41MzUsNTEuODQ1IEMzOC44MjQsNTEuNjYxIDM5LDUxLjM0MiAzOSw1MSBMMzksNDYuMjM2IEw0NC41NTksMzUuMTIgQzQ0LjgzMywzNC44MDEgNDUsMzQuNDM0IDQ1LDM0IEM0NSwzMS4zOSAzOS4zNjEsMzEgMzYsMzEgQzMyLjYzOSwzMSAyNywzMS4zOSAyNywzNCBDMjcsMzQuMzY2IDI3LjEyLDM0LjY4NCAyNy4zMiwzNC45NjcgTDMyLDQ2LjIgTDMyLDUzIEMzMiw1My41NTIgMzIuNDQ3LDU0IDMzLDU0IEwzMyw1NCBaIE02Miw1MyBDNjMuMTAzLDUzIDY0LDUzLjg5NyA2NCw1NSBDNjQsNTYuMTAzIDYzLjEwMyw1NyA2Miw1NyBDNjAuODk3LDU3IDYwLDU2LjEwMyA2MCw1NSBDNjAsNTMuODk3IDYwLjg5Nyw1MyA2Miw1MyBMNjIsNTMgWiBNNjIsMjMgQzYzLjEwMywyMyA2NCwyMy44OTcgNjQsMjUgQzY0LDI2LjEwMyA2My4xMDMsMjcgNjIsMjcgQzYwLjg5NywyNyA2MCwyNi4xMDMgNjAsMjUgQzYwLDIzLjg5NyA2MC44OTcsMjMgNjIsMjMgTDYyLDIzIFogTTY0LDM4IEM2NS4xMDMsMzggNjYsMzguODk3IDY2LDQwIEM2Niw0MS4xMDMgNjUuMTAzLDQyIDY0LDQyIEM2Mi44OTcsNDIgNjIsNDEuMTAzIDYyLDQwIEM2MiwzOC44OTcgNjIuODk3LDM4IDY0LDM4IEw2NCwzOCBaIE01NCw0MSBMNjAuMTQzLDQxIEM2MC41ODksNDIuNzIgNjIuMTQyLDQ0IDY0LDQ0IEM2Ni4yMDYsNDQgNjgsNDIuMjA2IDY4LDQwIEM2OCwzNy43OTQgNjYuMjA2LDM2IDY0LDM2IEM2Mi4xNDIsMzYgNjAuNTg5LDM3LjI4IDYwLjE0MywzOSBMNTQsMzkgTDU0LDI2IEw1OC4xNDMsMjYgQzU4LjU4OSwyNy43MiA2MC4xNDIsMjkgNjIsMjkgQzY0LjIwNiwyOSA2NiwyNy4yMDYgNjYsMjUgQzY2LDIyLjc5NCA2NC4yMDYsMjEgNjIsMjEgQzYwLjE0MiwyMSA1OC41ODksMjIuMjggNTguMTQzLDI0IEw1MywyNCBDNTIuNDQ3LDI0IDUyLDI0LjQ0OCA1MiwyNSBMNTIsMzkgTDQ1LDM5IEw0NSw0MSBMNTIsNDEgTDUyLDU1IEM1Miw1NS41NTIgNTIuNDQ3LDU2IDUzLDU2IEw1OC4xNDMsNTYgQzU4LjU4OSw1Ny43MiA2MC4xNDIsNTkgNjIsNTkgQzY0LjIwNiw1OSA2Niw1Ny4yMDYgNjYsNTUgQzY2LDUyLjc5NCA2NC4yMDYsNTEgNjIsNTEgQzYwLjE0Miw1MSA1OC41ODksNTIuMjggNTguMTQzLDU0IEw1NCw1NCBMNTQsNDEgWiIgaWQ9IkFXUy1TaW1wbGUtTm90aWZpY2F0aW9uLVNlcnZpY2VfSWNvbl82NF9TcXVpZCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=",
|
|
||||||
"layout": [
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "4eb87f89-0213-4773-9b06-6aecc6701898",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "7a010b4e-ea7c-4a45-a9eb-93af650c45b4",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "2299d4e3-6c40-4bf2-a550-c7bb8a7acd38",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "16eec8b7-de1a-4039-b180-24c7a6704b6e",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 6
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"panelMap": {},
|
|
||||||
"tags": [],
|
|
||||||
"title": "SNS Overview",
|
|
||||||
"uploadedGrafana": false,
|
|
||||||
"variables": {
|
|
||||||
"51f4fa2b-89c7-47c2-9795-f32cffaab985": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "AWS Account ID",
|
|
||||||
"id": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"key": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"modificationUUID": "b7a6b06b-fa1f-4fb8-b70e-6bd9b350f29e",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Account",
|
|
||||||
"order": 0,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud_account_id') AS cloud_account_id\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_SNS_PublishSize_count' GROUP BY cloud_account_id",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "DISABLED",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "Account Region",
|
|
||||||
"id": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"key": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"modificationUUID": "8428a5de-bfd1-4a69-9601-63e3041cd556",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Region",
|
|
||||||
"order": 1,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud_region') AS region\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_SNS_PublishSize_count' AND JSONExtractString(labels, 'cloud_account_id') IN {{.Account}} GROUP BY region",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"bfbdbcbe-a168-4d81-b108-36339e249116": {
|
|
||||||
"allSelected": true,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "SNS Topic Name",
|
|
||||||
"id": "bfbdbcbe-a168-4d81-b108-36339e249116",
|
|
||||||
"modificationUUID": "dfed7272-16dc-4eb6-99bf-7c82fc8e04f0",
|
|
||||||
"multiSelect": true,
|
|
||||||
"name": "Topic",
|
|
||||||
"order": 2,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'TopicName') AS topic\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_SNS_PublishSize_count' AND JSONExtractString(labels, 'cloud_account_id') IN {{.Account}} AND JSONExtractString(labels, 'cloud_region') IN {{.Region}}\nGROUP BY topic",
|
|
||||||
"showALLOption": true,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "v4",
|
|
||||||
"widgets": [
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "4eb87f89-0213-4773-9b06-6aecc6701898",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_NumberOfMessagesPublished_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_NumberOfMessagesPublished_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "8fd51b53",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "b18187c3",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "eebe4578",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "9c67615a-55f7-42da-835c-86922f2ff8bb",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Number of Messages Published",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "7a010b4e-ea7c-4a45-a9eb-93af650c45b4",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_PublishSize_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_PublishSize_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "1aa0d1a9",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "62255cff",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "17c7153e",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "a635a15b-dfe6-4617-a82e-29d93e27deaf",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Published Message Size",
|
|
||||||
"yAxisUnit": "decbytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "2299d4e3-6c40-4bf2-a550-c7bb8a7acd38",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_NumberOfNotificationsDelivered_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_NumberOfNotificationsDelivered_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "c96a4ac0",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "8ca86829",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "8a444f66",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "0d2fc26c-9b21-4dfc-b631-64b7c8d3bd71",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Number of Notifications Delivered",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "16eec8b7-de1a-4039-b180-24c7a6704b6e",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_NumberOfNotificationsFailed_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_NumberOfNotificationsFailed_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "6175f3d5",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "e2084931",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "0b05209a",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud_account_id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud_account_id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "526247af-6ac9-42ff-83e9-cce0e32a9e63",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Number of Notifications Failed",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,818 +0,0 @@
|
|||||||
{
|
|
||||||
"description": "View key AWS SNS metrics with an out of the box dashboard.",
|
|
||||||
"image": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iODBweCIgaGVpZ2h0PSI4MHB4IiB2aWV3Qm94PSIwIDAgODAgODAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDY0ICg5MzUzNykgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+SWNvbi1BcmNoaXRlY3R1cmUvNjQvQXJjaF9BV1MtU2ltcGxlLU5vdGlmaWNhdGlvbi1TZXJ2aWNlXzY0PC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgICAgPGxpbmVhckdyYWRpZW50IHgxPSIwJSIgeTE9IjEwMCUiIHgyPSIxMDAlIiB5Mj0iMCUiIGlkPSJsaW5lYXJHcmFkaWVudC0xIj4KICAgICAgICAgICAgPHN0b3Agc3RvcC1jb2xvcj0iI0IwMDg0RCIgb2Zmc2V0PSIwJSI+PC9zdG9wPgogICAgICAgICAgICA8c3RvcCBzdG9wLWNvbG9yPSIjRkY0RjhCIiBvZmZzZXQ9IjEwMCUiPjwvc3RvcD4KICAgICAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPC9kZWZzPgogICAgPGcgaWQ9Ikljb24tQXJjaGl0ZWN0dXJlLzY0L0FyY2hfQVdTLVNpbXBsZS1Ob3RpZmljYXRpb24tU2VydmljZV82NCIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9Ikljb24tQXJjaGl0ZWN0dXJlLUJHLzY0L0FwcGxpY2F0aW9uLUludGVncmF0aW9uIiBmaWxsPSJ1cmwoI2xpbmVhckdyYWRpZW50LTEpIj4KICAgICAgICAgICAgPHJlY3QgaWQ9IlJlY3RhbmdsZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjgwIj48L3JlY3Q+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoIGQ9Ik0xNywzOCBDMTguMTAzLDM4IDE5LDM4Ljg5NyAxOSw0MCBDMTksNDEuMTAzIDE4LjEwMyw0MiAxNyw0MiBDMTUuODk3LDQyIDE1LDQxLjEwMyAxNSw0MCBDMTUsMzguODk3IDE1Ljg5NywzOCAxNywzOCBMMTcsMzggWiBNNDEsNjQgQzI5LjMxNCw2NCAxOS4yODksNTUuNDY2IDE3LjE5NCw0My45OCBDMTguOTY1LDQzLjg5NCAyMC40MjcsNDIuNjU5IDIwLjg1Nyw0MSBMMjcsNDEgTDI3LDM5IEwyMC44NTcsMzkgQzIwLjQyNywzNy4zNDIgMTguOTY2LDM2LjEwNyAxNy4xOTUsMzYuMDIgQzE5LjI4NSwyNC43MSAyOS41MTEsMTYgNDEsMTYgQzQ1LjMxMywxNiA0OS44MzIsMTcuNjIyIDU0LjQyOSwyMC44MjEgTDU1LjU3MSwxOS4xNzkgQzUwLjYzMywxNS43NDMgNDUuNzMsMTQgNDEsMTQgQzI4LjI3LDE0IDE2Ljk0OSwyMy44NjUgMTUuMDYzLDM2LjUyMSBDMTMuODM5LDM3LjIwNyAxMywzOC41IDEzLDQwIEMxMyw0MS41IDEzLjgzOSw0Mi43OTMgMTUuMDYzLDQzLjQ3OCBDMTYuOTcsNTYuMzQxIDI4LjA1Niw2NiA0MSw2NiBDNDYuNDA3LDY2IDUxLjk0Miw2NC4xNTcgNTYuNTg1LDYwLjgxMSBMNTUuNDE1LDU5LjE4OSBDNTEuMTEsNjIuMjkyIDQ1Ljk5MSw2NCA0MSw2NCBMNDEsNjQgWiBNMzAuMTAxLDM2LjQ0MiBDMzEuOTU1LDM2Ljg5NSAzNC4yNzUsMzcgMzYsMzcgQzM3LjY0MiwzNyAzOS44MjMsMzYuOTA1IDQxLjYyOSwzNi41MDYgTDM3LjEwNSw0NS41NTMgQzM3LjAzNiw0NS42OTEgMzcsNDUuODQ1IDM3LDQ2IEwzNyw1MC40NTMgQzM2LjE5OSw1MC45NjQgMzQuODMzLDUxLjgxMiAzNCw1MS45ODYgTDM0LDQ2IEMzNCw0NS44NjggMzMuOTc0LDQ1LjczNyAzMy45MjMsNDUuNjE1IEwzMC4xMDEsMzYuNDQyIFogTTM2LDMzIEM0MC4wMjUsMzMgNDIuMTc0LDMzLjYwNCA0Mi44NDEsMzQgQzQyLjE3NCwzNC4zOTYgNDAuMDI1LDM1IDM2LDM1IEMzMS45NzUsMzUgMjkuODI2LDM0LjM5NiAyOS4xNTksMzQgQzI5LjgyNiwzMy42MDQgMzEuOTc1LDMzIDM2LDMzIEwzNiwzMyBaIE0zMyw1NCBMMzQsNTQgQzM0LjA0Myw1NCAzNC4wODYsNTMuOTk3IDM0LjEyOCw1My45OTIgQzM1LjM1Miw1My44MzMgMzYuOTA5LDUyLjg4NyAzOC4yNzIsNTIuMDEzIEwzOC41MzUsNTEuODQ1IEMzOC44MjQsNTEuNjYxIDM5LDUxLjM0MiAzOSw1MSBMMzksNDYuMjM2IEw0NC41NTksMzUuMTIgQzQ0LjgzMywzNC44MDEgNDUsMzQuNDM0IDQ1LDM0IEM0NSwzMS4zOSAzOS4zNjEsMzEgMzYsMzEgQzMyLjYzOSwzMSAyNywzMS4zOSAyNywzNCBDMjcsMzQuMzY2IDI3LjEyLDM0LjY4NCAyNy4zMiwzNC45NjcgTDMyLDQ2LjIgTDMyLDUzIEMzMiw1My41NTIgMzIuNDQ3LDU0IDMzLDU0IEwzMyw1NCBaIE02Miw1MyBDNjMuMTAzLDUzIDY0LDUzLjg5NyA2NCw1NSBDNjQsNTYuMTAzIDYzLjEwMyw1NyA2Miw1NyBDNjAuODk3LDU3IDYwLDU2LjEwMyA2MCw1NSBDNjAsNTMuODk3IDYwLjg5Nyw1MyA2Miw1MyBMNjIsNTMgWiBNNjIsMjMgQzYzLjEwMywyMyA2NCwyMy44OTcgNjQsMjUgQzY0LDI2LjEwMyA2My4xMDMsMjcgNjIsMjcgQzYwLjg5NywyNyA2MCwyNi4xMDMgNjAsMjUgQzYwLDIzLjg5NyA2MC44OTcsMjMgNjIsMjMgTDYyLDIzIFogTTY0LDM4IEM2NS4xMDMsMzggNjYsMzguODk3IDY2LDQwIEM2Niw0MS4xMDMgNjUuMTAzLDQyIDY0LDQyIEM2Mi44OTcsNDIgNjIsNDEuMTAzIDYyLDQwIEM2MiwzOC44OTcgNjIuODk3LDM4IDY0LDM4IEw2NCwzOCBaIE01NCw0MSBMNjAuMTQzLDQxIEM2MC41ODksNDIuNzIgNjIuMTQyLDQ0IDY0LDQ0IEM2Ni4yMDYsNDQgNjgsNDIuMjA2IDY4LDQwIEM2OCwzNy43OTQgNjYuMjA2LDM2IDY0LDM2IEM2Mi4xNDIsMzYgNjAuNTg5LDM3LjI4IDYwLjE0MywzOSBMNTQsMzkgTDU0LDI2IEw1OC4xNDMsMjYgQzU4LjU4OSwyNy43MiA2MC4xNDIsMjkgNjIsMjkgQzY0LjIwNiwyOSA2NiwyNy4yMDYgNjYsMjUgQzY2LDIyLjc5NCA2NC4yMDYsMjEgNjIsMjEgQzYwLjE0MiwyMSA1OC41ODksMjIuMjggNTguMTQzLDI0IEw1MywyNCBDNTIuNDQ3LDI0IDUyLDI0LjQ0OCA1MiwyNSBMNTIsMzkgTDQ1LDM5IEw0NSw0MSBMNTIsNDEgTDUyLDU1IEM1Miw1NS41NTIgNTIuNDQ3LDU2IDUzLDU2IEw1OC4xNDMsNTYgQzU4LjU4OSw1Ny43MiA2MC4xNDIsNTkgNjIsNTkgQzY0LjIwNiw1OSA2Niw1Ny4yMDYgNjYsNTUgQzY2LDUyLjc5NCA2NC4yMDYsNTEgNjIsNTEgQzYwLjE0Miw1MSA1OC41ODksNTIuMjggNTguMTQzLDU0IEw1NCw1NCBMNTQsNDEgWiIgaWQ9IkFXUy1TaW1wbGUtTm90aWZpY2F0aW9uLVNlcnZpY2VfSWNvbl82NF9TcXVpZCIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgPC9nPgo8L3N2Zz4=",
|
|
||||||
"layout": [
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "4eb87f89-0213-4773-9b06-6aecc6701898",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "7a010b4e-ea7c-4a45-a9eb-93af650c45b4",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "2299d4e3-6c40-4bf2-a550-c7bb8a7acd38",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 0,
|
|
||||||
"y": 6
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"h": 6,
|
|
||||||
"i": "16eec8b7-de1a-4039-b180-24c7a6704b6e",
|
|
||||||
"moved": false,
|
|
||||||
"static": false,
|
|
||||||
"w": 6,
|
|
||||||
"x": 6,
|
|
||||||
"y": 6
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"panelMap": {},
|
|
||||||
"tags": [],
|
|
||||||
"title": "SNS Overview",
|
|
||||||
"uploadedGrafana": false,
|
|
||||||
"variables": {
|
|
||||||
"51f4fa2b-89c7-47c2-9795-f32cffaab985": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "AWS Account ID",
|
|
||||||
"id": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"key": "51f4fa2b-89c7-47c2-9795-f32cffaab985",
|
|
||||||
"modificationUUID": "b7a6b06b-fa1f-4fb8-b70e-6bd9b350f29e",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Account",
|
|
||||||
"order": 0,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud.account.id') AS `cloud.account.id`\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_SNS_PublishSize_count' GROUP BY `cloud.account.id`",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "DISABLED",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0": {
|
|
||||||
"allSelected": false,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "Account Region",
|
|
||||||
"id": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"key": "9faf0f4b-b245-4b3c-83a3-60cfa76dfeb0",
|
|
||||||
"modificationUUID": "8428a5de-bfd1-4a69-9601-63e3041cd556",
|
|
||||||
"multiSelect": false,
|
|
||||||
"name": "Region",
|
|
||||||
"order": 1,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'cloud.region') AS region\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_SNS_PublishSize_count' AND JSONExtractString(labels, 'cloud.account.id') IN {{.Account}} GROUP BY region",
|
|
||||||
"showALLOption": false,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
},
|
|
||||||
"bfbdbcbe-a168-4d81-b108-36339e249116": {
|
|
||||||
"allSelected": true,
|
|
||||||
"customValue": "",
|
|
||||||
"description": "SNS Topic Name",
|
|
||||||
"id": "bfbdbcbe-a168-4d81-b108-36339e249116",
|
|
||||||
"modificationUUID": "dfed7272-16dc-4eb6-99bf-7c82fc8e04f0",
|
|
||||||
"multiSelect": true,
|
|
||||||
"name": "Topic",
|
|
||||||
"order": 2,
|
|
||||||
"queryValue": "SELECT DISTINCT JSONExtractString(labels, 'TopicName') AS topic\nFROM signoz_metrics.distributed_time_series_v4_1day\nWHERE metric_name = 'aws_SNS_PublishSize_count' AND JSONExtractString(labels, 'cloud.account.id') IN {{.Account}} AND JSONExtractString(labels, 'cloud.region') IN {{.Region}}\nGROUP BY topic",
|
|
||||||
"showALLOption": true,
|
|
||||||
"sort": "ASC",
|
|
||||||
"textboxValue": "",
|
|
||||||
"type": "QUERY"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"version": "v4",
|
|
||||||
"widgets": [
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "4eb87f89-0213-4773-9b06-6aecc6701898",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_NumberOfMessagesPublished_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_NumberOfMessagesPublished_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "8fd51b53",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "b18187c3",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "eebe4578",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "9c67615a-55f7-42da-835c-86922f2ff8bb",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Number of Messages Published",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "7a010b4e-ea7c-4a45-a9eb-93af650c45b4",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_PublishSize_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_PublishSize_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "1aa0d1a9",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "62255cff",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "17c7153e",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "a635a15b-dfe6-4617-a82e-29d93e27deaf",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Published Message Size",
|
|
||||||
"yAxisUnit": "decbytes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "2299d4e3-6c40-4bf2-a550-c7bb8a7acd38",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_NumberOfNotificationsDelivered_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_NumberOfNotificationsDelivered_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "c96a4ac0",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "8ca86829",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "8a444f66",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "0d2fc26c-9b21-4dfc-b631-64b7c8d3bd71",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Number of Notifications Delivered",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bucketCount": 30,
|
|
||||||
"bucketWidth": 0,
|
|
||||||
"columnUnits": {},
|
|
||||||
"description": "",
|
|
||||||
"fillSpans": false,
|
|
||||||
"id": "16eec8b7-de1a-4039-b180-24c7a6704b6e",
|
|
||||||
"isLogScale": false,
|
|
||||||
"isStacked": false,
|
|
||||||
"mergeAllActiveQueries": false,
|
|
||||||
"nullZeroValues": "zero",
|
|
||||||
"opacity": "1",
|
|
||||||
"panelTypes": "graph",
|
|
||||||
"query": {
|
|
||||||
"builder": {
|
|
||||||
"queryData": [
|
|
||||||
{
|
|
||||||
"aggregateAttribute": {
|
|
||||||
"dataType": "float64",
|
|
||||||
"id": "aws_SNS_NumberOfNotificationsFailed_max--float64--Gauge--true",
|
|
||||||
"isColumn": true,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "aws_SNS_NumberOfNotificationsFailed_max",
|
|
||||||
"type": "Gauge"
|
|
||||||
},
|
|
||||||
"aggregateOperator": "max",
|
|
||||||
"dataSource": "metrics",
|
|
||||||
"disabled": false,
|
|
||||||
"expression": "A",
|
|
||||||
"filters": {
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"id": "6175f3d5",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "in",
|
|
||||||
"value": [
|
|
||||||
"$Topic"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "e2084931",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.region--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.region",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Region"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": "0b05209a",
|
|
||||||
"key": {
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "cloud.account.id--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "cloud.account.id",
|
|
||||||
"type": "tag"
|
|
||||||
},
|
|
||||||
"op": "=",
|
|
||||||
"value": "$Account"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"op": "AND"
|
|
||||||
},
|
|
||||||
"functions": [],
|
|
||||||
"groupBy": [
|
|
||||||
{
|
|
||||||
"dataType": "string",
|
|
||||||
"id": "TopicName--string--tag--false",
|
|
||||||
"isColumn": false,
|
|
||||||
"isJSON": false,
|
|
||||||
"key": "TopicName",
|
|
||||||
"type": "tag"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"having": [],
|
|
||||||
"legend": "{{TopicName}}",
|
|
||||||
"limit": null,
|
|
||||||
"orderBy": [],
|
|
||||||
"queryName": "A",
|
|
||||||
"reduceTo": "avg",
|
|
||||||
"spaceAggregation": "max",
|
|
||||||
"stepInterval": 60,
|
|
||||||
"timeAggregation": "max"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryFormulas": []
|
|
||||||
},
|
|
||||||
"clickhouse_sql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"id": "526247af-6ac9-42ff-83e9-cce0e32a9e63",
|
|
||||||
"promql": [
|
|
||||||
{
|
|
||||||
"disabled": false,
|
|
||||||
"legend": "",
|
|
||||||
"name": "A",
|
|
||||||
"query": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"queryType": "builder"
|
|
||||||
},
|
|
||||||
"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": "Number of Notifications Failed",
|
|
||||||
"yAxisUnit": "none"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<svg width="80px" height="80px" viewBox="0 0 80 80" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
||||||
<!-- Generator: Sketch 64 (93537) - https://sketch.com -->
|
|
||||||
<title>Icon-Architecture/64/Arch_AWS-Simple-Notification-Service_64</title>
|
|
||||||
<desc>Created with Sketch.</desc>
|
|
||||||
<defs>
|
|
||||||
<linearGradient x1="0%" y1="100%" x2="100%" y2="0%" id="linearGradient-1">
|
|
||||||
<stop stop-color="#B0084D" offset="0%"></stop>
|
|
||||||
<stop stop-color="#FF4F8B" offset="100%"></stop>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="Icon-Architecture/64/Arch_AWS-Simple-Notification-Service_64" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
||||||
<g id="Icon-Architecture-BG/64/Application-Integration" fill="url(#linearGradient-1)">
|
|
||||||
<rect id="Rectangle" x="0" y="0" width="80" height="80"></rect>
|
|
||||||
</g>
|
|
||||||
<path d="M17,38 C18.103,38 19,38.897 19,40 C19,41.103 18.103,42 17,42 C15.897,42 15,41.103 15,40 C15,38.897 15.897,38 17,38 L17,38 Z M41,64 C29.314,64 19.289,55.466 17.194,43.98 C18.965,43.894 20.427,42.659 20.857,41 L27,41 L27,39 L20.857,39 C20.427,37.342 18.966,36.107 17.195,36.02 C19.285,24.71 29.511,16 41,16 C45.313,16 49.832,17.622 54.429,20.821 L55.571,19.179 C50.633,15.743 45.73,14 41,14 C28.27,14 16.949,23.865 15.063,36.521 C13.839,37.207 13,38.5 13,40 C13,41.5 13.839,42.793 15.063,43.478 C16.97,56.341 28.056,66 41,66 C46.407,66 51.942,64.157 56.585,60.811 L55.415,59.189 C51.11,62.292 45.991,64 41,64 L41,64 Z M30.101,36.442 C31.955,36.895 34.275,37 36,37 C37.642,37 39.823,36.905 41.629,36.506 L37.105,45.553 C37.036,45.691 37,45.845 37,46 L37,50.453 C36.199,50.964 34.833,51.812 34,51.986 L34,46 C34,45.868 33.974,45.737 33.923,45.615 L30.101,36.442 Z M36,33 C40.025,33 42.174,33.604 42.841,34 C42.174,34.396 40.025,35 36,35 C31.975,35 29.826,34.396 29.159,34 C29.826,33.604 31.975,33 36,33 L36,33 Z M33,54 L34,54 C34.043,54 34.086,53.997 34.128,53.992 C35.352,53.833 36.909,52.887 38.272,52.013 L38.535,51.845 C38.824,51.661 39,51.342 39,51 L39,46.236 L44.559,35.12 C44.833,34.801 45,34.434 45,34 C45,31.39 39.361,31 36,31 C32.639,31 27,31.39 27,34 C27,34.366 27.12,34.684 27.32,34.967 L32,46.2 L32,53 C32,53.552 32.447,54 33,54 L33,54 Z M62,53 C63.103,53 64,53.897 64,55 C64,56.103 63.103,57 62,57 C60.897,57 60,56.103 60,55 C60,53.897 60.897,53 62,53 L62,53 Z M62,23 C63.103,23 64,23.897 64,25 C64,26.103 63.103,27 62,27 C60.897,27 60,26.103 60,25 C60,23.897 60.897,23 62,23 L62,23 Z M64,38 C65.103,38 66,38.897 66,40 C66,41.103 65.103,42 64,42 C62.897,42 62,41.103 62,40 C62,38.897 62.897,38 64,38 L64,38 Z M54,41 L60.143,41 C60.589,42.72 62.142,44 64,44 C66.206,44 68,42.206 68,40 C68,37.794 66.206,36 64,36 C62.142,36 60.589,37.28 60.143,39 L54,39 L54,26 L58.143,26 C58.589,27.72 60.142,29 62,29 C64.206,29 66,27.206 66,25 C66,22.794 64.206,21 62,21 C60.142,21 58.589,22.28 58.143,24 L53,24 C52.447,24 52,24.448 52,25 L52,39 L45,39 L45,41 L52,41 L52,55 C52,55.552 52.447,56 53,56 L58.143,56 C58.589,57.72 60.142,59 62,59 C64.206,59 66,57.206 66,55 C66,52.794 64.206,51 62,51 C60.142,51 58.589,52.28 58.143,54 L54,54 L54,41 Z" id="AWS-Simple-Notification-Service_Icon_64_Squid" fill="#FFFFFF"></path>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.2 KiB |
@@ -1,131 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "sns",
|
|
||||||
"title": "SNS",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": false
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfMessagesPublished_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfMessagesPublished_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfMessagesPublished_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfMessagesPublished_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsDelivered_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsDelivered_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsDelivered_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsDelivered_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsFailed_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsFailed_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsFailed_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_NumberOfNotificationsFailed_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_PublishSize_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_PublishSize_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_PublishSize_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SNS_PublishSize_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/SNS"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "SNS Overview",
|
|
||||||
"description": "Overview of SNS",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor SNS with SigNoz
|
|
||||||
|
|
||||||
Collect SNS key Metrics and view them with an out of the box dashboard.
|
|
||||||
|
Before Width: | Height: | Size: 6.3 KiB |
@@ -1,251 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "sqs",
|
|
||||||
"title": "SQS",
|
|
||||||
"icon": "file://icon.svg",
|
|
||||||
"overview": "file://overview.md",
|
|
||||||
"supportedSignals": {
|
|
||||||
"metrics": true,
|
|
||||||
"logs": false
|
|
||||||
},
|
|
||||||
"dataCollected": {
|
|
||||||
"metrics": [
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateAgeOfOldestMessage_count",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateAgeOfOldestMessage_max",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateAgeOfOldestMessage_min",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateAgeOfOldestMessage_sum",
|
|
||||||
"unit": "Seconds",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesDelayed_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesDelayed_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesDelayed_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesDelayed_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesNotVisible_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesNotVisible_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesNotVisible_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesNotVisible_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesVisible_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesVisible_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesVisible_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_ApproximateNumberOfMessagesVisible_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfEmptyReceives_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfEmptyReceives_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfEmptyReceives_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfEmptyReceives_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesDeleted_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesDeleted_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesDeleted_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesDeleted_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesReceived_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesReceived_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesReceived_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesReceived_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesSent_count",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesSent_max",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesSent_min",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_NumberOfMessagesSent_sum",
|
|
||||||
"unit": "Count",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_SentMessageSize_sum",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_SentMessageSize_max",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_SentMessageSize_min",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "aws_SQS_SentMessageSize_count",
|
|
||||||
"unit": "Bytes",
|
|
||||||
"type": "Gauge",
|
|
||||||
"description": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"telemetryCollectionStrategy": {
|
|
||||||
"aws": {
|
|
||||||
"metrics": {
|
|
||||||
"cloudwatchMetricStreamFilters": [
|
|
||||||
{
|
|
||||||
"Namespace": "AWS/SQS"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"assets": {
|
|
||||||
"dashboards": [
|
|
||||||
{
|
|
||||||
"id": "overview",
|
|
||||||
"title": "AWS SQS Overview",
|
|
||||||
"description": "Overview of SQS",
|
|
||||||
"definition": "file://assets/dashboards/overview.json"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
### Monitor Simple Queue Service with SigNoz
|
|
||||||
|
|
||||||
Collect SQS key Metrics and view them with an out of the box dashboard.
|
|
||||||
@@ -1,425 +1,58 @@
|
|||||||
package implcloudintegration
|
package implcloudintegration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/http/binding"
|
|
||||||
"github.com/SigNoz/signoz/pkg/http/render"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
||||||
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/valuer"
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type handler struct {
|
type handler struct{}
|
||||||
module cloudintegration.Module
|
|
||||||
|
func NewHandler() cloudintegration.Handler {
|
||||||
|
return &handler{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHandler(module cloudintegration.Module) cloudintegration.Handler {
|
func (handler *handler) CreateAccount(writer http.ResponseWriter, request *http.Request) {
|
||||||
return &handler{
|
// TODO implement me
|
||||||
module: module,
|
panic("implement me")
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) CreateAccount(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) ListAccounts(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
postableConnectionArtifact := new(cloudintegrationtypes.PostableConnectionArtifact)
|
|
||||||
|
|
||||||
err = binding.JSON.BindBody(r.Body, postableConnectionArtifact)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := postableConnectionArtifact.Validate(provider); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
accountConfig, err := cloudintegrationtypes.NewAccountConfigFromPostableArtifact(provider, postableConnectionArtifact)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
account := cloudintegrationtypes.NewAccount(valuer.MustNewUUID(claims.OrgID), provider, accountConfig)
|
|
||||||
err = handler.module.CreateAccount(ctx, account)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
connectionArtifactRequest, err := cloudintegrationtypes.NewArtifactRequestFromPostableArtifact(provider, postableConnectionArtifact)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
connectionArtifact, err := handler.module.GetConnectionArtifact(ctx, account, connectionArtifactRequest)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusOK, &cloudintegrationtypes.GettableAccountWithArtifact{
|
|
||||||
ID: account.ID,
|
|
||||||
Artifact: connectionArtifact,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) GetAccount(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) GetAccount(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
accountIDString := mux.Vars(r)["id"]
|
|
||||||
accountID, err := valuer.NewUUID(accountIDString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
account, err := handler.module.GetAccount(ctx, valuer.MustNewUUID(claims.OrgID), accountID, provider)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusOK, account)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) ListAccounts(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) UpdateAccount(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
accounts, err := handler.module.ListAccounts(ctx, valuer.MustNewUUID(claims.OrgID), provider)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusOK, &cloudintegrationtypes.GettableAccounts{
|
|
||||||
Accounts: accounts,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) UpdateAccount(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) DisconnectAccount(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
id := mux.Vars(r)["id"]
|
|
||||||
cloudIntegrationID, err := valuer.NewUUID(id)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
req := new(cloudintegrationtypes.UpdatableAccount)
|
|
||||||
if err := binding.JSON.BindBody(r.Body, req); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := req.Validate(provider); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
account, err := handler.module.GetAccount(ctx, valuer.MustNewUUID(claims.OrgID), cloudIntegrationID, provider)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := account.Update(req.Config); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = handler.module.UpdateAccount(ctx, account)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusNoContent, nil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) DisconnectAccount(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) ListServicesMetadata(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
id := mux.Vars(r)["id"]
|
|
||||||
cloudIntegrationID, err := valuer.NewUUID(id)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
err = handler.module.DisconnectAccount(ctx, valuer.MustNewUUID(claims.OrgID), cloudIntegrationID, provider)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusNoContent, nil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) ListServicesMetadata(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) GetService(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var integrationID *valuer.UUID
|
|
||||||
if idStr := r.URL.Query().Get("cloud_integration_id"); idStr != "" {
|
|
||||||
id, err := valuer.NewUUID(idStr)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
integrationID = &id
|
|
||||||
}
|
|
||||||
|
|
||||||
services, err := handler.module.ListServicesMetadata(ctx, valuer.MustNewUUID(claims.OrgID), provider, integrationID)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusOK, &cloudintegrationtypes.GettableServicesMetadata{
|
|
||||||
Services: services,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) GetService(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) UpdateService(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceIDString := mux.Vars(r)["service_id"]
|
|
||||||
serviceID, err := cloudintegrationtypes.NewServiceID(provider, serviceIDString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var integrationID *valuer.UUID
|
|
||||||
if idStr := r.URL.Query().Get("cloud_integration_id"); idStr != "" {
|
|
||||||
id, err := valuer.NewUUID(idStr)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
integrationID = &id
|
|
||||||
}
|
|
||||||
|
|
||||||
svc, err := handler.module.GetService(ctx, valuer.MustNewUUID(claims.OrgID), integrationID, serviceID, provider)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusOK, svc)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *handler) UpdateService(rw http.ResponseWriter, r *http.Request) {
|
func (handler *handler) AgentCheckIn(writer http.ResponseWriter, request *http.Request) {
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
// TODO implement me
|
||||||
defer cancel()
|
panic("implement me")
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
serviceIDString := mux.Vars(r)["service_id"]
|
|
||||||
serviceID, err := cloudintegrationtypes.NewServiceID(provider, serviceIDString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
req := new(cloudintegrationtypes.UpdatableService)
|
|
||||||
if err := binding.JSON.BindBody(r.Body, req); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
cloudIntegrationID, err := valuer.NewUUID(mux.Vars(r)["id"])
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
orgID := valuer.MustNewUUID(claims.OrgID)
|
|
||||||
|
|
||||||
svc, err := handler.module.GetService(ctx, orgID, &cloudIntegrationID, serviceID, provider)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if svc.CloudIntegrationService == nil {
|
|
||||||
cloudIntegrationService := cloudintegrationtypes.NewCloudIntegrationService(serviceID, cloudIntegrationID, req.Config)
|
|
||||||
err = handler.module.CreateService(ctx, orgID, cloudIntegrationService, provider)
|
|
||||||
} else {
|
|
||||||
svc.CloudIntegrationService.Update(req.Config)
|
|
||||||
err = handler.module.UpdateService(ctx, orgID, svc.CloudIntegrationService, provider)
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusNoContent, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (handler *handler) AgentCheckIn(rw http.ResponseWriter, r *http.Request) {
|
|
||||||
ctx, cancel := context.WithTimeout(r.Context(), 10*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
providerString := mux.Vars(r)["cloud_provider"]
|
|
||||||
provider, err := cloudintegrationtypes.NewCloudProvider(providerString)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
req := new(cloudintegrationtypes.PostableAgentCheckInRequest)
|
|
||||||
if err := binding.JSON.BindBody(r.Body, req); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := req.Validate(); err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Map old fields → new fields for backward compatibility with old agents
|
|
||||||
// Old agents send account_id (=> cloudIntegrationId) and cloud_account_id (=> providerAccountId)
|
|
||||||
if req.ID != "" {
|
|
||||||
id, err := valuer.NewUUID(req.ID)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
req.CloudIntegrationID = id
|
|
||||||
req.ProviderAccountID = req.AccountID
|
|
||||||
}
|
|
||||||
|
|
||||||
orgID := valuer.MustNewUUID(claims.OrgID)
|
|
||||||
resp, err := handler.module.AgentCheckIn(ctx, orgID, provider, &req.AgentCheckInRequest)
|
|
||||||
if err != nil {
|
|
||||||
render.Error(rw, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
render.Success(rw, http.StatusOK, cloudintegrationtypes.NewGettableAgentCheckInResponse(provider, resp))
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
package implcloudintegration
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/errors"
|
|
||||||
"github.com/SigNoz/signoz/pkg/modules/cloudintegration"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/cloudintegrationtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/types/dashboardtypes"
|
|
||||||
"github.com/SigNoz/signoz/pkg/valuer"
|
|
||||||
)
|
|
||||||
|
|
||||||
type module struct{}
|
|
||||||
|
|
||||||
func NewModule() cloudintegration.Module {
|
|
||||||
return &module{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) CreateAccount(ctx context.Context, account *cloudintegrationtypes.Account) error {
|
|
||||||
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "create account is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetAccount(ctx context.Context, orgID valuer.UUID, accountID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) (*cloudintegrationtypes.Account, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "get account is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) ListAccounts(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) ([]*cloudintegrationtypes.Account, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "list accounts is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) UpdateAccount(ctx context.Context, account *cloudintegrationtypes.Account) error {
|
|
||||||
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "update account is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) DisconnectAccount(ctx context.Context, orgID valuer.UUID, accountID valuer.UUID, provider cloudintegrationtypes.CloudProviderType) error {
|
|
||||||
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "disconnect account is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) CreateService(ctx context.Context, orgID valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
|
|
||||||
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "create service is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetService(ctx context.Context, orgID valuer.UUID, integrationID *valuer.UUID, serviceID cloudintegrationtypes.ServiceID, provider cloudintegrationtypes.CloudProviderType) (*cloudintegrationtypes.Service, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "get service is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) ListServicesMetadata(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, integrationID *valuer.UUID) ([]*cloudintegrationtypes.ServiceMetadata, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "list services metadata is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) UpdateService(ctx context.Context, orgID valuer.UUID, service *cloudintegrationtypes.CloudIntegrationService, provider cloudintegrationtypes.CloudProviderType) error {
|
|
||||||
return errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "update service is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetConnectionArtifact(ctx context.Context, account *cloudintegrationtypes.Account, req *cloudintegrationtypes.ConnectionArtifactRequest) (*cloudintegrationtypes.ConnectionArtifact, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "get connection artifact is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) AgentCheckIn(ctx context.Context, orgID valuer.UUID, provider cloudintegrationtypes.CloudProviderType, req *cloudintegrationtypes.AgentCheckInRequest) (*cloudintegrationtypes.AgentCheckInResponse, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "agent check-in is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetDashboardByID(ctx context.Context, orgID valuer.UUID, id string) (*dashboardtypes.Dashboard, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "get dashboard by ID is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) ListDashboards(ctx context.Context, orgID valuer.UUID) ([]*dashboardtypes.Dashboard, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "list dashboards is not supported")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (module *module) GetCloudProvider(provider cloudintegrationtypes.CloudProviderType) (cloudintegration.CloudProviderModule, error) {
|
|
||||||
return nil, errors.New(errors.TypeUnsupported, cloudintegrationtypes.ErrCodeUnsupported, "get cloud provider is not supported")
|
|
||||||
}
|
|
||||||
@@ -172,9 +172,3 @@ func (store *store) UpdateService(ctx context.Context, service *cloudintegration
|
|||||||
Exec(ctx)
|
Exec(ctx)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (store *store) RunInTx(ctx context.Context, cb func(ctx context.Context) error) error {
|
|
||||||
return store.store.RunInTxCtx(ctx, nil, func(ctx context.Context) error {
|
|
||||||
return cb(ctx)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import (
|
|||||||
"github.com/uptrace/bun"
|
"github.com/uptrace/bun"
|
||||||
|
|
||||||
"github.com/SigNoz/signoz/pkg/prometheus"
|
"github.com/SigNoz/signoz/pkg/prometheus"
|
||||||
"github.com/SigNoz/signoz/pkg/query-service/utils/timestamp"
|
|
||||||
"github.com/SigNoz/signoz/pkg/sqlstore"
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
||||||
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
"github.com/SigNoz/signoz/pkg/telemetrystore"
|
||||||
"github.com/SigNoz/signoz/pkg/types"
|
"github.com/SigNoz/signoz/pkg/types"
|
||||||
@@ -1258,7 +1257,7 @@ func (r *ClickHouseReader) GetFlamegraphSpansForTrace(ctx context.Context, orgID
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedSpans = tracedetail.GetAllSpansForFlamegraph(traceRoots, spanIdToSpanNodeMap)
|
selectedSpans = tracedetail.GetSelectedSpansForFlamegraph(traceRoots, spanIdToSpanNodeMap)
|
||||||
traceCache := model.GetFlamegraphSpansForTraceCache{
|
traceCache := model.GetFlamegraphSpansForTraceCache{
|
||||||
StartTime: startTime,
|
StartTime: startTime,
|
||||||
EndTime: endTime,
|
EndTime: endTime,
|
||||||
@@ -1275,25 +1274,12 @@ func (r *ClickHouseReader) GetFlamegraphSpansForTrace(ctx context.Context, orgID
|
|||||||
}
|
}
|
||||||
|
|
||||||
processingPostCache := time.Now()
|
processingPostCache := time.Now()
|
||||||
selectedSpansForRequest := selectedSpans
|
selectedSpansForRequest := tracedetail.GetSelectedSpansForFlamegraphForRequest(req.SelectedSpanID, selectedSpans, startTime, endTime)
|
||||||
clientLimit := min(req.Limit, tracedetail.MaxLimitWithoutSampling)
|
r.logger.Info("getFlamegraphSpansForTrace: processing post cache", "duration", time.Since(processingPostCache), "traceID", traceID)
|
||||||
totalSpanCount := tracedetail.GetTotalSpanCount(selectedSpans)
|
|
||||||
if totalSpanCount > uint64(clientLimit) {
|
|
||||||
// using trace start and end time if boundary ts are set to zero (or not set)
|
|
||||||
boundaryStart := max(timestamp.MilliToNano(req.BoundaryStartTS), startTime)
|
|
||||||
boundaryEnd := timestamp.MilliToNano(req.BoundaryEndTS)
|
|
||||||
if boundaryEnd == 0 {
|
|
||||||
boundaryEnd = endTime
|
|
||||||
}
|
|
||||||
|
|
||||||
selectedSpansForRequest = tracedetail.GetSelectedSpansForFlamegraphForRequest(req.SelectedSpanID, selectedSpans, boundaryStart, boundaryEnd)
|
|
||||||
}
|
|
||||||
r.logger.Debug("getFlamegraphSpansForTrace: processing post cache", "duration", time.Since(processingPostCache), "traceID", traceID, "totalSpans", totalSpanCount, "limit", clientLimit)
|
|
||||||
|
|
||||||
trace.Spans = selectedSpansForRequest
|
trace.Spans = selectedSpansForRequest
|
||||||
trace.StartTimestampMillis = startTime / 1000000
|
trace.StartTimestampMillis = startTime / 1000000
|
||||||
trace.EndTimestampMillis = endTime / 1000000
|
trace.EndTimestampMillis = endTime / 1000000
|
||||||
trace.HasMore = totalSpanCount > uint64(clientLimit)
|
|
||||||
return trace, nil
|
return trace, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ func (s *Server) createPublicServer(api *APIHandler, web web.Web) (*http.Server,
|
|||||||
s.config.APIServer.Timeout.Default,
|
s.config.APIServer.Timeout.Default,
|
||||||
s.config.APIServer.Timeout.Max,
|
s.config.APIServer.Timeout.Max,
|
||||||
).Wrap)
|
).Wrap)
|
||||||
r.Use(middleware.NewAudit(s.signoz.Instrumentation.Logger(), s.config.APIServer.Logging.ExcludedRoutes, nil).Wrap)
|
r.Use(middleware.NewLogging(s.signoz.Instrumentation.Logger(), s.config.APIServer.Logging.ExcludedRoutes).Wrap)
|
||||||
r.Use(middleware.NewComment().Wrap)
|
r.Use(middleware.NewComment().Wrap)
|
||||||
|
|
||||||
am := middleware.NewAuthZ(s.signoz.Instrumentation.Logger(), s.signoz.Modules.OrgGetter, s.signoz.Authz)
|
am := middleware.NewAuthZ(s.signoz.Instrumentation.Logger(), s.signoz.Modules.OrgGetter, s.signoz.Authz)
|
||||||
|
|||||||
@@ -7,12 +7,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
flamegraphSpanLevelLimit float64 = 50
|
SPAN_LIMIT_PER_REQUEST_FOR_FLAMEGRAPH float64 = 50
|
||||||
flamegraphSpanLimitPerLevel int = 100
|
SPAN_LIMIT_PER_LEVEL int = 100
|
||||||
flamegraphSamplingBucketCount int = 50
|
TIMESTAMP_SAMPLING_BUCKET_COUNT int = 50
|
||||||
flamegraphTopLatencySpanCount int = 5
|
|
||||||
|
|
||||||
MaxLimitWithoutSampling uint = 120_000
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func ContainsFlamegraphSpan(slice []*model.FlamegraphSpan, item *model.FlamegraphSpan) bool {
|
func ContainsFlamegraphSpan(slice []*model.FlamegraphSpan, item *model.FlamegraphSpan) bool {
|
||||||
@@ -55,8 +52,7 @@ func FindIndexForSelectedSpan(spans [][]*model.FlamegraphSpan, selectedSpanId st
|
|||||||
return selectedSpanLevel
|
return selectedSpanLevel
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAllSpansForFlamegraph groups all spans as per their level
|
func GetSelectedSpansForFlamegraph(traceRoots []*model.FlamegraphSpan, spanIdToSpanNodeMap map[string]*model.FlamegraphSpan) [][]*model.FlamegraphSpan {
|
||||||
func GetAllSpansForFlamegraph(traceRoots []*model.FlamegraphSpan, spanIdToSpanNodeMap map[string]*model.FlamegraphSpan) [][]*model.FlamegraphSpan {
|
|
||||||
|
|
||||||
var traceIdLevelledFlamegraph = map[string]map[int64][]*model.FlamegraphSpan{}
|
var traceIdLevelledFlamegraph = map[string]map[int64][]*model.FlamegraphSpan{}
|
||||||
selectedSpans := [][]*model.FlamegraphSpan{}
|
selectedSpans := [][]*model.FlamegraphSpan{}
|
||||||
@@ -104,7 +100,7 @@ func getLatencyAndTimestampBucketedSpans(spans []*model.FlamegraphSpan, selected
|
|||||||
})
|
})
|
||||||
|
|
||||||
// pick the top 5 latency spans
|
// pick the top 5 latency spans
|
||||||
for idx := range flamegraphTopLatencySpanCount {
|
for idx := range 5 {
|
||||||
sampledSpans = append(sampledSpans, spans[idx])
|
sampledSpans = append(sampledSpans, spans[idx])
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,17 +117,17 @@ func getLatencyAndTimestampBucketedSpans(spans []*model.FlamegraphSpan, selected
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bucketSize := (endTime - startTime) / uint64(flamegraphSamplingBucketCount)
|
bucketSize := (endTime - startTime) / uint64(TIMESTAMP_SAMPLING_BUCKET_COUNT)
|
||||||
if bucketSize == 0 {
|
if bucketSize == 0 {
|
||||||
bucketSize = 1
|
bucketSize = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
bucketedSpans := make([][]*model.FlamegraphSpan, flamegraphSamplingBucketCount)
|
bucketedSpans := make([][]*model.FlamegraphSpan, 50)
|
||||||
|
|
||||||
for _, span := range spans {
|
for _, span := range spans {
|
||||||
if span.TimeUnixNano >= startTime && span.TimeUnixNano <= endTime {
|
if span.TimeUnixNano >= startTime && span.TimeUnixNano <= endTime {
|
||||||
bucketIndex := int((span.TimeUnixNano - startTime) / bucketSize)
|
bucketIndex := int((span.TimeUnixNano - startTime) / bucketSize)
|
||||||
if bucketIndex >= 0 && bucketIndex < flamegraphSamplingBucketCount {
|
if bucketIndex >= 0 && bucketIndex < 50 {
|
||||||
bucketedSpans[bucketIndex] = append(bucketedSpans[bucketIndex], span)
|
bucketedSpans[bucketIndex] = append(bucketedSpans[bucketIndex], span)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -160,8 +156,8 @@ func GetSelectedSpansForFlamegraphForRequest(selectedSpanID string, selectedSpan
|
|||||||
selectedIndex = FindIndexForSelectedSpan(selectedSpans, selectedSpanID)
|
selectedIndex = FindIndexForSelectedSpan(selectedSpans, selectedSpanID)
|
||||||
}
|
}
|
||||||
|
|
||||||
lowerLimit := selectedIndex - int(flamegraphSpanLevelLimit*0.4)
|
lowerLimit := selectedIndex - int(SPAN_LIMIT_PER_REQUEST_FOR_FLAMEGRAPH*0.4)
|
||||||
upperLimit := selectedIndex + int(flamegraphSpanLevelLimit*0.6)
|
upperLimit := selectedIndex + int(SPAN_LIMIT_PER_REQUEST_FOR_FLAMEGRAPH*0.6)
|
||||||
|
|
||||||
if lowerLimit < 0 {
|
if lowerLimit < 0 {
|
||||||
upperLimit = upperLimit - lowerLimit
|
upperLimit = upperLimit - lowerLimit
|
||||||
@@ -178,7 +174,7 @@ func GetSelectedSpansForFlamegraphForRequest(selectedSpanID string, selectedSpan
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := lowerLimit; i < upperLimit; i++ {
|
for i := lowerLimit; i < upperLimit; i++ {
|
||||||
if len(selectedSpans[i]) > flamegraphSpanLimitPerLevel {
|
if len(selectedSpans[i]) > SPAN_LIMIT_PER_LEVEL {
|
||||||
_spans := getLatencyAndTimestampBucketedSpans(selectedSpans[i], selectedSpanID, i == selectedIndex, startTime, endTime)
|
_spans := getLatencyAndTimestampBucketedSpans(selectedSpans[i], selectedSpanID, i == selectedIndex, startTime, endTime)
|
||||||
selectedSpansForRequest = append(selectedSpansForRequest, _spans)
|
selectedSpansForRequest = append(selectedSpansForRequest, _spans)
|
||||||
} else {
|
} else {
|
||||||
@@ -188,12 +184,3 @@ func GetSelectedSpansForFlamegraphForRequest(selectedSpanID string, selectedSpan
|
|||||||
|
|
||||||
return selectedSpansForRequest
|
return selectedSpansForRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetTotalSpanCount(spans [][]*model.FlamegraphSpan) uint64 {
|
|
||||||
levelCount := len(spans)
|
|
||||||
spanCount := uint64(0)
|
|
||||||
for i := range levelCount {
|
|
||||||
spanCount += uint64(len(spans[i]))
|
|
||||||
}
|
|
||||||
return spanCount
|
|
||||||
}
|
|
||||||
|
|||||||