Вывод Speedtest-CLI для мониторинга

По умолчанию драйвер IP-протокола Linux использует оптимизацию, имеющую техническое название «модель слабой конечной системы» или «модель слабого хоста». Подробнее см. в этом вопросе.

Суть в том, что когда вы настраиваете две сетевые карты с комбинациями IP-адресов и масок сети, которые принадлежат к одному и тому же блоку пространства IP-адресов, код, отвечающий за маршрутизацию исходящих IP-адресов, будет считать, что обе эти сетевые карты подключены. к тому же физическому сегменту сети , и поэтому любой из них может использоваться для связи с любым хостом, имеющим IP-адрес в этом блоке. А затем он просто использует интерфейс, который указан первым в таблице маршрутизации для всего исходящего трафика в этот сегмент сети. В нем отсутствует концепция нескольких отдельных физических сетей, использующих копии одного и того же пространства IP-адресов.

Если в вашей системе включена фильтрация обратного пути (/proc/sys/net/ipv4/conf/*/rp_filter), она может заблокировать проверку связи с одним из роботов, даже если вы укажете сетевой интерфейс (произнесите eth1):, когда придет ответ через eth1фильтр обратного пути видит, что нормальная маршрутизация к этому IP-адресу источника будет проходить через eth0, и поэтому этот входящий пакет на eth1должен быть поддельным. Вы можете увидеть, происходит ли это, если вы включите параметр журнал _марсиане :

.

for i in /proc/sys/net/ipv4/conf/*/log_martians; do
    echo 1 > $i
done

Затем попробуйте пропинговать своих роботов, а затем проверьте конец dmesgвывода :вы можете увидеть сообщения о потерянных пакетах.

В вашей ситуации потребуется, чтобы маршрутизация учитывала исходный IP-адрес при принятии решения о том, какую сетевую карту использовать для исходящих пакетов, и поэтому действовала в соответствии с так называемой «моделью сильной конечной системы» или «моделью сильного хоста». Что ж, Linux может сделать это, используя функциональность «расширенной маршрутизации», но она определенно не используется по умолчанию, и ее довольно сложно настроить.См. мой ответ в упомянутом выше вопросе -для рецепта конфигурации, если вы действительно хотите это сделать.

Однако, поскольку IP-адреса роботов не перекрываются, самым простым решением с точки зрения конфигурации программного обеспечения будет приобретение небольшого дешевого сетевого коммутатора (или даже концентратора )и подключения обоих роботов и одной сети. кабель от компа в него.

Или, если вам нужна простота с точки зрения минимального количества оборудования, просто настройте роботов на использование разных IP-сегментов, если вы хотите подключить их напрямую к нескольким сетевым адаптерам на одном компьютере.

0
13.02.2020, 16:36
2 ответа

Поскольку вы явно используете gawk, вы можете использовать функцию match()для поиска шаблона "Download:номер Mbit/s" и извлечения фактического значения этого шаблона, найденного в вашей строке, следующим образом:

gawk '{if (match($0,/Download: ([[:digit:]]+\.[[:digit:]]+) Mbit\/s/,a)>0) print a[1]}'

Это будет

  • определить, был ли шаблон найден изначально, и
  • поместить все(... )-вложенные подгруппы -регулярного выражения в элементы массиваa

, откуда вы можете просто использовать запись 1 (, так как в регулярном выражении есть только одна такая подгруппа -).

1
28.04.2021, 23:23

speedtest-cliимеет переключатель --simple, который упрощает вывод (попробуйте speedtest-cli --helpдля получения дополнительной информации):

# speedtest-cli --simple --no-upload
Ping: 18.833 ms
Download: 33.88 Mbit/s
Upload: 0.00 Mbit/s

Таким образом, мы можем получить -только скорость загрузки в виде числа:

# speedtest-cli --simple --no-upload|grep "^Download:"|cut -d" " -f2
34.92

Здесь используется --no-upload, чтобы сэкономить немного времени, не проверяя скорость загрузки, grepдля извлечения только строки загрузки и cutдля извлечения второго поля, т. е. числа в Мбит/с.

1
28.04.2021, 23:23

Теги

Похожие вопросы