|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
使用 CLI 向组件添加阈值监控
概述
SUSE Observability 提供 开箱即用的监控,可对 Kubernetes 集群中可能发生的常见问题进行监控。还可以为 SUSE Observability 收集的指标或从 Prometheus 获取的应用程序指标配置自定义监控。
编写监控的概要
创建一个名为 monitor.yaml 的新 YAML 文件,并将此 YAML 模板添加到其中以创建您自己的监控。在您最喜欢的代码编辑器中打开它,以便在本指南中进行更改。最后将使用 SUSE Observability CLI 来创建和更新 SUSE Observability 中的监控。
nodes:
- _type: Monitor
arguments:
metric:
query:
unit:
aliasTemplate:
comparator:
threshold:
failureState:
urnTemplate:
titleTemplate:
description:
function: {{ get "urn:stackpack:common:monitor-function:threshold" }}
identifier: urn:custom:monitor:...
intervalSeconds: 30
name:
remediationHint:
status:
tags: {}
此模板中的字段包括:
-
_type:SUSE Observability 需要知道这是一个监控,因此值始终需要为Monitor -
query:一个 PromQL 查询。使用您的 SUSE Observability 实例的 度量探索器,http://your-instance/#/metrics, 并使用它构建感兴趣的指标查询。 -
unit:查询或查询返回的时间序列中值的单位,用于渲染图表的Y轴。请参阅支持的单元参考以获取所有单元。 -
aliasTemplate:指标图表中时间序列的别名。这是一个模板,可以使用${my_label}占位符替换时间序列中的标签。 -
comparator:选择 LTE/LT/GTE/GT 中的一个与指标进行阈值比较。对于<metric> <comparator> <threshold>为真的时间序列将产生故障状态。 -
threshold:一个用于比较的数值阈值。 -
failureState:要么是 "CRITICAL",要么是 "DEVIATING"。"CRITICAL" 在 SUSE Observability 中显示为已读,而 "DEVIATING" 显示为橙色,以表示不同的严重性。 -
urnTemplate:一个模板,用于构建监控结果所绑定组件的 urn,该组件将通过 绑定到。 -
titleTemplate:监控结果的标题。由于多个监控结果可以绑定到同一组件,因此可以使用${my_label}占位符替换时间序列标签。 -
description:监控的说明。 -
function:用于执行监控的监控函数的引用。目前仅支持{{ get "urn:stackpack:kubernetes-v2:shared:monitor-function:threshold" }}。 -
identifier:一个形式为urn:custom:monitor:….的标识符,在更新其配置时唯一标识监控。 -
intervalSeconds:监控执行的间隔。对于常规实时指标,建议使用 30 秒。对于运行时间较长的分析指标查询,建议使用更大的间隔。 -
name:监控的名称。 -
remediationHint:描述用户在监控发生故障时可以采取的措施。格式为 markdown,可选用 Handlebars 变量根据时间序列或其他数据自定义提示(以下有更多解释)。 -
status:要么是"DISABLED",要么是"ENABLED"。确定监控是否会运行。 -
tags:为监控添加标签,以帮助在您的 SUSE Observability 实例的监控概览中组织它们,http://your-SUSE Observability-instance/#/monitors。
例如,这可以是用于监控部署中可用副本的监控的开始:
nodes:
- _type: Monitor
arguments:
metric:
query: "kubernetes_state_deployment_replicas_available"
unit: "short"
aliasTemplate: "Deployment replicas"
comparator: "LTE"
threshold: 0.0
failureState: "DEVIATING"
urnTemplate:
description: "Monitor whether a deployment has replicas.
function: {{ get "urn:stackpack:kubernetes-v2:shared:monitor-function:threshold" }}
identifier: urn:custom:monitor:deployment-has-replicas
intervalSeconds: 30
name: Deployment has replicas
remediationHint:
status: "ENABLED"
tags:
- "deployments"
`urnTemplate`和`remediationHint`将在接下来的步骤中填写。
将监控的结果绑定到正确的组件。
监控的结果需要绑定到 SUSE Observability 中的组件,才能实现可见和使用。监控结果使用组件 identifiers 绑定到一个组件。SUSE可观察性中的每个组件都有一个或多个唯一标识该组件的标识符。要将监控的结果绑定到一个组件,必须提供 urnTemplate。urnTemplate 将监控结果的时间序列中的标签替换到模板中,生成匹配组件的标识符。这最好通过以下示例来说明:
在此示例中使用的度量是`kubernetes_state_deployment_replicas_available`度量。在度量探索器中运行该度量,以观察时间序列上可用的标签:
在上表中显示该度量具有`cluster_name`、`namespace`和`deployment`等标签。
因为该度量是在部署上观察到的,所以将监控结果绑定到部署组件是最合逻辑的。为此,需要了解部署的标识符是如何构建的:
-
在用户界面中,导航到`deployments`视图并选择单个部署。
-
打开`Topology`视图,然后单击部署组件。
-
在屏幕右侧面板中展开`Properties`时,标识符将在悬停后显示,如下所示:
标识符显示为`urn:kubernetes:/preprod-dev.preprod.stackstate.io:calico-system:deployment/calico-typha`。这表明标识符是基于集群名称、名称空间和部署名称构建的。知道这一点后,现在可以构建 urnTemplate:
...
urnTemplate: "urn:kubernetes:/${cluster_name}:${namespace}:deployment/${deployment}"
...
要验证 urnTemplate 是否正确,下面将进一步解释。
编写修复提示
修复提示旨在帮助用户在监控触发时找到问题的原因。修复提示以 markdown 格式编写。还可以使用监控结果的时间序列上的标签,使用 Handlebars 模板,如下例所示:
...
remediationHint: |-
To remedy this issue with the deployment {{ labels.deployment }}, consider taking the following steps:
1. Look at the logs of the pods created by the deployment
...
在 SUSE Observability 中创建或更新监控
完成 monitor.yaml 后,使用 SUSE Observability CLI 创建或更新监控:
sts monitor apply -f monitor.yaml
验证监控是否产生预期结果,使用 以下 步骤。
|
标识符用作监控的唯一键。更改标识符将创建一个新的监控,而不是更新现有的监控。 |
sts monitor 命令有更多选项,例如它可以列出所有监控:
sts monitor list
要删除监控,请使用
sts monitor delete --id <id>
要编辑监控,请编辑已应用的监控的原始内容,然后再次应用。或者有一个 sts monitor edit 命令可以直接编辑 SUSE Observability 实例中配置的监控:
sts monitor edit --id <id>
此命令中的 <id> 不是标识符,而是 Id 输出中 sts monitor list 列的数字。
验证监控的结果
在创建监控后,验证其是否产生预期结果是一种良好的做法。可以采取以下步骤:
验证监控的绑定情况
观察监控是否在其应监控的组件上产生结果。如果监控未显示,请按照这些步骤进行处理。
常见问题
监视器的结果未在组件上显示
首先检查监控是否实际产生结果。如果是这种情况,但监视器结果未在组件上显示,可能是绑定存在问题。首先使用以下命令进行验证:
sts monitor status --id <id>
如果输出包含`Monitor health states with identifier which has no matching topology element (<nr>): ….`,这表明`urnTemplate`可能未生成与拓扑匹配的标识符。要解决此问题请重新检查您的urnTemplate。