@cdklabs/multi-az-observability 0.0.1-alpha.40 → 0.0.1-alpha.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/.jsii +3 -3
  2. package/README.md +34 -32
  3. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +7 -6
  4. package/lib/azmapper/AvailabilityZoneMapper.js +1 -1
  5. package/lib/basic_observability/BasicServiceMultiAZObservability.js +1 -1
  6. package/lib/canaries/src/canary.zip +0 -0
  7. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +4 -4
  8. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +3 -3
  9. package/lib/metrics/ApplicationLoadBalancerMetrics.js +2 -2
  10. package/lib/metrics/AvailabilityAndLatencyMetrics.js +3 -3
  11. package/lib/monitoring/src/monitoring-layer.zip +0 -0
  12. package/lib/outlier-detection/src/outlier-detection.zip +0 -0
  13. package/lib/outlier-detection/src/scipy-layer.zip +0 -0
  14. package/lib/services/CanaryMetrics.js +1 -1
  15. package/lib/services/CanaryTestAvailabilityMetricsOverride.js +1 -1
  16. package/lib/services/CanaryTestLatencyMetricsOverride.js +1 -1
  17. package/lib/services/CanaryTestMetricsOverride.js +1 -1
  18. package/lib/services/ContributorInsightRuleDetails.js +1 -1
  19. package/lib/services/InstrumentedServiceMultiAZObservability.js +1 -1
  20. package/lib/services/Operation.js +1 -1
  21. package/lib/services/OperationAvailabilityMetricDetails.js +1 -1
  22. package/lib/services/OperationLatencyMetricDetails.js +1 -1
  23. package/lib/services/OperationMetricDetails.js +1 -1
  24. package/lib/services/Service.js +1 -1
  25. package/lib/services/ServiceAvailabilityMetricDetails.js +1 -1
  26. package/lib/services/ServiceLatencyMetricDetails.js +1 -1
  27. package/lib/services/ServiceMetricDetails.js +1 -1
  28. package/lib/services/props/MetricDimensions.js +1 -1
  29. package/package.json +2 -2
package/.jsii CHANGED
@@ -3934,7 +3934,7 @@
3934
3934
  },
3935
3935
  "name": "@cdklabs/multi-az-observability",
3936
3936
  "readme": {
3937
- "markdown": "![Build Workflow](https://github.com/cdklabs/cdk-multi-az-observability/actions/workflows/build.yml/badge.svg) ![Release Workflow](https://github.com/cdklabs/cdk-multi-az-observability/actions/workflows/release.yml/badge.svg) ![GitHub Release](https://img.shields.io/github/v/release/cdklabs/cdk-multi-az-observability?include_prereleases&sort=semver&logo=github&label=version)\n\n# multi-az-observability\nThis is a CDK construct for multi-AZ observability to help detect single-AZ impairments. This is currently an `alpha` version, but is being used in the AWS [Advanced Multi-AZ Resilience Patterns](https://catalog.workshops.aws/multi-az-gray-failures/en-US) workshop.\n\nThere is a lot of available information to think through and combine to provide signals about single-AZ impact. To simplify the setup and use reasonable defaults, this construct (available in [TypeScript](https://www.npmjs.com/package/@cdklabs/multi-az-observability), [Go](https://github.com/cdklabs/cdk-multi-az-observability-go), [Python](https://pypi.org/project/cdklabs.multi-az-observability/), [.NET](https://www.nuget.org/packages/Cdklabs.MultiAZObservability), and [Java](https://central.sonatype.com/artifact/io.github.cdklabs/cdk-multi-az-observability)) sets up the necessary observability. To use the CDK construct, you first define your service like this:\n\n```csharp\nvar wildRydesService = new Service(new ServiceProps(){\n ServiceName = \"WildRydes\",\n BaseUrl = \"http://www.example.com\",\n FaultCountThreshold = 25,\n AvailabilityZoneNames = vpc.AvailabilityZones,\n Period = Duration.Seconds(60),\n LoadBalancer = loadBalancer,\n DefaultAvailabilityMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps() {\n AlarmStatistic = \"Sum\",\n DatapointsToAlarm = 3,\n EvaluationPeriods = 5,\n FaultAlarmThreshold = 1,\n FaultMetricNames = new string[] { \"Fault\", \"Error\" },\n GraphedFaultStatistics = new string[] { \"Sum\" },\n GraphedSuccessStatistics = new string[] { \"Sum\" },\n MetricNamespace = metricsNamespace,\n Period = Duration.Seconds(60),\n SuccessAlarmThreshold = 99,\n SuccessMetricNames = new string[] {\"Success\"},\n Unit = Unit.COUNT,\n }),\n DefaultLatencyMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps(){\n AlarmStatistic = \"p99\",\n DatapointsToAlarm = 3,\n EvaluationPeriods = 5,\n FaultAlarmThreshold = 1,\n FaultMetricNames = new string[] { \"FaultLatency\" },\n GraphedFaultStatistics = new string[] { \"p50\" },\n GraphedSuccessStatistics = new string[] { \"p50\", \"p99\", \"tm50\", \"tm99\" },\n MetricNamespace = metricsNamespace,\n Period = Duration.Seconds(60),\n SuccessAlarmThreshold = Duration.Millis(100),\n SuccessMetricNames = new string[] {\"SuccessLatency\"},\n Unit = Unit.MILLISECONDS,\n }),\n DefaultContributorInsightRuleDetails = new ContributorInsightRuleDetails(new ContributorInsightRuleDetailsProps() {\n AvailabilityZoneIdJsonPath = azIdJsonPath,\n FaultMetricJsonPath = faultMetricJsonPath,\n InstanceIdJsonPath = instanceIdJsonPath,\n LogGroups = serverLogGroups,\n OperationNameJsonPath = operationNameJsonPath,\n SuccessLatencyMetricJsonPath = successLatencyMetricJsonPath\n }),\n CanaryTestProps = new AddCanaryTestProps() {\n RequestCount = 10,\n LoadBalancer = loadBalancer,\n Schedule = \"rate(1 minute)\",\n NetworkConfiguration = new NetworkConfigurationProps() {\n Vpc = vpc,\n SubnetSelection = new SubnetSelection() { SubnetType = SubnetType.PRIVATE_ISOLATED }\n }\n }\n});\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Signin\",\n Path = \"/signin\",\n Service = wildRydesService,\n Critical = true,\n HttpMethods = new string[] { \"GET\" },\n ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Signin\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Signin\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Signin\",\n SuccessAlarmThreshold = Duration.Millis(150),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Signin\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(250),\n })\n}));\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Pay\",\n Path = \"/pay\",\n Service = wildRydesService,\n HttpMethods = new string[] { \"GET\" },\n Critical = true,\n ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Pay\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Pay\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Pay\",\n SuccessAlarmThreshold = Duration.Millis(200),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Pay\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(300)\n })\n}));\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Ride\",\n Path = \"/ride\",\n Service = wildRydesService,\n HttpMethods = new string[] { \"GET\" },\n Critical = true,\n ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Ride\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Ride\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Ride\",\n SuccessAlarmThreshold = Duration.Millis(350),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Ride\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(550)\n })\n}));\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Home\",\n Path = \"/home\",\n Service = wildRydesService,\n HttpMethods = new string[] { \"GET\" },\n Critical = true,\n ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Home\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Ride\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {\n OperationName = \"Home\",\n SuccessAlarmThreshold = Duration.Millis(100),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Ride\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(200)\n })\n}));\n```\n\nThen you provide that service definition to the CDK construct.\n\n```csharp\nInstrumentedServiceMultiAZObservability multiAvailabilityZoneObservability = new InstrumentedServiceMultiAZObservability(this, \"MultiAZObservability\", new InstrumentedServiceMultiAZObservabilityProps() {\n Service = wildRydesService,\n CreateDashboards = true,\n Interval = Duration.Minutes(60), // The interval for the dashboard\n OutlierDetectionAlgorithm = OutlierDetectionAlgorithm.STATIC\n});\n```\n\nYou define some characteristics of the service, default values for metrics and alarms, and then add operations as well as any overrides for default values that you need. The construct can also automatically create synthetic canaries that test each operation with a very simple HTTP check, or you can configure your own synthetics and just tell the construct about the metric details and optionally log files. This creates metrics, alarms, and dashboards that can be used to detect single-AZ impact. You can access these alarms from the `multiAvailabilityZoneObservability` object and use them in your CDK project to start automation, send SNS notifications, or incorporate in your own dashboards.\n\nIf you don't have service specific logs and custom metrics with per-AZ dimensions, you can still use the construct to evaluate ALB and/or NAT Gateway metrics to find single AZ impairments.\n\n```csharp\nBasicServiceMultiAZObservability multiAZObservability = new BasicServiceMultiAZObservability(this, \"basic-service-\", new BasicServiceMultiAZObservabilityProps() {\n ApplicationLoadBalancerProps = new ApplicationLoadBalancerDetectionProps() {\n ApplicationLoadBalancers = [ myALB ],\n LatencyStatistic = Stats.Percentile(99),\n FaultCountPercentThreshold = 1,\n LatencyThreshold = Duration.Millis(500)\n },\n NatGatewayProps = new NatGatewayDetectionProps() {\n PacketLossPercentThreshold = 0.01,\n NatGateways = {\n { \"us-east-1a\", [ natGateway1 ] },\n { \"us-east-1b\", [ natGateway2 ] },\n { \"us-east-1c\", [ natGateway3 ] }\n },\n },\n CreateDashboard = true,\n DatapointsToAlarm = 2,\n EvaluationPeriods = 3,\n ServiceName = \"WildRydes\",\n Period = Duration.Seconds(60),\n Interval = Duration.Minutes(60),\n});\n```\n\nIf you provide a load balancer, the construct assumes it is deployed in each AZ of the VPC the load balancer is associated with and will look for HTTP metrics using those AZs as dimensions.\n\nBoth options support running workloads on EC2, ECS, Lambda, and EKS."
3937
+ "markdown": "![Build Workflow](https://github.com/cdklabs/cdk-multi-az-observability/actions/workflows/build.yml/badge.svg) ![Release Workflow](https://github.com/cdklabs/cdk-multi-az-observability/actions/workflows/release.yml/badge.svg) ![GitHub Release](https://img.shields.io/github/v/release/cdklabs/cdk-multi-az-observability?include_prereleases&sort=semver&logo=github&label=version)\n\n# multi-az-observability\nThis is a CDK construct for multi-AZ observability to help detect single-AZ impairments. This is currently an `alpha` version, but is being used in the AWS [Advanced Multi-AZ Resilience Patterns](https://catalog.workshops.aws/multi-az-gray-failures/en-US) workshop.\n\nThere is a lot of available information to think through and combine to provide signals about single-AZ impact. To simplify the setup and use reasonable defaults, this construct (available in [TypeScript](https://www.npmjs.com/package/@cdklabs/multi-az-observability), [Go](https://github.com/cdklabs/cdk-multi-az-observability-go), [Python](https://pypi.org/project/cdklabs.multi-az-observability/), [.NET](https://www.nuget.org/packages/Cdklabs.MultiAZObservability), and [Java](https://central.sonatype.com/artifact/io.github.cdklabs/cdk-multi-az-observability)) sets up the necessary observability. To use the CDK construct, you first define your service like this:\n\n```csharp\nvar wildRydesService = new Service(new ServiceProps(){\n ServiceName = \"WildRydes\",\n BaseUrl = \"http://www.example.com\",\n FaultCountThreshold = 25,\n AvailabilityZoneNames = vpc.AvailabilityZones,\n Period = Duration.Seconds(60),\n LoadBalancer = loadBalancer,\n DefaultAvailabilityMetricDetails = new ServiceAvailabilityMetricDetails(new ServiceAvailabilityMetricDetailsProps() {\n AlarmStatistic = \"Sum\",\n DatapointsToAlarm = 2,\n EvaluationPeriods = 3,\n FaultAlarmThreshold = 1,\n FaultMetricNames = new string[] { \"Fault\", \"Failure\" },\n GraphedFaultStatistics = new string[] { \"Sum\" },\n GraphedSuccessStatistics = new string[] { \"Sum\" },\n MetricNamespace = metricsNamespace,\n Period = Duration.Seconds(60),\n SuccessAlarmThreshold = 99,\n SuccessMetricNames = new string[] {\"Success\"},\n Unit = Unit.COUNT,\n }),\n DefaultLatencyMetricDetails = new ServiceLatencyMetricDetails(new ServiceLatencyMetricDetailsProps(){\n AlarmStatistic = \"p99\",\n DatapointsToAlarm = 2,\n EvaluationPeriods = 3,\n FaultMetricNames = new string[] { \"FaultLatency\" },\n GraphedFaultStatistics = new string[] { \"p50\" },\n GraphedSuccessStatistics = new string[] { \"p50\", \"p99\", \"tm50\", \"tm99\" },\n MetricNamespace = metricsNamespace,\n Period = Duration.Seconds(60),\n SuccessAlarmThreshold = Duration.Millis(100),\n SuccessMetricNames = new string[] {\"SuccessLatency\"},\n Unit = Unit.MILLISECONDS,\n }),\n DefaultContributorInsightRuleDetails = new ContributorInsightRuleDetails(new ContributorInsightRuleDetailsProps() {\n AvailabilityZoneIdJsonPath = azIdJsonPath,\n FaultMetricJsonPath = faultMetricJsonPath,\n InstanceIdJsonPath = instanceIdJsonPath,\n LogGroups = serverLogGroups,\n OperationNameJsonPath = operationNameJsonPath,\n SuccessLatencyMetricJsonPath = successLatencyMetricJsonPath\n }),\n CanaryTestProps = new AddCanaryTestProps() {\n RequestCount = 60,\n RegionalRequestCount = 60,\n LoadBalancer = loadBalancer,\n Schedule = \"rate(1 minute)\",\n Timeout = Duration.Seconds(3),\n NetworkConfiguration = new NetworkConfigurationProps() {\n Vpc = vpc,\n SubnetSelection = new SubnetSelection() { SubnetType = SubnetType.PRIVATE_ISOLATED }\n }\n }\n}\n\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Signin\",\n Path = \"/signin\",\n Service = wildRydesService,\n Critical = true,\n HttpMethods = new string[] { \"GET\" },\n ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {\n OperationName = \"Signin\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Signin\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {\n OperationName = \"Signin\",\n SuccessAlarmThreshold = Duration.Millis(150),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Signin\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(500)\n })\n})\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Pay\",\n Path = \"/pay\",\n Service = wildRydesService,\n HttpMethods = new string[] { \"GET\" },\n Critical = true,\n ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {\n OperationName = \"Pay\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Pay\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {\n OperationName = \"Pay\",\n SuccessAlarmThreshold = Duration.Millis(200),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Pay\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(500)\n })\n})\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Ride\",\n Path = \"/ride\",\n Service = wildRydesService,\n HttpMethods = new string[] { \"GET\" },\n Critical = true,\n ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {\n OperationName = \"Ride\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Ride\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {\n OperationName = \"Ride\",\n SuccessAlarmThreshold = Duration.Millis(350),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Ride\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(650)\n })\n})\nwildRydesService.AddOperation(new Operation(new OperationProps() {\n OperationName = \"Home\",\n Path = \"/home\",\n Service = wildRydesService,\n HttpMethods = new string[] { \"GET\" },\n Critical = true,\n ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {\n OperationName = \"Home\",\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Home\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultAvailabilityMetricDetails),\n ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {\n OperationName = \"Home\",\n SuccessAlarmThreshold = Duration.Millis(100),\n MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ \"Operation\", \"Home\"}}, \"AZ-ID\", \"Region\")\n }, wildRydesService.DefaultLatencyMetricDetails),\n CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {\n SuccessAlarmThreshold = Duration.Millis(500)\n })\n}));\n```\n\nThen you provide that service definition to the CDK construct.\n\n```csharp\nInstrumentedServiceMultiAZObservability multiAvailabilityZoneObservability = new InstrumentedServiceMultiAZObservability(this, \"MultiAZObservability\", new InstrumentedServiceMultiAZObservabilityProps() {\n Service = wildRydesService,\n CreateDashboards = true,\n Interval = Duration.Minutes(60), // The interval for the dashboard\n OutlierDetectionAlgorithm = OutlierDetectionAlgorithm.STATIC\n});\n```\n\nYou define some characteristics of the service, default values for metrics and alarms, and then add operations as well as any overrides for default values that you need. The construct can also automatically create synthetic canaries that test each operation with a very simple HTTP check, or you can configure your own synthetics and just tell the construct about the metric details and optionally log files. This creates metrics, alarms, and dashboards that can be used to detect single-AZ impact. You can access these alarms from the `multiAvailabilityZoneObservability` object and use them in your CDK project to start automation, send SNS notifications, or incorporate in your own dashboards.\n\nIf you don't have service specific logs and custom metrics with per-AZ dimensions, you can still use the construct to evaluate ALB and/or NAT Gateway metrics to find single AZ impairments.\n\n```csharp\nBasicServiceMultiAZObservability multiAZObservability = new BasicServiceMultiAZObservability(this, \"basic-service-\", new BasicServiceMultiAZObservabilityProps() {\n ApplicationLoadBalancerProps = new ApplicationLoadBalancerDetectionProps() {\n ApplicationLoadBalancers = [ myALB ],\n LatencyStatistic = Stats.Percentile(99),\n FaultCountPercentThreshold = 1,\n LatencyThreshold = Duration.Millis(500)\n },\n NatGatewayProps = new NatGatewayDetectionProps() {\n PacketLossPercentThreshold = 0.01,\n NatGateways = {\n { \"us-east-1a\", [ natGateway1 ] },\n { \"us-east-1b\", [ natGateway2 ] },\n { \"us-east-1c\", [ natGateway3 ] }\n },\n },\n CreateDashboard = true,\n DatapointsToAlarm = 2,\n EvaluationPeriods = 3,\n ServiceName = \"WildRydes\",\n Period = Duration.Seconds(60),\n Interval = Duration.Minutes(60),\n});\n```\n\nIf you provide a load balancer, the construct assumes it is deployed in each AZ of the VPC the load balancer is associated with and will look for HTTP metrics using those AZs as dimensions.\n\nBoth options support running workloads on EC2, ECS, Lambda, and EKS."
3938
3938
  },
3939
3939
  "repository": {
3940
3940
  "type": "git",
@@ -11628,6 +11628,6 @@
11628
11628
  "symbolId": "src/services/props/ServiceProps:ServiceProps"
11629
11629
  }
11630
11630
  },
11631
- "version": "0.0.1-alpha.40",
11632
- "fingerprint": "MfHoRh0qqixaV0F3Wa6caRDj1tYe31USDBvwpJRKn9o="
11631
+ "version": "0.0.1-alpha.41",
11632
+ "fingerprint": "Vxj8ZrNtuSp+kaHwEZQ+5UtmgvKeKlCCSKgTrD1ZnQ4="
11633
11633
  }
package/README.md CHANGED
@@ -13,12 +13,12 @@ var wildRydesService = new Service(new ServiceProps(){
13
13
  AvailabilityZoneNames = vpc.AvailabilityZones,
14
14
  Period = Duration.Seconds(60),
15
15
  LoadBalancer = loadBalancer,
16
- DefaultAvailabilityMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps() {
16
+ DefaultAvailabilityMetricDetails = new ServiceAvailabilityMetricDetails(new ServiceAvailabilityMetricDetailsProps() {
17
17
  AlarmStatistic = "Sum",
18
- DatapointsToAlarm = 3,
19
- EvaluationPeriods = 5,
18
+ DatapointsToAlarm = 2,
19
+ EvaluationPeriods = 3,
20
20
  FaultAlarmThreshold = 1,
21
- FaultMetricNames = new string[] { "Fault", "Error" },
21
+ FaultMetricNames = new string[] { "Fault", "Failure" },
22
22
  GraphedFaultStatistics = new string[] { "Sum" },
23
23
  GraphedSuccessStatistics = new string[] { "Sum" },
24
24
  MetricNamespace = metricsNamespace,
@@ -27,11 +27,10 @@ var wildRydesService = new Service(new ServiceProps(){
27
27
  SuccessMetricNames = new string[] {"Success"},
28
28
  Unit = Unit.COUNT,
29
29
  }),
30
- DefaultLatencyMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps(){
30
+ DefaultLatencyMetricDetails = new ServiceLatencyMetricDetails(new ServiceLatencyMetricDetailsProps(){
31
31
  AlarmStatistic = "p99",
32
- DatapointsToAlarm = 3,
33
- EvaluationPeriods = 5,
34
- FaultAlarmThreshold = 1,
32
+ DatapointsToAlarm = 2,
33
+ EvaluationPeriods = 3,
35
34
  FaultMetricNames = new string[] { "FaultLatency" },
36
35
  GraphedFaultStatistics = new string[] { "p50" },
37
36
  GraphedSuccessStatistics = new string[] { "p50", "p99", "tm50", "tm99" },
@@ -50,89 +49,92 @@ var wildRydesService = new Service(new ServiceProps(){
50
49
  SuccessLatencyMetricJsonPath = successLatencyMetricJsonPath
51
50
  }),
52
51
  CanaryTestProps = new AddCanaryTestProps() {
53
- RequestCount = 10,
52
+ RequestCount = 60,
53
+ RegionalRequestCount = 60,
54
54
  LoadBalancer = loadBalancer,
55
55
  Schedule = "rate(1 minute)",
56
+ Timeout = Duration.Seconds(3),
56
57
  NetworkConfiguration = new NetworkConfigurationProps() {
57
58
  Vpc = vpc,
58
59
  SubnetSelection = new SubnetSelection() { SubnetType = SubnetType.PRIVATE_ISOLATED }
59
- }
60
+ }
60
61
  }
61
- });
62
+ }
63
+
62
64
  wildRydesService.AddOperation(new Operation(new OperationProps() {
63
65
  OperationName = "Signin",
64
66
  Path = "/signin",
65
67
  Service = wildRydesService,
66
68
  Critical = true,
67
69
  HttpMethods = new string[] { "GET" },
68
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
70
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
69
71
  OperationName = "Signin",
70
72
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Signin"}}, "AZ-ID", "Region")
71
73
  }, wildRydesService.DefaultAvailabilityMetricDetails),
72
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
74
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
73
75
  OperationName = "Signin",
74
76
  SuccessAlarmThreshold = Duration.Millis(150),
75
77
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Signin"}}, "AZ-ID", "Region")
76
78
  }, wildRydesService.DefaultLatencyMetricDetails),
77
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
78
- SuccessAlarmThreshold = Duration.Millis(250),
79
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
80
+ SuccessAlarmThreshold = Duration.Millis(500)
79
81
  })
80
- }));
82
+ })
81
83
  wildRydesService.AddOperation(new Operation(new OperationProps() {
82
84
  OperationName = "Pay",
83
85
  Path = "/pay",
84
86
  Service = wildRydesService,
85
87
  HttpMethods = new string[] { "GET" },
86
88
  Critical = true,
87
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
89
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
88
90
  OperationName = "Pay",
89
91
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Pay"}}, "AZ-ID", "Region")
90
92
  }, wildRydesService.DefaultAvailabilityMetricDetails),
91
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
93
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
92
94
  OperationName = "Pay",
93
95
  SuccessAlarmThreshold = Duration.Millis(200),
94
96
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Pay"}}, "AZ-ID", "Region")
95
97
  }, wildRydesService.DefaultLatencyMetricDetails),
96
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
97
- SuccessAlarmThreshold = Duration.Millis(300)
98
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
99
+ SuccessAlarmThreshold = Duration.Millis(500)
98
100
  })
99
- }));
101
+ })
100
102
  wildRydesService.AddOperation(new Operation(new OperationProps() {
101
103
  OperationName = "Ride",
102
104
  Path = "/ride",
103
105
  Service = wildRydesService,
104
106
  HttpMethods = new string[] { "GET" },
105
107
  Critical = true,
106
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
108
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
107
109
  OperationName = "Ride",
108
110
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
109
111
  }, wildRydesService.DefaultAvailabilityMetricDetails),
110
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
112
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
111
113
  OperationName = "Ride",
112
114
  SuccessAlarmThreshold = Duration.Millis(350),
113
115
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
114
116
  }, wildRydesService.DefaultLatencyMetricDetails),
115
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
116
- SuccessAlarmThreshold = Duration.Millis(550)
117
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
118
+ SuccessAlarmThreshold = Duration.Millis(650)
117
119
  })
118
- }));
120
+ })
119
121
  wildRydesService.AddOperation(new Operation(new OperationProps() {
120
122
  OperationName = "Home",
121
123
  Path = "/home",
122
124
  Service = wildRydesService,
123
125
  HttpMethods = new string[] { "GET" },
124
126
  Critical = true,
125
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
127
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
126
128
  OperationName = "Home",
127
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
129
+ MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Home"}}, "AZ-ID", "Region")
128
130
  }, wildRydesService.DefaultAvailabilityMetricDetails),
129
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
131
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
130
132
  OperationName = "Home",
131
133
  SuccessAlarmThreshold = Duration.Millis(100),
132
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
134
+ MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Home"}}, "AZ-ID", "Region")
133
135
  }, wildRydesService.DefaultLatencyMetricDetails),
134
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
135
- SuccessAlarmThreshold = Duration.Millis(200)
136
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
137
+ SuccessAlarmThreshold = Duration.Millis(500)
136
138
  })
137
139
  }));
138
140
  ```