Я использую Zabbix агент (программное обеспечение для ведения журналов) в Ubuntu и хочу пропинговать внутренний IPIP/GRE-туннель, чтобы постоянно измерять качество соединения.

Теперь агент Zabbix по умолчанию не позволяет выполнять команду ping для внутреннего туннеля, но, к счастью, он позволяет создавать "пользовательские параметры", в основном он позволяет выполнить одну команду оболочки unix и передать данные в ваше программное обеспечение.

Для этого мне нужно выполнить команду fping/ping, которая получает одно значение для zabbix. Я хочу, чтобы это значение было числом десятичных секунд или миллисекунд задержки или 0 при отсутствии соединения для чего-либо более 1 секунды. Ниже я уже разработал команду, которая выполняет 5 пингов на IP туннеля, а затем возвращает средние значения.

(IP-адрес ниже является примером данных) это то, что я получил до сих пор:

fping -e -q -p 1000 -c 5 8.8.4.4 2> /dev/null | grep -oP '[0-9\.]+/([0-9\.]+)/[0-9\.]+$'

Полная возвращаемая строка выглядит так:

8.8.4.4 : xmt/rcv/%loss = 5/5/0%, min/avg/max = 2.78/2.94/3.19"

Теперь результат grep такой:

2.78/2.94/3.19

Я хочу последовательно получить второе значение (2.94 выше), поэтому мой вопрос заключается в том, какой самый эффективный способ сделать это в одной команде?

2 ответа2

1

Я бы использовал sed вместо grep , поэтому ваш фильтр становится:

... | sed -n 's%^.* = .* = .*/\(.*\)/.*%\1%pg'

Заметки:-

  • Поскольку мы сопоставляем символ / , я заменил обычный разделитель строк на % чтобы упростить выражение, избегая необходимости экранировать / .
  • Мы сопоставляем всю строку и заменяем ее тем, что находится между двумя косыми чертами после двух знаков равенства, разделенных \( и \) в строке совпадения и \1 в замене.
  • Мы ничего не выводим (-n), кроме строк, где есть совпадения (%pg).

Чтобы упростить мою иллюстрацию, я использовал .* Для чисел. Вы можете использовать [0-9\.]+ , Но вам нужно будет использовать расширенный RE с grep -rn ...

Если вы раньше не использовали sed , я рекомендую этот урок.

0

Почему бы не cut -d/ -f8 ? Как в:

echo '8.8.4.4 : xmt/rcv/%loss = 5/5/0%, min/avg/max = 2.78/2.94/3.19"' | cut -d/ -f8

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .