createServiceLevelObjective method
Creates a service level objective (SLO), which can help you ensure that your critical business operations are meeting customer expectations. Use SLOs to set and track specific target levels for the reliability and availability of your applications and services. SLOs use service level indicators (SLIs) to calculate whether the application is performing at the level that you want.
Create an SLO to set a target for a service or operation’s availability or latency. CloudWatch measures this target frequently you can find whether it has been breached.
The target performance quality that is defined for an SLO is the attainment goal.
You can set SLO targets for your applications that are discovered by Application Signals, using critical metrics such as latency and availability. You can also set SLOs against any CloudWatch metric or math expression that produces a time series. When you create an SLO, you specify whether it is a period-based SLO or a request-based SLO. Each type of SLO has a different way of evaluating your application's performance against its attainment goal.
-
A period-based SLO uses defined periods of time within a
specified total time interval. For each period of time, Application
Signals determines whether the application met its goal. The attainment
rate is calculated as the
number of good periods/number of total periods.For example, for a period-based SLO, meeting an attainment goal of 99.9% means that within your interval, your application must meet its performance goal during at least 99.9% of the time periods.
-
A request-based SLO doesn't use pre-defined periods of time.
Instead, the SLO measures
number of good requests/number of total requestsduring the interval. At any time, you can find the ratio of good requests to total requests for the interval up to the time stamp that you specify, and measure that ratio against the goal set in your SLO.
-
For a period-based SLO, the error budget starts at a number defined by the
highest number of periods that can fail to meet the threshold, while still
meeting the overall goal. The remaining error budget decreases with
every failed period that is recorded. The error budget within one interval
can never increase.
For example, an SLO with a threshold that 99.95% of requests must be completed under 2000ms every month translates to an error budget of 21.9 minutes of downtime per month.
- For a request-based SLO, the remaining error budget is dynamic and can increase or decrease, depending on the ratio of good requests to total requests.
When you perform a CreateServiceLevelObjective operation,
Application Signals creates the
AWSServiceRoleForCloudWatchApplicationSignals service-linked role,
if it doesn't already exist in your account. This service- linked role has
the following permissions:
-
xray:GetServiceGraph -
logs:StartQuery -
logs:GetQueryResults -
cloudwatch:GetMetricData -
cloudwatch:ListMetrics -
tag:GetResources -
autoscaling:DescribeAutoScalingGroups
May throw AccessDeniedException.
May throw ConflictException.
May throw ServiceQuotaExceededException.
May throw ThrottlingException.
May throw ValidationException.
Parameter name :
A name for this SLO.
Parameter autoInvestigationEnabled :
Indicates whether DevOps Agent will automatically investigate this SLO
when it is breached
Parameter burnRateConfigurations :
Use this array to create burn rates for this SLO. Each burn rate is
a metric that indicates how fast the service is consuming the error
budget, relative to the attainment goal of the SLO.
Parameter createRecommendedSlo :
Set this to true to create a recommended SLO out of the box.
When set to true, you don't need to specify the
MetricThreshold or ComparisonOperator in the
SliConfig or RequestBasedSliConfig. The default
value is false.
This is supported for SLOs on a service, service operation, or a dependency.
Parameter description :
An optional description for this SLO.
Parameter goal :
This structure contains the attributes that determine the goal of the SLO.
Parameter requestBasedSliConfig :
If this SLO is a request-based SLO, this structure defines the information
about what performance metric this SLO will monitor.
You can't specify both RequestBasedSliConfig and
SliConfig in the same operation.
Parameter sliConfig :
If this SLO is a period-based SLO, this structure defines the information
about what performance metric this SLO will monitor.
You can't specify both RequestBasedSliConfig and
SliConfig in the same operation.
Parameter tags :
A list of key-value pairs to associate with the SLO. You can associate as
many as 50 tags with an SLO. To be able to associate tags with the SLO
when you create the SLO, you must have the
cloudwatch:TagResource permission.
Tags can help you organize and categorize your resources. You can also use them to scope user permissions by granting a user permission to access or change only resources with certain tag values.
Implementation
Future<CreateServiceLevelObjectiveOutput> createServiceLevelObjective({
required String name,
bool? autoInvestigationEnabled,
List<BurnRateConfiguration>? burnRateConfigurations,
bool? createRecommendedSlo,
String? description,
Goal? goal,
RequestBasedServiceLevelIndicatorConfig? requestBasedSliConfig,
ServiceLevelIndicatorConfig? sliConfig,
List<Tag>? tags,
}) async {
final $payload = <String, dynamic>{
'Name': name,
if (autoInvestigationEnabled != null)
'AutoInvestigationEnabled': autoInvestigationEnabled,
if (burnRateConfigurations != null)
'BurnRateConfigurations': burnRateConfigurations,
if (createRecommendedSlo != null)
'CreateRecommendedSlo': createRecommendedSlo,
if (description != null) 'Description': description,
if (goal != null) 'Goal': goal,
if (requestBasedSliConfig != null)
'RequestBasedSliConfig': requestBasedSliConfig,
if (sliConfig != null) 'SliConfig': sliConfig,
if (tags != null) 'Tags': tags,
};
final response = await _protocol.send(
payload: $payload,
method: 'POST',
requestUri: '/slo',
exceptionFnMap: _exceptionFns,
);
return CreateServiceLevelObjectiveOutput.fromJson(response);
}