es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice Servicemonitor para verificar los servicios a través del nombre de host externo.

Tenemos una configuración con external-DNS para crear y vincular entradas DNS basadas en anotaciones de servicio.

Por ejemplo, tenemos un servicio para alertmanager como este:

apiVersion: v1
kind: Service
metadata:
  name: prometheus-kube-prometheus-alertmanager
  namespace: prometheus
  labels:
...
    heritage: Helm
    prometheus-monitor-https: 'true'
    release: prometheus
    self-monitor: 'true'
  annotations:
    external-dns.alpha.kubernetes.io/hostname: alertmanager.ourdomain.com
    external-dns.alpha.kubernetes.io/ttl: '60'
spec:
  ports:
    - name: web
      protocol: TCP
      port: 80
      targetPort: 9093
      nodePort: 31126
  selector:
    alertmanager: prometheus-kube-prometheus-alertmanager
    app.kubernetes.io/name: alertmanager
  type: LoadBalancer
  sessionAffinity: None
  externalTrafficPolicy: Cluster

Quiero utilizar el exportador blackbox con los datos de las anotaciones, para no tener que agregar manualmente el monitoreo aquí, sino confiar en Kubernetes para proporcionar la información sobre qué monitorear.

Para ello, escribí un ServiceMonitor, pero no coincide con los servicios y llama al exportador blackbox.

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: blackbox-exporter-monitor-https-external
  namespace: prometheus
spec:
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      prometheus-monitor-https: any
  targetLabels:
    - environment
    - instance
  endpoints:
    - metricRelabelings:
        - sourceLabels: [__meta_kubernetes_service_annotation_external_dns_alpha_kubernetes_io_hostname]
          targetLabel: __param_target
          replacement: "https://$1"
        - sourceLabels: [__param_target]
          targetLabel: instance
        - targetLabel: __param_scheme
          replacement: https
        - targetLabel: __address__
          replacement: prometheus-blackbox-exporter:9115
      path: /probe
      params:
        debug:
          - "true"
        module:
          - "http_2xx"

No entiendo por qué no coincide con el servicio. ¿Tienes alguna sugerencia?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según la definición de servicio proporcionada, la configuración de ServiceMonitor “blackbox-exporter-monitor-https-external” parece estar utilizando etiquetas incorrectas para que coincida con el servicio. Específicamente, el campo “selector” en la configuración de ServiceMonitor intenta hacer coincidir la etiqueta “prometheus-monitor-https” en el servicio, pero la definición de servicio tiene esta etiqueta configurada como verdadera para todos los servicios que forman parte del stack de Prometheus.

    Para hacer coincidir el servicio “blackbox exporter” utilizando anotaciones en su lugar, la configuración de ServiceMonitor debería usar el campo “matchExpressions” en la sección “selector” para verificar si el servicio tiene las anotaciones requeridas. Aquí tienes un ejemplo de configuración basado en este enfoque:

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: blackbox-exporter-monitor-https-external
      namespace: prometheus
    spec:
      selector:
        matchExpressions:
          - { key: external-dns.alpha.kubernetes.io/hostname, operator: Exists }
          - { key: prometheus-monitor-https, operator: Exists }
      endpoints:
        - interval: 30s
          port: web
          path: /probe
          scheme: https
          params:
            module: [http_2xx]
          targetPort: 9115
    

    Esta configuración hace coincidir todos los servicios que tienen la anotación “external-dns.alpha.kubernetes.io/hostname” configurada, así como la etiqueta “prometheus-monitor-https”. El campo “matchExpressions” permite una coincidencia más compleja de etiquetas y anotaciones que usando solo el campo “matchLabels”, que solo permite coincidencias exactas de valores de etiqueta. Además, simplifiqué un poco la configuración y eliminé las reglas de reetiquetado de métricas ya que parecían innecesarias para este caso de uso.

Comments are closed.