Skip to content

Scrape Config

  • Static Config: -promscrape.config=scrape.yaml
  • CRD
    • VMScrapeConfig -> Prometheus ScrapeConfig
    • VMServiceScrape -> Prometheus ServiceMonitor

VM Operator will transfer CRD to -promscrape.config=scrape.yaml

VM Operator

VictoriaMetrics Operator 在你创建了 VMServiceScrape / VMScrapeConfig / ServiceMonitor 等 CRD 后, 最终会在后台生成一个 promscrape.config 文件(或等效结构)并“注入”到 vmagent 中。

  • 你创建了例如 VMServiceScrapeServiceMonitor 等资源;
  • Operator 监听到这些 CRD 的创建或修改事件
  • Operator 根据这些配置,生成一段符合 Prometheus scrape_configs 格式的配置(底层就是 Prometheus 的格式);
  • Operator 将生成的配置以 Secret 或 ConfigMap 的形式挂载到 vmagent 的 Pod 中,路径一般为:
swift
/etc/prometheus/config_out/prometheus.env.yaml
  • vmagent 是通过 -promscrape.config=/etc/prometheus/config_out/prometheus.env.yaml 参数启动的,它会读取这份配置并开始抓取。

Example

你可以在 Kubernetes 中执行以下命令看看 vmagent 的挂载情况:

bash
kubectl get pod -n monitoring -l app=vmagent -o jsonpath='{.items[0].spec.containers[0].args}'

输出可能类似:

bash
[
  "-promscrape.config=/etc/prometheus/config_out/prometheus.env.yaml",
  "-remoteWrite.url=http://vminsert:8480/insert/0"
]

再查看 ConfigMap 或 Secret:

bash
kubectl get configmap -n monitoring | grep vmagent
kubectl get secret -n monitoring | grep vmagent

你会看到类似:

bash
vmagent-vmagent-config   ConfigMap

再看它内容:

bash
kubectl get configmap vmagent-vmagent-config -n monitoring -o yaml

里面就是 Operator 自动生成的 scrape_configs

scrape.yaml

calico / mysql / postgres

bash
apiVersion: v1
data:
  scrape.yaml: |2

    global:
      scrape_interval: 10s

    scrape_configs:
    - honor_labels: false
      job_name: calico-node
      metrics_path: /metrics
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_name]
        regex: calico-felix-metrics
        action: keep

    - honor_labels: false
      job_name: mysql-exporter
      metrics_path: /metrics
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_name]
        regex: foobar-mysql-exporter
        action: keep
      - source_labels: [__meta_kubernetes_namespace]
        regex: foobar
        action: keep

    - honor_labels: false
      job_name: postgres-exporter
      metrics_path: /metrics
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - source_labels: [__meta_kubernetes_service_name]
        regex: foobar-postgres-exporter
        action: keep
      - source_labels: [__meta_kubernetes_namespace]
        regex: foobar
        action: keep