@cdklabs/multi-az-observability 0.0.1-alpha.3 → 0.0.1-alpha.30

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 (100) hide show
  1. package/.jsii +374 -147
  2. package/API.md +292 -100
  3. package/README.md +21 -14
  4. package/cdk.json +1 -1
  5. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +7 -7
  6. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +35 -35
  7. package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.js +2 -2
  8. package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.d.ts +6 -15
  9. package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.js +2 -10
  10. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.d.ts +11 -3
  11. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +24 -13
  12. package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.d.ts +0 -8
  13. package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.js +1 -1
  14. package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +19 -27
  15. package/lib/alarmsandrules/IOperationAlarmsAndRules.js +1 -1
  16. package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +1 -1
  17. package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +0 -8
  18. package/lib/alarmsandrules/IServiceAlarmsAndRules.js +1 -1
  19. package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +14 -22
  20. package/lib/alarmsandrules/OperationAlarmsAndRules.js +51 -71
  21. package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.d.ts +5 -5
  22. package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.js +2 -3
  23. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.d.ts +21 -13
  24. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +43 -29
  25. package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +0 -2
  26. package/lib/alarmsandrules/ServiceAlarmsAndRules.js +61 -39
  27. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +6 -44
  28. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +1 -1
  29. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +28 -7
  30. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +1 -1
  31. package/lib/azmapper/AvailabilityZoneMapper.js +4 -3
  32. package/lib/basic_observability/BasicServiceDashboard.d.ts +1 -3
  33. package/lib/basic_observability/BasicServiceDashboard.js +69 -100
  34. package/lib/basic_observability/BasicServiceMultiAZObservability.d.ts +8 -9
  35. package/lib/basic_observability/BasicServiceMultiAZObservability.js +100 -312
  36. package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.d.ts +50 -0
  37. package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.js +3 -0
  38. package/lib/basic_observability/props/BasicServiceDashboardProps.d.ts +27 -13
  39. package/lib/basic_observability/props/BasicServiceDashboardProps.js +1 -1
  40. package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.d.ts +10 -38
  41. package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.js +1 -1
  42. package/lib/basic_observability/props/NatGatewayDetectionProps.d.ts +31 -0
  43. package/lib/basic_observability/props/NatGatewayDetectionProps.js +3 -0
  44. package/lib/canaries/CanaryFunction.js +7 -6
  45. package/lib/canaries/src/canary.zip +0 -0
  46. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +2 -6
  47. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +440 -506
  48. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +0 -1
  49. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +56 -113
  50. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +3 -66
  51. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +1 -1
  52. package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +7 -2
  53. package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +1 -1
  54. package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +7 -2
  55. package/lib/dashboards/props/OperationLatencyWidgetProps.js +1 -1
  56. package/lib/index.d.ts +5 -0
  57. package/lib/index.js +8 -2
  58. package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +72 -4
  59. package/lib/metrics/ApplicationLoadBalancerMetrics.js +712 -32
  60. package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +23 -0
  61. package/lib/metrics/AvailabilityAndLatencyMetrics.js +117 -24
  62. package/lib/metrics/NatGatewayMetrics.d.ts +110 -0
  63. package/lib/metrics/NatGatewayMetrics.js +300 -0
  64. package/lib/metrics/RegionalLatencyMetrics.d.ts +1 -1
  65. package/lib/metrics/RegionalLatencyMetrics.js +27 -20
  66. package/lib/metrics/ZonalAvailabilityMetrics.d.ts +2 -8
  67. package/lib/metrics/ZonalAvailabilityMetrics.js +10 -25
  68. package/lib/metrics/ZonalLatencyMetrics.d.ts +2 -1
  69. package/lib/metrics/ZonalLatencyMetrics.js +33 -23
  70. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +4 -0
  71. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +1 -1
  72. package/lib/metrics/props/LatencyMetricProps.d.ts +6 -0
  73. package/lib/metrics/props/LatencyMetricProps.js +1 -1
  74. package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +4 -0
  75. package/lib/metrics/props/ZonalAvailabilityMetricProps.js +1 -1
  76. package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +4 -0
  77. package/lib/metrics/props/ZonalLatencyMetricProps.js +1 -1
  78. package/lib/monitoring/src/monitoring-layer.zip +0 -0
  79. package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.d.ts +10 -0
  80. package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.js +15 -0
  81. package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.d.ts +18 -0
  82. package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.js +23 -0
  83. package/lib/outlier-detection/OutlierDetectionFunction.js +6 -5
  84. package/lib/outlier-detection/PacketLossOutlierAlgorithm.d.ts +10 -0
  85. package/lib/outlier-detection/PacketLossOutlierAlgorithm.js +15 -0
  86. package/lib/outlier-detection/src/outlier-detection.zip +0 -0
  87. package/lib/outlier-detection/src/scipy-layer.zip +0 -0
  88. package/lib/services/CanaryMetrics.js +1 -1
  89. package/lib/services/CanaryTestMetricsOverride.js +1 -1
  90. package/lib/services/ContributorInsightRuleDetails.js +1 -1
  91. package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +10 -0
  92. package/lib/services/InstrumentedServiceMultiAZObservability.js +188 -194
  93. package/lib/services/Operation.js +1 -1
  94. package/lib/services/OperationMetricDetails.js +1 -1
  95. package/lib/services/Service.js +1 -1
  96. package/lib/services/ServiceMetricDetails.js +1 -1
  97. package/lib/services/props/MetricDimensions.js +1 -1
  98. package/lib/utilities/MetricsHelper.d.ts +15 -10
  99. package/lib/utilities/MetricsHelper.js +19 -11
  100. package/package.json +8 -8
package/.jsii CHANGED
@@ -3887,7 +3887,7 @@
3887
3887
  "stability": "experimental"
3888
3888
  },
3889
3889
  "homepage": "https://github.com/cdklabs/cdk-multi-az-observability",
3890
- "jsiiVersion": "5.5.21 (build db74302)",
3890
+ "jsiiVersion": "5.5.25 (build c24bfd2)",
3891
3891
  "keywords": [
3892
3892
  "aws-cdk",
3893
3893
  "cdk",
@@ -3908,7 +3908,7 @@
3908
3908
  },
3909
3909
  "name": "@cdklabs/multi-az-observability",
3910
3910
  "readme": {
3911
- "markdown": "# 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, Go, Python, and .NET [Java coming soon]) 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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.\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 NAT Gateway metrics to find single AZ faults.\n\n```csharp\nBasicServiceMultiAZObservability multiAvailabilityZoneObservability = new BasicServiceMultiAZObservability(this, \"MultiAZObservability\", new BasicServiceMultiAZObservabilityProps() {\n ApplicationLoadBalancers = new IApplicationLoadBalancer[] { loadBalancer },\n NatGateways = new Dictionary<string, CfnNatGateway>() {\n { \"us-east-1a\", natGateway1},\n { \"us-east-1b\", natGateway2},\n { \"us-east-1c\", natGateway3},\n },\n CreateDashboard = true,\n OutlierDetectionAlgorithm = OutlierDetectionAlgorithm.STATIC,\n FaultCountPercentageThreshold = 1.0, // The fault rate to alarm on for errors seen from the ALBs in the same AZ\n PacketLossImpactPercentageThreshold = 0.01, // The percentage of packet loss to alarm on for the NAT Gateways in the same AZ\n ServiceName = \"WildRydes\",\n Period = Duration.Seconds(60), // The period for metric evaluation\n Interval = Duration.Minutes(60) // The interval for the dashboards\n EvaluationPeriods = 5,\n DatapointsToAlarm = 3\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.\n"
3911
+ "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)\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, Go, Python, and .NET [Java coming soon]) 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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 = 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.\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 NAT Gateway metrics to find single AZ faults.\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 = 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."
3912
3912
  },
3913
3913
  "repository": {
3914
3914
  "type": "git",
@@ -4142,6 +4142,223 @@
4142
4142
  ],
4143
4143
  "symbolId": "src/canaries/props/AddCanaryTestProps:AddCanaryTestProps"
4144
4144
  },
4145
+ "@cdklabs/multi-az-observability.ApplicationLoadBalancerAvailabilityOutlierAlgorithm": {
4146
+ "assembly": "@cdklabs/multi-az-observability",
4147
+ "docs": {
4148
+ "stability": "experimental",
4149
+ "summary": "The options for calculating if an ALB is an outlier for availability."
4150
+ },
4151
+ "fqn": "@cdklabs/multi-az-observability.ApplicationLoadBalancerAvailabilityOutlierAlgorithm",
4152
+ "kind": "enum",
4153
+ "locationInModule": {
4154
+ "filename": "src/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.ts",
4155
+ "line": 4
4156
+ },
4157
+ "members": [
4158
+ {
4159
+ "docs": {
4160
+ "stability": "experimental",
4161
+ "summary": "This will take the availability threshold and calculate if one AZ is responsible for that percentage of errors."
4162
+ },
4163
+ "name": "STATIC"
4164
+ }
4165
+ ],
4166
+ "name": "ApplicationLoadBalancerAvailabilityOutlierAlgorithm",
4167
+ "symbolId": "src/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm:ApplicationLoadBalancerAvailabilityOutlierAlgorithm"
4168
+ },
4169
+ "@cdklabs/multi-az-observability.ApplicationLoadBalancerDetectionProps": {
4170
+ "assembly": "@cdklabs/multi-az-observability",
4171
+ "datatype": true,
4172
+ "docs": {
4173
+ "stability": "experimental",
4174
+ "summary": "The properties for performing zonal impact detection with ALB(s)."
4175
+ },
4176
+ "fqn": "@cdklabs/multi-az-observability.ApplicationLoadBalancerDetectionProps",
4177
+ "kind": "interface",
4178
+ "locationInModule": {
4179
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4180
+ "line": 8
4181
+ },
4182
+ "name": "ApplicationLoadBalancerDetectionProps",
4183
+ "properties": [
4184
+ {
4185
+ "abstract": true,
4186
+ "docs": {
4187
+ "stability": "experimental",
4188
+ "summary": "The application load balancers to collect metrics from."
4189
+ },
4190
+ "immutable": true,
4191
+ "locationInModule": {
4192
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4193
+ "line": 13
4194
+ },
4195
+ "name": "applicationLoadBalancers",
4196
+ "type": {
4197
+ "collection": {
4198
+ "elementtype": {
4199
+ "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.IApplicationLoadBalancer"
4200
+ },
4201
+ "kind": "array"
4202
+ }
4203
+ }
4204
+ },
4205
+ {
4206
+ "abstract": true,
4207
+ "docs": {
4208
+ "remarks": "This should align with your availability goal. For example\n1% or 5%, provided as 1 or 5.",
4209
+ "stability": "experimental",
4210
+ "summary": "The percentage of faults for a single ALB to consider an AZ to be unhealthy, a number between 0 and 100."
4211
+ },
4212
+ "immutable": true,
4213
+ "locationInModule": {
4214
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4215
+ "line": 20
4216
+ },
4217
+ "name": "faultCountPercentThreshold",
4218
+ "type": {
4219
+ "primitive": "number"
4220
+ }
4221
+ },
4222
+ {
4223
+ "abstract": true,
4224
+ "docs": {
4225
+ "stability": "experimental",
4226
+ "summary": "The statistic used to measure target response latency, like p99, which can be specified using Stats.percentile(99) or \"p99\"."
4227
+ },
4228
+ "immutable": true,
4229
+ "locationInModule": {
4230
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4231
+ "line": 32
4232
+ },
4233
+ "name": "latencyStatistic",
4234
+ "type": {
4235
+ "primitive": "string"
4236
+ }
4237
+ },
4238
+ {
4239
+ "abstract": true,
4240
+ "docs": {
4241
+ "stability": "experimental",
4242
+ "summary": "The threshold in milliseconds for ALB targets whose responses are slower than this value at the specified percentile statistic."
4243
+ },
4244
+ "immutable": true,
4245
+ "locationInModule": {
4246
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4247
+ "line": 26
4248
+ },
4249
+ "name": "latencyThreshold",
4250
+ "type": {
4251
+ "primitive": "number"
4252
+ }
4253
+ },
4254
+ {
4255
+ "abstract": true,
4256
+ "docs": {
4257
+ "default": "STATIC",
4258
+ "stability": "experimental",
4259
+ "summary": "The method used to determine if an AZ is an outlier for availability for Application Load Balancer metrics."
4260
+ },
4261
+ "immutable": true,
4262
+ "locationInModule": {
4263
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4264
+ "line": 44
4265
+ },
4266
+ "name": "availabilityOutlierAlgorithm",
4267
+ "optional": true,
4268
+ "type": {
4269
+ "fqn": "@cdklabs/multi-az-observability.ApplicationLoadBalancerAvailabilityOutlierAlgorithm"
4270
+ }
4271
+ },
4272
+ {
4273
+ "abstract": true,
4274
+ "docs": {
4275
+ "default": "\"This depends on the algorithm used. STATIC: 66\"",
4276
+ "stability": "experimental",
4277
+ "summary": "The threshold for the outlier detection algorithm."
4278
+ },
4279
+ "immutable": true,
4280
+ "locationInModule": {
4281
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4282
+ "line": 51
4283
+ },
4284
+ "name": "availabilityOutlierThreshold",
4285
+ "optional": true,
4286
+ "type": {
4287
+ "primitive": "number"
4288
+ }
4289
+ },
4290
+ {
4291
+ "abstract": true,
4292
+ "docs": {
4293
+ "default": "Z_SCORE",
4294
+ "stability": "experimental",
4295
+ "summary": "The method used to determine if an AZ is an outlier for latency for Application Load Balancer metrics."
4296
+ },
4297
+ "immutable": true,
4298
+ "locationInModule": {
4299
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4300
+ "line": 38
4301
+ },
4302
+ "name": "latencyOutlierAlgorithm",
4303
+ "optional": true,
4304
+ "type": {
4305
+ "fqn": "@cdklabs/multi-az-observability.ApplicationLoadBalancerLatencyOutlierAlgorithm"
4306
+ }
4307
+ },
4308
+ {
4309
+ "abstract": true,
4310
+ "docs": {
4311
+ "default": "\"This depends on the algorithm used. STATIC: 66. Z_SCORE: 3.\"",
4312
+ "stability": "experimental",
4313
+ "summary": "The threshold for the outlier detection algorithm."
4314
+ },
4315
+ "immutable": true,
4316
+ "locationInModule": {
4317
+ "filename": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps.ts",
4318
+ "line": 58
4319
+ },
4320
+ "name": "latencyOutlierThreshold",
4321
+ "optional": true,
4322
+ "type": {
4323
+ "primitive": "number"
4324
+ }
4325
+ }
4326
+ ],
4327
+ "symbolId": "src/basic_observability/props/ApplicationLoadBalancerDetectionProps:ApplicationLoadBalancerDetectionProps"
4328
+ },
4329
+ "@cdklabs/multi-az-observability.ApplicationLoadBalancerLatencyOutlierAlgorithm": {
4330
+ "assembly": "@cdklabs/multi-az-observability",
4331
+ "docs": {
4332
+ "stability": "experimental",
4333
+ "summary": "The options for calculating if an AZ is an outlier for latency for ALBs."
4334
+ },
4335
+ "fqn": "@cdklabs/multi-az-observability.ApplicationLoadBalancerLatencyOutlierAlgorithm",
4336
+ "kind": "enum",
4337
+ "locationInModule": {
4338
+ "filename": "src/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.ts",
4339
+ "line": 4
4340
+ },
4341
+ "members": [
4342
+ {
4343
+ "docs": {
4344
+ "remarks": "This provides a static comparison\nof the number of high latency requests in one AZ versus the others",
4345
+ "stability": "experimental",
4346
+ "summary": "This will take the latency threshold and count the number of requests per AZ that exceed this threshold and then calculate the percentage of requests exceeding this threshold belong to each AZ."
4347
+ },
4348
+ "name": "STATIC"
4349
+ },
4350
+ {
4351
+ "docs": {
4352
+ "remarks": "It uses\nthe target response time of all requests to calculate the standard deviation and\naverage for all AZs. This is the default.",
4353
+ "stability": "experimental",
4354
+ "summary": "This calculates the z score of latency in one AZ against the other AZs."
4355
+ },
4356
+ "name": "Z_SCORE"
4357
+ }
4358
+ ],
4359
+ "name": "ApplicationLoadBalancerLatencyOutlierAlgorithm",
4360
+ "symbolId": "src/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm:ApplicationLoadBalancerLatencyOutlierAlgorithm"
4361
+ },
4145
4362
  "@cdklabs/multi-az-observability.AvailabilityZoneMapper": {
4146
4363
  "assembly": "@cdklabs/multi-az-observability",
4147
4364
  "base": "constructs.Construct",
@@ -4515,7 +4732,7 @@
4515
4732
  },
4516
4733
  "locationInModule": {
4517
4734
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4518
- "line": 86
4735
+ "line": 81
4519
4736
  },
4520
4737
  "parameters": [
4521
4738
  {
@@ -4544,7 +4761,7 @@
4544
4761
  "kind": "class",
4545
4762
  "locationInModule": {
4546
4763
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4547
- "line": 39
4764
+ "line": 34
4548
4765
  },
4549
4766
  "name": "BasicServiceMultiAZObservability",
4550
4767
  "properties": [
@@ -4555,7 +4772,7 @@
4555
4772
  },
4556
4773
  "locationInModule": {
4557
4774
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4558
- "line": 74
4775
+ "line": 69
4559
4776
  },
4560
4777
  "name": "aggregateZonalIsolatedImpactAlarms",
4561
4778
  "overrides": "@cdklabs/multi-az-observability.IBasicServiceMultiAZObservability",
@@ -4575,7 +4792,7 @@
4575
4792
  },
4576
4793
  "locationInModule": {
4577
4794
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4578
- "line": 56
4795
+ "line": 51
4579
4796
  },
4580
4797
  "name": "serviceName",
4581
4798
  "overrides": "@cdklabs/multi-az-observability.IBasicServiceMultiAZObservability",
@@ -4590,7 +4807,7 @@
4590
4807
  },
4591
4808
  "locationInModule": {
4592
4809
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4593
- "line": 68
4810
+ "line": 63
4594
4811
  },
4595
4812
  "name": "albZonalIsolatedImpactAlarms",
4596
4813
  "optional": true,
@@ -4611,7 +4828,7 @@
4611
4828
  },
4612
4829
  "locationInModule": {
4613
4830
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4614
- "line": 51
4831
+ "line": 46
4615
4832
  },
4616
4833
  "name": "applicationLoadBalancers",
4617
4834
  "optional": true,
@@ -4632,7 +4849,7 @@
4632
4849
  },
4633
4850
  "locationInModule": {
4634
4851
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4635
- "line": 79
4852
+ "line": 74
4636
4853
  },
4637
4854
  "name": "dashboard",
4638
4855
  "optional": true,
@@ -4647,7 +4864,7 @@
4647
4864
  },
4648
4865
  "locationInModule": {
4649
4866
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4650
- "line": 46
4867
+ "line": 41
4651
4868
  },
4652
4869
  "name": "natGateways",
4653
4870
  "optional": true,
@@ -4673,7 +4890,7 @@
4673
4890
  },
4674
4891
  "locationInModule": {
4675
4892
  "filename": "src/basic_observability/BasicServiceMultiAZObservability.ts",
4676
- "line": 62
4893
+ "line": 57
4677
4894
  },
4678
4895
  "name": "natGWZonalIsolatedImpactAlarms",
4679
4896
  "optional": true,
@@ -4714,7 +4931,7 @@
4714
4931
  "immutable": true,
4715
4932
  "locationInModule": {
4716
4933
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4717
- "line": 123
4934
+ "line": 93
4718
4935
  },
4719
4936
  "name": "datapointsToAlarm",
4720
4937
  "type": {
@@ -4730,62 +4947,13 @@
4730
4947
  "immutable": true,
4731
4948
  "locationInModule": {
4732
4949
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4733
- "line": 118
4950
+ "line": 88
4734
4951
  },
4735
4952
  "name": "evaluationPeriods",
4736
4953
  "type": {
4737
4954
  "primitive": "number"
4738
4955
  }
4739
4956
  },
4740
- {
4741
- "abstract": true,
4742
- "docs": {
4743
- "remarks": "For example\n1% or 5%, specify as 1 or 5.",
4744
- "stability": "experimental",
4745
- "summary": "The percentage of faults for a single ALB to consider an AZ to be unhealthy, this should align with your availability goal."
4746
- },
4747
- "immutable": true,
4748
- "locationInModule": {
4749
- "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4750
- "line": 49
4751
- },
4752
- "name": "faultCountPercentageThreshold",
4753
- "type": {
4754
- "primitive": "number"
4755
- }
4756
- },
4757
- {
4758
- "abstract": true,
4759
- "docs": {
4760
- "stability": "experimental",
4761
- "summary": "The statistic used to measure target response latency, like p99, which can be specified using Stats.percentile(99) or \"p99\"."
4762
- },
4763
- "immutable": true,
4764
- "locationInModule": {
4765
- "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4766
- "line": 61
4767
- },
4768
- "name": "latencyStatistic",
4769
- "type": {
4770
- "primitive": "string"
4771
- }
4772
- },
4773
- {
4774
- "abstract": true,
4775
- "docs": {
4776
- "stability": "experimental",
4777
- "summary": "The threshold in seconds for ALB targets whose responses are slower than this value at the specified percentile statistic."
4778
- },
4779
- "immutable": true,
4780
- "locationInModule": {
4781
- "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4782
- "line": 55
4783
- },
4784
- "name": "latencyThreshold",
4785
- "type": {
4786
- "primitive": "number"
4787
- }
4788
- },
4789
4957
  {
4790
4958
  "abstract": true,
4791
4959
  "docs": {
@@ -4795,7 +4963,7 @@
4795
4963
  "immutable": true,
4796
4964
  "locationInModule": {
4797
4965
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4798
- "line": 34
4966
+ "line": 31
4799
4967
  },
4800
4968
  "name": "serviceName",
4801
4969
  "type": {
@@ -4805,25 +4973,20 @@
4805
4973
  {
4806
4974
  "abstract": true,
4807
4975
  "docs": {
4808
- "default": "\"No alarms for ALBs will be created\"",
4809
- "remarks": "There will be an alarm created for \neach AZ for each ALB. Then, there will be a composite alarm for AZ created from the input\nof all ALBs. You must either specify an ALB or a NAT GW.",
4976
+ "default": "\"No ALBs will be used to calculate impact.\"",
4977
+ "remarks": "You must specify this\nand/or natGatewayProps.",
4810
4978
  "stability": "experimental",
4811
- "summary": "The application load balancers being used by the service."
4979
+ "summary": "Properties for ALBs to detect single AZ impact."
4812
4980
  },
4813
4981
  "immutable": true,
4814
4982
  "locationInModule": {
4815
4983
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4816
- "line": 29
4984
+ "line": 26
4817
4985
  },
4818
- "name": "applicationLoadBalancers",
4986
+ "name": "applicationLoadBalancerProps",
4819
4987
  "optional": true,
4820
4988
  "type": {
4821
- "collection": {
4822
- "elementtype": {
4823
- "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.IApplicationLoadBalancer"
4824
- },
4825
- "kind": "array"
4826
- }
4989
+ "fqn": "@cdklabs/multi-az-observability.ApplicationLoadBalancerDetectionProps"
4827
4990
  }
4828
4991
  },
4829
4992
  {
@@ -4837,7 +5000,7 @@
4837
5000
  "immutable": true,
4838
5001
  "locationInModule": {
4839
5002
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4840
- "line": 97
5003
+ "line": 67
4841
5004
  },
4842
5005
  "name": "assetsBucketParameterName",
4843
5006
  "optional": true,
@@ -4856,7 +5019,7 @@
4856
5019
  "immutable": true,
4857
5020
  "locationInModule": {
4858
5021
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4859
- "line": 113
5022
+ "line": 83
4860
5023
  },
4861
5024
  "name": "assetsBucketPrefixParameterName",
4862
5025
  "optional": true,
@@ -4874,7 +5037,7 @@
4874
5037
  "immutable": true,
4875
5038
  "locationInModule": {
4876
5039
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4877
- "line": 75
5040
+ "line": 45
4878
5041
  },
4879
5042
  "name": "createDashboard",
4880
5043
  "optional": true,
@@ -4892,7 +5055,7 @@
4892
5055
  "immutable": true,
4893
5056
  "locationInModule": {
4894
5057
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4895
- "line": 82
5058
+ "line": 52
4896
5059
  },
4897
5060
  "name": "interval",
4898
5061
  "optional": true,
@@ -4903,48 +5066,20 @@
4903
5066
  {
4904
5067
  "abstract": true,
4905
5068
  "docs": {
4906
- "default": "\"No alarms for NAT Gateways will be created\"",
4907
- "remarks": "One alarm per NAT GW will be created. If multiple NAT GWs\nare provided for a single AZ, those alarms will be aggregated into\na composite alarm for the AZ. You must either specify an ALB or a NAT GW.",
4908
- "stability": "experimental",
4909
- "summary": "(Optional) A map of Availability Zone name to the NAT Gateways in that AZ."
4910
- },
4911
- "immutable": true,
4912
- "locationInModule": {
4913
- "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4914
- "line": 20
4915
- },
4916
- "name": "natGateways",
4917
- "optional": true,
4918
- "type": {
4919
- "collection": {
4920
- "elementtype": {
4921
- "collection": {
4922
- "elementtype": {
4923
- "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway"
4924
- },
4925
- "kind": "array"
4926
- }
4927
- },
4928
- "kind": "map"
4929
- }
4930
- }
4931
- },
4932
- {
4933
- "abstract": true,
4934
- "docs": {
4935
- "default": "\"0.01 (as in 0.01%)\"",
5069
+ "default": "\"No NAT Gateways will be used to calculate impact.\"",
5070
+ "remarks": "You must specify\nthis and/or applicationLoadBalancerProps.",
4936
5071
  "stability": "experimental",
4937
- "summary": "The amount of packet loss in a NAT GW to determine if an AZ is actually impacted, recommendation is 0.01%."
5072
+ "summary": "Properties for NAT Gateways to detect single AZ impact."
4938
5073
  },
4939
5074
  "immutable": true,
4940
5075
  "locationInModule": {
4941
5076
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4942
- "line": 42
5077
+ "line": 18
4943
5078
  },
4944
- "name": "packetLossImpactPercentageThreshold",
5079
+ "name": "natGatewayProps",
4945
5080
  "optional": true,
4946
5081
  "type": {
4947
- "primitive": "number"
5082
+ "fqn": "@cdklabs/multi-az-observability.NatGatewayDetectionProps"
4948
5083
  }
4949
5084
  },
4950
5085
  {
@@ -4957,7 +5092,7 @@
4957
5092
  "immutable": true,
4958
5093
  "locationInModule": {
4959
5094
  "filename": "src/basic_observability/props/BasicServiceMultiAZObservabilityProps.ts",
4960
- "line": 68
5095
+ "line": 38
4961
5096
  },
4962
5097
  "name": "period",
4963
5098
  "optional": true,
@@ -7203,36 +7338,6 @@
7203
7338
  },
7204
7339
  "name": "IServiceAlarmsAndRules",
7205
7340
  "properties": [
7206
- {
7207
- "abstract": true,
7208
- "docs": {
7209
- "stability": "experimental",
7210
- "summary": "An alarm for regional availability or latency impact of any critical operation as measured by the server-side."
7211
- },
7212
- "locationInModule": {
7213
- "filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
7214
- "line": 43
7215
- },
7216
- "name": "regionalAvailabilityOrLatencyServerSideAlarm",
7217
- "type": {
7218
- "fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
7219
- }
7220
- },
7221
- {
7222
- "abstract": true,
7223
- "docs": {
7224
- "stability": "experimental",
7225
- "summary": "An alarm for regional availability impact of any critical operation as measured by the server-side."
7226
- },
7227
- "locationInModule": {
7228
- "filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
7229
- "line": 48
7230
- },
7231
- "name": "regionalAvailabilityServerSideAlarm",
7232
- "type": {
7233
- "fqn": "aws-cdk-lib.aws_cloudwatch.IAlarm"
7234
- }
7235
- },
7236
7341
  {
7237
7342
  "abstract": true,
7238
7343
  "docs": {
@@ -7241,7 +7346,7 @@
7241
7346
  },
7242
7347
  "locationInModule": {
7243
7348
  "filename": "src/alarmsandrules/IServiceAlarmsAndRules.ts",
7244
- "line": 53
7349
+ "line": 43
7245
7350
  },
7246
7351
  "name": "regionalFaultCountServerSideAlarm",
7247
7352
  "type": {
@@ -7589,7 +7694,7 @@
7589
7694
  },
7590
7695
  "locationInModule": {
7591
7696
  "filename": "src/services/InstrumentedServiceMultiAZObservability.ts",
7592
- "line": 87
7697
+ "line": 355
7593
7698
  },
7594
7699
  "parameters": [
7595
7700
  {
@@ -8035,6 +8140,104 @@
8035
8140
  ],
8036
8141
  "symbolId": "src/services/props/MetricDimensions:MetricDimensions"
8037
8142
  },
8143
+ "@cdklabs/multi-az-observability.NatGatewayDetectionProps": {
8144
+ "assembly": "@cdklabs/multi-az-observability",
8145
+ "datatype": true,
8146
+ "docs": {
8147
+ "stability": "experimental",
8148
+ "summary": "The properties for performing zonal impact detection with NAT Gateway(s)."
8149
+ },
8150
+ "fqn": "@cdklabs/multi-az-observability.NatGatewayDetectionProps",
8151
+ "kind": "interface",
8152
+ "locationInModule": {
8153
+ "filename": "src/basic_observability/props/NatGatewayDetectionProps.ts",
8154
+ "line": 7
8155
+ },
8156
+ "name": "NatGatewayDetectionProps",
8157
+ "properties": [
8158
+ {
8159
+ "abstract": true,
8160
+ "docs": {
8161
+ "stability": "experimental",
8162
+ "summary": "A list of NAT Gateways per Availability Zone (using the AZ name as the key)."
8163
+ },
8164
+ "immutable": true,
8165
+ "locationInModule": {
8166
+ "filename": "src/basic_observability/props/NatGatewayDetectionProps.ts",
8167
+ "line": 12
8168
+ },
8169
+ "name": "natGateways",
8170
+ "type": {
8171
+ "collection": {
8172
+ "elementtype": {
8173
+ "collection": {
8174
+ "elementtype": {
8175
+ "fqn": "aws-cdk-lib.aws_ec2.CfnNatGateway"
8176
+ },
8177
+ "kind": "array"
8178
+ }
8179
+ },
8180
+ "kind": "map"
8181
+ }
8182
+ }
8183
+ },
8184
+ {
8185
+ "abstract": true,
8186
+ "docs": {
8187
+ "default": "PacketLossOutlierAlgorithm.STATIC",
8188
+ "stability": "experimental",
8189
+ "summary": "The algorithm to use to calculate an AZ as an outlier for packet loss."
8190
+ },
8191
+ "immutable": true,
8192
+ "locationInModule": {
8193
+ "filename": "src/basic_observability/props/NatGatewayDetectionProps.ts",
8194
+ "line": 26
8195
+ },
8196
+ "name": "packetLossOutlierAlgorithm",
8197
+ "optional": true,
8198
+ "type": {
8199
+ "fqn": "@cdklabs/multi-az-observability.PacketLossOutlierAlgorithm"
8200
+ }
8201
+ },
8202
+ {
8203
+ "abstract": true,
8204
+ "docs": {
8205
+ "default": "\"This depends on the outlier algorithm. STATIC: 66. Z-SCORE: 3.\"",
8206
+ "stability": "experimental",
8207
+ "summary": "The threshold used with the outlier calculation."
8208
+ },
8209
+ "immutable": true,
8210
+ "locationInModule": {
8211
+ "filename": "src/basic_observability/props/NatGatewayDetectionProps.ts",
8212
+ "line": 33
8213
+ },
8214
+ "name": "packetLossOutlierThreshold",
8215
+ "optional": true,
8216
+ "type": {
8217
+ "primitive": "number"
8218
+ }
8219
+ },
8220
+ {
8221
+ "abstract": true,
8222
+ "docs": {
8223
+ "default": "0.01 (as in 0.01%)",
8224
+ "stability": "experimental",
8225
+ "summary": "The percentage of packet loss at which you consider there to be impact."
8226
+ },
8227
+ "immutable": true,
8228
+ "locationInModule": {
8229
+ "filename": "src/basic_observability/props/NatGatewayDetectionProps.ts",
8230
+ "line": 19
8231
+ },
8232
+ "name": "packetLossPercentThreshold",
8233
+ "optional": true,
8234
+ "type": {
8235
+ "primitive": "number"
8236
+ }
8237
+ }
8238
+ ],
8239
+ "symbolId": "src/basic_observability/props/NatGatewayDetectionProps:NatGatewayDetectionProps"
8240
+ },
8038
8241
  "@cdklabs/multi-az-observability.NetworkConfigurationProps": {
8039
8242
  "assembly": "@cdklabs/multi-az-observability",
8040
8243
  "datatype": true,
@@ -9224,6 +9427,30 @@
9224
9427
  "name": "OutlierDetectionAlgorithm",
9225
9428
  "symbolId": "src/utilities/OutlierDetectionAlgorithm:OutlierDetectionAlgorithm"
9226
9429
  },
9430
+ "@cdklabs/multi-az-observability.PacketLossOutlierAlgorithm": {
9431
+ "assembly": "@cdklabs/multi-az-observability",
9432
+ "docs": {
9433
+ "stability": "experimental",
9434
+ "summary": "The options for calculating if a NAT Gateway is an outlier for packet loss."
9435
+ },
9436
+ "fqn": "@cdklabs/multi-az-observability.PacketLossOutlierAlgorithm",
9437
+ "kind": "enum",
9438
+ "locationInModule": {
9439
+ "filename": "src/outlier-detection/PacketLossOutlierAlgorithm.ts",
9440
+ "line": 4
9441
+ },
9442
+ "members": [
9443
+ {
9444
+ "docs": {
9445
+ "stability": "experimental",
9446
+ "summary": "This will take the availability threshold and calculate if one AZ is responsible for that percentage of packet loss."
9447
+ },
9448
+ "name": "STATIC"
9449
+ }
9450
+ ],
9451
+ "name": "PacketLossOutlierAlgorithm",
9452
+ "symbolId": "src/outlier-detection/PacketLossOutlierAlgorithm:PacketLossOutlierAlgorithm"
9453
+ },
9227
9454
  "@cdklabs/multi-az-observability.Service": {
9228
9455
  "assembly": "@cdklabs/multi-az-observability",
9229
9456
  "docs": {
@@ -10160,6 +10387,6 @@
10160
10387
  "symbolId": "src/services/props/ServiceProps:ServiceProps"
10161
10388
  }
10162
10389
  },
10163
- "version": "0.0.1-alpha.3",
10164
- "fingerprint": "t/7gmiT5lsADp2kfhh/RTCx/Vw6I/IGnL93ALxhVEqk="
10390
+ "version": "0.0.1-alpha.30",
10391
+ "fingerprint": "ys9BtzAGnjsEfKYQ35UHnXiostwzMUwA0IV+FfWyLDs="
10165
10392
  }