如何使用 Google Managed Prometheus 配置 Blackbox-exporter?

How to Configure Blackbox-exporter with Google Managed Prometheus?

提问人:Rick 提问时间:5/26/2023 更新时间:5/27/2023 访问量:475

问:

我要迁移到 Google Managed Prometheus。我一直在使用 Helm 部署的 Prometheus 版本来监控我的 kubernetes 集群。helm 部署的 Prometheus 具有多种选择器,包括 Pod Monitor、Service Monitor 和 Probe Monitor。Google Managed Prometheus 只有 Pod 监视器 (PodMonitoring)。我正在将 Google 托管的 Prometheus 与托管集合结合使用。

我想继续使用我的黑匣子导出器探测器来获取正常运行时间指标。我在现有的 Prometheus 上配置了“kind: Probe”。但是,由于 Google Managed Promtheus 仅使用 PodMonitoring,我不确定 blackbox-exporter 是否兼容。

我喜欢 blackbox-exporter,因为我可以将其配置为检查我的所有入口主机,而无需手动为每个主机创建一个。我经常将带有新端点的新入口添加到我的集群中,因此这种自动化非常棒。

有没有人使用 Google 管理的 Prometheus 配置了黑盒导出器?

我尝试过端口转发实际的 blackbox-exporter pod 以查看它公开了哪些指标,但这并没有显示我想要的所有指标。

Prometheus 正常运行时间 探测器 google-managed-prometheus

评论

0赞 DazWilkin 5/26/2023
最重要的是,因为我没有尝试过使用 Google 管理的 Prometheus 部署 Blackbox Exporter,但它应该可以工作。您必须部署 Blackbox Exporter,但随后您应该能够创建一个来抓取其 Pod。 定义一个 Prometheus 目标,并为您提供重新标记的选项,但指标应像任何其他部署一样抓取。如果仍需要帮助,我将在明天部署集群时尝试此操作。PodMonitorPodMonitors
0赞 DazWilkin 5/26/2023
问题是因为 Blackbox Exporter 使用多目标吗?嗯
0赞 DazWilkin 5/26/2023
假设:将每个 Ingress 表示为一个项目,并使用探测查询字符串定义(指标)PodMonitorspec.endpointspath
0赞 DazWilkin 5/27/2023
嗯......我没有成功,但我会记录(通过回答)我尝试过的东西。

答:

1赞 DazWilkin 5/27/2023 #1

每个只能 (!?) 一个项目,并且 的查询字符串必须根据 来定义。请参阅以下示例。endpointsPodMonitoring/probe?...params

此限制似乎与CRD相矛盾:

要探测多个 Ingress,您可以有一个 Blackbox 导出器,每个 Ingress 都需要一个,例如:DeploymentPodMonitoring

podmonitorings.yaml:

apiVersion: v1
kind: List
metadata: {}
items:
- kind: PodMonitoring
  apiVersion: monitoring.googleapis.com/v1
  metadata:
    name: google-com
  spec:
    selector:
      matchLabels:
        app: blackbox
        type: exporter
    endpoints:
    - interval: 30s
      path: /probe
      params:
        target:
        - google.com
        module:
        - http_2xx
      port: 9115
    targetLabels:
      metadata:
      - pod
      - container
- kind: PodMonitoring
  apiVersion: monitoring.googleapis.com/v1
  metadata:
    name: stackoverflow-com
  spec:
    selector:
      matchLabels:
        app: blackbox
        type: exporter
    endpoints:
    - interval: 30s
      path: /probe
      params:
        target:
        - stackoverflow.com
        module:
        - http_2xx
      port: 9115
    targetLabels:
      metadata:
      - pod
      - container
- kind: PodMonitoring
  apiVersion: monitoring.googleapis.com/v1
  metadata:
    name: prometheus-com
  spec:
    selector:
      matchLabels:
        app: blackbox
        type: exporter
    endpoints:
    - interval: 30s
      path: /probe
      params:
        target:
        - prometheus.io
        module:
        - http_2xx
      port: 9115
    targetLabels:
      metadata:
      - pod
      - container

blackbox-exporter.yamlconfig 定义:

  1. ConfigMap定义 Blackbox Exporter 配置
    • (使用记录的)http_2xx
    • 我添加了一个(gRPC 探测器)foo
  2. Deployment的 Blackbox Exporter 使用ConfigMap

blackbox-exporter.yaml:

apiVersion: v1
kind: List
metadata: {}
items:
- kind: ConfigMap
  apiVersion: v1
  metadata:
    name: blackbox-exporter
  data:
    blackbox.yml: |+
      modules:
        http_2xx:
          prober: http
          timeout: 5s
          http:
            valid_http_versions: ["HTTP/1.1", "HTTP/2.0"]
            valid_status_codes: []  # Defaults to 2xx
            method: GET
            follow_redirects: true
            fail_if_ssl: false
            fail_if_not_ssl: false
            tls_config:
              insecure_skip_verify: false
            preferred_ip_protocol: "ip4" # defaults to "ip6"
            ip_protocol_fallback: false  # no fallback to "ip6"
        foo:
          prober: grpc
          grpc:
            service: ""
            preferred_ip_protocol: ip4
            tls: true
            tls_config:
              insecure_skip_verify: false
- kind: Deployment
  apiVersion: apps/v1
  metadata:
      name: blackbox-exporter
  spec:
    selector:
      matchLabels:
        app: blackbox
        type: exporter
    template:
      metadata:
        labels:
          app: blackbox
          type: exporter
      spec:
        containers:
        - name: blackbox-exporter
          image: docker.io/prom/blackbox-exporter:v0.24.0
          args:
          - --config.file=/config/blackbox.yml
          ports:
          - name: http
            containerPort: 9115
          volumeMounts:
          - name: vol
            mountPath: /config
        volumes:
        - name: vol
          configMap:
            name: blackbox-exporter
NAMESPACE="test"

kubectl create namespace ${NAMESPACE}

# Deploy Blackbox exporter
kubectl apply \
--filename=${PWD}/blackbox-exporter.yaml \
--namespace=${NAMESPACE}

# Apply PodMonitorings
kubectl apply \
--filename=${PWD}/podmonitorings.yaml \
--namespace=${NAMESPACE}

然后你需要在命名空间中。有几种方法可以做到这一点。不要从此文件中删除任何内容,但请确保该列表包含一些新预期的指标名称:PATCHoperatorconfig/configgmp-publicmatchOneOf

KUBE_EDITOR=nano kubectl edit operatorconfig/config \
--namespace=gmp-public

您需要添加要包含的指标:

apiVersion: monitoring.googleapis.com/v1
collection:
  filter:
    matchOneOf:
    - '{__name__=~"blackbox_exporter_.+"}'
    - '{__name__=~"probe_.+"}'
  kubeletScraping:
    interval: 30s
kind: OperatorConfig
metadata:
  name: config

抓取 (~1m) 后,你将看到 Metrics Diagnostics 下列出的指标:blackbox_exporter_*probe_*

enter image description here

并且能够在 Google 的指标导出器和 Google 管理的 Prometheus 前端中查询它们:

enter image description here

https://console.cloud.google.com/monitoring/metrics-diagnostics;duration=PT1H?project={project}

您可以端口转发到 Blackbox Exporter 以执行探测:

kubectl port-forward deployment/blackbox-exporter \
--namespace=${NAMESPACE} \
9115:9115

然后(本地):

# Blackbox Exporter's metrics
curl --get http://localhost:9115/metrics

# Blackbox Exporter's HTTP probe for e.g. Google
curl --get http://localhost:9115/probe?target=google.com&module=http_2xx

# Blackbox Exporter's gRPC probe for Google's Cloud Profiler
curl --get http://localhost:9115/probe?target=cloudprofiler.googleapis.com:443&module=foo

评论

0赞 Rick 5/31/2023
谢谢!后续问题:如果我不执行“matchOneOf”,那么默认情况下它不会收集所有blackbox_exporter和探测(以及所有其他 kubelet 指标)吗?
0赞 DazWilkin 5/31/2023
没错。您必须显式包含您希望它抓取的指标。