第 4 章 配置用户工作负载监控


4.1. 准备配置用户工作负载监控堆栈

本节介绍可以配置哪些用户定义的监控组件、如何启用用户工作负载监控以及如何准备配置用户工作负载监控堆栈。

重要

4.1.1. 可配置的监控组件

下表显示了您可以配置的监控组件,以及 user-workload-monitoring-config 配置映射中用来指定这些组件的键。

表 4.1. 为用户定义的项目可配置监控组件
组件user-workload-monitoring-config 配置映射键

Prometheus Operator

prometheusOperator

Prometheus

prometheus

Alertmanager

alertmanager

Thanos Ruler

thanosRuler

警告

ConfigMap 对象的不同配置更改会导致不同的结果:

  • Pod 不会重新部署。因此,没有服务中断。
  • 受影响的 pod 被重新部署:

    • 对于单节点集群,这会导致临时服务中断。
    • 对于多节点集群,因为高可用性,受影响的 pod 会逐渐推出,监控堆栈仍然可用。
    • 无论高可用性如何,配置和重新定义持久性卷的大小始终会导致服务中断。

每个需要更改配置映射中的步骤都包括其预期的结果。

4.1.2. 为用户定义的项目启用监控

在 OpenShift Container Platform 中,除了默认的平台监控外,您还可以为用户定义的项目启用监控。您可以监控 OpenShift Container Platform 中的自己的项目,而无需额外的监控解决方案。使用这个功能可以集中监控核心平台组件和用户定义的项目。

注意

使用 Operator Lifecycle Manager (OLM) 安装的 Prometheus Operator 版本与用户定义的监控不兼容。因此,OpenShift Container Platform 不支持作为由 OLM Prometheus Operator 管理的 Prometheus 自定义资源 (CR) 安装的自定义 Prometheus 实例。

4.1.2.1. 为用户定义的项目启用监控

集群管理员可以通过在集群监控 ConfigMap 中设置 enableUserWorkload: true 字段来为用户定义的项目启用监控。

重要

要为用户定义的项目启用监控,您必须先删除任何自定义 Prometheus 实例。

注意

您必须可以使用具有 cluster-admin 集群角色的用户访问集群,才能在 OpenShift Container Platform 中为用户定义的项目启用监控。然后,集群管理员可以选择性地授予用户权限来配置负责监控用户定义的项目的组件。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 已安装 OpenShift CLI(oc)。
  • 您已创建 cluster-monitoring-config ConfigMap 对象。
  • 您已选择性地创建并配置 openshift-user-workload-monitoring 项目中的 user-workload-monitoring-config ConfigMap。您可以在该 ConfigMap 中为监控用户定义的项目的组件添加配置选项。

    注意

    每次您将配置更改保存到 user-workload-monitoring-config ConfigMap 时,都会重新部署 openshift-user-workload-monitoring 项目中的 Pod。可能需要稍等片刻,这些组件才会重新部署。

流程

  1. 编辑 cluster-monitoring-config ConfigMap 对象:

    $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
  2. enableUserWorkload: true 添加到 data/config.yaml 下:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        enableUserWorkload: true 1
    1
    当设置为 true 时,enableUserWorkload 参数为集群中用户定义的项目启用监控。
  3. 保存文件以使改变生效。然后会自动启用对用户定义的项目的监控。

    注意

    如果您为用户定义的项目启用监控,则默认创建 user-workload-monitoring-config ConfigMap 对象。

  4. 验证 prometheus-operatorprometheus-user-workloadthanos-ruler-user-workload Pod 是否在 openshift-user-workload-monitoring 项目中运行。Pod 启动可能需要片刻时间:

    $ oc -n openshift-user-workload-monitoring get pod

    输出示例

    NAME                                   READY   STATUS        RESTARTS   AGE
    prometheus-operator-6f7b748d5b-t7nbg   2/2     Running       0          3h
    prometheus-user-workload-0             4/4     Running       1          3h
    prometheus-user-workload-1             4/4     Running       1          3h
    thanos-ruler-user-workload-0           3/3     Running       0          3h
    thanos-ruler-user-workload-1           3/3     Running       0          3h

4.1.2.2. 授予用户权限来为用户定义的项目配置监控

作为集群管理员,您可以将 user-workload-monitoring-config-edit 角色分配给用户。这授予为用户定义的项目配置和管理监控的权限,而不授予他们配置和管理 OpenShift Container Platform 核心监控组件的权限。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 要将角色分配到的用户帐户已存在。
  • 已安装 OpenShift CLI(oc)。

流程

  1. user-workload-monitoring-config-edit 角色分配给 openshift-user-workload-monitoring 项目中的用户:

    $ oc -n openshift-user-workload-monitoring adm policy add-role-to-user \
      user-workload-monitoring-config-edit <user> \
      --role-namespace openshift-user-workload-monitoring
  2. 通过显示相关角色绑定来验证用户是否已正确分配给 user-workload-monitoring-config-edit 角色:

    $ oc describe rolebinding <role_binding_name> -n openshift-user-workload-monitoring

    示例命令

    $ oc describe rolebinding user-workload-monitoring-config-edit -n openshift-user-workload-monitoring

    输出示例

    Name:         user-workload-monitoring-config-edit
    Labels:       <none>
    Annotations:  <none>
    Role:
      Kind:  Role
      Name:  user-workload-monitoring-config-edit
    Subjects:
      Kind  Name  Namespace
      ----  ----  ---------
      User  user1           1

    1
    在本例中,user1 分配给 user-workload-monitoring-config-edit 角色。

4.1.3. 为用户定义的项目启用警报路由

在 OpenShift Container Platform 中,管理员可以为用户定义的项目启用警报路由。这个过程由以下步骤组成:

  • 为用户定义的项目启用警报路由:

    • 使用默认平台 Alertmanager 实例。
    • 仅对用户定义的项目使用单独的 Alertmanager 实例。
  • 授予用户权限来为用户定义的项目配置警报路由。

完成这些步骤后,开发人员和其他用户可以为用户定义的项目配置自定义警报和警报路由。

4.1.3.1. 为用户定义的警报路由启用平台 Alertmanager 实例

您可以允许用户创建使用 Alertmanager 主平台实例的用户定义警报路由配置。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 集群管理员为用户定义的项目启用了监控。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 编辑 cluster-monitoring-config ConfigMap 对象:

    $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
  2. data/config.yaml 下添加 alertmanagerMain 部分中的 enableUserAlertmanagerConfig: true

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
        # ...
        alertmanagerMain:
          enableUserAlertmanagerConfig: true 1
        # ...
    1
    enableUserAlertmanagerConfig 值设置为 true,以便用户创建使用 Alertmanager 主平台实例的用户定义警报路由配置。
  3. 保存文件以使改变生效。新的配置会被自动应用。

4.1.3.2. 为用户定义的警报路由启用一个单独的 Alertmanager 实例

在一些集群中,您可能想要为用户定义的项目部署专用 Alertmanager 实例,这有助于降低默认平台 Alertmanager 实例的负载,并更好地将用户定义的警报与默认平台警报分开。在这些情况下,您可以选择性地启用一个单独的 Alertmanager 实例,以仅为用户定义的项目发送警报。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 您已为用户定义的项目启用了监控。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 编辑 user-workload-monitoring-config ConfigMap 对象:

    $ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
  2. data/config.yaml 下,添加 alertmanager 部分的 enabled: trueenableAlertmanagerConfig: true

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: user-workload-monitoring-config
      namespace: openshift-user-workload-monitoring
    data:
      config.yaml: |
        alertmanager:
          enabled: true 1
          enableAlertmanagerConfig: true 2
    1
    enabled 值设为 true,为集群中的用户定义的项目启用 Alertmanager 专用实例。将值设为 false 或省略键可完全为用户定义的项目禁用 Alertmanager。如果将此值设置为 false,或者如果省略了密钥,则用户定义的警报会路由到默认平台 Alertmanager 实例。
    2
    enableAlertmanagerConfig 值设置为 true,以便用户使用 AlertmanagerConfig 对象定义自己的警报路由配置。
  3. 保存文件以使改变生效。用于用户定义的项目的 Alertmanager 专用实例会自动启动。

验证

  • 验证 user-workload Alertmanager 实例是否已启动:

    # oc -n openshift-user-workload-monitoring get alertmanager

    输出示例

    NAME            VERSION   REPLICAS   AGE
    user-workload   0.24.0    2          100s

4.1.3.3. 授予用户权限来为用户定义的项目配置警报路由

您可以授予用户权限来为用户定义的项目配置警报路由。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 您已为用户定义的项目启用了监控。
  • 要将角色分配到的用户帐户已存在。
  • 已安装 OpenShift CLI(oc)。

流程

  • alert-routing-edit 集群角色分配给用户定义的项目中的用户:

    $ oc -n <namespace> adm policy add-role-to-user alert-routing-edit <user> 1
    1
    对于 <namespace>,替换用户定义的项目的命名空间,如 ns1。对于 <user>,替换您要为其分配该角色的帐户的用户名。

其他资源

配置警报通知

4.1.4. 授予用户权限来监控用户定义的项目

集群管理员可以监控所有 OpenShift Container Platform 核心项目和用户定义的项目。

您还可以向开发人员和其他用户授予不同的权限:

  • 监控用户定义的项目
  • 要配置用于监控用户定义的项目的组件。
  • 为用户定义的项目配置警报路由
  • 为用户定义的项目管理警报和静默

您可以通过分配以下监控角色或集群角色之一来授予权限:

表 4.2. 监控角色
角色名称描述项目

user-workload-monitoring-config-edit

具有此角色的用户可以编辑 user-workload-monitoring-config ConfigMap 对象,为用户定义的工作负载监控配置 Prometheus、Prometheus Operator、Alertmanager 和 Thanos Ruler。

openshift-user-workload-monitoring

monitoring-alertmanager-api-reader

如果启用了用户定义的 Alertmanager,具有此角色的用户对用户定义的 Alertmanager API 具有读取访问权限。

openshift-user-workload-monitoring

monitoring-alertmanager-api-writer

如果启用了用户定义的 Alertmanager,具有此角色的用户对用户定义的 Alertmanager API 具有读写访问权限。

openshift-user-workload-monitoring

表 4.3. 监控集群角色
集群角色名称描述项目

monitoring-rules-view

具有此集群角色的用户具有用户定义的项目的 PrometheusRule 自定义资源 (CR) 的读取访问权限。它们也可以在 OpenShift Container Platform Web 控制台的 Developer 视角中查看警报和静默。

可以与 RoleBinding 绑定到任何用户项目。

monitoring-rules-edit

具有此集群角色的用户可为用户定义的项目创建、修改和删除 PrometheusRule CR。它们也可以在 OpenShift Container Platform Web 控制台的 Developer 视角中管理警报和静默。

可以与 RoleBinding 绑定到任何用户项目。

monitoring-edit

具有此集群角色的用户具有与具有 monitoring-rules-edit 集群角色的用户相同的权限。另外,用户可以创建、读取、修改和删除 ServiceMonitorPodMonitor 资源,以从服务和 pod 中提取指标。

可以与 RoleBinding 绑定到任何用户项目。

alert-routing-edit

具有此集群角色的用户可为用户定义的项目创建、更新和删除 AlertmanagerConfig CR。

可以与 RoleBinding 绑定到任何用户项目。

4.1.4.1. 使用 Web 控制台授予用户权限

您可以使用 OpenShift Container Platform Web 控制台为 openshift-monitoring 项目或自己的项目授予用户权限。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 要将角色分配到的用户帐户已存在。

流程

  1. 在 OpenShift Container Platform Web 控制台的 Administrator 视角中,进入 User Management RoleBindings Create binding
  2. Binding Type 部分中,选择 Namespace Role Binding 类型。
  3. Name 字段中输入角色绑定的名称。
  4. Namespace 字段中,选择要授予访问权限的项目。

    重要

    您使用此流程向用户授予的监控角色或集群角色权限只适用于您在 Namespace 字段中选择的项目。

  5. Role Name 列表中选择监控角色或集群角色。
  6. Subject 部分,选择 User
  7. Subject Name 字段中,输入用户名称。
  8. 选择 Create 以应用角色绑定。

4.1.4.2. 使用 CLI 授予用户权限

您可以使用 OpenShift CLI (oc) 为 openshift-monitoring 项目或自己的项目授予用户权限。

重要

无论您选择的角色或集群角色,都必须作为集群管理员将其与特定项目进行绑定。

先决条件

  • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
  • 要将角色分配到的用户帐户已存在。
  • 已安装 OpenShift CLI(oc)。

流程

  • 要为项目的用户分配监控角色,请输入以下命令:

    $ oc adm policy add-role-to-user <role> <user> -n <namespace> --role-namespace <namespace> 1
    1
    <role> 替换为您要监控角色,<user> 替换为您要为其分配角色的用户,<namespace> 替换为您要授予访问权限的项目。
  • 要为项目的用户分配监控集群角色,请输入以下命令:

    $ oc adm policy add-cluster-role-to-user <cluster-role> <user> -n <namespace> 1
    1
    <cluster-role> 替换为您要监控的集群角色,<user> 替换为您要为其分配集群角色的用户, <namespace> 替换为您要授予访问权限的项目。

4.1.5. 将用户定义的项目从监控中排除

用户工作负载监控中可以排除个别用户定义的项目。为此,只需将 openshift.io/user-monitoring 标签添加到项目的命名空间,值设为 false

流程

  1. 将标签添加到项目命名空间:

    $ oc label namespace my-project 'openshift.io/user-monitoring=false'
  2. 要重新启用监控,请从命名空间中删除该标签:

    $ oc label namespace my-project 'openshift.io/user-monitoring-'
    注意

    如果项目有任何活跃的监控目标,Prometheus 可能需要几分钟时间在添加标签后停止提取它们。

4.1.6. 为用户定义的项目禁用监控

为用户定义的项目启用监控后,您可以通过在集群监控 ConfigMap 对象中设置 enableUserWorkload: false 来再次禁用它。

注意

另外,您也可以通过删除 enableUserWorkload: true 来为用户定义的项目禁用监控。

流程

  1. 编辑 cluster-monitoring-config ConfigMap 对象:

    $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
    1. data/config.yaml 下将 enableUserWorkload: 设置为 false

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: cluster-monitoring-config
        namespace: openshift-monitoring
      data:
        config.yaml: |
          enableUserWorkload: false
  2. 保存文件以使改变生效。然后会自动禁用对用户定义的项目的监控。
  3. 检查 prometheus-operatorprometheus-user-workloadthanos-ruler-user-workload Pod 是否已在 openshift-user-workload-monitoring 项目中终止。这可能需要片刻时间:

    $ oc -n openshift-user-workload-monitoring get pod

    输出示例

    No resources found in openshift-user-workload-monitoring project.

注意

在禁用了对用户定义的项目的监控时,openshift-user-workload-monitoring 项目中的 user-workload-config ConfigMap 对象不会被自动删除。这是为了保留您可能已在 ConfigMap 中创建的任何自定义配置。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.