MRTG CPU и память вместе
Итак, у меня есть маршрутизатор Adtran, и я хотел бы отслеживать загрузку процессора и памяти в одном графике. К сожалению, Adtran не предлагает процентную шкалу для использования памяти, как это делает для загрузки процессора. Он предлагает два идентификатора OID: один дает вам свободную память в байтах, а другой - полную память в байтах.
Я хотел бы создать цель cpu_memory в моей конфигурации MRTG, которая выполняет необходимую математику, но я не вижу способа сделать это. В идеале это будет работать примерно так:
# CPU Utilization OID: .1.3.6.1.4.1.664.5.53.1.4.1.0
# Total Memory OID: .1.3.6.1.4.1.664.5.53.1.4.7.0 (adGenAOSHeapSize)
# Free Memory OID: .1.3.6.1.4.1.664.5.53.1.4.8.0 (adGenAOSHeapFree)
Target[rtr-cpu_mem]: .1.3.6.1.4.1.664.5.53.1.4.1.0&( 100 - ( .1.3.6.1.4.1.664.5.53.1.4.8.0 / .1.3.6.1.4.1.664.5.53.1.4.7.0 ) ):public@router.local
# ... rest of config
Это вообще возможно? Или у меня будет отдельный график для памяти?
2 ответа
На самом деле это невозможно сделать в одной собственной Target, так как вычисления применяются к обоим значениям. Хотя вы можете использовать pseudoZero и pseudoOne, чтобы обойти это частично, вы не можете управлять этим таким образом.
Я бы посоветовал вам иметь одну цель для ЦП и отдельную цель для вычисления памяти, что значительно упрощает ее. Затем вы можете использовать опцию "dorelpercent" на целевом объекте памяти и заставить его извлекать использованное и общее в отдельные значения.
Однако, если вам действительно нужно иметь одну и ту же цель, есть неуклюжий способ ее использования - пользовательские функции преобразования данных.
Вы можете определить пользовательскую функцию perl, чтобы умножить второй элемент на 100, если он меньше 1, и сохранить его во flie 'translation.pl'.
sub topercent {
my $value = shift;
return ($1 * 100) if( $value =~ /([01]\.\d*)/ and ($1<=1));
return $value;
}
Затем определите вашу цель следующим образом (замените cpuoid, totalmemoid и freememoid соответственно):
ConversionCode: /path/to/conversion.pl
Target[cpumem]: ( cpuoid&totalmemoid:comm@rtr - pseudoZero&freememoid:comm&rtr ) / ( pseudoOne&totalmemoid:comm@rtr ) |topercent
Это приводит к In=cpupercent, Out=memusedpercent
Я бы не советовал делать это таким образом; лучше всего придерживаться отдельных целей для памяти и процессора. Вы всегда можете объединить эти две цели в один график для отображения, если вы все равно используете MRTG/RRD с Routers2.
Другая альтернатива - написать собственный скрипт коллекции, который выполняет поиск и обработку, и определить его следующим образом:
Target[cpumem]: `myscript.sh community router`
и сделать myscript.sh
вывести четыре строки; Процент процессора, Процент памяти и две пустые строки.
Вы можете выполнять отдельные вычисления для каждого значения, используя
PseudoOne
а также
PseudoZero
, например:
( PseudoZero&PseudoOne:community@host * 100 - memUsed&cpuIdle:community@host )
* ( PseudoOne&PseudoZero:community@host * 99 + PseudoOne&PseudoOne:community@host )
* ( PseudoZero&PseudoOne:community@host - PseudoOne&PseudoZero:community@host )
/ memTotal&PseudoOne:community@host
Это вычисляет следующее:
memPercent = 100 * memUsed / memTotal
cpuPercent = 100 - cpuIdle