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-configConfigMap对象。 -
通过将
enableUserWorkload设置为true,配置openshift-user-workload-monitoring项目中的user-workload-monitoring-configConfigMap对象。
流程
创建
ServiceYAML 文件。在以下示例中,该文件名为node-exporter-service.yaml。kind: Service apiVersion: v1 metadata: name: node-exporter-service1 namespace: dynamation2 labels: servicetype: metrics3 spec: ports: - name: exmet4 protocol: TCP port: 91005 targetPort: 91006 type: ClusterIP selector: monitor: metrics7 创建 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-monitor1 namespace: dynamation2 spec: endpoints: - interval: 30s3 port: exmet4 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