Метки от узлов к демону /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 . Пожалуйста, обновите соответственно для вашей установки.

Другие вопросы по тегам