Promtheus支持很多Exporter,我们常用的Node Exporter用于采集系统层面的各项性能指标,实现监控系统的状态。然而对于进程信息的监控Node Exporter便显得无能为力了。这时候则需要用到Process Exporter。

项目介绍

github地址:https://github.com/ncabatoff/process-exporter

1. 配置文件

  • 可用的模板变量:
​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌​‌​‌‌‌‌‍‌​​​‌‌​‌‍‌​​‌​​​​‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​​​‌​‌‌‍‌​​‌​‌‌‌‍‌​​‌‌​‌​‍‌​​​‌​‌​‍‌​​​‌‌​​‍​‌‌​​​​‌​​​​​​​‍​​​‌​‌​‌‌​‌​‌‌‌‍‌​‌​‌‌‌‌‍‌​​​‌‌​‌‍‌​​‌​​​​‍‌​​‌‌‌​​‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌‌​​‍‌‌​‌​​‌​‍‌​‌‌‌​‌​‍‌​​​​‌‌‌‍‌​​​‌‌‌‌‍‌​​‌​​​​‍‌​​​‌‌​‌‍‌​​​‌​‌‌‍‌​​‌‌​‌​‍‌​​​‌‌​‌‍​‌‌​‌‌‌​​​‌‌‌​​​‍​‌‌​‌​​‌​​‌‌‌​​‌‍​​​​​‌‌​​​​​‌​​‍​​​​​​‌​​‌​​​​​‍​‌‌‌​​​​​​‌​​‌​​‍​​​​‌​‌‌‌‌‌​‌​​‍​​​‌​​‌​​‌​‌‌‌​‍​​‌‌‌​​​‌​‌‌​​​‍​​‌‌​‌​‌​​​‌‌‌‌‍​​‌‌‌​​‌​​‌​​​‌‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​​‌‌‌‌​‍‌​​‌‌​‌‌‍‌​​‌​​‌​‍‌​​‌​‌‌​‍‌​​‌​​​‌‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌‌​‍‌‌​​​‌‌​‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌​​​‍‌‌​‌​​‌​‍‌‌​​‌‌​​‍‌‌​​‌‌‌‌‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​​‌​​​‍‌​​​‌​​​‍‌​​​‌​​​‍‌‌​‌​​​‌‍‌​​‌​‌‌​‍‌​​‌​‌​​‍‌​​‌​‌‌​‍‌​​​‌​​​‍‌​​‌​‌‌​‍‌‌​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌​‍‌​‌​​​‌‌‍‌​​‌‌‌‌​‍‌​​​‌‌​‌‍‌​​‌‌‌​​‍‌​​‌​‌‌‌‍‌​​‌​‌‌​‍‌​​​‌​​‌‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​‌​​​‌‌‍‌‌​​‌​​‌‍‌‌​​‌​‌​‍‌‌​​‌‌‌​‍‌‌​‌​​​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​‌​​‌​‍‌​​‌​​‌‌

{{.Comm}} :原始可执行文件的basename,/proc/<pid>/stat 中第二个字段
{{.ExeBase}} :可执行文件的basename
{{.ExeFull}} :可执行文件的完全限定路径
{{.Matches}} :正则匹配应用命令行

  • 配置文件示例,意思是匹配所有进程:
process_names:
  - name: "{{.Comm}}"
    cmdline:
    - '.+'

2. 支持的指标项

  • num_procs gauge
  • cpu_seconds_total counter
  • read_bytes_total counter
  • write_bytes_total counter
  • major_page_faults_total counter
  • minor_page_faults_total counter
  • context_switches_total counter
  • memory_bytes gauge
  • open_filedesc gauge
  • worst_fd_ratio gauge
  • oldest_start_time_seconds gauge
  • num_threads gauge
  • states gauge

部署Exporter

1. 准备YAML文件

process-exporter-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: process-config
  namespace: monitoring
data:
  process-exporter.yaml: |
    process_names:
      - name: "{{.Comm}}"
        cmdline:
        - '.+'

process-exporter-daemonset.yaml

apiVersion: apps/v1beta2
kind: DaemonSet
metadata:
  labels:
    app: process-exporter
  name: process-exporter
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: process-exporter
  template:
    metadata:
      labels:
        app: process-exporter  
    spec:
      hostNetwork: true
      hostPID: true
      containers:
      - image: juestnow/process-exporter:v0.5.0
        args:
        - "-procfs=/host/proc"
        - "-config.path=/etc/process-exporter/process-exporter.yaml"
        name: process-exporter
        ports:
        - name: http
          containerPort: 9256
          hostPort: 9256
        resources:
          requests:
            memory: 50Mi
            cpu: 256m
          limits:
            memory: 200Mi
            cpu: 512m
        volumeMounts:
        - name: config-volume
          mountPath: /etc/process-exporter
        - name: proc
          readOnly:  true
          mountPath: /host/proc
      tolerations:
      - effect: NoSchedule
        operator: Exists
      volumes:
        - name: proc
          hostPath:
            path: /proc
        - name: config-volume
          configMap:
            name: process-config

process-exporter-service.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  labels:
    k8s-app: process-exporter
  name: process-exporter
  namespace: monitoring
spec:
  clusterIP: None
  ports:
  - name: http
    port: 9256
    targetPort: http
  selector:
    app: process-exporter

2. Prometheus任务配置

在Prometheus的配置文件里增加如下的任务:

      - job_name: kubernetes-process-exporter
        metrics_path: /metrics
        scheme: https
        kubernetes_sd_configs:
        - api_server: https://172.16.0.12:6443/
          role: node
          bearer_token_file: /prometheus/token/k8s_token
          tls_config:
            insecure_skip_verify: true
        bearer_token_file: /prometheus/token/k8s_token
        tls_config:
          insecure_skip_verify: true
        relabel_configs:
        - separator: ;
          regex: __meta_kubernetes_node_label_(.+)
          replacement: $1
          action: labelmap
        - separator: ;
          regex: (.*)
          target_label: __address__
          replacement: 172.16.0.12:6443
          action: replace
        - source_labels: [__meta_kubernetes_node_name]
          separator: ;
          regex: (.+)
          target_label: __metrics_path__
          replacement: /api/v1/nodes/${1}:9256/proxy/metrics
          action: replace

监控任务配置完成之后,在Prometheus的管理页面可以看到以下监控目标:

Grafana展示

模版地址:https://grafana.com/grafana/dashboards/8378

展示效果如下:

文章目录