Prometheus — Сетевые Метрики, Ориентированные На Узлы, Сильно Отличаются От Суммы Метрик Модулей, Работающих На Этом Узле.

  • Автор темы Tatiana Butakova
  • Обновлено
  • 21, Oct 2024
  • #1

Контекст

Я пытаюсь составить диаграмму использования пропускной способности сети узлом двумя разными способами:

  1. Глядя на глобальные метрики для этого узла
  2. Суммируя соответствующие показатели для каждого пода

Для этого я выполняю следующие запросы Prometheus (пример полосы пропускания приема):

  • Для всего узла (метрика от узла-экспортера)

     
     irate() 
  • За капсулу (метрика из kubelet)

    sum()

Результаты отображаются на следующей информационной панели Grafana после создания некоторой нагрузки на HTTP-сервис под названием thrpt-receiver :

prometheus — сетевые метрики, ориентированные на узлы, сильно отличаются от суммы метрик модулей, работающих на этом узле.

Вот что я вижу, если посмотреть на необработанные показатели без sum(irate(container_network_receive_bytes_total{node="$node",container!=""}[$__rate_interval])) by (pod,interface) and sum(irate(node_network_receive_bytes_total{instance="10.142.0.54:9100"}[$__rate_interval])) by (device) применяемый:

prometheus — сетевые метрики, ориентированные на узлы, сильно отличаются от суммы метрик модулей, работающих на этом узле.

Проблема

Как видите, результаты сильно различаются, вплоть до того, что я почти уверен, что делаю что-то не так, но что?

Что вызывает у меня особенно подозрение в отношении показателей Pod, так это предположительно увеличивающаяся получаемая пропускная способность kube-proxy (который, AFAIK, не должен получать никакого трафика в режиме iptables) и таких агентов, как экспортер узлов Prometheus и т. д.

#Прометей

Tatiana Butakova


Рег
07 Dec, 2020

Тем
79

Постов
207

Баллов
612
  • 25, Oct 2024
  • #2

Я узнал, что происходит на моих графиках. Все упомянутые выше поды имеют одну общую черту: они используют пространство имен сети хоста, поэтому их сетевые метрики все идентичны, и равный глобальному метрика хоста (только с немного другой точностью).

 
 $ kubectl -n kube-system get pod -o jsonpath='{.items[*].spec.hostNetwork}' \

kube-proxy-gke-triggermesh-product-control-plane-7fc0ad24-z586 \

gke-metrics-agent-5cv4m \

prometheus-to-sd-tk8jv \

fluentbit-gke-xh879

true true true true 
 
$ kubectl - monitoring get pod -o jsonpath='{.spec.hostNetwork}' \ prometheus-stack-prometheus-node-exporter-jnhw7 true

Один из способов увидеть это — сравнить метрику хоста с один из вышеуказанных модулей:

 

Shon94


Рег
10 Apr, 2009

Тем
63

Постов
209

Баллов
544
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно