4.2. 为用户定义的项目设置指标集合
您可以创建一个 ServiceMonitor
资源,从用户定义的项目中的服务端点提取指标。这假设您的应用程序使用 Prometheus 客户端库向 /metrics
规范名称公开指标。
本节介绍了如何在用户定义的项目中部署示例服务,然后创建一个 ServiceMonitor
资源来定义应该如何监控该服务。
4.2.1. 部署示例服务
要为用户定义的项目中服务测试监控,您可以部署示例服务。
流程
-
为服务配置创建 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.3.0 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
4.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 身份验证。
流程
-
为
ServiceMonitor
资源配置创建一个 YAML 文件。在本例中,该文件名为example-app-service-monitor.yaml
。 添加以下
ServiceMonitor
资源配置详情:apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: prometheus-example-monitor name: prometheus-example-monitor namespace: ns1 spec: endpoints: - interval: 30s port: web scheme: http selector: matchLabels: app: prometheus-example-app
这会定义一个
ServiceMonitor
资源,用于提取由prometheus-example-app
示例服务公开的指标,其中包含version
指标。注意用户定义的命名空间中的
ServiceMonitor
资源只能发现同一命名空间中的服务。也就是说,ServiceMonitor
资源的namespaceSelector
字段总是被忽略。将配置应用到集群:
$ oc apply -f example-app-service-monitor.yaml
部署
ServiceMonitor
资源需要一些时间。您可以检查
ServiceMonitor
资源是否正在运行:$ oc -n ns1 get servicemonitor
输出示例
NAME AGE prometheus-example-monitor 81m