значение cpu usage (mode!="idle") по инстансу:
avg by(instance)(100 - rate(node_cpu_seconds_total{mode="idle"}[3m]) * 100)
что никак не даст мне понять, что сумма всех состояний (кроме idle) на каком-то одном процессоре около 100 процентов. не логичнее ли брать max by(isntance), или вообще не брать avg/max, а делать алерты на основании cpu usage каждого cpu?
все зависит от того, на какой вопрос вы хотите ответить. avg by (instance) дает среднюю загрузку по всем ядрам CPU на каждом инстансе. Если на этих инстансах работают программы, которые умеют масштабироваться на все доступные ядра CPU, тогда мониторинг средней загрузки cpu - норм. Но если на инстансах работают программы, которые могут нагрузить только ограниченное количество ядер CPU (например, однопоточные или многопоточные, где количество потоков меньше количества ядер cpu), то в этом случае средняя загрузка по cpu ничего вам не даст. Тогда лучше мониторить max by(instance), чтобы видеть, когда такие приложения полностью нагружают часть доступных ядер CPU, в то время как остальные ядра могут простаивать.
это логично, но если нет уверенности в том, что на всех машинах приложения нормально работают со всеми цпу, полагаю, для общего случая лучше брать max или каждый cpu
также для алертов лучше считать загрузку по cpu на больших интервалах времени. 3 минуты - это очень мало. Вполне возможно, что какое-то приложение может нагрузить все ядра cpu на 100% в течене этих трех минут, а потом спокойно снизить нагрузку до приемлемой. В этом случае ваш алерт сработает, но смысла в нем - ноль. Только забъет мусором очередь сработавших алертов, в которой может потеряться намного более важный алерт. Поэтому я бы советовал использовать интервал времени в квадратных скобках от 10 минут и больше.
Да, здесь 3 минуты просто в качестве примера
Обсуждают сегодня