9.2. 为用户定义的项目设置指标集合
您可以创建一个 ServiceMonitor
资源,从用户定义的项目中的服务端点提取指标。这假设您的应用程序使用 Prometheus 客户端库向 /metrics
规范名称公开指标。
本节介绍了如何在用户定义的项目中部署示例服务,然后创建一个 ServiceMonitor
资源来定义应该如何监控该服务。
9.2.1. 部署示例服务
要为用户定义的项目中服务测试监控,您可以部署示例服务。
先决条件
-
您可以使用具有
cluster-admin
集群角色或具有命名空间管理权限的用户身份访问集群。
流程
-
为服务配置创建 YAML 文件。在本例中,该文件名为
prometheus-example-app.yaml
。 在该文件中添加以下部署和服务配置详情:
apiVersion: v1 kind: Namespace metadata: name: ns1 --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: prometheus-example-app name: prometheus-example-app namespace: ns1 spec: replicas: 1 selector: matchLabels: app: prometheus-example-app template: metadata: labels: app: prometheus-example-app spec: containers: - image: ghcr.io/rhobs/prometheus-example-app:0.4.2 imagePullPolicy: IfNotPresent name: prometheus-example-app --- apiVersion: v1 kind: Service metadata: labels: app: prometheus-example-app name: prometheus-example-app namespace: ns1 spec: ports: - port: 8080 protocol: TCP targetPort: 8080 name: web selector: app: prometheus-example-app type: ClusterIP
此配置会在用户定义的
ns1
项目中部署名为prometheus-example-app
的服务。此服务会公开自定义version
指标。将配置应用到集群:
$ oc apply -f prometheus-example-app.yaml
部署该服务需要一些时间。
您可以检查该 Pod 是否正在运行:
$ oc -n ns1 get pod
输出示例
NAME READY STATUS RESTARTS AGE prometheus-example-app-7857545cb7-sbgwq 1/1 Running 0 81m
9.2.2. 指定如何监控服务
要使用服务公开的指标,需要将 OpenShift Container Platform 监控配置为从 /metrics
端点中提取指标。您可以使用一个 ServiceMonitor
自定义资源定义(CRD)应该如何监控服务,或使用一个 PodMonitor
CRD 指定应该如何监控 pod。前者需要 Service
对象,而后者则不需要,允许 Prometheus 直接从 Pod 公开的指标端点中提取指标。
此流程演示了如何为用户定义的项目中的服务创建 ServiceMonitor
资源。
先决条件
-
您可以使用具有
cluster-admin
集群角色或monitoring-edit
集群角色的用户访问集群。 - 您已为用户定义的项目启用了监控。
在本例中,您已在
ns1
项目中部署了prometheus-example-app
示例服务。注意prometheus-example-app
示例服务不支持 TLS 身份验证。
流程
-
创建名为
example-app-service-monitor.yaml
的新 YAML 配置文件。 将
ServiceMonitor
资源添加到 YAML 文件中。以下示例创建一个名为prometheus-example-monitor
的服务监控器,用于提取ns1
命名空间中的prometheus-example-app
服务公开的指标:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-example-monitor namespace: ns1 1 spec: endpoints: - interval: 30s port: web 2 scheme: http selector: 3 matchLabels: app: prometheus-example-app
注意用户定义的命名空间中的
ServiceMonitor
资源只能发现同一命名空间中的服务。也就是说,ServiceMonitor
资源的namespaceSelector
字段总是被忽略。将配置应用到集群:
$ oc apply -f example-app-service-monitor.yaml
部署
ServiceMonitor
资源需要一些时间。验证
ServiceMonitor
资源是否正在运行:$ oc -n <namespace> get servicemonitor
输出示例
NAME AGE prometheus-example-monitor 81m
9.2.3. 服务端点身份验证设置示例
您可以使用 ServiceMonitor
和 PodMonitor
自定义资源定义(CRD) 为用户定义的项目监控配置服务端点身份验证。
以下示例显示了 ServiceMonitor
资源的不同身份验证设置。每个示例演示了如何配置包含身份验证凭据和其他相关设置的对应 Secret
对象。
9.2.3.1. 使用 bearer 令牌的 YAML 身份验证示例
以下示例显示了 ns1
命名空间中名为 example-bearer-auth
的 Secret
对象的 bearer 令牌设置:
bearer 令牌 secret 示例
apiVersion: v1
kind: Secret
metadata:
name: example-bearer-auth
namespace: ns1
stringData:
token: <authentication_token> 1
- 1
- 指定身份验证令牌。
以下示例显示了 ServiceMonitor
CRD 的 bearer 令牌身份验证设置。这个示例使用名为 example-bearer-auth
的 Secret
对象:
bearer 令牌身份验证设置示例
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-example-monitor namespace: ns1 spec: endpoints: - authorization: credentials: key: token 1 name: example-bearer-auth 2 port: web selector: matchLabels: app: prometheus-example-app
不要使用 bearerTokenFile
来配置 bearer 令牌。如果使用 bearerTokenFile
配置,ServiceMonitor
资源将被拒绝。
9.2.3.2. 用于基本身份验证的 YAML 示例
以下示例显示了 ns1
命名空间中名为 example-basic-auth
的 Secret
对象基本身份验证设置:
基本身份验证 secret 示例
apiVersion: v1 kind: Secret metadata: name: example-basic-auth namespace: ns1 stringData: user: <basic_username> 1 password: <basic_password> 2
以下示例显示了 ServiceMonitor
CRD 的基本身份验证设置。这个示例使用名为 example-basic-auth
的 Secret
对象:
基本身份验证设置示例
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-example-monitor namespace: ns1 spec: endpoints: - basicAuth: username: key: user 1 name: example-basic-auth 2 password: key: password 3 name: example-basic-auth 4 port: web selector: matchLabels: app: prometheus-example-app
9.2.3.3. 使用 OAuth 2.0 的 YAML 身份验证示例
以下示例显示了 ns1
命名空间中名为 example-oauth2
的 Secret
对象的 OAuth 2.0 设置:
OAuth 2.0 secret 示例
apiVersion: v1 kind: Secret metadata: name: example-oauth2 namespace: ns1 stringData: id: <oauth2_id> 1 secret: <oauth2_secret> 2
以下示例显示了 ServiceMonitor
CRD 的 OAuth 2.0 身份验证设置。这个示例使用名为 example-oauth2
的 Secret
对象:
OAuth 2.0 身份验证设置示例
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: prometheus-example-monitor namespace: ns1 spec: endpoints: - oauth2: clientId: secret: key: id 1 name: example-oauth2 2 clientSecret: key: secret 3 name: example-oauth2 4 tokenUrl: https://example.com/oauth2/token 5 port: web selector: matchLabels: app: prometheus-example-app