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?
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:
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.