У нас есть коммутатор HP 1920S, и единственный способ узнать загрузку ЦП через SNMP — это OID, который я нашел здесь: https://community.hpe.com/t5/Web-and-Unmanaged/HP-1920s-OID- CPU-Utilization-and-memory/td-p/7001413
ОИД: .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 Custom String в PRTG, чтобы затем он мог оповещать, например, если среднее значение за 5 минут превышает 80%.
Я сделал это регулярное выражение здесь: \d+(\%|\s\bpercent\b)
через https://www.regextester.com/95112, но я также не могу понять, как изменить его для своих нужд, и не могу заставить его работать на regex101.com
Спасибо!
Использование \d+(\%|\s\bpercent\b)
не будет соответствовать десятичной части в строке примера.
Вы можете добавить соответствие необязательной десятичной части \d+(?:\.\d+)?(?:\%|\s\bpercent\b)
, но вы получите 3 совпадения, а шаблон не совпадает Secs
Ваш запрос вернул 2 раза одну и ту же структуру данных. Одним из способов может быть использование шаблона, который соответствует полной строке, и использование 3 групп захвата, чтобы вы знали, какая группа имеет какое значение.
В данных примера нет слова percentage
, поэтому вы можете просто использовать вместо него %
.
^\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)$
Демонстрация регулярных выражений
Спасибо; как вы разделите это, чтобы создать регулярное выражение для значения 5 секунд, одно для значения 60 секунд и одно для значения 300 секунд?
@cvocvo Вы можете сделать это, используя квантификатор {n}
, например, ^(?:\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\))
для получения первого или ^(?:\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)){2}
для получения второго и т. д. regex101.com/r/6hszTy/1 или ^(?:\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)){3}
для получения третьего regex101.com/r/ 52gN8w/1 и во всех 3 случаях значение в группе захвата 1.
Вы можете создать полный шаблон и использовать 3 группы захвата для всех процентов. Например:
^\s*\d+\s+Secs\s*\(\s*(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)\s+\d+\s+Secs\s+\(\s+(\d+(?:\.\d+)?%)\)$
regex101.com/r/8PqwXK/1