Наша установка включает:
По сути, наша нагрузка может быть непостоянной, поэтому мы хотели бы собирать детали, поэтому в настоящее время мы очищаем метрики каждые 10 секунд и отображаем 1-минутные скорости в Grafana с такими запросами:
rate(node_network_receive_bytes_total{instance=~'$node',device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[1m])*8
В Grafana мы видим огромные всплески: для сетевых экземпляров со средней пропускной способностью ниже 100 Мбит / с всплески превышают сотни гигабит в секунду, что, очевидно, технически невозможно. То же самое происходит с загрузкой ЦП, временем ожидания ЦП, iops дисков и другими node_exporter
метрики, в целом это выглядит так, посмотрите на резкую разницу между средними и максимальными значениями:
По-видимому, это происходит потому, что Прометей, кажется, «пропускает» отдельные точки данных, и в зависимости от того, как rate
работает, сравнивает "последнюю" точку с нулем с текущей node_network_receive_bytes_total
накапливается с момента последнего запуска и увеличивает производительность. Если мы попробуем переключиться на irate
шипы просто прыгают еще выше, что, кажется, подтверждает нашу догадку.
Запрос на наш сервер коллертинга Prometheus для точек данных в определенных временных диапазонах, где наши rate
есть всплески, мы не видим обнуленных точек, данные во временном диапазоне с `` всплесками '' выглядят как последовательное увеличение:
node_network_receive_bytes_total{device="ens8",instance="cassandra-xxxxxxxxx0:9100",job="cassandra-xxxxxxxxx"}
3173659836137 @1585311247.489
3173678570634 @1585311257.49
3173696782823 @1585311267.491
3173715943503 @1585311277.492
3173715937480 @1585311277.493
3173731328095 @1585311287.495
3173743034248 @1585311297.502
3173756482486 @1585311307.497
3173775999916 @1585311317.497
3173796096167 @1585311327.498
3173814354877 @1585311337.499
3173833456218 @1585311347.499
3173852345655 @1585311357.501
То же на графике:
rate
запрос rate(node_network_receive_bytes_total{instance="cassandra-xxxxxxxxx0:9100",device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[1m])*8
отображает удивительно разную картинку в том же временном диапазоне:
Хотя документация Prometheus заявляет, что она должна экстраполировать недостающие точки данных, а также определенные проблемы с rate
/irate
являются широко признанный, пока мы очень запутались с вышеизложенным.
Наша самая большая проблема в том, что пики делают невозможным визуализацию и, что более важно, установку лимитов / предупреждений.
На данный момент мы уверены только в том, что о Графане не может быть и речи, и проблема кроется в нашем Прометее, и вопрос звучит так - может быть, вы столкнулись с чем-то похожим? Если да, то как вы с этим справляетесь?
Если нет, может быть, вы могли бы предложить какой-нибудь дальнейший диагностический подход?
В любом случае, спасибо всем, по крайней мере, за то, что дочитали до этого момента.
3173715943503 @1585311277.492
3173715937480 @1585311277.493
Значения возвращаются назад, что рассматривается как сброс счетчика. Обычно это указывает на ошибку ядра, однако, учитывая, что значения отличаются друг от друга всего на одну миллисекунду, я собираюсь предположить, что происходит то, что вы не упомянули ключевую деталь, что на самом деле это объединенные данные из двух разных Prometheus серверы, которые, как вы обнаружили, не будут работать.