前言

prometheus-operator 将监控目标(即 prometheus.yaml 中的 job)抽象为 CRD,kube-prometheus-stack 安装包默认包含了 K8s 集群核心组件、节点资源的监控:

  1. $ kubectl -n monitoring get servicemonitor
  2. prometheus-kube-prometheus-alertmanager 18m
  3. prometheus-kube-prometheus-node-exporter 18m
  4. prometheus-kube-prometheus-operator 18m
  5. prometheus-kube-prometheus-prometheus 18m
  6. ...

可以通过新建、更新、删除这些 CRD,实现对监控目标的 CRUD 操作。😊
对监控目标的 CURD 操作示例:

  1. $ kubectl -n monitoring get servicemonitor prometheus-kube-prometheus-node-exporter -oyaml > ./sm-node-exporter.yaml
  2. # 删除不需要的字段后的内容如下:
  3. $ cat sm-node-exporter.yaml
  4. apiVersion: monitoring.coreos.com/v1
  5. kind: ServiceMonitor
  6. metadata:
  7. annotations:
  8. meta.helm.sh/release-name: prometheus
  9. meta.helm.sh/release-namespace: monitoring
  10. labels:
  11. app: kube-prometheus-stack-node-exporter
  12. release: prometheus ## required, prometheus-operator会依据这个发现&自动加载配置
  13. name: prometheus-kube-prometheus-node-exporter
  14. namespace: monitoring
  15. spec:
  16. endpoints:
  17. - port: metrics
  18. jobLabel: jobLabel
  19. selector: ## 基于 k8d service 的服务发现
  20. matchLabels:
  21. app: prometheus-node-exporter
  22. release: prometheus
  23. ## (1) 修改已有监控目标:
  24. $ vim sm-node-exporter.yaml # 编辑内容
  25. $ kubectl -n monitoring apply -f sm-node-exporter.yaml # 使生效
  26. ## (2) 新增监控目标:
  27. $ touch sm-libvirt-exporter.yaml # 新增servicemonitor配置文件
  28. $ vim sm-libvirt-exporter.yaml
  29. $ kubectl -n monitoring apply -f sm-node-exporter.yaml # 使生效
  30. ## (3) 删除监控目标:
  31. $ kubectl -n monitoring delete servicemonitor prometheus-kube-prometheus-node-exporter

下文内容即是对三种 CRD 以及静态监控配置的详细介绍。

servicemonitor

probe

podmonitor

静态监控目标

有时在测试阶段业务应用还未完善、或某些特殊的 exporter,没有 service,不适用于 servicemonitor,需要配置静态监控目标:
(1) 新建 secret 添加 additional scrape configs:

  1. $ cat prometheus-additional.yaml
  2. - job_name: blackbox
  3. metrics_path: /probe
  4. params:
  5. module: [http_2xx]
  6. static_configs:
  7. - targets:
  8. - https://111.111.111.239:6443
  9. relabel_configs:
  10. - source_labels: [__address__]
  11. target_label: __param_target
  12. - source_labels: [__param_target]
  13. target_label: instance
  14. - target_label: __address__
  15. replacement: blackbox-exporter-prometheus-blackbox-exporter.monitoring.svc.cluster.local:9115
  16. # 新建 secret:
  17. kubectl -n monitoring create secret generic additional-configs \
  18. --from-file=prometheus-additional.yaml
  19. # 更新 secret:
  20. kubectl -n monitoring create secret generic additional-configs \
  21. --from-file=prometheus-additional.yaml --dry-run=client -o yaml | kubectl apply -f -

(2) 在 values.yaml 中开启 additionalScrapeConfigsSecret

  1. ## If additional scrape configurations are already deployed in a single secret file you can use this section.
  2. ## Expected values are the secret name and key
  3. prometheus:
  4. ...
  5. prometheusSpec:
  6. ...
  7. additionalScrapeConfigsSecret:
  8. enabled: true
  9. name: additional-configs
  10. key: prometheus-additional.yaml

修改完 values.yaml 后,执行 helm upgrade 更新使生效。