Zabbix мониторинг скорости интернета

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Zabbix template for monitoring ISP speeds using an external check script against speedtest.net

License

robmccready/zabbix-isp-speedtest

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Zabbix template for monitoring ISP speeds using speedtest.net.

To avoid timeouts when executing the speed test this template uses a combination of a trigger item and a trap item to asynchronously execute the speed test.

Latest version is v2.0.5 (2022-10-12). Change Log

Installation (on a Zabbix Server)

  • Install dependencies
  • Copy isp-speedtest-trigger-atjob.sh and isp-speedtest-sender.sh to your Zabbix ExternalScripts location (default: /usr/lib/zabbix/externalscripts)
    • Ensure both scripts are executable by the Zabbix Agent user
    • Restart Zabbix Agent Service

    Sender Macros

    The agent running the speedtest uses the zabbix sender to post the results back to the Zabbix server.

    • SPEEDTEST_SENDER_SERVER (default: localhost): The hostname or IP address of the Zabbix server to send the results to
    • SPEEDTEST_SENDER_PORT (default: 10051): The port of the Zabbix server
    • SPEEDTEST_SENDER_HOST (default: Zabbix server): The host that the template is applied to so the sender can find the results item.

    Speedtest Macros

    Configure the execution of the speedtest runs

    • SPEEDTEST_UPDATE_INTERVAL (default: 3h): How often to run the speedtest
    • SPEEDTEST_SERVER_ID (default: blank): If filled in it will lock speedtest to a specific server (speedtest —list for available servers)

    Trigger Macros

    Configure trigger values for alerts

    • SPEEDTEST_TRIGGER_AVG_COUNT (default: 3): Average values evaluated by triggers to prevent one bad run causing alerts
    • SPEEDTEST_TRIGGER_DOWNLOAD_LOW (default: 100Mbps): Trigger when average download speeds fall below
    • SPEEDTEST_TRIGGER_UPLOAD_LOW (default: 8Mbps): Trigger when average upload speeds fall below
    • SPEEDTEST_TRIGGER_LATENCY_HIGH (default: 50ms): Trigger when average latency is above
    • Speedtest Trigger (calls isp-speedtest-trigger-atjob script)
    • Speedtest Results (trapper item — receives data from isp-speedtest-sender script)
      • Speedtest Download
      • Speedtest Upload
      • Speedtest Host (track which speedtest server gets used)
      • Speedtest Latency (rough latency to host)
      • Speedtest Success (boolean value if execution succeeded)
      • Speedtest Message (error message if any)
      • Download speed
      • Upload speed
      • Latency
      • Summary graph with download, upload, and latency

      The 3 individual graphs are included on a monitoring screen as well

      About

      Zabbix template for monitoring ISP speeds using an external check script against speedtest.net

      Источник

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

      Я работаю в крупной компании федеральной компании, у которой более 2000 объектов. Для большинства задач необходим стабильный канал интернета с высокой скоростью. Поэтому нам необходимо было сделать систему, которая позволяет отслеживать скорость работы интернет каналов на этих объектах, и в случае проблем информировала бы нас об этом.

      Собрав все инструменты, что у меня есть, я решил сделать мониторинг скорости интернета на базе Zabbix. Для замеров скорости используется утилита iperf3. Весь код сделан на python.

      Схема работы

      В общем случае, схема мониторинга выглядит следующим образом:

      Схема работы мониторинга скорости интернет каналов

      На объектах установлены сетевые шлюзы на Linux, на которых поднят iperf3 в режиме сервера. В каждом филиале есть сервер Zabbix Proxy, на котором запускается iperf3 в режиме клиента и замеряет скорость интернета, после он в Zabbix trap записывает данные замера.

      Настройка и запуск iperf3 на удаленном объекте

      Как уже писал выше, на объектах установлены сетевые шлюзы на Linux. На них был установлен iperf3 и создана задача на запуск iperf3 при старте шлюза. Запуск осуществляется следующей командой, где интерфейса, через который осуществляется замер скорости:

      Настройка iperf3 на Zabbix Proxy сервере

      Для начала необходимо установить следующие пакеты: iperf3, python-pip, python. Из pip нам необходимо установить py-zabbix и protobix.

      apt install iperf3 python-pip python pip install py-zabbix pip install protobix

      Далее создаем папку iperf в /usr/lib/zabbix/externalscripts/. В папке создаем два файла iperf3_speed_testing.py и iperf3_task.py (один для замера скорости из Zabbix, второй для периодических замеров всех). И даем им нужные разрешения. Владельцем папки делаем пользователя zabbix.

      mkdir /usr/lib/zabbix/externalscripts/iperf touch /usr/lib/zabbix/externalscripts/iperf/iperf3_speed_testing.py touch /usr/lib/zabbix/externalscripts/iperf/iperf3_task.py chown -R zabbix:zabbix /usr/lib/zabbix/externalscripts/iperf chmod +x /usr/lib/zabbix/externalscripts/iperf/iperf3_speed_testing.py chmod +x /usr/lib/zabbix/externalscripts/iperf/iperf3_task.py

      Описание и содержимое скриптов

      Скрипт /usr/lib/zabbix/externalscripts/iperf/iperf3_speed_testing.py необходим для выполнения запуска замера скорости на текущий момент. Он запускает запуск замеров на выбранном хосте в Zabbix.

      #!/usr/bin/python #- *- coding: utf-8 - *- import protobix import argparse import subprocess import sys import json import time proxy = subprocess.Popen(['hostname'], stdout=subprocess.PIPE) proxy = proxy.communicate()[0] def showResult(_upload, _download): print "Отправка: " + str(round(_upload/1000000,2)) + " Мбит/с" print "Получение: " + str(round(_download/1000000,2)) + " Мбит/с" def sendData(_upload, _download): host_moria = sys.argv[2] host_status = <> host_status['speed_upload'] = _upload host_status['speed_download'] = _download zbx_datacontainer = protobix.DataContainer() zbx_datacontainer.server_active = proxy.split('\n')[0] zbx_datacontainer.server_port = 10051 zbx_datacontainer.data_type = "items" zbx_datacontainer.add() # print json.dumps(, indent=4) zbx_datacontainer.send() showResult(_upload, _download) start_time = time.time() result = subprocess.Popen(['/usr/bin/iperf3', '-c', sys.argv[1], '-J', '-P', '5'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) wait = time.time()-start_time while wait < 45 and result.poll() == None: wait = time.time()-start_time if wait >40 and wait < 45 : result.kill() stdout_value = stdout_json = stdout_value stdout_value = str(stdout_value) break else: stdout_value, stderr_value = result.communicate() stdout_json = json.loads(stdout_value) while stdout_value.find('error') != -1 and stdout_json['error'] == 'error - unable to receive results: Resource temporarily unavailable': result = subprocess.Popen(['/usr/bin/iperf3', '-c', sys.argv[1], '-J', '-P', '5'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout_value, stderr_value = result.communicate() stdout_json = json.loads(stdout_value) if stdout_value.find('error') == -1: sendData(stdout_json['end']['sum_sent']['bits_per_second'],stdout_json['end']['sum_received']['bits_per_second']) else: print stdout_json['error'] 

      Скрипт /usr/lib/zabbix/externalscripts/iperf/iperf3_task.py необходим для запуска задачи на замер скорости в выбранных группах хостов Zabbix. Для работы данного скрипта также необходимо создать пользователя с доступом к Zabbix API. В данном скрипте используются следующие переменные:

      • zabbix_user - пользователь с доступом к API
      • zabbix_password - пароль пользователя API
      • group - группа или группы в Zabbix, для которых необходимо делать замер скорости интернета
      #!/usr/bin/python # - *- coding: utf- 8 - *- from pyzabbix.api import ZabbixAPI import protobix import argparse import subprocess import sys import json import time zabbix_user = zabbix_password = group = ('Gateway_branch_1','Gateway_branch_2') start_time_script = time.time() proxy = subprocess.Popen(['hostname'], stdout=subprocess.PIPE) proxy = proxy.communicate()[0] def sendData(host, upload, download): host_moria = host host_status = <> host_status['speed_upload'] = upload host_status['speed_download'] = download zbx_datacontainer = protobix.DataContainer() zbx_datacontainer.server_active = proxy.split('\n')[0] zbx_datacontainer.server_port = 10051 zbx_datacontainer.data_type = "items" zbx_datacontainer.add() # print json.dumps(, indent=4) zbx_datacontainer.send() def getZabbixGroupID(groupName): groups = zapi.hostgroup.get(filter=) for group in groups: return group['groupid'] zapi = ZabbixAPI(url='https://zabbix.megafon-retail.ru', user=zabbix_user, password=zabbix_password) hosts = zapi.host.get(groupids=[getZabbixGroupID(group[0]),getZabbixGroupID(group[1])], selectInterfaces=['ip']) for host in hosts: # print (host['host']) start_time = time.time() result = subprocess.Popen(['/usr/bin/iperf3', '-c', host['interfaces'][0]['ip'], '-J', '-P', '5'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) wait = time.time()-start_time while wait < 45 and result.poll() == None: wait = time.time()-start_time if wait >40 and wait < 45 : result.kill() stdout_value = stdout_json = stdout_value stdout_value = str(stdout_value) break else: stdout_value, stderr_value = result.communicate() stdout_json = json.loads(stdout_value) while stdout_value.find('error') != -1 and stdout_json['error'] == 'error - unable to receive results: Resource temporarily unavailable': result = subprocess.Popen(['/usr/bin/iperf3', '-c', host['interfaces'][0]['ip'], '-J', '-P', '5'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout_value, stderr_value = result.communicate() stdout_json = json.loads(stdout_value) if stdout_value.find('error') == -1: sendData(host['host'], stdout_json['end']['sum_sent']['bits_per_second'], stdout_json['end']['sum_received']['bits_per_second']) zapi.user.logout() related_time = time.time() - start_time_script host_moria = proxy.split('\n')[0] host_status = <> host_status['iperf_task_time'] = float(round(related_time,2)) zbx_datacontainer = protobix.DataContainer() zbx_datacontainer.server_active = 'hqpv-zbxcl1.megafon-retail.ru' zbx_datacontainer.server_port = 10051 zbx_datacontainer.data_type = "items" zbx_datacontainer.add() zbx_datacontainer.send()

      0 2,6,10,14,18,22 * * * /usr/lib/zabbix/externalscripts/iperf/iperf3_task.py

      Мы делаем замер раз в 4 часа. Нам этого хватает.

      Если у вас используется просто Zabbix сервер, то на нем нужно сделать то же самое.

      Настройка шаблонов и скриптов в Zabbix

      Для начала необходимо создать шаблон с элементами данных замеров скорости интернета. Я назвал шаблон Internet Speed Testing

      Шаблон Inernet speed testing

      В данном шаблоне необходимо создать следующие элементы данных:

      • Speed Upload

      • Speed Download

      Триггеры

      • Нет данных замеров скорости более 48 часов
      • Низкая скорость загрузки
      • Низкая скорость выгрузки

      • - для записи скорости, при которой срабатывает триггер

      Также добавляем Скрипт для замера скорости вручную (Администрирование -> Скрипты -> Создать скрипт)

      Данные для настройки скрипта ручного замера

      В поле команда вставляем путь к скрипту в следующем виде /usr/lib/zabbix/externalscripts/iperf/iperf3_speed_testing.py ''

      Теперь добавляем шаблон к необходимым хостам и можно проверить работоспособность. Также в хостах необходимо переопределить макрос, при котором будет срабатывать триггер низкой скорости интернета.

      Нажимаем на нужный хост и выбираем Скорость интернета. Получаем ответ:

      Результат замера скорости

      Далее проверяем элементы данных обновились. Ждем некоторое время и можем получаем такую статистику для каждого хоста:

      Статистика замеров скорости интернета

      На это всё. Спасибо за внимание!

      Источник

      Zabbix + Speedtest

      Zabbix integration team will develop custom integration based on your requirements and Zabbix best practices.

      Propose your integration

      Have you already developed high quality integration and want to submit to Zabbix integration repository?

      • Features
      • What's new in Zabbix 6.4
      • Screenshots
      • System requirements
      • Lifecycle & Release Policy
      • License
      • Documentation
      • Roadmap
      • By Topic
      • By Industry
      • For Enterprises
      • Case studies
      • Customers and Users
      • Integrations & Templates
      • Support
      • Consulting
      • Turn-Key Solution
      • Template building
      • Upgrade
      • Development
      • Remote troubleshooting
      • Integration
      • Certified User
      • Certified Specialist
      • Certified Professional
      • Certified Expert
      • Testimonials
      • Training FAQ
      • Application form
      • Webinars
      • Partner Program
      • Become a Partner
      • Strategic Partners
      • Distributors
      • Map of Partners
      • Events
      • Forum
      • Blog
      • Bugs and Feature Requests
      • Developers
      • Community templates
      • Newsletters
      • About Us
      • Career
      • Contacts
      • Press Releases
      • Trademark
      Join us! We're hiring!

      © 2001-2023 by Zabbix LLC. All rights reserved.

      Источник

      Читайте также:  Домашний интернет мегафон проводной интернет
Оцените статью
Adblock
detector