本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

使用 CLI 向组件添加阈值监控

概述

SUSE Observability 提供 开箱即用的监控,可对 Kubernetes 集群中可能发生的常见问题进行监控。还可以为 SUSE Observability 收集的指标或从 Prometheus 获取的应用程序指标配置自定义监控。

步骤

创建监控的步骤:

作为示例,这些步骤将为 Kubernetes 部署的 Replica counts 添加监控。

编写监控的概要

创建一个名为 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可观察性中的每个组件都有一个或多个唯一标识该组件的标识符。要将监控的结果绑定到一个组件,必须提供 urnTemplateurnTemplate 将监控结果的时间序列中的标签替换到模板中,生成匹配组件的标识符。这最好通过以下示例来说明:

在此示例中使用的度量是`kubernetes_state_deployment_replicas_available`度量。在度量探索器中运行该度量,以观察时间序列上可用的标签:

度量探索器中的可用副本

在上表中显示该度量具有`cluster_name`、`namespace`和`deployment`等标签。

因为该度量是在部署上观察到的,所以将监控结果绑定到部署组件是最合逻辑的。为此,需要了解部署的标识符是如何构建的:

  1. 在用户界面中,导航到`deployments`视图并选择单个部署。

  2. 打开`Topology`视图,然后单击部署组件。

  3. 在屏幕右侧面板中展开`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 enable/disable --id <id>

验证监控的结果

在创建监控后,验证其是否产生预期结果是一种良好的做法。可以采取以下步骤:

验证监控的执行情况

访问监控概览页面(http://your-SUSE Observability-instance/#/monitors),找到您的监控。

  1. 验证`Status`列处于`Enabled`状态。如果监控处于`Disabled`状态,请启用它。如果状态处于`Error`状态,请按照以下步骤进行调试

  2. 验证您在`Clear`/Deviating/`Critical`列中看到预期的状态数量。如果状态数量显著低于或高于您想要监控的组件数量,PromQL 查询可能返回了过多的结果。

验证监控的绑定情况

观察监控是否在其应监控的组件上产生结果。如果监控未显示,请按照这些步骤进行处理。

常见问题

监视器的结果未在组件上显示

首先检查监控是否实际产生结果。如果是这种情况,但监视器结果未在组件上显示,可能是绑定存在问题。首先使用以下命令进行验证:

sts monitor status --id <id>

如果输出包含`Monitor health states with identifier which has no matching topology element (<nr>): …​.`,这表明`urnTemplate`可能未生成与拓扑匹配的标识符。要解决此问题请重新检查您的urnTemplate

监视器状态概览中显示错误

通过CLI获取监视器状态

sts monitor status --id <id>

`Monitor Stream errors:`部分将显示监视器上发生的错误,并提供进一步的帮助。