@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.
- package/.jsii +2237 -769
- package/API.md +5141 -1591
- package/README.md +63 -54
- package/cdk.json +1 -1
- package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.d.ts +14 -12
- package/lib/alarmsandrules/AvailabilityAndLatencyAlarmsAndRules.js +50 -49
- package/lib/alarmsandrules/BaseOperationRegionalAlarmsAndRules.js +2 -2
- package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.d.ts +6 -15
- package/lib/alarmsandrules/BaseOperationZonalAlarmsAndRules.js +2 -10
- package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.d.ts +11 -3
- package/lib/alarmsandrules/CanaryOperationZonalAlarmsAndRules.js +24 -13
- package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.d.ts +0 -8
- package/lib/alarmsandrules/IBaseOperationZonalAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IOperationAlarmsAndRules.d.ts +20 -27
- package/lib/alarmsandrules/IOperationAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IServerSideOperationRegionalAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/IServiceAlarmsAndRules.d.ts +19 -15
- package/lib/alarmsandrules/IServiceAlarmsAndRules.js +1 -1
- package/lib/alarmsandrules/OperationAlarmsAndRules.d.ts +15 -22
- package/lib/alarmsandrules/OperationAlarmsAndRules.js +52 -72
- package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.d.ts +5 -5
- package/lib/alarmsandrules/ServerSideOperationRegionalAlarmsAndRules.js +2 -3
- package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.d.ts +21 -13
- package/lib/alarmsandrules/ServerSideOperationZonalAlarmsAndRules.js +43 -29
- package/lib/alarmsandrules/ServiceAlarmsAndRules.d.ts +19 -15
- package/lib/alarmsandrules/ServiceAlarmsAndRules.js +34 -136
- package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.d.ts +4 -3
- package/lib/alarmsandrules/props/BaseOperationRegionalAlarmsAndRulesProps.js +1 -1
- package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.d.ts +6 -44
- package/lib/alarmsandrules/props/BaseOperationZonalAlarmsAndRulesProps.js +1 -1
- package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.d.ts +28 -7
- package/lib/alarmsandrules/props/OperationAlarmsAndRulesProps.js +1 -1
- package/lib/azmapper/AvailabilityZoneMapper.js +8 -9
- package/lib/basic_observability/BasicServiceDashboard.d.ts +0 -3
- package/lib/basic_observability/BasicServiceDashboard.js +24 -112
- package/lib/basic_observability/BasicServiceMultiAZObservability.d.ts +8 -9
- package/lib/basic_observability/BasicServiceMultiAZObservability.js +98 -312
- package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.d.ts +51 -0
- package/lib/basic_observability/props/ApplicationLoadBalancerDetectionProps.js +3 -0
- package/lib/basic_observability/props/BasicServiceDashboardProps.d.ts +27 -13
- package/lib/basic_observability/props/BasicServiceDashboardProps.js +1 -1
- package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.d.ts +10 -38
- package/lib/basic_observability/props/BasicServiceMultiAZObservabilityProps.js +1 -1
- package/lib/basic_observability/props/NatGatewayDetectionProps.d.ts +31 -0
- package/lib/basic_observability/props/NatGatewayDetectionProps.js +3 -0
- package/lib/canaries/CanaryFunction.js +14 -13
- package/lib/canaries/CanaryTest.js +4 -4
- package/lib/canaries/src/canary.zip +0 -0
- package/lib/dashboards/ContributorInsightsWidget.d.ts +1 -1
- package/lib/dashboards/ContributorInsightsWidget.js +13 -17
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.d.ts +2 -6
- package/lib/dashboards/OperationAvailabilityAndLatencyDashboard.js +445 -507
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.d.ts +2 -10
- package/lib/dashboards/ServiceAvailabilityAndLatencyDashboard.js +350 -437
- package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.d.ts +3 -66
- package/lib/dashboards/props/OperationAvailabilityAndLatencyDashboardProps.js +1 -1
- package/lib/dashboards/props/OperationAvailabilityWidgetProps.d.ts +7 -2
- package/lib/dashboards/props/OperationAvailabilityWidgetProps.js +1 -1
- package/lib/dashboards/props/OperationLatencyWidgetProps.d.ts +7 -2
- package/lib/dashboards/props/OperationLatencyWidgetProps.js +1 -1
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.d.ts +8 -8
- package/lib/dashboards/props/ServiceAvailabilityAndLatencyDashboardProps.js +1 -1
- package/lib/index.d.ts +54 -24
- package/lib/index.js +36 -17
- package/lib/metrics/ApplicationLoadBalancerMetrics.d.ts +77 -3
- package/lib/metrics/ApplicationLoadBalancerMetrics.js +813 -32
- package/lib/metrics/AvailabilityAndLatencyMetrics.d.ts +23 -0
- package/lib/metrics/AvailabilityAndLatencyMetrics.js +120 -26
- package/lib/metrics/NatGatewayMetrics.d.ts +113 -0
- package/lib/metrics/NatGatewayMetrics.js +357 -0
- package/lib/metrics/RegionalAvailabilityMetrics.js +4 -5
- package/lib/metrics/RegionalLatencyMetrics.d.ts +1 -1
- package/lib/metrics/RegionalLatencyMetrics.js +27 -20
- package/lib/metrics/ZonalAvailabilityMetrics.d.ts +2 -8
- package/lib/metrics/ZonalAvailabilityMetrics.js +10 -25
- package/lib/metrics/ZonalLatencyMetrics.d.ts +2 -1
- package/lib/metrics/ZonalLatencyMetrics.js +33 -23
- package/lib/metrics/props/AvailabilityAndLatencyMetricProps.d.ts +4 -0
- package/lib/metrics/props/AvailabilityAndLatencyMetricProps.js +1 -1
- package/lib/metrics/props/LatencyMetricProps.d.ts +6 -0
- package/lib/metrics/props/LatencyMetricProps.js +1 -1
- package/lib/metrics/props/ZonalAvailabilityMetricProps.d.ts +4 -0
- package/lib/metrics/props/ZonalAvailabilityMetricProps.js +1 -1
- package/lib/metrics/props/ZonalLatencyMetricProps.d.ts +4 -0
- package/lib/metrics/props/ZonalLatencyMetricProps.js +1 -1
- package/lib/monitoring/src/monitoring-layer.zip +0 -0
- package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.d.ts +10 -0
- package/lib/outlier-detection/ApplicationLoadBalancerAvailabilityOutlierAlgorithm.js +15 -0
- package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.d.ts +18 -0
- package/lib/outlier-detection/ApplicationLoadBalancerLatencyOutlierAlgorithm.js +23 -0
- package/lib/outlier-detection/OutlierDetectionFunction.js +7 -6
- package/lib/outlier-detection/PacketLossOutlierAlgorithm.d.ts +10 -0
- package/lib/outlier-detection/PacketLossOutlierAlgorithm.js +15 -0
- package/lib/outlier-detection/src/outlier-detection.zip +0 -0
- package/lib/outlier-detection/src/scipy-layer.zip +0 -0
- package/lib/services/CanaryMetrics.d.ts +4 -3
- package/lib/services/CanaryMetrics.js +3 -4
- package/lib/services/CanaryTestAvailabilityMetricsOverride.d.ts +21 -0
- package/lib/services/CanaryTestAvailabilityMetricsOverride.js +23 -0
- package/lib/services/CanaryTestLatencyMetricsOverride.d.ts +15 -0
- package/lib/services/CanaryTestLatencyMetricsOverride.js +20 -0
- package/lib/services/CanaryTestMetricsOverride.d.ts +1 -13
- package/lib/services/CanaryTestMetricsOverride.js +2 -4
- package/lib/services/ContributorInsightRuleDetails.js +1 -1
- package/lib/services/ICanaryMetrics.d.ts +4 -3
- package/lib/services/ICanaryMetrics.js +1 -1
- package/lib/services/ICanaryTestAvailabilityMetricsOverride.d.ts +23 -0
- package/lib/services/ICanaryTestAvailabilityMetricsOverride.js +3 -0
- package/lib/services/ICanaryTestLatencyMetricsOverride.d.ts +13 -0
- package/lib/services/ICanaryTestLatencyMetricsOverride.js +3 -0
- package/lib/services/ICanaryTestMetricsOverride.d.ts +0 -12
- package/lib/services/ICanaryTestMetricsOverride.js +1 -1
- package/lib/services/IInstrumentedServiceMultiAZObservability.d.ts +13 -3
- package/lib/services/IInstrumentedServiceMultiAZObservability.js +1 -1
- package/lib/services/IOperation.d.ts +8 -6
- package/lib/services/IOperation.js +1 -1
- package/lib/services/IOperationAvailabilityMetricDetails.d.ts +18 -0
- package/lib/services/IOperationAvailabilityMetricDetails.js +3 -0
- package/lib/services/IOperationLatencyMetricDetails.d.ts +12 -0
- package/lib/services/IOperationLatencyMetricDetails.js +3 -0
- package/lib/services/IOperationMetricDetails.d.ts +0 -12
- package/lib/services/IOperationMetricDetails.js +1 -1
- package/lib/services/IService.d.ts +4 -3
- package/lib/services/IService.js +1 -1
- package/lib/services/IServiceAvailabilityMetricDetails.d.ts +18 -0
- package/lib/services/IServiceAvailabilityMetricDetails.js +3 -0
- package/lib/services/IServiceLatencyMetricDetails.d.ts +12 -0
- package/lib/services/IServiceLatencyMetricDetails.js +3 -0
- package/lib/services/IServiceMetricDetails.d.ts +0 -12
- package/lib/services/IServiceMetricDetails.js +1 -1
- package/lib/services/InstrumentedServiceMultiAZObservability.d.ts +15 -3
- package/lib/services/InstrumentedServiceMultiAZObservability.js +197 -208
- package/lib/services/Operation.d.ts +8 -6
- package/lib/services/Operation.js +2 -2
- package/lib/services/OperationAvailabilityMetricDetails.d.ts +22 -0
- package/lib/services/OperationAvailabilityMetricDetails.js +24 -0
- package/lib/services/OperationLatencyMetricDetails.d.ts +16 -0
- package/lib/services/OperationLatencyMetricDetails.js +21 -0
- package/lib/services/OperationMetricDetails.d.ts +1 -13
- package/lib/services/OperationMetricDetails.js +2 -8
- package/lib/services/Service.d.ts +4 -3
- package/lib/services/Service.js +2 -2
- package/lib/services/ServiceAvailabilityMetricDetails.d.ts +21 -0
- package/lib/services/ServiceAvailabilityMetricDetails.js +20 -0
- package/lib/services/ServiceLatencyMetricDetails.d.ts +15 -0
- package/lib/services/ServiceLatencyMetricDetails.js +19 -0
- package/lib/services/ServiceMetricDetails.d.ts +1 -13
- package/lib/services/ServiceMetricDetails.js +2 -4
- package/lib/services/props/CanaryMetricProps.d.ts +4 -3
- package/lib/services/props/CanaryMetricProps.js +1 -1
- package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.d.ts +22 -0
- package/lib/services/props/CanaryTestAvailabilityMetricsOverrideProps.js +3 -0
- package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.d.ts +14 -0
- package/lib/services/props/CanaryTestLatencyMetricsOverrideProps.js +3 -0
- package/lib/services/props/CanaryTestMetricsOverrideProps.d.ts +0 -16
- package/lib/services/props/CanaryTestMetricsOverrideProps.js +1 -1
- package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.d.ts +1 -1
- package/lib/services/props/InstrumentedServiceMultiAZObservabilityProps.js +1 -1
- package/lib/services/props/MetricDimensions.js +1 -1
- package/lib/services/props/OperationAvailabilityMetricDetailsProps.d.ts +22 -0
- package/lib/services/props/OperationAvailabilityMetricDetailsProps.js +3 -0
- package/lib/services/props/OperationLatencyMetricDetailsProps.d.ts +14 -0
- package/lib/services/props/OperationLatencyMetricDetailsProps.js +3 -0
- package/lib/services/props/OperationMetricDetailsProps.d.ts +0 -16
- package/lib/services/props/OperationMetricDetailsProps.js +1 -1
- package/lib/services/props/OperationProps.d.ts +4 -3
- package/lib/services/props/OperationProps.js +1 -1
- package/lib/services/props/ServiceAvailabilityMetricDetailsProps.d.ts +18 -0
- package/lib/services/props/ServiceAvailabilityMetricDetailsProps.js +3 -0
- package/lib/services/props/ServiceLatencyMetricDetailsProps.d.ts +12 -0
- package/lib/services/props/ServiceLatencyMetricDetailsProps.js +3 -0
- package/lib/services/props/ServiceMetricDetailsProps.d.ts +0 -12
- package/lib/services/props/ServiceMetricDetailsProps.js +1 -1
- package/lib/services/props/ServiceProps.d.ts +4 -3
- package/lib/services/props/ServiceProps.js +1 -1
- package/lib/utilities/MetricsHelper.d.ts +17 -9
- package/lib/utilities/MetricsHelper.js +34 -10
- package/package.json +10 -10
- package/lib/services/IBasicServiceMultiAZObservability.d.ts +0 -45
- package/lib/services/IBasicServiceMultiAZObservability.js +0 -3
package/README.md
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
  
|
|
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,
|
|
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
|
|
16
|
+
DefaultAvailabilityMetricDetails = new ServiceAvailabilityMetricDetails(new ServiceAvailabilityMetricDetailsProps() {
|
|
15
17
|
AlarmStatistic = "Sum",
|
|
16
|
-
DatapointsToAlarm =
|
|
17
|
-
EvaluationPeriods =
|
|
18
|
+
DatapointsToAlarm = 2,
|
|
19
|
+
EvaluationPeriods = 3,
|
|
18
20
|
FaultAlarmThreshold = 1,
|
|
19
|
-
FaultMetricNames = new string[] { "Fault", "
|
|
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
|
|
30
|
+
DefaultLatencyMetricDetails = new ServiceLatencyMetricDetails(new ServiceLatencyMetricDetailsProps(){
|
|
29
31
|
AlarmStatistic = "p99",
|
|
30
|
-
DatapointsToAlarm =
|
|
31
|
-
EvaluationPeriods =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
76
|
-
SuccessAlarmThreshold =
|
|
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
|
|
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
|
|
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
|
|
95
|
-
SuccessAlarmThreshold =
|
|
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
|
|
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
|
|
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
|
|
114
|
-
SuccessAlarmThreshold =
|
|
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
|
|
127
|
+
ServerSideAvailabilityMetricDetails = new OperationAvailabilityMetricDetails(new OperationAvailabilityMetricDetailsProps() {
|
|
124
128
|
OperationName = "Home",
|
|
125
|
-
MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "
|
|
129
|
+
MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "Home"}}, "AZ-ID", "Region")
|
|
126
130
|
}, wildRydesService.DefaultAvailabilityMetricDetails),
|
|
127
|
-
ServerSideLatencyMetricDetails = new
|
|
131
|
+
ServerSideLatencyMetricDetails = new OperationLatencyMetricDetails(new OperationLatencyMetricDetailsProps() {
|
|
128
132
|
OperationName = "Home",
|
|
129
|
-
SuccessAlarmThreshold = 100,
|
|
130
|
-
MetricDimensions = new MetricDimensions(new Dictionary<string, string> {{ "Operation", "
|
|
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
|
|
133
|
-
SuccessAlarmThreshold =
|
|
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
|
|
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
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
163
|
-
|
|
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),
|
|
167
|
-
Interval = Duration.Minutes(60)
|
|
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
|
@@ -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:
|
|
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:
|
|
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,
|
|
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:
|
|
79
|
-
static createZonalHighLatencyStaticOutlierAlarm(scope: Construct, metricDetails:
|
|
80
|
-
static createZonalHighLatencyStaticOutlierAlarmForCanaries(scope: Construct, metricDetails:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
228
|
-
static createRegionalInstanceContributorsToHighLatency(scope: Construct, metricDetails:
|
|
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
|
}
|