×

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

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

启用用户定义项目的监控

集群管理员可以通过在集群监控 `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. 在 `data/config.yaml` 下添加 `enableUserWorkload: true`

    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-operator`、`prometheus-user-workload` 和 `thanos-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

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

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

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

  • 监控用户定义的项目

  • 配置监控用户定义项目的组件

  • 为用户定义的项目配置警报路由

  • 管理用户定义项目的警报和静默

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

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

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

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

monitoring-rules-view

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

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

monitoring-rules-edit

拥有此集群角色的用户可以创建、修改和删除用户定义项目的PrometheusRule CR。他们还可以在 OpenShift Container Platform Web 控制台的**开发者**视角中管理告警和静默。

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

monitoring-edit

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

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

alert-routing-edit

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

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

其他资源

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

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

先决条件
  • 您已以具有 `cluster-admin` 集群角色的用户身份访问集群。

  • 您要为其分配角色的用户帐户已存在。

步骤
  1. 在 OpenShift Container Platform Web 控制台的**管理员**视角中,转到**用户管理** → **角色绑定** → **创建绑定**。

  2. 在**绑定类型**部分,选择**命名空间角色绑定**类型。

  3. 在**名称**字段中,输入角色绑定的名称。

  4. 在**命名空间**字段中,选择要授予访问权限的项目。

    您使用此过程授予用户的监控角色或集群角色权限仅适用于您在**命名空间**字段中选择的项目。

  5. 从**角色名称**列表中选择监控角色或集群角色。

  6. 在**主体**部分,选择**用户**。

  7. 在**主体名称**字段中,输入用户的名称。

  8. 选择**创建**以应用角色绑定。

使用 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>替换为要授予访问权限的项目。

授予用户配置用户定义项目监控的权限

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

先决条件
  • 您已以具有 `cluster-admin` 集群角色的用户身份访问集群。

  • 您要为其分配角色的用户帐户已存在。

  • 您已安装 OpenShift CLI (`oc`)。

步骤
  1. openshift-user-workload-monitoring项目中为用户分配user-workload-monitoring-config-edit角色。

    $ 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角色。

从集群外部访问自定义应用程序的指标

在使用用户定义的项目监控您自己的服务时,您可以从集群外部查询 Prometheus 指标。使用thanos-querier路由从集群外部访问此数据。

此访问仅支持使用 bearer 令牌进行身份验证。

先决条件
  • 您已按照“启用用户定义项目的监控”过程部署了自己的服务。

  • 您已登录到具有cluster-monitoring-view集群角色的帐户,该角色提供访问 Thanos Querier API 的权限。

  • 您已登录到具有获取 Thanos Querier API 路由权限的帐户。

    如果您的帐户没有获取 Thanos Querier API 路由的权限,集群管理员可以提供路由的 URL。

步骤
  1. 运行以下命令提取连接到 Prometheus 的身份验证令牌:

    $ TOKEN=$(oc whoami -t)
  2. 运行以下命令提取thanos-querier API 路由 URL:

    $ HOST=$(oc -n openshift-monitoring get route thanos-querier -ojsonpath={.status.ingress[].host})
  3. 使用以下命令将命名空间设置为服务所在的命名空间:

    $ NAMESPACE=ns1
  4. 通过运行以下命令在命令行中查询您自己服务的指标:

    $ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/query?" --data-urlencode "query=up{namespace='$NAMESPACE'}"

    输出显示 Prometheus 正在抓取的每个应用程序 Pod 的状态。

    格式化的示例输出
    {
      "status": "success",
      "data": {
        "resultType": "vector",
        "result": [
          {
            "metric": {
              "__name__": "up",
              "endpoint": "web",
              "instance": "10.129.0.46:8080",
              "job": "prometheus-example-app",
              "namespace": "ns1",
              "pod": "prometheus-example-app-68d47c4fb6-jztp2",
              "service": "prometheus-example-app"
            },
            "value": [
              1591881154.748,
              "1"
            ]
          }
        ],
      }
    }
    • 格式化的示例输出使用过滤工具(例如jq)来提供格式化的缩进 JSON。有关使用jq的更多信息,请参阅jq 手册(jq 文档)。

    • 该命令请求 Thanos Querier 服务的即时查询端点,该端点在某一时间点评估选择器。

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

可以将各个用户定义的项目从用户工作负载监控中排除。为此,请使用值为falseopenshift.io/user-monitoring标签添加到项目的命名空间。

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

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

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

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

禁用用户定义项目的监控

启用用户定义项目的监控后,您可以通过在集群监控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. 检查openshift-user-workload-monitoring项目中的prometheus-operatorprometheus-user-workloadthanos-ruler-user-workload Pod 是否已终止。这可能需要一段时间。

    $ oc -n openshift-user-workload-monitoring get pod
    示例输出
    No resources found in openshift-user-workload-monitoring project.

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