Я хочу настроить statsd-exporter
как DaemonSet в моем кластере Kubernetes. Он предоставляет UDP-порт 9125, по которому приложения могут отправлять метрики с помощью клиентской библиотеки statsD. Prometheus
сканеры могут сканировать этот модуль экспорта для получения показателей приложения или системы. Я хочу отправить метрики на UDP-сервер, работающий в экспортере на порту 9125. У меня есть два варианта:
Предоставьте службу как
ClusterIP
для DaemonSet, а затем настройте клиенты statsD для использования этого IP-адреса и порта для отправки метрик.Заставьте
statsd-exporter
работать наhostNetwork
и каким-то образом разрешите модулям отправлять метрикиexporter
, работающим на том же узле.
Каким-то образом вариант 2 кажется лучше, поскольку мои модули будут отправлять метрики экспортеру, работающему на том же узле, но я не могу отправлять метрики в локальный модуль statsd-exporter
, поскольку у меня нет IP-адреса узла, на котором находится модуль. работает.
Не могли бы вы сравнить плюсы и минусы обоих методов и подсказать, как я могу узнать IP-адрес узла, на котором работает модуль вместе с экспортером.
ИЗМЕНИТЬ 1
Я могу получить IP-адрес узла, добавив переменную среды.
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
Мне все еще нужна ясность в отношении того, какой подход к настройке будет лучше. Предоставление службы с типом ClusterIP
, а затем использование переменной среды HOST:PORT
from в модуле или использование hostNetwork: true
в спецификации модуля, а затем доступ к ней с помощью переменной среды NODE_IP
. Гарантирует ли clusterIp, что пакет будет перенаправлен на тот же узел, что и модуль, отправляющий пакет?
ИЗМЕНИТЬ 2
Я изучил безголовый сервис и думаю, что это ближе всего к что я хочу. Но я не уверен, что разрешение DNS вернет IP-адрес локального узла в качестве первого результата в nslookup
.