@cdklabs/multi-az-observability 0.0.1-alpha.4 → 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 (180) hide show
  1. package/.jsii +2237 -769
  2. package/API.md +5141 -1591
  3. package/README.md +63 -54
  4. package/cdk.json +1 -1
  5. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +14 -12
  6. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +50 -49
  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 +20 -27
  15. package/lib/alarmsandrules/IOperationAlarmsAndRules.js +1 -1
  16. package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +1 -1
  17. package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +19 -15
  18. package/lib/alarmsandrules/IServiceAlarmsAndRules.js +1 -1
  19. package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +15 -22
  20. package/lib/alarmsandrules/OperationAlarmsAndRules.js +52 -72
  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 +19 -15
  26. package/lib/alarmsandrules/ServiceAlarmsAndRules.js +34 -136
  27. package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.d.ts +4 -3
  28. package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.js +1 -1
  29. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +6 -44
  30. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +1 -1
  31. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +28 -7
  32. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +1 -1
  33. package/lib/azmapper/AvailabilityZoneMapper.js +8 -9
  34. package/lib/basic_observability/BasicServiceDashboard.d.ts +0 -3
  35. package/lib/basic_observability/BasicServiceDashboard.js +24 -112
  36. package/lib/basic_observability/BasicServiceMultiAZObservability.d.ts +8 -9
  37. package/lib/basic_observability/BasicServiceMultiAZObservability.js +98 -312
  38. package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.d.ts +51 -0
  39. package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.js +3 -0
  40. package/lib/basic_observability/props/BasicServiceDashboardProps.d.ts +27 -13
  41. package/lib/basic_observability/props/BasicServiceDashboardProps.js +1 -1
  42. package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.d.ts +10 -38
  43. package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.js +1 -1
  44. package/lib/basic_observability/props/NatGatewayDetectionProps.d.ts +31 -0
  45. package/lib/basic_observability/props/NatGatewayDetectionProps.js +3 -0
  46. package/lib/canaries/CanaryFunction.js +14 -13
  47. package/lib/canaries/CanaryTest.js +4 -4
  48. package/lib/canaries/src/canary.zip +0 -0
  49. package/lib/dashboards/ContributorInsightsWidget.d.ts +1 -1
  50. package/lib/dashboards/ContributorInsightsWidget.js +13 -17
  51. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +2 -6
  52. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +445 -507
  53. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +2 -10
  54. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +350 -437
  55. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +3 -66
  56. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +1 -1
  57. package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +7 -2
  58. package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +1 -1
  59. package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +7 -2
  60. package/lib/dashboards/props/OperationLatencyWidgetProps.js +1 -1
  61. package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +8 -8
  62. package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +1 -1
  63. package/lib/index.d.ts +54 -24
  64. package/lib/index.js +36 -17
  65. package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +77 -3
  66. package/lib/metrics/ApplicationLoadBalancerMetrics.js +813 -32
  67. package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +23 -0
  68. package/lib/metrics/AvailabilityAndLatencyMetrics.js +120 -26
  69. package/lib/metrics/NatGatewayMetrics.d.ts +113 -0
  70. package/lib/metrics/NatGatewayMetrics.js +357 -0
  71. package/lib/metrics/RegionalAvailabilityMetrics.js +4 -5
  72. package/lib/metrics/RegionalLatencyMetrics.d.ts +1 -1
  73. package/lib/metrics/RegionalLatencyMetrics.js +27 -20
  74. package/lib/metrics/ZonalAvailabilityMetrics.d.ts +2 -8
  75. package/lib/metrics/ZonalAvailabilityMetrics.js +10 -25
  76. package/lib/metrics/ZonalLatencyMetrics.d.ts +2 -1
  77. package/lib/metrics/ZonalLatencyMetrics.js +33 -23
  78. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +4 -0
  79. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +1 -1
  80. package/lib/metrics/props/LatencyMetricProps.d.ts +6 -0
  81. package/lib/metrics/props/LatencyMetricProps.js +1 -1
  82. package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +4 -0
  83. package/lib/metrics/props/ZonalAvailabilityMetricProps.js +1 -1
  84. package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +4 -0
  85. package/lib/metrics/props/ZonalLatencyMetricProps.js +1 -1
  86. package/lib/monitoring/src/monitoring-layer.zip +0 -0
  87. package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.d.ts +10 -0
  88. package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.js +15 -0
  89. package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.d.ts +18 -0
  90. package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.js +23 -0
  91. package/lib/outlier-detection/OutlierDetectionFunction.js +7 -6
  92. package/lib/outlier-detection/PacketLossOutlierAlgorithm.d.ts +10 -0
  93. package/lib/outlier-detection/PacketLossOutlierAlgorithm.js +15 -0
  94. package/lib/outlier-detection/src/outlier-detection.zip +0 -0
  95. package/lib/outlier-detection/src/scipy-layer.zip +0 -0
  96. package/lib/services/CanaryMetrics.d.ts +4 -3
  97. package/lib/services/CanaryMetrics.js +3 -4
  98. package/lib/services/CanaryTestAvailabilityMetricsOverride.d.ts +21 -0
  99. package/lib/services/CanaryTestAvailabilityMetricsOverride.js +23 -0
  100. package/lib/services/CanaryTestLatencyMetricsOverride.d.ts +15 -0
  101. package/lib/services/CanaryTestLatencyMetricsOverride.js +20 -0
  102. package/lib/services/CanaryTestMetricsOverride.d.ts +1 -13
  103. package/lib/services/CanaryTestMetricsOverride.js +2 -4
  104. package/lib/services/ContributorInsightRuleDetails.js +1 -1
  105. package/lib/services/ICanaryMetrics.d.ts +4 -3
  106. package/lib/services/ICanaryMetrics.js +1 -1
  107. package/lib/services/ICanaryTestAvailabilityMetricsOverride.d.ts +23 -0
  108. package/lib/services/ICanaryTestAvailabilityMetricsOverride.js +3 -0
  109. package/lib/services/ICanaryTestLatencyMetricsOverride.d.ts +13 -0
  110. package/lib/services/ICanaryTestLatencyMetricsOverride.js +3 -0
  111. package/lib/services/ICanaryTestMetricsOverride.d.ts +0 -12
  112. package/lib/services/ICanaryTestMetricsOverride.js +1 -1
  113. package/lib/services/IInstrumentedServiceMultiAZObservability.d.ts +13 -3
  114. package/lib/services/IInstrumentedServiceMultiAZObservability.js +1 -1
  115. package/lib/services/IOperation.d.ts +8 -6
  116. package/lib/services/IOperation.js +1 -1
  117. package/lib/services/IOperationAvailabilityMetricDetails.d.ts +18 -0
  118. package/lib/services/IOperationAvailabilityMetricDetails.js +3 -0
  119. package/lib/services/IOperationLatencyMetricDetails.d.ts +12 -0
  120. package/lib/services/IOperationLatencyMetricDetails.js +3 -0
  121. package/lib/services/IOperationMetricDetails.d.ts +0 -12
  122. package/lib/services/IOperationMetricDetails.js +1 -1
  123. package/lib/services/IService.d.ts +4 -3
  124. package/lib/services/IService.js +1 -1
  125. package/lib/services/IServiceAvailabilityMetricDetails.d.ts +18 -0
  126. package/lib/services/IServiceAvailabilityMetricDetails.js +3 -0
  127. package/lib/services/IServiceLatencyMetricDetails.d.ts +12 -0
  128. package/lib/services/IServiceLatencyMetricDetails.js +3 -0
  129. package/lib/services/IServiceMetricDetails.d.ts +0 -12
  130. package/lib/services/IServiceMetricDetails.js +1 -1
  131. package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +15 -3
  132. package/lib/services/InstrumentedServiceMultiAZObservability.js +197 -208
  133. package/lib/services/Operation.d.ts +8 -6
  134. package/lib/services/Operation.js +2 -2
  135. package/lib/services/OperationAvailabilityMetricDetails.d.ts +22 -0
  136. package/lib/services/OperationAvailabilityMetricDetails.js +24 -0
  137. package/lib/services/OperationLatencyMetricDetails.d.ts +16 -0
  138. package/lib/services/OperationLatencyMetricDetails.js +21 -0
  139. package/lib/services/OperationMetricDetails.d.ts +1 -13
  140. package/lib/services/OperationMetricDetails.js +2 -8
  141. package/lib/services/Service.d.ts +4 -3
  142. package/lib/services/Service.js +2 -2
  143. package/lib/services/ServiceAvailabilityMetricDetails.d.ts +21 -0
  144. package/lib/services/ServiceAvailabilityMetricDetails.js +20 -0
  145. package/lib/services/ServiceLatencyMetricDetails.d.ts +15 -0
  146. package/lib/services/ServiceLatencyMetricDetails.js +19 -0
  147. package/lib/services/ServiceMetricDetails.d.ts +1 -13
  148. package/lib/services/ServiceMetricDetails.js +2 -4
  149. package/lib/services/props/CanaryMetricProps.d.ts +4 -3
  150. package/lib/services/props/CanaryMetricProps.js +1 -1
  151. package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.d.ts +22 -0
  152. package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.js +3 -0
  153. package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.d.ts +14 -0
  154. package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.js +3 -0
  155. package/lib/services/props/CanaryTestMetricsOverrideProps.d.ts +0 -16
  156. package/lib/services/props/CanaryTestMetricsOverrideProps.js +1 -1
  157. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +1 -1
  158. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +1 -1
  159. package/lib/services/props/MetricDimensions.js +1 -1
  160. package/lib/services/props/OperationAvailabilityMetricDetailsProps.d.ts +22 -0
  161. package/lib/services/props/OperationAvailabilityMetricDetailsProps.js +3 -0
  162. package/lib/services/props/OperationLatencyMetricDetailsProps.d.ts +14 -0
  163. package/lib/services/props/OperationLatencyMetricDetailsProps.js +3 -0
  164. package/lib/services/props/OperationMetricDetailsProps.d.ts +0 -16
  165. package/lib/services/props/OperationMetricDetailsProps.js +1 -1
  166. package/lib/services/props/OperationProps.d.ts +4 -3
  167. package/lib/services/props/OperationProps.js +1 -1
  168. package/lib/services/props/ServiceAvailabilityMetricDetailsProps.d.ts +18 -0
  169. package/lib/services/props/ServiceAvailabilityMetricDetailsProps.js +3 -0
  170. package/lib/services/props/ServiceLatencyMetricDetailsProps.d.ts +12 -0
  171. package/lib/services/props/ServiceLatencyMetricDetailsProps.js +3 -0
  172. package/lib/services/props/ServiceMetricDetailsProps.d.ts +0 -12
  173. package/lib/services/props/ServiceMetricDetailsProps.js +1 -1
  174. package/lib/services/props/ServiceProps.d.ts +4 -3
  175. package/lib/services/props/ServiceProps.js +1 -1
  176. package/lib/utilities/MetricsHelper.d.ts +17 -9
  177. package/lib/utilities/MetricsHelper.js +34 -10
  178. package/package.json +10 -10
  179. package/lib/services/IBasicServiceMultiAZObservability.d.ts +0 -45
  180. package/lib/services/IBasicServiceMultiAZObservability.js +0 -3
package/README.md CHANGED
@@ -1,7 +1,9 @@
1
+ ![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)
2
+
1
3
  # multi-az-observability
2
4
  This 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.
3
5
 
4
- There 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:
6
+ There 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:
5
7
 
6
8
  ```csharp
7
9
  var wildRydesService = new Service(new ServiceProps(){
@@ -11,12 +13,12 @@ var wildRydesService = new Service(new ServiceProps(){
11
13
  AvailabilityZoneNames = vpc.AvailabilityZones,
12
14
  Period = Duration.Seconds(60),
13
15
  LoadBalancer = loadBalancer,
14
- DefaultAvailabilityMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps() {
16
+ DefaultAvailabilityMetricDetails = new ServiceAvailabilityMetricDetails(new ServiceAvailabilityMetricDetailsProps() {
15
17
  AlarmStatistic = "Sum",
16
- DatapointsToAlarm = 3,
17
- EvaluationPeriods = 5,
18
+ DatapointsToAlarm = 2,
19
+ EvaluationPeriods = 3,
18
20
  FaultAlarmThreshold = 1,
19
- FaultMetricNames = new string[] { "Fault", "Error" },
21
+ FaultMetricNames = new string[] { "Fault", "Failure" },
20
22
  GraphedFaultStatistics = new string[] { "Sum" },
21
23
  GraphedSuccessStatistics = new string[] { "Sum" },
22
24
  MetricNamespace = metricsNamespace,
@@ -25,17 +27,16 @@ var wildRydesService = new Service(new ServiceProps(){
25
27
  SuccessMetricNames = new string[] {"Success"},
26
28
  Unit = Unit.COUNT,
27
29
  }),
28
- DefaultLatencyMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps(){
30
+ DefaultLatencyMetricDetails = new ServiceLatencyMetricDetails(new ServiceLatencyMetricDetailsProps(){
29
31
  AlarmStatistic = "p99",
30
- DatapointsToAlarm = 3,
31
- EvaluationPeriods = 5,
32
- FaultAlarmThreshold = 1,
32
+ DatapointsToAlarm = 2,
33
+ EvaluationPeriods = 3,
33
34
  FaultMetricNames = new string[] { "FaultLatency" },
34
35
  GraphedFaultStatistics = new string[] { "p50" },
35
36
  GraphedSuccessStatistics = new string[] { "p50", "p99", "tm50", "tm99" },
36
37
  MetricNamespace = metricsNamespace,
37
38
  Period = Duration.Seconds(60),
38
- SuccessAlarmThreshold = 100,
39
+ SuccessAlarmThreshold = Duration.Millis(100),
39
40
  SuccessMetricNames = new string[] {"SuccessLatency"},
40
41
  Unit = Unit.MILLISECONDS,
41
42
  }),
@@ -48,89 +49,92 @@ var wildRydesService = new Service(new ServiceProps(){
48
49
  SuccessLatencyMetricJsonPath = successLatencyMetricJsonPath
49
50
  }),
50
51
  CanaryTestProps = new AddCanaryTestProps() {
51
- RequestCount = 10,
52
+ RequestCount = 60,
53
+ RegionalRequestCount = 60,
52
54
  LoadBalancer = loadBalancer,
53
55
  Schedule = "rate(1 minute)",
56
+ Timeout = Duration.Seconds(3),
54
57
  NetworkConfiguration = new NetworkConfigurationProps() {
55
58
  Vpc = vpc,
56
59
  SubnetSelection = new SubnetSelection() { SubnetType = SubnetType.PRIVATE_ISOLATED }
57
- }
60
+ }
58
61
  }
59
- });
62
+ }
63
+
60
64
  wildRydesService.AddOperation(new Operation(new OperationProps() {
61
65
  OperationName = "Signin",
62
66
  Path = "/signin",
63
67
  Service = wildRydesService,
64
68
  Critical = true,
65
69
  HttpMethods = new string[] { "GET" },
66
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
70
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
67
71
  OperationName = "Signin",
68
72
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Signin"}}, "AZ-ID", "Region")
69
73
  }, wildRydesService.DefaultAvailabilityMetricDetails),
70
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
74
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
71
75
  OperationName = "Signin",
72
- SuccessAlarmThreshold = 150,
76
+ SuccessAlarmThreshold = Duration.Millis(150),
73
77
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Signin"}}, "AZ-ID", "Region")
74
78
  }, wildRydesService.DefaultLatencyMetricDetails),
75
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
76
- SuccessAlarmThreshold = 250
79
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
80
+ SuccessAlarmThreshold = Duration.Millis(500)
77
81
  })
78
- }));
82
+ })
79
83
  wildRydesService.AddOperation(new Operation(new OperationProps() {
80
84
  OperationName = "Pay",
81
85
  Path = "/pay",
82
86
  Service = wildRydesService,
83
87
  HttpMethods = new string[] { "GET" },
84
88
  Critical = true,
85
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
89
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
86
90
  OperationName = "Pay",
87
91
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Pay"}}, "AZ-ID", "Region")
88
92
  }, wildRydesService.DefaultAvailabilityMetricDetails),
89
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
93
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
90
94
  OperationName = "Pay",
91
- SuccessAlarmThreshold = 200,
95
+ SuccessAlarmThreshold = Duration.Millis(200),
92
96
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Pay"}}, "AZ-ID", "Region")
93
97
  }, wildRydesService.DefaultLatencyMetricDetails),
94
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
95
- SuccessAlarmThreshold = 300
98
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
99
+ SuccessAlarmThreshold = Duration.Millis(500)
96
100
  })
97
- }));
101
+ })
98
102
  wildRydesService.AddOperation(new Operation(new OperationProps() {
99
103
  OperationName = "Ride",
100
104
  Path = "/ride",
101
105
  Service = wildRydesService,
102
106
  HttpMethods = new string[] { "GET" },
103
107
  Critical = true,
104
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
108
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
105
109
  OperationName = "Ride",
106
110
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
107
111
  }, wildRydesService.DefaultAvailabilityMetricDetails),
108
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
112
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
109
113
  OperationName = "Ride",
110
- SuccessAlarmThreshold = 350,
114
+ SuccessAlarmThreshold = Duration.Millis(350),
111
115
  MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
112
116
  }, wildRydesService.DefaultLatencyMetricDetails),
113
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
114
- SuccessAlarmThreshold = 550
117
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
118
+ SuccessAlarmThreshold = Duration.Millis(650)
115
119
  })
116
- }));
120
+ })
117
121
  wildRydesService.AddOperation(new Operation(new OperationProps() {
118
122
  OperationName = "Home",
119
123
  Path = "/home",
120
124
  Service = wildRydesService,
121
125
  HttpMethods = new string[] { "GET" },
122
126
  Critical = true,
123
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
127
+ ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
124
128
  OperationName = "Home",
125
- 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")
126
130
  }, wildRydesService.DefaultAvailabilityMetricDetails),
127
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
131
+ ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
128
132
  OperationName = "Home",
129
- SuccessAlarmThreshold = 100,
130
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
133
+ SuccessAlarmThreshold = Duration.Millis(100),
134
+ MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Home"}}, "AZ-ID", "Region")
131
135
  }, wildRydesService.DefaultLatencyMetricDetails),
132
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
133
- SuccessAlarmThreshold = 200
136
+ CanaryTestLatencyMetricsOverride = new CanaryTestLatencyMetricsOverride(new CanaryTestLatencyMetricsOverrideProps() {
137
+ SuccessAlarmThreshold = Duration.Millis(500)
134
138
  })
135
139
  }));
136
140
  ```
@@ -146,30 +150,35 @@ InstrumentedServiceMultiAZObservability multiAvailabilityZoneObservability = new
146
150
  });
147
151
  ```
148
152
 
149
- You 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.
153
+ You 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.
150
154
 
151
- If 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.
155
+ If 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.
152
156
 
153
157
  ```csharp
154
- BasicServiceMultiAZObservability multiAvailabilityZoneObservability = new BasicServiceMultiAZObservability(this, "MultiAZObservability", new BasicServiceMultiAZObservabilityProps() {
155
- ApplicationLoadBalancers = new IApplicationLoadBalancer[] { loadBalancer },
156
- NatGateways = new Dictionary<string, CfnNatGateway>() {
157
- { "us-east-1a", natGateway1},
158
- { "us-east-1b", natGateway2},
159
- { "us-east-1c", natGateway3},
158
+ BasicServiceMultiAZObservability multiAZObservability = new BasicServiceMultiAZObservability(this, "basic-service-", new BasicServiceMultiAZObservabilityProps() {
159
+ ApplicationLoadBalancerProps = new ApplicationLoadBalancerDetectionProps() {
160
+ ApplicationLoadBalancers = [ myALB ],
161
+ LatencyStatistic = Stats.Percentile(99),
162
+ FaultCountPercentThreshold = 1,
163
+ LatencyThreshold = Duration.Millis(500)
164
+ },
165
+ NatGatewayProps = new NatGatewayDetectionProps() {
166
+ PacketLossPercentThreshold = 0.01,
167
+ NatGateways = {
168
+ { "us-east-1a", [ natGateway1 ] },
169
+ { "us-east-1b", [ natGateway2 ] },
170
+ { "us-east-1c", [ natGateway3 ] }
171
+ },
160
172
  },
161
173
  CreateDashboard = true,
162
- OutlierDetectionAlgorithm = OutlierDetectionAlgorithm.STATIC,
163
- FaultCountPercentageThreshold = 1.0, // The fault rate to alarm on for errors seen from the ALBs in the same AZ
164
- PacketLossImpactPercentageThreshold = 0.01, // The percentage of packet loss to alarm on for the NAT Gateways in the same AZ
174
+ DatapointsToAlarm = 2,
175
+ EvaluationPeriods = 3,
165
176
  ServiceName = "WildRydes",
166
- Period = Duration.Seconds(60), // The period for metric evaluation
167
- Interval = Duration.Minutes(60) // The interval for the dashboards
168
- EvaluationPeriods = 5,
169
- DatapointsToAlarm = 3
177
+ Period = Duration.Seconds(60),
178
+ Interval = Duration.Minutes(60),
170
179
  });
171
180
  ```
172
181
 
173
182
  If 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.
174
183
 
175
- Both options support running workloads on EC2, ECS, Lambda, and EKS.
184
+ Both options support running workloads on EC2, ECS, Lambda, and EKS.
package/cdk.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "app": "npx ts-node --prefer-ts-exts test/synth-test.ts",
2
+ "app": "npx ts-node --prefer-ts-exts test/basic-service-synth-test.ts",
3
3
  "watch": {
4
4
  "include": [
5
5
  "**"
@@ -9,6 +9,8 @@ import { IContributorInsightRuleDetails } from '../services/IContributorInsightR
9
9
  import { IOperation } from '../services/IOperation';
10
10
  import { IOperationMetricDetails } from '../services/IOperationMetricDetails';
11
11
  import { OutlierDetectionAlgorithm } from '../utilities/OutlierDetectionAlgorithm';
12
+ import { IOperationAvailabilityMetricDetails } from '../services/IOperationAvailabilityMetricDetails';
13
+ import { IOperationLatencyMetricDetails } from '../services/IOperationLatencyMetricDetails';
12
14
  /**
13
15
  * Class used to create availability and latency alarms and Contributor Insight rules
14
16
  */
@@ -22,7 +24,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
22
24
  * @param counter
23
25
  * @returns
24
26
  */
25
- static createZonalAvailabilityAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
27
+ static createZonalAvailabilityAlarm(scope: Construct, metricDetails: IOperationAvailabilityMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
26
28
  /**
27
29
  * Creates a zonal latency alarm
28
30
  * @param scope
@@ -32,7 +34,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
32
34
  * @param counter
33
35
  * @returns
34
36
  */
35
- static createZonalLatencyAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
37
+ static createZonalLatencyAlarm(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
36
38
  /**
37
39
  * Creates a composite alarm when either latency or availability is breached in the Availabiltiy Zone
38
40
  * @param scope
@@ -55,7 +57,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
55
57
  * @param outlierThreshold
56
58
  * @returns
57
59
  */
58
- static createZonalFaultRateStaticOutlierAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
60
+ static createZonalFaultRateStaticOutlierAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
59
61
  /**
60
62
  * An alarm that compares error rate in this AZ to the overall region error based only on metric data.
61
63
  * This is different for canaries because the metrics they test at the regional level are different
@@ -69,15 +71,15 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
69
71
  * @param outlierThreshold
70
72
  * @returns
71
73
  */
72
- static createZonalFaultRateStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, availabilityZones: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
74
+ static createZonalFaultRateStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZone: string, availabilityZoneId: string, availabilityZoneIds: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
73
75
  static createZonalFaultRateOutlierAlarm(scope: IConstruct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, allAvailabilityZoneIds: string[], outlierThreshold: number, outlierDetectionFunction: IFunction, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, counter: number, nameSuffix?: string): IAlarm;
74
76
  static createZonalFaultRateOutlierAlarmForAlb(scope: IConstruct, loadBalancers: IApplicationLoadBalancer[], availabilityZoneId: string, outlierThreshold: number, outlierDetectionFunction: IFunction, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, azMapper: IAvailabilityZoneMapper, counter: number, evaluationPeriods: number, datapointsToAlarm: number, period: Duration, nameSuffix?: string): IAlarm;
75
77
  static createZonalFaultRateOutlierAlarmForNatGW(scope: IConstruct, natGateways: {
76
78
  [key: string]: CfnNatGateway[];
77
79
  }, availabilityZoneId: string, outlierThreshold: number, outlierDetectionFunction: IFunction, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, azMapper: IAvailabilityZoneMapper, counter: number, evaluationPeriods: number, datapointsToAlarm: number, period: Duration, nameSuffix?: string): IAlarm;
78
- static createZonalHighLatencyOutlierAlarm(scope: IConstruct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, allAvailabilityZoneIds: string[], outlierThreshold: number, outlierDetectionFunction: IFunction, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, counter: number, nameSuffix?: string): IAlarm;
79
- static createZonalHighLatencyStaticOutlierAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
80
- static createZonalHighLatencyStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, availabilityZones: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
80
+ static createZonalHighLatencyOutlierAlarm(scope: IConstruct, metricDetails: IOperationLatencyMetricDetails, availabilityZoneId: string, allAvailabilityZoneIds: string[], outlierThreshold: number, outlierDetectionFunction: IFunction, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, counter: number, nameSuffix?: string): IAlarm;
81
+ static createZonalHighLatencyStaticOutlierAlarm(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
82
+ static createZonalHighLatencyStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZone: string, availabilityZoneId: string, availabilityZones: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
81
83
  /**
82
84
  * An insight rule that calculates how many instances are responding to requests in
83
85
  * the specified AZ. Only useful for server-side metrics since the canary doesn't record instance id metrics.
@@ -120,7 +122,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
120
122
  * @param counter
121
123
  * @returns
122
124
  */
123
- static createServerSideInstanceHighLatencyContributorsInThisAZRule(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, ruleDetails: IContributorInsightRuleDetails, counter: number, nameSuffix?: string): CfnInsightRule;
125
+ static createServerSideInstanceHighLatencyContributorsInThisAZRule(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZoneId: string, ruleDetails: IContributorInsightRuleDetails, counter: number, nameSuffix?: string): CfnInsightRule;
124
126
  /**
125
127
  * An alarm that indicates some percentage of the instances in this AZ are producing errors. Only
126
128
  * useful for server-side metrics since the canary doesn't record instance id metrics.
@@ -204,7 +206,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
204
206
  * @param counter
205
207
  * @returns
206
208
  */
207
- static createRegionalAvailabilityAlarm(scope: Construct, metricDetails: IOperationMetricDetails, nameSuffix: string): IAlarm;
209
+ static createRegionalAvailabilityAlarm(scope: Construct, metricDetails: IOperationAvailabilityMetricDetails, nameSuffix: string): IAlarm;
208
210
  /**
209
211
  * Creates a regional latency alarm for the operation
210
212
  * @param scope
@@ -213,7 +215,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
213
215
  * @param counter
214
216
  * @returns
215
217
  */
216
- static createRegionalLatencyAlarm(scope: Construct, metricDetails: IOperationMetricDetails, nameSuffix: string): IAlarm;
218
+ static createRegionalLatencyAlarm(scope: Construct, metricDetails: IOperationLatencyMetricDetails, nameSuffix: string): IAlarm;
217
219
  /**
218
220
  * A composite alarm combining latency and availability alarms for this operation in the region
219
221
  * as measured from either the server side or canary
@@ -224,7 +226,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
224
226
  * @param regionalLatencyAlarm
225
227
  * @returns
226
228
  */
227
- static createRegionalCustomerExperienceAlarm(scope: Construct, operationName: string, nameSuffix: string, regionalAvailabilityAlarm: IAlarm, regionalLatencyAlarm: IAlarm): IAlarm;
228
- static createRegionalInstanceContributorsToHighLatency(scope: Construct, metricDetails: IOperationMetricDetails, ruleDetails: IContributorInsightRuleDetails): CfnInsightRule;
229
+ static createRegionalAvailabilityOrLatencyImpactAlarm(scope: Construct, operationName: string, nameSuffix: string, regionalAvailabilityAlarm: IAlarm, regionalLatencyAlarm: IAlarm): IAlarm;
230
+ static createRegionalInstanceContributorsToHighLatency(scope: Construct, metricDetails: IOperationLatencyMetricDetails, ruleDetails: IContributorInsightRuleDetails): CfnInsightRule;
229
231
  static createRegionalInstanceContributorsToFaults(scope: Construct, metricDetails: IOperationMetricDetails, ruleDetails: IContributorInsightRuleDetails): CfnInsightRule;
230
232
  }