Service Monitoring 可将以下资源添加到 Monitoring API 中:
本页面介绍了新 API 资源的主要用途。 如需了解此处所用结构的一般概览,请参阅 API 中的构造。全面的参考资料将显示在 Cloud Monitoring API v3 下。
本文档将这些新增内容统称为 Service Monitoring API。
何时使用 API
Service Monitoring API 可用于管理服务和服务等级目标 (SLO)。本页面重点介绍自定义服务和服务等级指标 (SLI)。系统会自动检测 App Engine、Istio on Google Kubernetes Engine 和 Cloud Endpoints 上运行的服务,并为其预定义 SLI:
要为 Anthos Service Mesh 服务定义 SLO,您可以使用 Anthos Service Mesh 控制台或 Service Monitoring API。如需详细了解如何使用 Anthos 服务网格信息中心创建 SLO,请参阅 Anthos 服务网格文档:创建 SLO。
对于其他服务和自定义服务,您必须使用 Service Monitoring API 定义 SLO。目前没有提供 Google Cloud Console 支持。
本页面中的示例主要侧重于自定义服务和 SLI。
有效标识符
Service Monitoring API 中的一些方法针对不同元素使用不同的标识符,尤其是项目和服务的标识符。这些 ID 遵循以下规则:
- 长度:1-63 个字符
- 字符:只能使用小写字母、数字和连字符
- 首字母:小写字母
- 尾字母:小写字母或数字,但不能是连字符
这些规则的正则表达式如下所示:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?
使用 curl
的示例
本部分介绍了使用 curl
工具调用 Service Monitoring API 时所使用的惯例和设置。如果您是通过客户端库使用此 API,则可以跳过此部分。
本页中的示例通过使用 curl
工具将 HTTP 请求发送到 RESTM 端点来访问 Service Monitoring API。使用以下关于身份验证和调用 curl
的信息设置调用中使用的变量。
身份验证
创建一个环境变量来保存 Cloud Monitoring 工作区的 ID。这些示例使用
PROJECT_ID
:PROJECT_ID=my-test-service
向 Cloud SDK 验证身份:
gcloud auth login
为避免必须使用每个命令指定项目 ID,请使用 Cloud SDK 将其设置为默认值:
gcloud config set project ${PROJECT_ID}
创建授权令牌并将其存储到环境变量中。 这些示例调用变量
ACCESS_TOKEN
:ACCESS_TOKEN=`gcloud auth print-access-token`
您必须定期刷新访问令牌。如果命令突然报告您未通过身份验证,请重新发布此命令。
要验证您是否已获得访问令牌,请回显
ACCESS_TOKEN
变量:echo ${ACCESS_TOKEN} ya29.GluiBj8o....
调用 curl
每个 curl
调用都包含一组参数,其后面是 Service Monitoring API 资源的网址。常见参数包括由 PROJECT_ID
和 ACCESS_TOKEN
环境变量指定的值。您可能还需要指定其他参数,例如,指定 HTTP 请求的类型(例如 -X DELETE
)。默认请求为 GET
,因此示例未指定该请求。
每个 curl
调用具有以下一般结构:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>
例如,如需列出项目中的所有服务,请发出以下 GET
请求:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services
此请求会返回一组服务说明,其中包含如下所示的条目,示例是名为“currencyservice”的 Istio 服务:
{ "services": [ { "name": "projects/[PROJECT_NUMBER]/services/[PROJECT_ID]-zone-us-central1-c-csm-main-default-currencyservice", "displayName": "[PROJECT_ID]/us-central1-c/csm-main/default/currencyservice", "clusterIstio": { "location": "us-central1-c", "clusterName": "csm-main", "serviceNamespace": "default", "serviceName": "currencyservice" }, "telemetry": { "resourceName": "//container.googleapis.com/projects/[PROJECT_ID]/zones/us-central1-c/clusters/csm-main/k8s/namespaces/default/services/currencyservice" } }, ... ] }
如需详细了解服务的结构,请参阅 Service
。
管理服务
Service
资源充当组织服务的根元素。某个特定服务的各方面(例如其 SLO)都按照服务名称整理。
系统会自动为您在 App Engine、Istio on Google Kubernetes Engine 和 Cloud Endpoints 上创建服务。您可以使用 Anthos 服务网格控制台或 Service Monitoring API 执行操作,例如将 SLO 添加到这些服务中。
您手动创建的服务称为自定义服务。 只能使用 Service Monitoring API 来创建、删除、检索和更新自定义服务。
确定或创建服务后,您可以向该服务添加 SLO。 管理 SLO涵盖操纵 SLO 的命令。
服务 ID
每个服务都有一个被称为资源名称的完全限定标识符。此标识符存储在服务说明的 name
字段中,例如:
"name": "projects/[PROJECT_NUMBER]/services/[PROJECT_ID]-zone-us-central1-a-cloudrun-istio-system-cluster-local-gateway",
资源名称中嵌入了服务的较短 ID,即资源名称中子字符串 projects/[PROJECT_NUMBER]/services/
之后的部分
如果您使用资源名称 projects/[PROJECT_NUMBER]/services/my-test-service
创建了自己的服务,则服务 ID 为 my-test-service
。
为了简洁和准确,许多 curl
示例假设服务 ID 保存在环境变量 SERVICE_ID
中,因此您可以反复参考。
列出服务
要检索项目中所有服务的相关信息,请调用 services.list
方法。要按服务 ID 检索特定服务的相关信息,请使用 services.get
方法:
协议
要使用curl
列出有关服务的信息,请通过将 GET
请求发送给以下对象,来调用 services.list
或 services.get
方法:
- 要列出所有服务,请发送至
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services
- 要获取特定服务,请发送至
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]
例如,以下请求会检索与环境变量 SERVICE_ID
中存储的值所标识服务相关的信息:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}
创建服务
如果您没有使用自动创建服务的环境(即 App Engine、Istio on Google Kubernetes Engine 和 Cloud Endpoints),则可以使用 services.create
方法创建服务。
如果您手动创建服务,则必须使用 Service Monitoring API 手动将 SLO 和其他服务监控工件添加到服务结构中。如需了解这些结构的概述,请参阅 API 中的构造。
要创建服务,您必须指定服务的显示名以及名为 custom
的字段(对象为空)。您可以选择指定您希望服务具有的服务 ID。
协议
要使用 curl
创建服务,请向 https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services
端点发送一条 POST
消息:
如果要提供服务 ID,请为服务 ID 创建变量:
SERVICE_ID=my-test-service
网址查询参数
service_id
中会提供此值。创建变量以保存描述服务的请求正文:
CREATE_SERVICE_POST_BODY=$(cat <<EOF { "displayName": "My Test Service", "custom": {} } EOF )
将请求正文发布到端点,并指定服务 ID 作为
service_id
查询参数的值:curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_SERVICE_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services?service_id=${SERVICE_ID}
删除服务
要删除自定义服务,请调用 services.delete
方法并指定服务 ID。
协议
要使用curl
删除服务,请向 https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]
端点发送 DELETE
请求:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" -X DELETE https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}
管理 SLO
SLO 与服务关联。您可以使用适用于 App Engine 的 Anthos 服务网格控制台、Istio on Google Kubernetes Engine、Cloud Endpoints 或使用 Service Monitoring API 创建 SLO。您必须使用 Service Monitoring API 为自定义服务创建 SLO。
您还可以使用 Service Monitoring API 检索与服务关联的 SLO,以及从服务中删除 SLO。每个服务最多可以有 500 个 SLO。
要管理服务的 SLO,您必须拥有服务 ID。 SLO 根据其所属的服务进行命名。 服务 ID介绍如何识别服务 ID。
列出 SLO
要检索与服务关联的所有 SLO 的相关信息,请调用 services.serviceLevelObjectives.list
方法。要按名称检索特定 SLO 的相关信息,请使用 services.serviceLevelObjectives.get
方法:
协议
要使用curl
列出有关服务的信息,请通过将 GET
请求发送给以下对象,来调用 services.serviceLevelObjectives.list
或 services.serviceLevelObjectives.get
方法:
- 要列出所有 SLO,请发送至
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives
- 要获取特定 SLO,请发送至
https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives/[SLO_ID]
例如,以下请求列出了与存储在环境变量 SERVICE_ID
中的服务 ID 相关联的所有 SLO:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives
以下是从“currencyservice”服务检索到的 SLO 可用性:
{ "name": "projects/[PROJECT_NUMBER]/services/[PROJECT_ID]-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ", "displayName": "98% Availability in Calendar Week" "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.98, "calendarPeriod": "WEEK", },
此 SLO 是基于 SLI 可用性构建的,它设置的目标性能目标为“98%”,并且会在日历周内衡量合规性。如需详细了解 SLI 可用性,请参阅服务等级指标。
如需详细了解 SLO 的结构,请参阅 ServiceLevelObjective
。
检索特定 SLO
每个 SLO 在服务中都有一个唯一标识符,由 SLO name
字段中位于 serviceLevelObjectives
后面的字符串组成。在以下示例中:
"name": "projects/[PROJECT_NUMBER]/services/[PROJECT_ID]-zone-us-central1-c-csm-main-default-currencyservice/serviceLevelObjectives/3kavNVTtTMuzL7KcXAxqCQ",
SLO ID 为字符串 3kavNVTtTMuzL7KcXAxqCQ
。
要检索有关此特定 SLO 的信息,请按 ID 发出 SLO 请求。
协议
要使用curl
获取特定 SLO,请通过向 https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives/[SLO_ID]
发送 GET
请求来调用 services.serviceLevelObjectives.get
方法:
SLO_ID=dhefHDM4TwSRZEKIV4ZYEg curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}
创建 SLO
要使用 Service Monitoring API 创建 SLO,您必须创建一个 ServiceLevelObjective
对象并将其传递给 serviceLevelObjectives.create
方法。
SLO 的结构具有许多嵌入式结构,其中便有一个关于 serviceLevelIndicator
字段的值的结构。
对于 App Engine、Istio on Google Kubernetes Engine 和 Cloud Endpoints 服务,SLI 已预定义。 您可以使用 Anthos 服务网格控制台创建 SLO;您只需指定型能目标和合规期即可。
您还可以使用 Service Monitoring API 来定义 SLO。
对于自定义服务,您必须使用 Service Monitoring API 来定义 SLO。 要指定 SLO,您还必须为
serviceLevelIndicator
字段创建一个值。如需了解一些技术问题,请参阅创建服务等级指标。
SLO 的框架
构建 SLO 的基本框架如下:
{ "displayName": string, "serviceLevelIndicator": { object (ServiceLevelIndicator) }, "goal": number, // Union field period can be only one of the following: "rollingPeriod": string, "calendarPeriod": enum (CalendarPeriod) // End of list of possible types for union field period. }
您必须指定以下各项:
- 显示名:SLO 的说明
- 服务等级指标,可以是以下三种类型之一:
- 性能目标(百分比)
- 合规性期限,有以下两种类型:
- 一定长度的滚动周期(以秒为单位)
- 日历周期
如需详细了解 SLI、效果目标和合规性周期的详情,请参阅服务监控中的概念。
对于 App Engine、Istio on Google Kubernetes Engine 和 Cloud Endpoints 服务,SLI 类型是基本的 SLI。
对于自定义服务,您必须创建基于请求的 SLI 或基于 Windows 的 SLI。如需了解一些技术问题,请参阅创建服务等级指标。
示例
获得 SLI 后,您便可以构建 SLO。以下示例为使用基本 SLI 的服务定义了 SLO。单个 SLI 上可能有多个 SLO,例如,一个 SLO 的可用性为 95%,另一个 SLO 的可用性为 99%。以下示例是在日历周内可用性为 95% 的 SLO:
{ "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.95, "calendarPeriod": "WEEK", "displayName": "95% Availability in Calendar Week" }
此示例指定了在 3 天滚动周期内可用性为 75%的 SLO:
{ "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.75, "rollingPeriod": "259200s", "displayName": "75% Availability in Rolling 3 Days" }
协议
要使用curl
创建 SLO,请将 POST
条消息发送到 https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives
端点:
为服务 ID 创建变量:
SERVICE_ID=custom:my-test-service
创建一个变量来保存请求正文,即
ServiceLevelObjective
对象的实例。此示例使用前面描述的某个 SLO:CREATE_SLO_POST_BODY=$(cat <<EOF { "serviceLevelIndicator": { "basicSli": { "availability": {}, "location": [ "us-central1-c" ] } }, "goal": 0.75, "rollingPeriod": "259200s", "displayName": "75% Availability in Rolling 3 Days" } EOF )
将请求正文发布到端点:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_SLO_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives
您也可以为 SLO 指定所需 ID,将其作为
service_level_objective_id
查询参数的值:SLO_ID=test-slo-id curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" --header "Content-Type: application/json" -X POST -d "${CREATE_SLO_POST_BODY}" https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives?service_level_objective_id=${SLO_ID}
删除 SLO
要删除 SLO,请调用 services.serviceLevelObjectives.delete
方法,并在项目中指定 SLO 的 ID:
协议
要使用curl
删除 SLO,请将 DELETE
请求发送到 https://monitoring.googleapis.com/v3/projects/[PROJECT_ID]/services/[SERVICE_ID]/serviceLevelObjectives/[SLO_ID]
端点:
curl --http1.1 --header "Authorization: Bearer ${ACCESS_TOKEN}" -X DELETE https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/services/${SERVICE_ID}/serviceLevelObjectives/${SLO_ID}
访问 SLO 时间序列
SLO 数据按时间序列存储,因此您可以使用 timeSeries.list
方法检索这些数据。但是,此类数据并非以标准指标类型存储,因此您无法使用为 timeSeries.list
方法指定指标类型过滤条件的标准机制。
相反,您可以通过在 filter
参数中向 timeSeries.list
方法指定其他类型的过滤条件(时间序列选择器)来检索 SLO 时间序列。如需了解使用这些选择器的信息,请参阅检索 SLO 数据。
您还可以使用时间序列选择器以编程方式设置提醒政策。如需了解详情,请参阅消耗率提醒。