×

Red Hat OpenShift Service on AWS包含一个预配置、预安装和自动更新的监控堆栈,用于监控核心平台组件。此监控堆栈基于Prometheus监控系统。Prometheus是一个时间序列数据库和用于指标的规则评估引擎。

除了使用Red Hat OpenShift Service on AWS监控堆栈外,您还可以使用CLI启用对用户定义项目的监控,并查询通过node-exporter服务公开的虚拟机的自定义指标。

配置节点导出器服务

节点导出器代理部署在您要从中收集指标的集群中的每个虚拟机上。将节点导出器代理配置为服务,以公开与虚拟机关联的内部指标和进程。

先决条件
  • 安装Red Hat OpenShift Service on AWS CLI oc

  • 以具有cluster-admin权限的用户身份登录集群。

  • openshift-monitoring项目中创建cluster-monitoring-config ConfigMap对象。

  • 通过将enableUserWorkload设置为true来配置openshift-user-workload-monitoring项目中的user-workload-monitoring-config ConfigMap对象。

步骤
  1. 创建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)
    1 公开虚拟机指标的节点导出器服务。
    2 创建服务的命名空间。
    3 服务的标签。ServiceMonitor使用此标签来匹配此服务。
    4 为在ClusterIP服务上端口9100公开指标的端口指定的名称。
    5 node-exporter-service用于侦听请求的目标端口。
    6 配置了monitor标签的虚拟机的TCP端口号。
    7 用于匹配虚拟机Pod的标签。在此示例中,将匹配任何带有标签monitor且值为metrics的虚拟机Pod。
  2. 创建节点导出器服务

    $ oc create -f node-exporter-service.yaml

使用节点导出器服务配置虚拟机

node-exporter文件下载到虚拟机。然后,创建一个systemd服务,该服务在虚拟机启动时运行节点导出器服务。

先决条件
  • 该组件的Pod运行在openshift-user-workload-monitoring项目中。

  • 向需要监控此用户定义项目的用户授予monitoring-edit角色。

步骤
  1. 登录到虚拟机。

  2. 使用适用于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
  3. 解压缩可执行文件并将其放置在/usr/bin目录中。

    $ sudo tar xvf node_exporter-1.3.1.linux-amd64.tar.gz \
        --directory /usr/bin --strip 1 "*/node_exporter"
  4. 在此目录路径中创建一个node_exporter.service文件:/etc/systemd/system。此systemd服务文件在虚拟机重新启动时运行节点导出器服务。

    [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
  5. 启用并启动systemd服务。

    $ sudo systemctl enable node_exporter.service
    $ sudo systemctl start node_exporter.service
验证
  • 验证节点导出器代理是否正在报告来自虚拟机的指标。

    $ curl http://127.0.0.1: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

为虚拟机创建自定义监控标签

要启用从单个服务对多个虚拟机的查询,请在虚拟机的YAML文件中添加自定义标签。

先决条件
  • 安装Red Hat OpenShift Service on AWS CLI oc

  • 以具有cluster-admin权限的用户身份登录。

  • 访问Web控制台以停止和重新启动虚拟机。

步骤
  1. 编辑虚拟机配置文件的template规范。在此示例中,标签monitor的值为metrics

    spec:
      template:
        metadata:
          labels:
            monitor: metrics
  2. 停止并重新启动虚拟机以创建带有赋予monitor标签的名称的新Pod。

查询节点导出器服务的指标

通过/metrics规范名称下的HTTP服务端点公开虚拟机的指标。当您查询指标时,Prometheus直接从虚拟机公开的指标端点抓取指标,并显示这些指标以供查看。

先决条件
  • 您可以以具有cluster-admin权限或monitoring-edit角色的用户身份访问集群。

  • 您已通过配置节点导出器服务为用户定义的项目启用了监控。

步骤
  1. 通过指定服务的命名空间来获取HTTP服务端点。

    $ oc get service -n <namespace> <node-exporter-service>
  2. 要列出节点导出器服务的所有可用指标,请查询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

为节点导出器服务创建ServiceMonitor资源

您可以使用Prometheus客户端库并从/metrics端点抓取指标来访问和查看节点导出器服务公开的指标。使用ServiceMonitor自定义资源定义 (CRD) 来监控节点导出器服务。

先决条件
  • 您可以以具有cluster-admin权限或monitoring-edit角色的用户身份访问集群。

  • 您已通过配置节点导出器服务为用户定义的项目启用了监控。

步骤
  1. 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
    1 ServiceMonitor的名称。
    2 创建ServiceMonitor的命名空间。
    3 查询端口的间隔。
    4 每30秒查询一次的端口名称。
  2. 为节点导出器服务创建ServiceMonitor配置。

    $ oc create -f node-exporter-metrics-monitor.yaml

从集群外部访问节点导出器服务

您可以从集群外部访问节点导出器服务并查看公开的指标。

先决条件
  • 您可以以具有cluster-admin权限或monitoring-edit角色的用户身份访问集群。

  • 您已通过配置节点导出器服务为用户定义的项目启用了监控。

步骤
  1. 公开节点导出器服务。

    $ oc expose service -n <namespace> <node_exporter_service_name>
  2. 获取路由的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
  3. 使用curl命令显示节点导出器服务的指标。

    $ 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