:create-service-level-objective 完整实战)
在 AWS CLI 中创建 Application Signals 服务级别目标SLOcreate-service-level-objective 完整实战【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本文基于 AWS CLI 官方示例 create-service-level-objective.rst结合仓库内 Application Signals 服务的 API 模型定义 service-2.json完整讲解aws application-signals create-service-level-objective命令的用法从基础命令与 SLI 配置文件sli-config.json的字段含义到Goal目标配置、周期型/请求型 SLO 的区别、错误预算与燃尽率机制直至输出字段的逐项解析和常见错误类型帮助你在 AWS 账户中实际创建并校验一个可用的 SLO。一、命令功能概述create-service-level-objective用于创建一个服务级别目标Service Level ObjectiveSLO。SLO 帮助你确认关键业务操作是否满足客户期望它通过服务级别指示器Service Level IndicatorSLI来衡量应用的性能是否达到你设定的目标水平。该操作对应 Application Signals 的CreateServiceLevelObjectiveAPI。从 API 模型 service-2.jsonAPI 版本2024-04-15可以看到其底层 HTTP 调用为POST /slo 响应码 200根据 API 模型中对该操作的完整文档描述其核心能力包括为服务或操作设置可用性、延迟目标CloudWatch 会频繁测量该目标是否被突破breachedSLO 的目标性能质量称为attainment goal达成目标既可以基于 Application Signals 自动发现的服务/操作设置 SLO也可以针对任意 CloudWatch 指标或产生时间序列的数学表达式设置 SLO注意对于 Application Signals 发现的服务操作必须等该操作向 Application Signals 上报标准指标后才能为其创建 SLO。输入与输出结构从 API 模型看该操作的输入结构为CreateServiceLevelObjectiveInput其中唯一必填字段是Name输出结构CreateServiceLevelObjectiveOutput中唯一必填字段是Slo即创建成功后的 SLO 完整信息。CLI 参数与 API 字段对应如下CLI 参数对应 API 字段是否必填说明--nameName是SLO 名称匹配模式[0-9A-Za-z][-._0-9A-Za-z ]{0,126}[0-9A-Za-z]即以字母或数字开头和结尾中间可含字母、数字、-、.、_、空格总长不超过 128--descriptionDescription否描述文本长度 11024 字符--sli-configSliConfig周期型 SLO 需要定义周期型period-basedSLO 监控的性能指标--request-based-sli-configRequestBasedSliConfig请求型 SLO 需要定义请求型request-basedSLO 监控的性能指标--goalGoal否决定 SLO 目标的属性评估区间与达成阈值--tagsTags否最多 50 个键值对标签需要cloudwatch:TagResource权限--burn-rate-configurationsBurnRateConfigurations否为 SLO 创建燃尽率burn rate指标每项指定回看窗口分钟数--create-recommended-sloCreateRecommendedSlo否置为true时直接创建开箱即用的推荐 SLO此时无需再指定MetricThreshold和ComparisonOperator默认false--auto-investigation-enabledAutoInvestigationEnabled否SLO 被突破时是否由 DevOps Agent 自动发起调查其中--sli-config与--request-based-sli-config不能同时指定前者创建周期型 SLO后者创建请求型 SLO。二、示例命令与 SLI 配置文件官方示例创建了如下 SLO引自 create-service-level-objective.rstaws application-signals create-service-level-objective \ --name SLOName \ --description Description of your SLO \ --sli-config file://sli-config.json这里通过file://方式从本地sli-config.json文件传入 SLI 配置。示例文件内容如下{ SliMetricConfig: { MetricDataQueries: [ { Id: m1, MetricStat: { Metric: { Namespace: AWS/EC2, MetricName: CPUUtilization, Dimensions: [ { Name: InstanceId, Value: i-0e5a1234561522 } ] }, Period: 60, Stat: Average }, ReturnData: true } ] }, MetricThreshold: 200, ComparisonOperator: LessThanOrEqualTo }SliMetricConfig 字段详解从 API 模型的ServiceLevelIndicatorMetricConfig结构看SliMetricConfig除了示例中的MetricDataQueries外还支持以下字段KeyAttributes当 SLO 关联 Application Signals 采集的指标时必须指定用于定位指标归属的服务。至少包含Type、Name、Environment三个属性还可包括ResourceTypeType为Resource/AWS::Resource时使用和Identifier资源对象标识OperationNameSLO 监控某个具体服务操作时指定操作名MetricType监控 Application Signals 标准指标时指定LATENCY或AVAILABILITYMetricName使用自定义 CloudWatch 指标时指定指标名Statistic/PeriodSeconds用于与阈值比较的统计量以及 SLO 评估所用的周期秒MetricSource标识非 Application Signals 服务资源的指标来源DependencyConfig通过DependencyKeyAttributes与DependencyOperationName定位依赖项CompositeSliConfig监控服务多个操作的复合 SLI 配置。MetricDataQueries 规则本示例使用的是自定义 CloudWatch 指标方式MetricDataQueries。从MetricDataQuery的模型文档看有以下硬性规则Id必填用于将查询关联到结果且在MetricDataQueries数组内唯一。合法字符为字母、数字、下划线首字符必须是小写字母示例中的m1即符合每个MetricDataQuery对象中必须且只能指定Expression指标数学表达式或MetricStat直接指标之一单个MetricDataQueries数组最多 20 个MetricDataQuery其中最多 10 个包含MetricStat、最多 10 个包含Expression若使用表达式则恰好一个表达式的ReturnData必须为true其结果将作为 SLO 依据Period单位为秒常规分辨率指标最短 60 秒且必须是 60 的倍数高频指标StorageResolution为 1 秒可取 1、5、10、30、60 或 60 的倍数MetricStat内部Metric、Period、Stat均为必填Metric由Namespace、MetricName、Dimensions组成Stat可为任意 CloudWatch 统计量或扩展统计量示例中MetricThreshold: 200与ComparisonOperator: LessThanOrEqualTo表示将 SLI 指标值与阈值 200 比较比较运算符取自ServiceLevelIndicatorComparisonOperator枚举GreaterThanOrEqualTo、GreaterThan、LessThan、LessThanOrEqualTo。Goal 目标配置与默认值示例命令未显式传入--goal但输出中却出现了完整的Goal结构这是因为 API 模型给出了明确的默认值字段默认值说明Goal.Interval7 天滚动区间rolling 7 DAY评估 SLO 的时间段可为滚动区间RollingInterval或日历区间CalendarInterval二者是 union 类型只能取其一Goal.AttainmentGoal99达成目标百分比。周期型 SLO 表示达标周期数/总周期数的目标占比请求型 SLO 表示成功请求占比的目标Goal.WarningThreshold50.0剩余预算占总预算的百分比低于该值时发出告警RollingInterval需要DurationUnit枚举MINUTE、HOUR、DAY、MONTH和Duration最小值 1。若使用日历区间CalendarInterval则还需要StartTime第一个区间的开始时间例如希望每周一早上 6 点开始就要指定周一 6 点的开始时间区间结束后会自动开始下一个。三、输出解析示例命令的执行输出为{ Slo: { Arn: arn:aws:application-signals:us-east-1:123456789101:slo/SLOName, Name: SLOName, Description: Description of your SLO, CreatedTime: 2024-12-27T08:16:09.03200005:30, LastUpdatedTime: 2024-12-27T08:16:09.03200005:30, Sli: { SliMetric: { MetricDataQueries: [ { Id: m1, MetricStat: { Metric: { Namespace: AWS/EC2, MetricName: CPUUtilization, Dimensions: [ { Name: InstanceId, Value: i-0e59876543234522 } ] }, Period: 60, Stat: Average }, ReturnData: true } ] }, MetricThreshold: 200.0, ComparisonOperator: LessThanOrEqualTo }, EvaluationType: PeriodBased, Goal: { Interval: { RollingInterval: { DurationUnit: DAY, Duration: 7 } }, AttainmentGoal: 99.0, WarningThreshold: 50.0 } } }逐项说明ArnSLO 的 ARN格式为arn:aws:application-signals:region:account-id:slo/name后续查询、更新、删除或查询预算报告时可用EvaluationType本例为PeriodBased周期型。该字段枚举仅有PeriodBased与RequestBased两种由你传入的是--sli-config还是--request-based-sli-config决定Goal未传参时按默认值填充即 7 天滚动区间、达成目标 99%、告警阈值 50%与 API 模型文档声明的默认值完全一致Sli.SliMetric回显你传入的 SLI 指标配置注意示例输出中的InstanceId值与输入文件略有出入属于示例文档的示意写法实际输出会忠实回显你的输入MetricThreshold在输出中以浮点数200.0表示AttainmentGoal、WarningThreshold同理均为 API 模型中的double类型。四、周期型与请求型 SLO评估方式与错误预算创建 SLO 时需要先明确它是周期型还是请求型二者的评估方式完全不同引自 API 模型中CreateServiceLevelObjective的官方文档周期型period-based在指定总时间区间内划分若干时间段period。每个时间段判定应用是否达标达成率 达标周期数 / 总周期数。例如达成目标 99.9% 意味着区间内至少 99.9% 的周期处于达标状态请求型request-based不预定义时间周期而是直接度量达标请求数 / 总请求数。任意时刻都可以计算截至指定时间戳的达标请求占比并与目标比较。错误预算Error Budget创建 SLO 后可以获取其错误预算报告。错误预算是应用可以不达标但仍能满足 SLO 目标的时间或请求量周期型 SLO 的错误预算初始值由最多允许多少个周期失败而不违反总目标决定。每记录一个失败周期剩余错误预算就减少一次且同一区间内错误预算永远不会增加。例如每月 99.95% 的请求在 2000ms 内完成换算下来每月允许约 21.9 分钟停机请求型 SLO 的剩余错误预算是动态的随达标请求占比升降而增减。错误预算报告可通过同目录下的 batch-get-service-level-objective-budget-report.rst 示例中的batch-get-service-level-objective-budget-report命令获取。燃尽率Burn Rate通过--burn-rate-configurations可为 SLO 创建燃尽率指标每项配置指定一个回看窗口LookBackWindowMinutes单位分钟。燃尽率衡量服务消耗错误预算的相对速度——燃尽率恰为 1 表示 SLO 目标将恰好达成。例如指定 60 分钟回看窗口时燃尽率 回看窗口内的错误率 / (100% - 达成目标百分比)服务关联角色执行CreateServiceLevelObjective时若账户中尚不存在Application Signals 会自动创建服务关联角色AWSServiceRoleForCloudWatchApplicationSignals该角色包含xray:GetServiceGraph、logs:StartQuery、logs:GetQueryResults、cloudwatch:GetMetricData、cloudwatch:ListMetrics、tag:GetResources、autoscaling:DescribeAutoScalingGroups等权限用于支撑 SLO 的指标采集与评估。五、可能的错误类型从 API 模型看CreateServiceLevelObjective声明了以下错误排查 CLI 报错时可对照错误含义ValidationException输入参数校验失败如--name不符合命名模式、--sli-config与--request-based-sli-config同时指定、MetricDataQueries超过 20 条等ThrottlingException请求被限流需退避重试AccessDeniedException当前凭证缺少执行该操作的 IAM 权限如带--tags时还需cloudwatch:TagResourceServiceQuotaExceededException超出服务配额如 SLO 数量上限ConflictException资源冲突例如重复创建同名 SLO六、周边操作与验证路径创建 SLO 只是完整工作流的起点仓库中同目录的 Application Signals 示例可串联起完整生命周期均位于 awscli/examples/application-signals/查询单个 SLOget-service-level-objective.rst列出全部 SLOlist-service-level-objectives.rst更新 SLOupdate-service-level-objective.rst删除 SLOdelete-service-level-objective.rst拉取错误预算报告batch-get-service-level-objective-budget-report.rst。此外CLI 的本地调试可用aws application-signals create-service-level-objective help查看 AWS CLI 自动生成的参数帮助若需了解 SLO 监控对象服务、操作、依赖的发现与列表操作可参考 list-services.rst、list-service-operations.rst 与 list-service-dependencies.rst 等示例。适用前提小结需要已配置 AWS 凭证与目标区域且具备 Application Signals / CloudWatch 相关 API 的调用权限本仓库内置的 Application Signals 服务模型版本为2024-04-15见 awscli/botocore/data/application-signals/命令参数以该版本模型为准对 Application Signals 发现的服务操作创建 SLO 前需确保该操作已向 Application Signals 上报标准指标--sli-config周期型与--request-based-sli-config请求型二选一不可同时使用使用--create-recommended-slo true时可省略阈值与比较运算符。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考