2010-10-21 01:01:36

Мониторинг Load Average средствами MRTG

Linux MRTG

Историческая справка. Load Average (LA) - показатель нагрузки в UNIX-подобных системах. Он отражает число процессов в очереди на исполнение, которые ожидают ресурсов для продолжения работы (еще их называют блокирующие процессы). Как правило, происходит ожидание таких ресурсов, как центральный процессор, дисковая подсистема ввода/вывода или сетевая подсистема ввода/вывода. Высокие значения показателей load average говорят о том, что система не справляется с нагрузкой.

Казалось бы, задача вполне тривиальная, интернет пестрит примерами конфигов MRTG для отображения Load Average. В общем они все сводятся к этому:

Target[localhost_loadavg]: laLoad.2&laLoad.3:public@localhost

где laLoad.2 - Load Average усредненный за 5 минут, а laLoad.3 - за 15 минут (на всякий случай laLoad.1 - это за 1 минуту).

Но в реальности оказывается (по крайней мере у меня на Ubuntu Server 9.10) что на графике всегда стабильно 0. При не сильно нагруженной системе это может быть и не заметно, но тем не менее всегда 0 быть не может.

Так в чем же дело? Ведь snmpget выдает вполне реальную информацию:

# snmpget -v 2c -c public localhost UCD-SNMP-MIB::laLoad.2  
UCD-SNMP-MIB::laLoad.2 = STRING: 0.07

Данные действительно вполне реальны, но есть две проблемы, из-за которых MRTG может не рисовать график: первое, тип данных STRING, и второе, значение много меньше единицы и даже меньше, чем 0,1. По моему опыту, MRTG может игнорировать значения меньше 0,1 или типа STRING, отсюда всегда пустой график.


Для решения проблемы (по крайней моем случае это помогло) можно использовать параметры laLoadInt (laLoadInt.1, laLoadInt.2, laLoadInt.3 соответсвенно).

# snmpget -v 2c -c public localhost UCD-SNMP-MIB::laLoadInt.2
UCD-SNMP-MIB::laLoadInt.2 = INTEGER: 2  

Вот тут видно, что мы получаем INTEGER больший единицы (соответствующий текущему Load Average умноженному на 100). А для того, чтобы на графике не приходилось писать LoadAverage * 100, существуют параметры Factor и YTicsFactor, которые отвечают за пересчет значений под графиком и на графике. Для данного случая их нужно задать как 0.01. Таким образом получаем:

Target[localhost_loadavg]: laLoadInt.2&laLoadInt.3:public@localhost
YTicsFactor[localhost_loadavg]: 0.01
Factor[localhost_loadavg]: 0.01

И после этих правок, график оживает, и начинает отображать реальные данные с реальной размерностью:

И напоследок, полный кусок моего конфига для рисования Load Average:

Target[localhost_loadavg]: laLoadInt.2&laLoadInt.3:public@localhost
MaxBytes[localhost_loadavg]: 100
Title[localhost_loadavg]: Load Average
PageTop[localhost_loadavg]: <h1>Load Average</h1>
YLegend[localhost_loadavg]: Load Average
ShortLegend[localhost_loadavg]:  
Legend1[localhost_loadavg]: Load average 5 min
Legend2[localhost_loadavg]: Load average 15 min
LegendI[localhost_loadavg]: 5min load avg
LegendO[localhost_loadavg]: 15min load avg
Options[localhost_loadavg]: nopercent,growright,noinfo,gauge,unknaszero
YTicsFactor[localhost_loadavg]: 0.01
Factor[localhost_loadavg]: 0.01