#kubernetes #prometheus-operator #prometheus-blackbox-exporter
#кубернетес #прометей-оператор #прометей-черный ящик-экспортер
Вопрос:
У нас есть настройка с внешним DNS для создания и привязки записей dns на основе служебных аннотаций.
Например, у нас есть служба для диспетчера оповещений, подобная этой:
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
(сокращенно)
Я хочу использовать экспортер черного ящика с данными из аннотаций, поэтому нам не нужно вручную добавлять сюда мониторинг, а скорее полагаться на kubernetes, чтобы предоставить информацию о том, что нужно отслеживать.
Для этого я написал servicemonitor, но он не соответствует службам и вызывает экспортер черных ящиков.
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"
Я не понимаю, почему это не должно соответствовать сервису. У вас есть какие-нибудь намеки?
Ответ №1:
У службы есть метка prometheus-monitor-https: 'true'
, в то время как у ServiceMonitor есть selector.matchLabels
оф prometheus-monitor-https: any
.
Если вы измените это так , чтобы selector.matchLabels
значение ServiceMonitor было равно prometheus-monitor-https: 'true'
, то я думаю, что это должно сработать. Метки соответствия ищут ожидаемые совпадения пары ключ метки, значение.
Также я вижу, что вы написали namespaceSelector
это any: true
. Приятно знать, что селектор пространств имен работает по-другому. Он ожидает, что метки пространства имен, в котором он должен найти ресурс, будут указаны. В вашем случае он будет искать пространство имен с меткой any: true
. Но я думаю, что вы на самом деле хотите выбрать все пространства имен, что равносильно тому, чтобы вообще не указывать выбор пространства имен.
Комментарии:
1. БОЖЕ мой! Проблема заключалась в селекторе пространства имен. Спасибо!