$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在 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 都会重新部署。这些组件的重新部署有时可能需要一段时间。 |
编辑 `cluster-monitoring-config` `ConfigMap` 对象
$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在 `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` 参数将启用集群中用户定义项目的监控。 |
保存文件以应用更改。然后将自动启用用户定义项目的监控。
如果启用用户定义项目的监控,则默认情况下会创建 `user-workload-monitoring-config` `ConfigMap` 对象。 |
验证 `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 和用户定义的项目。
您还可以向开发人员和其他用户授予不同的权限
监控用户定义的项目
配置监控用户定义项目的组件
为用户定义的项目配置警报路由
管理用户定义项目的警报和静默
您可以通过分配以下监控角色或集群角色之一来授予权限
角色名称 | 描述 | 项目 |
---|---|---|
|
具有此角色的用户可以编辑 `user-workload-monitoring-config` `ConfigMap` 对象,以配置 Prometheus、Prometheus Operator、Alertmanager 和 Thanos Ruler 以进行用户定义的工作负载监控。 |
|
|
如果启用了用户定义的 Alertmanager,则具有此角色的用户可以访问所有项目的用户定义 Alertmanager API 的读取权限。 |
|
|
如果启用了用户定义的 Alertmanager,则具有此角色的用户可以访问所有项目的用户定义 Alertmanager API 的读写权限。 |
|
集群角色名称 | 描述 | 项目 |
---|---|---|
|
具有此集群角色的用户可以访问用户定义项目的 `PrometheusRule` 自定义资源 (CR) 的读取权限。他们还可以在 OpenShift Container Platform Web 控制台的**开发人员**视角中查看警报和静默。 |
可以与 `RoleBinding` 绑定到任何用户项目。 |
|
拥有此集群角色的用户可以创建、修改和删除用户定义项目的 |
可以与 `RoleBinding` 绑定到任何用户项目。 |
|
拥有此集群角色的用户具有与拥有 |
可以与 `RoleBinding` 绑定到任何用户项目。 |
|
拥有此集群角色的用户可以创建、更新和删除用户定义项目的 |
可以与 `RoleBinding` 绑定到任何用户项目。 |
您可以使用 OpenShift Container Platform Web 控制台为openshift-monitoring
项目或用户自己的项目授予用户权限。
您已以具有 `cluster-admin` 集群角色的用户身份访问集群。
您要为其分配角色的用户帐户已存在。
在 OpenShift Container Platform Web 控制台的**管理员**视角中,转到**用户管理** → **角色绑定** → **创建绑定**。
在**绑定类型**部分,选择**命名空间角色绑定**类型。
在**名称**字段中,输入角色绑定的名称。
在**命名空间**字段中,选择要授予访问权限的项目。
您使用此过程授予用户的监控角色或集群角色权限仅适用于您在**命名空间**字段中选择的项目。 |
从**角色名称**列表中选择监控角色或集群角色。
在**主体**部分,选择**用户**。
在**主体名称**字段中,输入用户的名称。
选择**创建**以应用角色绑定。
您可以使用 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`)。
在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
通过显示相关的角色绑定来验证用户是否已正确分配给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。 |
运行以下命令提取连接到 Prometheus 的身份验证令牌:
$ TOKEN=$(oc whoami -t)
运行以下命令提取thanos-querier
API 路由 URL:
$ HOST=$(oc -n openshift-monitoring get route thanos-querier -ojsonpath={.status.ingress[].host})
使用以下命令将命名空间设置为服务所在的命名空间:
$ NAMESPACE=ns1
通过运行以下命令在命令行中查询您自己服务的指标:
$ 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"
]
}
],
}
}
|
可以将各个用户定义的项目从用户工作负载监控中排除。为此,请使用值为false
的openshift.io/user-monitoring
标签添加到项目的命名空间。
将标签添加到项目命名空间:
$ oc label namespace my-project 'openshift.io/user-monitoring=false'
要重新启用监控,请从命名空间中删除标签:
$ oc label namespace my-project 'openshift.io/user-monitoring-'
如果项目有任何活动的监控目标,Prometheus 在添加标签后可能需要几分钟才能停止抓取它们。 |
启用用户定义项目的监控后,您可以通过在集群监控ConfigMap
对象中设置enableUserWorkload: false
来再次禁用它。
或者,您可以删除 |
编辑 `cluster-monitoring-config` `ConfigMap` 对象
$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在data/config.yaml
下将enableUserWorkload:
设置为false
。
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
data:
config.yaml: |
enableUserWorkload: false
保存文件以应用更改。然后将自动禁用用户定义项目的监控。
检查openshift-user-workload-monitoring
项目中的prometheus-operator
、prometheus-user-workload
和thanos-ruler-user-workload
Pod 是否已终止。这可能需要一段时间。
$ oc -n openshift-user-workload-monitoring get pod
No resources found in openshift-user-workload-monitoring project.
当禁用对用户定义项目的监控时, |