Мониторинг скорости интернет канала в Zabbix

Задача:
---------------------------------------------------------------Настроить на сервере Zabbix мониторинг скорости интернет канала
Настраивать будем на сервере установленного при помощи готовых решений Zabbix. Для этого на официальном сайте в меню выбираем “Скачать и установить Zabbix > Готовое решение Zabbix > Установите готовое решение Zabbix”. Скачиваем желаемый тип, справедливости ради, стоит упомянуть что их тут на любой вкус.

Если вы будете использовать аналогичный вариант, то вам понадобятся стандартные (по-умолчанию) пароли Zabbix:
- логин и пароль zabbix по-умолчанию для браузера: имя пользователя Admin с паролем zabbix для входа под Супер-Администратором Zabbix.
- логин и пароль по-умолчанию для консоли zabbix: имя пользователя root с паролем zabbix для входа в консоль сервера.
Если вы войдёте в консоль сервера, то увидите пароль для веб-интерфейса

В готовом решении заббих используется операционная система CentOS, на ней и будем устанавливать консольный вариант speedtest.
Инструкция с официального сайта:
sudo yum install wget wget https://bintray.com/ookla/rhel/rpm -O bintray-ookla-rhel.repo sudo mv bintray-ookla-rhel.repo /etc/yum.repos.d/ # Other non-official binaries will conflict with Speedtest CLI # Example how to remove using yum # rpm -qa | grep speedtest | xargs -I {} sudo yum -y remove {} sudo yum install speedtest
Мой процесс установки
[root@appliance ~]# yum install wget Last metadata expiration check: 0:05:26 ago on Sat 06 Feb 2021 02:07:04 PM UTC. Dependencies resolved. ======================================================================================================================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================================================================================================================== Installing: wget x86_64 1.19.5-10.el8 appstream 734 k Transaction Summary ======================================================================================================================================================================================================================== Install 1 Package Total download size: 734 k Installed size: 2.8 M Is this ok [y/N]: y Downloading Packages: wget-1.19.5-10.el8.x86_64.rpm 4.4 MB/s | 734 kB 00:00 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Total 2.8 MB/s | 734 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : wget-1.19.5-10.el8.x86_64 1/1 Running scriptlet: wget-1.19.5-10.el8.x86_64 1/1 Verifying : wget-1.19.5-10.el8.x86_64 1/1 Installed: wget-1.19.5-10.el8.x86_64 Complete! [root@appliance ~]# [root@appliance ~]# wget https://bintray.com/ookla/rhel/rpm -O bintray-ookla-rhel.repo --2021-02-06 14:12:42-- https://bintray.com/ookla/rhel/rpm Resolving bintray.com (bintray.com)... 75.126.208.206 Connecting to bintray.com (bintray.com)|75.126.208.206|:443... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified Saving to: ‘bintray-ookla-rhel.repo’ bintray-ookla-rhel.repo [ <=> ] 172 --.-KB/s in 0s 2021-02-06 14:12:43 (116 MB/s) - ‘bintray-ookla-rhel.repo’ saved [172] [root@appliance ~]# mv bintray-ookla-rhel.repo /etc/yum.repos.d/ [root@appliance ~]# yum install speedtest bintray--ookla-rhel 6.0 kB/s | 1.4 kB 00:00 Dependencies resolved. ======================================================================================================================================================================================================================== Package Architecture Version Repository Size ======================================================================================================================================================================================================================== Installing: speedtest x86_64 1.0.0.2_1.5ae238b-1 bintray--ookla-rhel 910 k Transaction Summary ======================================================================================================================================================================================================================== Install 1 Package Total download size: 910 k Installed size: 2.2 M Is this ok [y/N]: y Downloading Packages: ookla-speedtest-1.0.0-x86_64-linux.rpm 2.0 MB/s | 910 kB 00:00 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Total 2.0 MB/s | 910 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : speedtest-1.0.0.2_1.5ae238b-1.x86_64 1/1 Verifying : speedtest-1.0.0.2_1.5ae238b-1.x86_64 1/1 Installed: speedtest-1.0.0.2_1.5ae238b-1.x86_64 Complete! [root@appliance ~]#
Проверяем работу
[root@appliance ~]# speedtest Speedtest by Ookla Server: Deutsche Telekom - Dusseldorf (id = 30906) ISP: Versatel Deutschland Latency: 9.48 ms (0.52 ms jitter) Download: 54.23 Mbps (data used: 69.4 MB) Upload: 16.70 Mbps (data used: 7.5 MB) Packet Loss: 0.0% Result URL: https://www.speedtest.net/result/c/7d3b703e-9410-43fb-921c-a88baac00e77 [root@appliance ~]#
Проверяем как информация записывается в файл
[root@appliance ~]# speedtest > /tmp/speedtest.txt [root@appliance ~]# cat /tmp/speedtest.txt Speedtest by Ookla Server: Contabo - Dusseldorf (id = 35154) ISP: Versatel Deutschland Latency: 10.30 ms (0.43 ms jitter) Download: 54.25 Mbps (data used: 70.7 MB) Upload: 16.73 Mbps (data used: 12.3 MB) Packet Loss: 0.5% Result URL: https://www.speedtest.net/result/c/652f71a8-95bc-44a4-b411-dae61d1ddc64 [root@appliance ~]#
Теперь необходимо извлечь необходимые нам файлы. Смотрим справку:
[root@appliance ~]# speedtest -help Speedtest by Ookla is the official command line client for testing the speed and performance of your internet connection. Version: speedtest 1.0.0.2 Usage: speedtest [<options>] -h, --help Print usage information -V, --version Print version number -L, --servers List nearest servers -s, --server-id=# Specify a server from the server list using its id -I, --interface=ARG Attempt to bind to the specified interface when connecting to servers -i, --ip=ARG Attempt to bind to the specified IP address when connecting to servers -o, --host=ARG Specify a server, from the server list, using its host's fully qualified domain name -p, --progress=yes|no Enable or disable progress bar (Note: only available for 'human-readable' or 'json' and defaults to yes when interactive) -P, --precision=# Number of decimals to use (0-8, default=2) -f, --format=ARG Output format (see below for valid formats) -u, --unit[=ARG] Output unit for displaying speeds (Note: this is only applicable for ‘human-readable’ output format and the default unit is Mbps) -a Shortcut for [-u auto-decimal-bits] -A Shortcut for [-u auto-decimal-bytes] -b Shortcut for [-u auto-binary-bits] -B Shortcut for [-u auto-binary-bytes] --selection-details Show server selection details --ca-certificate=ARG CA Certificate bundle path -v Logging verbosity. Specify multiple times for higher verbosity --output-header Show output header for CSV and TSV formats Valid output formats: human-readable (default), csv, tsv, json, jsonl, json-pretty Machine readable formats (csv, tsv, json, jsonl, json-pretty) use bytes as the unit of measure with max precision Valid units for [-u] flag: Decimal prefix, bits per second: bps, kbps, Mbps, Gbps Decimal prefix, bytes per second: B/s, kB/s, MB/s, GB/s Binary prefix, bits per second: kibps, Mibps, Gibps Binary prefix, bytes per second: kiB/s, MiB/s, GiB/s Auto-scaled prefix: auto-binary-bits, auto-binary-bytes, auto-decimal-bits, auto-decimal-bytes [root@appliance ~]#
Для вывода данных в формате мегабайты в секунду, необходимо использовать специальный ключ
[root@appliance ~]# speedtest -uMB/s Speedtest by Ookla Server: Lippe Data UG - Düsseldorf (id = 39002) ISP: Versatel Deutschland Latency: 7.14 ms (0.80 ms jitter) Download: 6.64 MB/s (data used: 61.4 MB) Upload: 2.09 MB/s (data used: 13.4 MB) Packet Loss: 0.0% Result URL: https://www.speedtest.net/result/c/2ad5acc8-6b27-417d-a1f4-2d6222ed9292 [root@appliance ~]#
Или же можно запросить вывод в формате CSV
[root@appliance ~]# speedtest -uMB/s --format=csv "PHILUNET GmbH - Dusseldorf","33397","15.428","0.122","N/A","6308617","2087205","41009760","10801440","https://www.speedtest.net/result/c/bfe2e856-66c1-40cf-b7e6-eb4ed48ed775" [root@appliance ~]#
Нам необходимо добавить команду в Cron. Сделаем чтобы данные обновлялись каждые 30 минут
[root@appliance ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed [root@appliance ~]# crontab -e
Вставляем строку и для выполнения и сохраняемся. (работает как стандартный редактор VI)
*/30 * * * * root /usr/bin/speedtest > /tmp/speedtest.txt
Командой “crontab -e” изменить cron не получилось. Сделал изменения в файле “crontab” и сразу всё заработало.
[root@appliance ~]# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed */30 * * * * root /usr/bin/speedtest > /tmp/speedtest.txt [root@appliance ~]#
Теперь из создаваемого каждые 30 минут файла, нам необходимо получить необходимые данные.
Команда для получения пинга (Latency, Ping):
[root@appliance ~]# cat /tmp/speedtest.txt | grep Latency | sed 's/ //g' | cut -d ':' -f2 | sed "s/m.*//" 14.86 [root@appliance ~]# cat /tmp/speedtest.txt | grep Latency | sed 's/ //g' | cut -d ':' -f2 | grep -o '^[^m]*' 14.86 [root@appliance ~]#
Команда для получения скорости скачивания (Download)
[root@appliance ~]# cat /tmp/speedtest.txt | grep Download | sed 's/ //g' | cut -d ':' -f2 | sed "s/M.*//" 52.13 [root@appliance ~]# cat /tmp/speedtest.txt | grep Download | sed 's/ //g' | cut -d ':' -f2 | grep -o '^[^M]*' 52.13 [root@appliance ~]#
Команда для получения скорости отдачи (Upload):
[root@appliance ~]# cat /tmp/speedtest.txt | grep Upload | sed 's/ //g' | cut -d ':' -f2 | sed "s/M.*//" 16.56 [root@appliance ~]# cat /tmp/speedtest.txt | grep Upload | sed 's/ //g' | cut -d ':' -f2 | grep -o '^[^M]*' 16.56 [root@appliance ~]#
Теперь необходимо настроить передачу данных на Zabbix сервер. Для этого в файл настроек zabbix_agentd.conf необходимо добавить соответствующие строки. Не забываем сделать резервную копию.
[root@appliance ~]# cp /etc/zabbix/zabbix_agentd.conf /etc/zabbix/zabbix_agentd.conf_backup
Вписываем в самом низу конфига (/etc/zabbix/zabbix_agentd.conf) следующие строки
UserParameter=upload[*],cat /tmp/speedtest.txt | grep Upload | sed 's/ //g' | cut -d ':' -f2 | grep -o '^[^M]*' UserParameter=download[*],cat /tmp/speedtest.txt | grep Download | sed 's/ //g' | cut -d ':' -f2 | grep -o '^[^M]*'
перезапускаем агента забикса
[root@appliance ~]# service zabbix-agent restart Redirecting to /bin/systemctl restart zabbix-agent.service [root@appliance ~]#
Проверить работу можно выполнив соответствующие запросы работу
[root@appliance ~]# zabbix_get -s 127.0.0.1 -p 10050 -k 'upload' 16.80 [root@appliance ~]# zabbix_get -s 127.0.0.1 -p 10050 -k 'download' 54.09 [root@appliance ~]#
Переходим к настройкам веб-интерфейса забикса. Открываем “Configurations > Hosts”, выбираем “Zabbix Server” и создаём новый “item”. Настраиваем мониторинг для входящего трафика. Заполняем поля согласно картинки.

Настраиваем мониторинг для исходящего трафика.

Для отображения информации на карте, необходимо выделить два устройства, создать между ними Link и в свойствах метки (Label) добавить следующие строки.
↓ DL: {Zabbix server:download.last(0)} ↑ UP: {Zabbix server:upload.last(0)}

Если все правильно сделали, необходимо немного подождать и вы увидите примерно следующую картину

А зачем так сложно? можно же получать данные speedtest в json и парсить их на стороне заббикс сервера 🙂
Спасибо. Вариант тоже рабочий, Постараюсь его описать в одной из следующих статей