@cdklabs/multi-az-observability 0.0.1-alpha.6 → 0.0.1-alpha.60

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 (188) hide show
  1. package/.jsii +2826 -1008
  2. package/.jsii.tabl.json +1 -0
  3. package/API.md +5406 -1585
  4. package/README.md +176 -152
  5. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +18 -14
  6. package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +98 -60
  7. package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.d.ts +3 -3
  8. package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.js +2 -2
  9. package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.d.ts +6 -15
  10. package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.js +2 -10
  11. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.d.ts +11 -3
  12. package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +29 -13
  13. package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.d.ts +0 -8
  14. package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.js +1 -1
  15. package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +26 -23
  16. package/lib/alarmsandrules/IOperationAlarmsAndRules.js +1 -1
  17. package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +1 -1
  18. package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +19 -15
  19. package/lib/alarmsandrules/IServiceAlarmsAndRules.js +1 -1
  20. package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +21 -18
  21. package/lib/alarmsandrules/OperationAlarmsAndRules.js +60 -72
  22. package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.d.ts +5 -5
  23. package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.js +2 -3
  24. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.d.ts +21 -13
  25. package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +48 -29
  26. package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +19 -15
  27. package/lib/alarmsandrules/ServiceAlarmsAndRules.js +34 -136
  28. package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.d.ts +4 -3
  29. package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.js +1 -1
  30. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +6 -44
  31. package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +1 -1
  32. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +39 -7
  33. package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +1 -1
  34. package/lib/azmapper/AvailabilityZoneMapper.js +8 -9
  35. package/lib/basic_observability/BasicServiceDashboard.d.ts +0 -3
  36. package/lib/basic_observability/BasicServiceDashboard.js +24 -112
  37. package/lib/basic_observability/BasicServiceMultiAZObservability.d.ts +8 -9
  38. package/lib/basic_observability/BasicServiceMultiAZObservability.js +97 -349
  39. package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.d.ts +66 -0
  40. package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.js +3 -0
  41. package/lib/basic_observability/props/BasicServiceDashboardProps.d.ts +27 -13
  42. package/lib/basic_observability/props/BasicServiceDashboardProps.js +1 -1
  43. package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.d.ts +10 -44
  44. package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.js +1 -1
  45. package/lib/basic_observability/props/NatGatewayDetectionProps.d.ts +31 -0
  46. package/lib/basic_observability/props/NatGatewayDetectionProps.js +3 -0
  47. package/lib/canaries/CanaryFunction.js +14 -13
  48. package/lib/canaries/CanaryTest.js +4 -4
  49. package/lib/canaries/src/canary.zip +0 -0
  50. package/lib/dashboards/ContributorInsightsWidget.d.ts +1 -1
  51. package/lib/dashboards/ContributorInsightsWidget.js +13 -17
  52. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +2 -6
  53. package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +436 -510
  54. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +2 -10
  55. package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +420 -416
  56. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +3 -66
  57. package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +1 -1
  58. package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +7 -2
  59. package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +1 -1
  60. package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +7 -2
  61. package/lib/dashboards/props/OperationLatencyWidgetProps.js +1 -1
  62. package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +8 -8
  63. package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +1 -1
  64. package/lib/index.d.ts +56 -25
  65. package/lib/index.js +37 -19
  66. package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +79 -2
  67. package/lib/metrics/ApplicationLoadBalancerMetrics.js +883 -26
  68. package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +23 -0
  69. package/lib/metrics/AvailabilityAndLatencyMetrics.js +125 -31
  70. package/lib/metrics/NatGatewayMetrics.d.ts +113 -0
  71. package/lib/metrics/NatGatewayMetrics.js +357 -0
  72. package/lib/metrics/RegionalAvailabilityMetrics.js +9 -10
  73. package/lib/metrics/RegionalLatencyMetrics.d.ts +1 -1
  74. package/lib/metrics/RegionalLatencyMetrics.js +27 -20
  75. package/lib/metrics/ZonalAvailabilityMetrics.d.ts +2 -8
  76. package/lib/metrics/ZonalAvailabilityMetrics.js +13 -28
  77. package/lib/metrics/ZonalLatencyMetrics.d.ts +2 -1
  78. package/lib/metrics/ZonalLatencyMetrics.js +33 -23
  79. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +4 -0
  80. package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +1 -1
  81. package/lib/metrics/props/LatencyMetricProps.d.ts +6 -0
  82. package/lib/metrics/props/LatencyMetricProps.js +1 -1
  83. package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +4 -0
  84. package/lib/metrics/props/ZonalAvailabilityMetricProps.js +1 -1
  85. package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +4 -0
  86. package/lib/metrics/props/ZonalLatencyMetricProps.js +1 -1
  87. package/lib/monitoring/src/monitoring-layer.zip +0 -0
  88. package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.d.ts +10 -0
  89. package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.js +15 -0
  90. package/lib/{basic_observability/props/ApplicationLoadBalancerLatencyOutlierCalculation.d.ts → outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.d.ts} +1 -1
  91. package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.js +23 -0
  92. package/lib/outlier-detection/LatencyOutlierMetricAggregation.d.ts +22 -0
  93. package/lib/outlier-detection/LatencyOutlierMetricAggregation.js +27 -0
  94. package/lib/outlier-detection/OutlierDetectionFunction.js +7 -6
  95. package/lib/outlier-detection/PacketLossOutlierAlgorithm.d.ts +10 -0
  96. package/lib/outlier-detection/PacketLossOutlierAlgorithm.js +15 -0
  97. package/lib/outlier-detection/src/outlier-detection.zip +0 -0
  98. package/lib/outlier-detection/src/scipy-layer.zip +0 -0
  99. package/lib/services/CanaryMetrics.d.ts +4 -3
  100. package/lib/services/CanaryMetrics.js +3 -4
  101. package/lib/services/CanaryTestAvailabilityMetricsOverride.d.ts +21 -0
  102. package/lib/services/CanaryTestAvailabilityMetricsOverride.js +23 -0
  103. package/lib/services/CanaryTestLatencyMetricsOverride.d.ts +15 -0
  104. package/lib/services/CanaryTestLatencyMetricsOverride.js +20 -0
  105. package/lib/services/CanaryTestMetricsOverride.d.ts +1 -13
  106. package/lib/services/CanaryTestMetricsOverride.js +2 -4
  107. package/lib/services/ContributorInsightRuleDetails.js +1 -1
  108. package/lib/services/ICanaryMetrics.d.ts +4 -3
  109. package/lib/services/ICanaryMetrics.js +1 -1
  110. package/lib/services/ICanaryTestAvailabilityMetricsOverride.d.ts +23 -0
  111. package/lib/services/ICanaryTestAvailabilityMetricsOverride.js +3 -0
  112. package/lib/services/ICanaryTestLatencyMetricsOverride.d.ts +13 -0
  113. package/lib/services/ICanaryTestLatencyMetricsOverride.js +3 -0
  114. package/lib/services/ICanaryTestMetricsOverride.d.ts +0 -12
  115. package/lib/services/ICanaryTestMetricsOverride.js +1 -1
  116. package/lib/services/IInstrumentedServiceMultiAZObservability.d.ts +13 -3
  117. package/lib/services/IInstrumentedServiceMultiAZObservability.js +1 -1
  118. package/lib/services/IOperation.d.ts +8 -6
  119. package/lib/services/IOperation.js +1 -1
  120. package/lib/services/IOperationAvailabilityMetricDetails.d.ts +18 -0
  121. package/lib/services/IOperationAvailabilityMetricDetails.js +3 -0
  122. package/lib/services/IOperationLatencyMetricDetails.d.ts +12 -0
  123. package/lib/services/IOperationLatencyMetricDetails.js +3 -0
  124. package/lib/services/IOperationMetricDetails.d.ts +0 -12
  125. package/lib/services/IOperationMetricDetails.js +1 -1
  126. package/lib/services/IService.d.ts +18 -4
  127. package/lib/services/IService.js +1 -1
  128. package/lib/services/IServiceAvailabilityMetricDetails.d.ts +18 -0
  129. package/lib/services/IServiceAvailabilityMetricDetails.js +3 -0
  130. package/lib/services/IServiceLatencyMetricDetails.d.ts +12 -0
  131. package/lib/services/IServiceLatencyMetricDetails.js +3 -0
  132. package/lib/services/IServiceMetricDetails.d.ts +0 -12
  133. package/lib/services/IServiceMetricDetails.js +1 -1
  134. package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +15 -3
  135. package/lib/services/InstrumentedServiceMultiAZObservability.js +252 -228
  136. package/lib/services/Operation.d.ts +8 -6
  137. package/lib/services/Operation.js +4 -3
  138. package/lib/services/OperationAvailabilityMetricDetails.d.ts +22 -0
  139. package/lib/services/OperationAvailabilityMetricDetails.js +24 -0
  140. package/lib/services/OperationLatencyMetricDetails.d.ts +16 -0
  141. package/lib/services/OperationLatencyMetricDetails.js +21 -0
  142. package/lib/services/OperationMetricDetails.d.ts +1 -13
  143. package/lib/services/OperationMetricDetails.js +2 -8
  144. package/lib/services/Service.d.ts +18 -4
  145. package/lib/services/Service.js +4 -2
  146. package/lib/services/ServiceAvailabilityMetricDetails.d.ts +21 -0
  147. package/lib/services/ServiceAvailabilityMetricDetails.js +20 -0
  148. package/lib/services/ServiceLatencyMetricDetails.d.ts +15 -0
  149. package/lib/services/ServiceLatencyMetricDetails.js +19 -0
  150. package/lib/services/ServiceMetricDetails.d.ts +1 -13
  151. package/lib/services/ServiceMetricDetails.js +2 -4
  152. package/lib/services/props/CanaryMetricProps.d.ts +4 -3
  153. package/lib/services/props/CanaryMetricProps.js +1 -1
  154. package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.d.ts +22 -0
  155. package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.js +3 -0
  156. package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.d.ts +14 -0
  157. package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.js +3 -0
  158. package/lib/services/props/CanaryTestMetricsOverrideProps.d.ts +0 -16
  159. package/lib/services/props/CanaryTestMetricsOverrideProps.js +1 -1
  160. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +50 -5
  161. package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +1 -1
  162. package/lib/services/props/MetricDimensions.js +1 -1
  163. package/lib/services/props/OperationAvailabilityMetricDetailsProps.d.ts +22 -0
  164. package/lib/services/props/OperationAvailabilityMetricDetailsProps.js +3 -0
  165. package/lib/services/props/OperationLatencyMetricDetailsProps.d.ts +14 -0
  166. package/lib/services/props/OperationLatencyMetricDetailsProps.js +3 -0
  167. package/lib/services/props/OperationMetricDetailsProps.d.ts +0 -16
  168. package/lib/services/props/OperationMetricDetailsProps.js +1 -1
  169. package/lib/services/props/OperationProps.d.ts +4 -3
  170. package/lib/services/props/OperationProps.js +1 -1
  171. package/lib/services/props/ServiceAvailabilityMetricDetailsProps.d.ts +18 -0
  172. package/lib/services/props/ServiceAvailabilityMetricDetailsProps.js +3 -0
  173. package/lib/services/props/ServiceLatencyMetricDetailsProps.d.ts +12 -0
  174. package/lib/services/props/ServiceLatencyMetricDetailsProps.js +3 -0
  175. package/lib/services/props/ServiceMetricDetailsProps.d.ts +0 -12
  176. package/lib/services/props/ServiceMetricDetailsProps.js +1 -1
  177. package/lib/services/props/ServiceProps.d.ts +18 -4
  178. package/lib/services/props/ServiceProps.js +1 -1
  179. package/lib/utilities/MetricsHelper.d.ts +17 -9
  180. package/lib/utilities/MetricsHelper.js +34 -10
  181. package/lib/utilities/MinimumUnhealthyTargets.d.ts +25 -0
  182. package/lib/utilities/MinimumUnhealthyTargets.js +3 -0
  183. package/package.json +14 -14
  184. package/rosetta/default.ts-fixture +72 -0
  185. package/rosetta/service.ts-fixture +144 -0
  186. package/lib/basic_observability/props/ApplicationLoadBalancerLatencyOutlierCalculation.js +0 -23
  187. package/lib/services/IBasicServiceMultiAZObservability.d.ts +0 -45
  188. package/lib/services/IBasicServiceMultiAZObservability.js +0 -3
package/README.md CHANGED
@@ -1,175 +1,199 @@
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
- ```csharp
7
- var wildRydesService = new Service(new ServiceProps(){
8
- ServiceName = "WildRydes",
9
- BaseUrl = "http://www.example.com",
10
- FaultCountThreshold = 25,
11
- AvailabilityZoneNames = vpc.AvailabilityZones,
12
- Period = Duration.Seconds(60),
13
- LoadBalancer = loadBalancer,
14
- DefaultAvailabilityMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps() {
15
- AlarmStatistic = "Sum",
16
- DatapointsToAlarm = 3,
17
- EvaluationPeriods = 5,
18
- FaultAlarmThreshold = 1,
19
- FaultMetricNames = new string[] { "Fault", "Error" },
20
- GraphedFaultStatistics = new string[] { "Sum" },
21
- GraphedSuccessStatistics = new string[] { "Sum" },
22
- MetricNamespace = metricsNamespace,
23
- Period = Duration.Seconds(60),
24
- SuccessAlarmThreshold = 99,
25
- SuccessMetricNames = new string[] {"Success"},
26
- Unit = Unit.COUNT,
8
+ ```typescript
9
+ let service: IService = new Service({
10
+ serviceName: 'test',
11
+ availabilityZoneNames: vpc.availabilityZones,
12
+ baseUrl: 'http://www.example.com',
13
+ faultCountThreshold: 25,
14
+ period: Duration.seconds(60),
15
+ loadBalancer: loadBalancer,
16
+ targetGroups: [ targetGroup1, targetGroup2 ],
17
+ defaultAvailabilityMetricDetails: new ServiceAvailabilityMetricDetails({
18
+ metricNamespace: 'front-end/metrics',
19
+ successMetricNames: ['Success'],
20
+ faultMetricNames: ['Fault', 'Error'],
21
+ alarmStatistic: 'Sum',
22
+ unit: Unit.COUNT,
23
+ period: Duration.seconds(60),
24
+ evaluationPeriods: 5,
25
+ datapointsToAlarm: 3,
26
+ successAlarmThreshold: 99.9,
27
+ faultAlarmThreshold: 0.1,
28
+ graphedFaultStatistics: ['Sum'],
29
+ graphedSuccessStatistics: ['Sum'],
27
30
  }),
28
- DefaultLatencyMetricDetails = new ServiceMetricDetails(new ServiceMetricDetailsProps(){
29
- AlarmStatistic = "p99",
30
- DatapointsToAlarm = 3,
31
- EvaluationPeriods = 5,
32
- FaultAlarmThreshold = 1,
33
- FaultMetricNames = new string[] { "FaultLatency" },
34
- GraphedFaultStatistics = new string[] { "p50" },
35
- GraphedSuccessStatistics = new string[] { "p50", "p99", "tm50", "tm99" },
36
- MetricNamespace = metricsNamespace,
37
- Period = Duration.Seconds(60),
38
- SuccessAlarmThreshold = 100,
39
- SuccessMetricNames = new string[] {"SuccessLatency"},
40
- Unit = Unit.MILLISECONDS,
31
+ defaultLatencyMetricDetails: new ServiceLatencyMetricDetails({
32
+ metricNamespace: 'front-end/metrics',
33
+ successMetricNames: ['SuccessLatency'],
34
+ faultMetricNames: ['FaultLatency'],
35
+ alarmStatistic: 'p99',
36
+ unit: Unit.MILLISECONDS,
37
+ period: Duration.seconds(60),
38
+ evaluationPeriods: 5,
39
+ datapointsToAlarm: 3,
40
+ successAlarmThreshold: Duration.millis(150),
41
+ graphedFaultStatistics: ['p99'],
42
+ graphedSuccessStatistics: ['p50', 'p99', 'tm99'],
41
43
  }),
42
- DefaultContributorInsightRuleDetails = new ContributorInsightRuleDetails(new ContributorInsightRuleDetailsProps() {
43
- AvailabilityZoneIdJsonPath = azIdJsonPath,
44
- FaultMetricJsonPath = faultMetricJsonPath,
45
- InstanceIdJsonPath = instanceIdJsonPath,
46
- LogGroups = serverLogGroups,
47
- OperationNameJsonPath = operationNameJsonPath,
48
- SuccessLatencyMetricJsonPath = successLatencyMetricJsonPath
44
+ defaultContributorInsightRuleDetails: new ContributorInsightRuleDetails({
45
+ successLatencyMetricJsonPath: '$.SuccessLatency',
46
+ faultMetricJsonPath: '$.Faults',
47
+ operationNameJsonPath: '$.Operation',
48
+ instanceIdJsonPath: '$.InstanceId',
49
+ availabilityZoneIdJsonPath: '$.AZ-ID',
50
+ logGroups: [logGroup],
49
51
  }),
50
- CanaryTestProps = new AddCanaryTestProps() {
51
- RequestCount = 10,
52
- LoadBalancer = loadBalancer,
53
- Schedule = "rate(1 minute)",
54
- NetworkConfiguration = new NetworkConfigurationProps() {
55
- Vpc = vpc,
56
- SubnetSelection = new SubnetSelection() { SubnetType = SubnetType.PRIVATE_ISOLATED }
57
- }
52
+ canaryTestProps: {
53
+ requestCount: 10,
54
+ schedule: 'rate(1 minute)',
55
+ loadBalancer: loadBalancer,
56
+ networkConfiguration: {
57
+ vpc: vpc,
58
+ subnetSelection: { subnetType: SubnetType.PRIVATE_ISOLATED },
59
+ },
60
+ },
61
+ minimumUnhealthyTargets: {
62
+ percentage: 0.1
58
63
  }
59
- });
60
- wildRydesService.AddOperation(new Operation(new OperationProps() {
61
- OperationName = "Signin",
62
- Path = "/signin",
63
- Service = wildRydesService,
64
- Critical = true,
65
- HttpMethods = new string[] { "GET" },
66
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
67
- OperationName = "Signin",
68
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Signin"}}, "AZ-ID", "Region")
69
- }, wildRydesService.DefaultAvailabilityMetricDetails),
70
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
71
- OperationName = "Signin",
72
- SuccessAlarmThreshold = 150,
73
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Signin"}}, "AZ-ID", "Region")
74
- }, wildRydesService.DefaultLatencyMetricDetails),
75
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
76
- SuccessAlarmThreshold = 250
77
- })
78
- }));
79
- wildRydesService.AddOperation(new Operation(new OperationProps() {
80
- OperationName = "Pay",
81
- Path = "/pay",
82
- Service = wildRydesService,
83
- HttpMethods = new string[] { "GET" },
84
- Critical = true,
85
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
86
- OperationName = "Pay",
87
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Pay"}}, "AZ-ID", "Region")
88
- }, wildRydesService.DefaultAvailabilityMetricDetails),
89
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
90
- OperationName = "Pay",
91
- SuccessAlarmThreshold = 200,
92
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Pay"}}, "AZ-ID", "Region")
93
- }, wildRydesService.DefaultLatencyMetricDetails),
94
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
95
- SuccessAlarmThreshold = 300
96
- })
97
- }));
98
- wildRydesService.AddOperation(new Operation(new OperationProps() {
99
- OperationName = "Ride",
100
- Path = "/ride",
101
- Service = wildRydesService,
102
- HttpMethods = new string[] { "GET" },
103
- Critical = true,
104
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
105
- OperationName = "Ride",
106
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
107
- }, wildRydesService.DefaultAvailabilityMetricDetails),
108
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
109
- OperationName = "Ride",
110
- SuccessAlarmThreshold = 350,
111
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
112
- }, wildRydesService.DefaultLatencyMetricDetails),
113
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
114
- SuccessAlarmThreshold = 550
115
- })
116
- }));
117
- wildRydesService.AddOperation(new Operation(new OperationProps() {
118
- OperationName = "Home",
119
- Path = "/home",
120
- Service = wildRydesService,
121
- HttpMethods = new string[] { "GET" },
122
- Critical = true,
123
- ServerSideAvailabilityMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
124
- OperationName = "Home",
125
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
126
- }, wildRydesService.DefaultAvailabilityMetricDetails),
127
- ServerSideLatencyMetricDetails = new OperationMetricDetails(new OperationMetricDetailsProps() {
128
- OperationName = "Home",
129
- SuccessAlarmThreshold = 100,
130
- MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Ride"}}, "AZ-ID", "Region")
131
- }, wildRydesService.DefaultLatencyMetricDetails),
132
- CanaryTestLatencyMetricsOverride = new CanaryTestMetricsOverride(new CanaryTestMetricsOverrideProps() {
133
- SuccessAlarmThreshold = 200
134
- })
135
- }));
64
+ });
65
+
66
+ let rideOperation: Operation = {
67
+ operationName: 'ride',
68
+ service: service,
69
+ path: '/ride',
70
+ critical: true,
71
+ httpMethods: ['GET'],
72
+ serverSideContributorInsightRuleDetails: new ContributorInsightRuleDetails({
73
+ logGroups: [logGroup],
74
+ successLatencyMetricJsonPath: '$.SuccessLatency',
75
+ faultMetricJsonPath: '$.Faults',
76
+ operationNameJsonPath: '$.Operation',
77
+ instanceIdJsonPath: '$.InstanceId',
78
+ availabilityZoneIdJsonPath: '$.AZ-ID',
79
+ }),
80
+ serverSideAvailabilityMetricDetails: new OperationAvailabilityMetricDetails(
81
+ {
82
+ operationName: 'ride',
83
+ metricDimensions: new MetricDimensions(
84
+ { Operation: 'ride' },
85
+ 'AZ-ID',
86
+ 'Region',
87
+ ),
88
+ },
89
+ service.defaultAvailabilityMetricDetails,
90
+ ),
91
+ serverSideLatencyMetricDetails: new OperationLatencyMetricDetails(
92
+ {
93
+ operationName: 'ride',
94
+ metricDimensions: new MetricDimensions(
95
+ { Operation: 'ride' },
96
+ 'AZ-ID',
97
+ 'Region',
98
+ ),
99
+ },
100
+ service.defaultLatencyMetricDetails,
101
+ ),
102
+ };
103
+
104
+ let payOperation: Operation = {
105
+ operationName: 'pay',
106
+ service: service,
107
+ path: '/pay',
108
+ critical: true,
109
+ httpMethods: ['GET'],
110
+ serverSideContributorInsightRuleDetails: new ContributorInsightRuleDetails({
111
+ logGroups: [logGroup],
112
+ successLatencyMetricJsonPath: '$.SuccessLatency',
113
+ faultMetricJsonPath: '$.Faults',
114
+ operationNameJsonPath: '$.Operation',
115
+ instanceIdJsonPath: '$.InstanceId',
116
+ availabilityZoneIdJsonPath: '$.AZ-ID',
117
+ }),
118
+ serverSideAvailabilityMetricDetails: new OperationAvailabilityMetricDetails(
119
+ {
120
+ operationName: 'pay',
121
+ metricDimensions: new MetricDimensions(
122
+ { Operation: 'ride' },
123
+ 'AZ-ID',
124
+ 'Region',
125
+ ),
126
+ },
127
+ service.defaultAvailabilityMetricDetails,
128
+ ),
129
+ serverSideLatencyMetricDetails: new OperationLatencyMetricDetails(
130
+ {
131
+ operationName: 'pay',
132
+ metricDimensions: new MetricDimensions(
133
+ { Operation: 'ride' },
134
+ 'AZ-ID',
135
+ 'Region',
136
+ ),
137
+ },
138
+ service.defaultLatencyMetricDetails,
139
+ ),
140
+ };
141
+
142
+ service.addOperation(rideOperation);
143
+ service.addOperation(payOperation);
136
144
  ```
137
145
 
138
146
  Then you provide that service definition to the CDK construct.
139
147
 
140
- ```csharp
141
- InstrumentedServiceMultiAZObservability multiAvailabilityZoneObservability = new InstrumentedServiceMultiAZObservability(this, "MultiAZObservability", new InstrumentedServiceMultiAZObservabilityProps() {
142
- Service = wildRydesService,
143
- CreateDashboards = true,
144
- Interval = Duration.Minutes(60), // The interval for the dashboard
145
- OutlierDetectionAlgorithm = OutlierDetectionAlgorithm.STATIC
148
+ ```typescript fixture=service
149
+ new InstrumentedServiceMultiAZObservability(stack, 'MAZObservability', {
150
+ createDashboards: true,
151
+ service: service,
152
+ interval: Duration.minutes(60)
146
153
  });
147
154
  ```
148
155
 
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.
156
+ 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
157
 
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.
158
+ 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
159
 
153
- ```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},
160
+ ```typescript
161
+ new BasicServiceMultiAZObservability(stack, 'MAZObservability', {
162
+ applicationLoadBalancerProps: {
163
+ albTargetGroupMap: [
164
+ {
165
+ applicationLoadBalancer: new ApplicationLoadBalancer(stack, 'alb', {
166
+ vpc: vpc,
167
+ crossZoneEnabled: true,
168
+ }),
169
+ targetGroups: [
170
+ targetGroup1,
171
+ targetGroup2
172
+ ]
173
+ }
174
+ ],
175
+ faultCountPercentThreshold: 1,
176
+ latencyStatistic: Stats.percentile(99),
177
+ latencyThreshold: Duration.millis(200),
178
+ latencyOutlierAlgorithm: ApplicationLoadBalancerLatencyOutlierAlgorithm.STATIC,
179
+ latencyOutlierThreshold: 45
180
+ },
181
+ natGatewayProps: {
182
+ natGateways: {
183
+ "us-east-1a": [ natGateway1 ],
184
+ "us-east-1b": [ natGateway2 ],
185
+ "us-east-1c": [ natGateway3 ]
186
+ },
187
+ packetLossPercentThreshold: 0.01
160
188
  },
161
- 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
165
- 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
189
+ serviceName: 'test',
190
+ period: Duration.seconds(60),
191
+ createDashboard: true,
192
+ evaluationPeriods: 5,
193
+ datapointsToAlarm: 3,
170
194
  });
171
195
  ```
172
196
 
173
197
  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
198
 
175
- Both options support running workloads on EC2, ECS, Lambda, and EKS.
199
+ Both options support running workloads on EC2, ECS, Lambda, and EKS.
@@ -9,6 +9,10 @@ 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';
14
+ import { LatencyOutlierMetricAggregation } from '../outlier-detection/LatencyOutlierMetricAggregation';
15
+ import { MinimumUnhealthyTargets } from '../utilities/MinimumUnhealthyTargets';
12
16
  /**
13
17
  * Class used to create availability and latency alarms and Contributor Insight rules
14
18
  */
@@ -22,7 +26,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
22
26
  * @param counter
23
27
  * @returns
24
28
  */
25
- static createZonalAvailabilityAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
29
+ static createZonalAvailabilityAlarm(scope: Construct, metricDetails: IOperationAvailabilityMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
26
30
  /**
27
31
  * Creates a zonal latency alarm
28
32
  * @param scope
@@ -32,7 +36,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
32
36
  * @param counter
33
37
  * @returns
34
38
  */
35
- static createZonalLatencyAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
39
+ static createZonalLatencyAlarm(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, nameSuffix?: string): IAlarm;
36
40
  /**
37
41
  * Creates a composite alarm when either latency or availability is breached in the Availabiltiy Zone
38
42
  * @param scope
@@ -55,7 +59,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
55
59
  * @param outlierThreshold
56
60
  * @returns
57
61
  */
58
- static createZonalFaultRateStaticOutlierAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
62
+ static createZonalFaultRateStaticOutlierAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
59
63
  /**
60
64
  * An alarm that compares error rate in this AZ to the overall region error based only on metric data.
61
65
  * This is different for canaries because the metrics they test at the regional level are different
@@ -69,15 +73,15 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
69
73
  * @param outlierThreshold
70
74
  * @returns
71
75
  */
72
- static createZonalFaultRateStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, availabilityZones: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
76
+ static createZonalFaultRateStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZone: string, availabilityZoneId: string, availabilityZoneIds: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
73
77
  static createZonalFaultRateOutlierAlarm(scope: IConstruct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, allAvailabilityZoneIds: string[], outlierThreshold: number, outlierDetectionFunction: IFunction, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, counter: number, nameSuffix?: string): IAlarm;
74
78
  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
79
  static createZonalFaultRateOutlierAlarmForNatGW(scope: IConstruct, natGateways: {
76
80
  [key: string]: CfnNatGateway[];
77
81
  }, 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;
82
+ static createZonalHighLatencyOutlierAlarm(scope: IConstruct, metricDetails: IOperationLatencyMetricDetails, availabilityZoneId: string, allAvailabilityZoneIds: string[], outlierThreshold: number, outlierDetectionFunction: IFunction, outlierMetric: LatencyOutlierMetricAggregation, outlierDetectionAlgorithm: OutlierDetectionAlgorithm, counter: number, nameSuffix?: string): IAlarm;
83
+ static createZonalHighLatencyStaticOutlierAlarm(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZone: string, availabilityZoneId: string, counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
84
+ static createZonalHighLatencyStaticOutlierAlarmForCanaries(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZone: string, availabilityZoneId: string, availabilityZones: string[], counter: number, outlierThreshold: number, nameSuffix?: string): IAlarm;
81
85
  /**
82
86
  * An insight rule that calculates how many instances are responding to requests in
83
87
  * the specified AZ. Only useful for server-side metrics since the canary doesn't record instance id metrics.
@@ -120,7 +124,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
120
124
  * @param counter
121
125
  * @returns
122
126
  */
123
- static createServerSideInstanceHighLatencyContributorsInThisAZRule(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, ruleDetails: IContributorInsightRuleDetails, counter: number, nameSuffix?: string): CfnInsightRule;
127
+ static createServerSideInstanceHighLatencyContributorsInThisAZRule(scope: Construct, metricDetails: IOperationLatencyMetricDetails, availabilityZoneId: string, ruleDetails: IContributorInsightRuleDetails, counter: number, nameSuffix?: string): CfnInsightRule;
124
128
  /**
125
129
  * An alarm that indicates some percentage of the instances in this AZ are producing errors. Only
126
130
  * useful for server-side metrics since the canary doesn't record instance id metrics.
@@ -134,7 +138,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
134
138
  * @param instancesHandlingRequestsInThisAZ
135
139
  * @returns
136
140
  */
137
- static createServerSideZonalMoreThanOneInstanceProducingFaultsAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, outlierThreshold: number, instanceFaultRateContributorsInThisAZ: CfnInsightRule, instancesHandlingRequestsInThisAZ: CfnInsightRule, nameSuffix?: string): IAlarm;
141
+ static createServerSideZonalMoreThanOneInstanceProducingFaultsAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, instanceFaultRateContributorsInThisAZ: CfnInsightRule, instancesHandlingRequestsInThisAZ: CfnInsightRule, minimumUnhealthyTargets?: MinimumUnhealthyTargets, nameSuffix?: string): IAlarm;
138
142
  /**
139
143
  * An alarm indicating more than some percentage of instances in this AZ
140
144
  * are contributing to high latency. Only useful for server-side metrics since
@@ -149,7 +153,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
149
153
  * @param instancesHandlingRequestsInThisAZ
150
154
  * @returns
151
155
  */
152
- static createServerSideZonalMoreThanOneInstanceProducingHighLatencyAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, outlierThreshold: number, instanceHighLatencyContributorsInThisAZ: CfnInsightRule, instancesHandlingRequestsInThisAZ: CfnInsightRule, nameSuffix?: string): IAlarm;
156
+ static createServerSideZonalMoreThanOneInstanceProducingHighLatencyAlarm(scope: Construct, metricDetails: IOperationMetricDetails, availabilityZoneId: string, counter: number, instanceHighLatencyContributorsInThisAZ: CfnInsightRule, instancesHandlingRequestsInThisAZ: CfnInsightRule, minimumUnhealthyTargets?: MinimumUnhealthyTargets, nameSuffix?: string): IAlarm;
153
157
  /**
154
158
  * An alarm that indicates this AZ as an outlier
155
159
  * for availability or latency. This does not ensure that the errors
@@ -204,7 +208,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
204
208
  * @param counter
205
209
  * @returns
206
210
  */
207
- static createRegionalAvailabilityAlarm(scope: Construct, metricDetails: IOperationMetricDetails, nameSuffix: string): IAlarm;
211
+ static createRegionalAvailabilityAlarm(scope: Construct, metricDetails: IOperationAvailabilityMetricDetails, nameSuffix: string): IAlarm;
208
212
  /**
209
213
  * Creates a regional latency alarm for the operation
210
214
  * @param scope
@@ -213,7 +217,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
213
217
  * @param counter
214
218
  * @returns
215
219
  */
216
- static createRegionalLatencyAlarm(scope: Construct, metricDetails: IOperationMetricDetails, nameSuffix: string): IAlarm;
220
+ static createRegionalLatencyAlarm(scope: Construct, metricDetails: IOperationLatencyMetricDetails, nameSuffix: string): IAlarm;
217
221
  /**
218
222
  * A composite alarm combining latency and availability alarms for this operation in the region
219
223
  * as measured from either the server side or canary
@@ -224,7 +228,7 @@ export declare class AvailabilityAndLatencyAlarmsAndRules {
224
228
  * @param regionalLatencyAlarm
225
229
  * @returns
226
230
  */
227
- static createRegionalCustomerExperienceAlarm(scope: Construct, operationName: string, nameSuffix: string, regionalAvailabilityAlarm: IAlarm, regionalLatencyAlarm: IAlarm): IAlarm;
228
- static createRegionalInstanceContributorsToHighLatency(scope: Construct, metricDetails: IOperationMetricDetails, ruleDetails: IContributorInsightRuleDetails): CfnInsightRule;
231
+ static createRegionalAvailabilityOrLatencyImpactAlarm(scope: Construct, operationName: string, nameSuffix: string, regionalAvailabilityAlarm: IAlarm, regionalLatencyAlarm: IAlarm): IAlarm;
232
+ static createRegionalInstanceContributorsToHighLatency(scope: Construct, metricDetails: IOperationLatencyMetricDetails, ruleDetails: IContributorInsightRuleDetails): CfnInsightRule;
229
233
  static createRegionalInstanceContributorsToFaults(scope: Construct, metricDetails: IOperationMetricDetails, ruleDetails: IContributorInsightRuleDetails): CfnInsightRule;
230
234
  }