12.4. 为虚拟机公开自定义指标
OpenShift Container Platform 包括一个预配置、预安装和自我更新的监控堆栈,可为核心平台组件提供监控。此监控堆栈基于 Prometheus 监控系统。Prometheus 是一个时间序列数据库和用于指标的规则评估引擎。
除了使用 OpenShift Container Platform 监控堆栈外,您还可以使用 CLI 启用对用户定义的项目的监控,并查询通过 node-exporter
服务为虚拟机公开的自定义指标。
12.4.1. 配置节点导出器服务
node-exporter 代理部署在您要从中收集指标的集群中的每个虚拟机上。将 node-exporter 代理配置为服务,以公开与虚拟机关联的内部指标和进程。
先决条件
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
权限的用户身份登录集群。 -
在
openshift-monitoring
项目中创建cluster-monitoring-config
ConfigMap
对象。 -
通过将
enableUserWorkload
设置为true
,配置openshift-user-workload-monitoring
项目中的user-workload-monitoring-config
ConfigMap
对象。
流程
创建
Service
YAML 文件。在以下示例中,该文件名为node-exporter-service.yaml
。kind: Service apiVersion: v1 metadata: name: node-exporter-service 1 namespace: dynamation 2 labels: servicetype: metrics 3 spec: ports: - name: exmet 4 protocol: TCP port: 9100 5 targetPort: 9100 6 type: ClusterIP selector: monitor: metrics 7
创建 node-exporter 服务:
$ oc create -f node-exporter-service.yaml
12.4.2. 配置使用节点 exporter 服务的虚拟机
将 node-exporter
文件下载到虚拟机。然后,创建一个在虚拟机引导时运行 node-exporter 服务的 systemd
服务。
先决条件
-
该组件的 Pod 在
openshift-user-workload-monitoring
项目中运行。 -
向需要监控此用户定义的项目的用户授予
monitoring-edit
角色。
流程
- 登录虚拟机。
使用应用到
node-exporter
文件的目录的路径,将node-exporter
文件下载到虚拟机。$ wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
提取可执行文件并将其放置在
/usr/bin
目录中。$ sudo tar xvf node_exporter-1.3.1.linux-amd64.tar.gz \ --directory /usr/bin --strip 1 "*/node_exporter"
在此目录路径中创建
node_exporter.service
文件:/etc/systemd/system
。此systemd
服务文件在虚拟机重启时运行 node-exporter 服务。[Unit] Description=Prometheus Metrics Exporter After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root ExecStart=/usr/bin/node_exporter [Install] WantedBy=multi-user.target
启用并启动
systemd
服务。$ sudo systemctl enable node_exporter.service $ sudo systemctl start node_exporter.service
验证
验证 node-exporter 代理是否已报告虚拟机的指标。
$ curl http://localhost:9100/metrics
输出示例
go_gc_duration_seconds{quantile="0"} 1.5244e-05 go_gc_duration_seconds{quantile="0.25"} 3.0449e-05 go_gc_duration_seconds{quantile="0.5"} 3.7913e-05
12.4.3. 为虚拟机创建自定义监控标签
要启用来自单个服务的多个虚拟机的查询,请在虚拟机的 YAML 文件中添加自定义标签。
先决条件
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
特权的用户身份登录。 - 访问 web 控制台以停止和重启虚拟机。
流程
编辑虚拟机配置文件的
模板
spec。在本例中,标签monitor
具有值metrics
。spec: template: metadata: labels: monitor: metrics
-
停止并重启虚拟机,以创建具有与
monitor
标签给定标签名称的新 pod。
12.4.3.1. 查询 node-exporter 服务以获取指标
指标通过 /metrics
规范名称下的 HTTP 服务端点公开。当您查询指标时,Prometheus 会直接从虚拟机公开的指标端点中提取指标,并展示这些指标来查看。
先决条件
-
您可以使用具有
cluster-admin
特权或monitoring-edit
角色的用户访问集群。 - 您已通过配置 node-exporter 服务为用户定义的项目启用了监控。
流程
通过为服务指定命名空间来获取 HTTP 服务端点:
$ oc get service -n <namespace> <node-exporter-service>
要列出 node-exporter 服务的所有可用指标,请查询
metrics
资源。$ curl http://<172.30.226.162:9100>/metrics | grep -vE "^#|^$"
输出示例
node_arp_entries{device="eth0"} 1 node_boot_time_seconds 1.643153218e+09 node_context_switches_total 4.4938158e+07 node_cooling_device_cur_state{name="0",type="Processor"} 0 node_cooling_device_max_state{name="0",type="Processor"} 0 node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0 node_cpu_guest_seconds_total{cpu="0",mode="user"} 0 node_cpu_seconds_total{cpu="0",mode="idle"} 1.10586485e+06 node_cpu_seconds_total{cpu="0",mode="iowait"} 37.61 node_cpu_seconds_total{cpu="0",mode="irq"} 233.91 node_cpu_seconds_total{cpu="0",mode="nice"} 551.47 node_cpu_seconds_total{cpu="0",mode="softirq"} 87.3 node_cpu_seconds_total{cpu="0",mode="steal"} 86.12 node_cpu_seconds_total{cpu="0",mode="system"} 464.15 node_cpu_seconds_total{cpu="0",mode="user"} 1075.2 node_disk_discard_time_seconds_total{device="vda"} 0 node_disk_discard_time_seconds_total{device="vdb"} 0 node_disk_discarded_sectors_total{device="vda"} 0 node_disk_discarded_sectors_total{device="vdb"} 0 node_disk_discards_completed_total{device="vda"} 0 node_disk_discards_completed_total{device="vdb"} 0 node_disk_discards_merged_total{device="vda"} 0 node_disk_discards_merged_total{device="vdb"} 0 node_disk_info{device="vda",major="252",minor="0"} 1 node_disk_info{device="vdb",major="252",minor="16"} 1 node_disk_io_now{device="vda"} 0 node_disk_io_now{device="vdb"} 0 node_disk_io_time_seconds_total{device="vda"} 174 node_disk_io_time_seconds_total{device="vdb"} 0.054 node_disk_io_time_weighted_seconds_total{device="vda"} 259.79200000000003 node_disk_io_time_weighted_seconds_total{device="vdb"} 0.039 node_disk_read_bytes_total{device="vda"} 3.71867136e+08 node_disk_read_bytes_total{device="vdb"} 366592 node_disk_read_time_seconds_total{device="vda"} 19.128 node_disk_read_time_seconds_total{device="vdb"} 0.039 node_disk_reads_completed_total{device="vda"} 5619 node_disk_reads_completed_total{device="vdb"} 96 node_disk_reads_merged_total{device="vda"} 5 node_disk_reads_merged_total{device="vdb"} 0 node_disk_write_time_seconds_total{device="vda"} 240.66400000000002 node_disk_write_time_seconds_total{device="vdb"} 0 node_disk_writes_completed_total{device="vda"} 71584 node_disk_writes_completed_total{device="vdb"} 0 node_disk_writes_merged_total{device="vda"} 19761 node_disk_writes_merged_total{device="vdb"} 0 node_disk_written_bytes_total{device="vda"} 2.007924224e+09 node_disk_written_bytes_total{device="vdb"} 0
12.4.4. 为节点 exporter 服务创建 ServiceMonitor 资源
您可以使用 Prometheus 客户端库和从 /metrics
端点中提取指标来访问和查看 node-exporter 服务公开的指标。使用 ServiceMonitor
自定义资源定义(CRD)来监控节点 exporter 服务。
先决条件
-
您可以使用具有
cluster-admin
特权或monitoring-edit
角色的用户访问集群。 - 您已通过配置 node-exporter 服务为用户定义的项目启用了监控。
流程
为
ServiceMonitor
资源配置创建一个 YAML 文件。在本例中,服务监控器与带有标签metrics
的任意服务匹配,每 30 秒对exmet
端口进行查询。apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: node-exporter-metrics-monitor name: node-exporter-metrics-monitor 1 namespace: dynamation 2 spec: endpoints: - interval: 30s 3 port: exmet 4 scheme: http selector: matchLabels: servicetype: metrics
为 node-exporter 服务创建
ServiceMonitor
配置。$ oc create -f node-exporter-metrics-monitor.yaml
12.4.4.1. 访问集群外的节点导出服务
您可以访问集群外的 node-exporter 服务,并查看公开的指标。
先决条件
-
您可以使用具有
cluster-admin
特权或monitoring-edit
角色的用户访问集群。 - 您已通过配置 node-exporter 服务为用户定义的项目启用了监控。
流程
公开 node-exporter 服务。
$ oc expose service -n <namespace> <node_exporter_service_name>
获取路由的 FQDN(全限定域名)。
$ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.host
输出示例
NAME DNS node-exporter-service node-exporter-service-dynamation.apps.cluster.example.org
使用
curl
命令显示 node-exporter 服务的指标。$ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metrics
输出示例
go_gc_duration_seconds{quantile="0"} 1.5382e-05 go_gc_duration_seconds{quantile="0.25"} 3.1163e-05 go_gc_duration_seconds{quantile="0.5"} 3.8546e-05 go_gc_duration_seconds{quantile="0.75"} 4.9139e-05 go_gc_duration_seconds{quantile="1"} 0.000189423