#regex #prtg
#регулярное выражение #prtg
Вопрос:
У нас есть коммутатор HP 1920S, и единственный способ получить информацию об использовании ЦП через SNMP — это OID, который я нашел здесь: https://community.hpe.com/t5/Web-and-Unmanaged/HP-1920s-OID-CPU-Utilization-and-memory/td-p/7001413
OID: .1.3.6.1.4.1.11.5.7.5.7.1.1.1.1.4.9.0
При запросе через SNMP этот OID возвращает такие значения:
5 Secs ( 22.3463%) 60 Secs ( 25.677%) 300 Secs ( 21.3522%)
5 Secs ( 13.6713%) 60 Secs ( 15.3520%) 300 Secs ( 15.9640%)
Таким образом, среднее значение загрузки ЦП за 5 секунд составляет 22%, 60 секунд — 25%, а 5 минут — 21%. Затем в следующий раз, когда я запрашивал, это было 13, 15 и 15 процентов.
Есть ли способ с помощью регулярного выражения дискретно сопоставить 5-секундный процент или дискретно сопоставить 60-секундный процент или 5-минутный процент? Цель состоит в том, чтобы подключить это к нескольким настраиваемым строковым датчикам SNMP в PRTG, чтобы затем он мог предупреждать, например, если среднее значение за 5 минут превышает 80%. Я отлично справился с этим регулярным выражением здесь: d (%|sbpercentb)
через https://www.regextester.com/95112 но я также не могу понять, как изменить его для своих нужд, и не могу заставить его работать дальше regex101.com
Спасибо!
Комментарии:
1.Вы можете создать полный шаблон и использовать 3 группы захвата для всех процентов. Например:
^s*d s Secss*(s*(d (?:.d )?%))s d s Secss (s (d (?:.d )?%))s d s Secss (s (d (?:.d )?%))$
regex101.com/r/8PqwXK/1
Ответ №1:
Использование d (%|sbpercentb)
не будет соответствовать десятичной части в строке примера.
Вы могли бы добавить соответствие необязательной десятичной части d (?:.d )?(?:%|sbpercentb)
, но вы получите 3 совпадения, а шаблон не совпадает Secs
Ваш запрос вернул 2 раза одну и ту же структуру данных. Одним из способов может быть использование шаблона, соответствующего полной строке, и использование 3 групп захвата, чтобы вы знали, какая группа имеет какое значение.
В данных примера нет слова percentage
, поэтому вы могли бы просто использовать %
вместо этого.
^s*d s Secss*(s*(d (?:.d )?%))s d s Secss (s (d (?:.d )?%))s d s Secss (s (d (?:.d )?%))$
Комментарии:
1. Спасибо; как вы разделяете это, чтобы создать регулярное выражение для значения 5 секунд, одно для значения 60 секунд и одно для значения 300 секунд?
2. @cvocvo Вы могли бы сделать это, используя квантификатор
{n}
, например^(?:s*d s Secss*(s*(d (?:.d )?%)))
, для получения первого или^(?:s*d s Secss*(s*(d (?:.d )?%))){2}
для получения второго и т. Д regex101.com/r/6hszTy/1 или^(?:s*d s Secss*(s*(d (?:.d )?%))){3}
получить третий regex101.com/r/52gN8w/1 и во всех 3 случаях значение находится в группе захвата 1.