指标和监控

监控指南

DirectPV 节点通过端口 10443 导出与 Prometheus 兼容的指标数据。

要在 Prometheus 中抓取数据,每个节点都必须可以通过端口 10443 访问。

  1. 使节点服务器指标端口可通过 localhost:8080 访问。

    kubectl -n directpv port-forward node-server-4nd6q 8080:10443
    
  2. 在 Prometheus 配置中添加以下内容

    scrape_configs:
      - job_name: 'directpv-monitor'
        # Override the global default and scrape targets from this job every 5 seconds.
        scrape_interval: 5s
        static_configs:
          - targets: ['localhost:8080']
            labels:
              group: 'production'
    
  3. 在 Prometheus Web 界面中使用 PromQL 在 Prometheus 中运行查询以测试配置。

    例如,以下查询返回 node1 的总字节数指标

    directpv_stats_bytes_total{node="node1"}
    

支持的指标

DirectPV 节点服务器导出以下指标

  • directpv_stats_bytes_used
  • directpv_stats_bytes_total

这些指标按标签 [’tenant’, ‘volumeID’, ’node’] 分类,表示已发布卷的卷统计信息。

配置

应用以下 Prometheus 配置以抓取公开的指标

global:
  scrape_interval: 15s
  external_labels:
    monitor: 'directpv-monitor'
scrape_configs:
- job_name: 'directpv-metrics'
  scheme: http
  metrics_path: /directpv/metrics
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_namespace]
    regex: "directpv-(.+)"
    action: keep
  - source_labels: [__meta_kubernetes_pod_controller_kind]
    regex: "DaemonSet"
    action: keep
  - source_labels: [__meta_kubernetes_pod_container_port_name]
    regex: "healthz"
    action: drop
    target_label: kubernetes_port_name
- job_name: 'kubernetes-cadvisor'
  scheme: https
  metrics_path: /metrics/cadvisor
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
    insecure_skip_verify: true
  authorization:
    credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - source_labels: [__meta_kubernetes_namespace]
    action: replace
    target_label: kubernetes_namespace
  - source_labels: [__meta_kubernetes_service_name]
    action: replace
    target_label: kubernetes_name

过滤

Prometheus 支持使用 PromQL 语言 过滤结果。

例如,使用以下 PromQL 查询卷统计信息

  • 要过滤在 node-3 中调度的卷

    directpv_stats_bytes_total{node="node-3"}
    
  • 要过滤在 node-5 中调度的 tenant-1 的卷

    directpv_stats_bytes_used{tenant="tenant-1", node="node-5"}