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
Другие вопросы по тегам