Метки от узлов к демону /kube-prometheus-exporter-node
prometheus-operator включает DaemonSet для развертывания узла-экспортера на каждом узле в кластере. Это работает, но нам не хватает полезной информации о метках, например:
# kubectl get nodes --all-namespaces --show-labels=true
NAME STATUS ROLES AGE VERSION LABELS
ip-1 Ready master 2d v1.10.12 ...,kubernetes.io/role=master,...
=
ip-2 Ready node 2d v1.10.12 ...,kubernetes.io/role=node,...
Таким образом, у нас есть полезная информация в ярлыках: ip-1 - это master, ip-2 - рабочий и т. Д.
НО эта информация теряется на целевых объектах-экспортерах, поскольку метки узлов не распространяются на модули-экспортеры узлов-демонов.
Так, например, в Prometheus я не могу группировать узлы по их типу.
Может быть, есть способ, как этого добиться? Спасибо!
3 ответа
Похоже, вам нужно использовать relaybel_config
Это пример: https://www.robustperception.io/automatically-monitoring-ec2-instances
PS Что касается конкретных ролей, вы также можете найти этот пост полезным: Как иметь метки для ролей машины.
Обновление: для получения других сведений об узле, недоступных из метаданных, коляски или контейнера init, например: контейнер init для примера свойств узла.
Кроме того, это открытая проблема, чтобы сделать метки узлов доступными для pod: 40610
Причина, по которой в метриках node-exporter в prometheus отсутствует информация об узле, но есть информация о pod, заключается в том, что prometheus-operator предоставляет ServiceMonitor
для node-exporter, который настраивает конфигурацию очистки с конечными точками .__meta_kubernetes_endpoint
а также
__meta_kubernetes_pod
металлические этикетки.
Мы хотим использовать конфигурацию очистки с
kubernetes_sd_config.role
узла . _ Для этого конечная точка очистки узла-экспортера должна быть доступна по адресу узла, предоставленный набор демонов для узла-экспортера уже предоставляет порт 9100 на узле .
Следующим шагом является предоставление prometheus-operator дополнительной конфигурации очистки для обнаружения узла-экспортера через узлы, а не службу, и копирование любых меток узлов, которые нам могут понадобиться:
- job_name: node-exporter
relabel_configs:
- source_labels: [__address__]
action: replace
regex: ([^:]+):.*
replacement: $1:9100
target_label: __address__
- source_labels: [__meta_kubernetes_node_name]
target_label: name
- source_labels: [__meta_kubernetes_node_label_beta_kubernetes_io_arch]
target_label: arch
- source_labels: [__meta_kubernetes_node_label_beta_kubernetes_io_instance_type]
target_label: instance_type
- source_labels: [__meta_kubernetes_node_label_kubernetes_io_os]
target_label: os
- source_labels: [__meta_kubernetes_node_label_topology_kubernetes_io_region]
target_label: region
- source_labels: [__meta_kubernetes_node_label_topology_kubernetes_io_zone]
target_label: zone
- source_labels: [__meta_kubernetes_node_label_dedicated] # or any other custom label
target_label: dedicated
kubernetes_sd_configs:
- role: node
После этого вы можете удалить ServiceMonitor узла-экспортера.
В
__address__
relabel важен, благодаря Как настроить prometheus kubernetes_sd_configs для указания определенного порта хоста?
Мы также можем использовать эту метку из конечной точки sd. Итак, это, вероятно, самый чистый способ сделать это.
prometheus-node-exporter:
prometheus:
monitor:
enabled: true
relabelings:
- sourceLabels: [__meta_kubernetes_endpoint_node_name]
targetLabel: node
Эти значения относятся к рулевой диаграмме kube-prometheus-stack . Пожалуйста, обновите соответственно для вашей установки.