В этой статье я продемонстрирую, как мы можем использовать скрипты в Zabbix через UserParameter. Я буду использовать SpeedTest-cli в качестве примера, для выполнения тестов скорости загрузки интернет канала.
Мы будем использовать UserParameter, он используется, когда нам нужна информация, которую сам zabbix не предоставляет, мы можем использовать команды и скрипты, не беспокоясь о том, поддерживает ли их zabbix, мы можем создавать собственные ключи.

  1. Выполнение установки SpeedTest-Cli
    sudo apt-get install speetest-cli
  2. Выполним простой тест, показывающий только пинг, скорость загрузки и отдачи, а также сохраним в файл TXT. Для этого выполним:
    speedtest-cli ---bytes ---simple > /tmp/speed.txt
    xak@zabbix-new:~$ speedtest-cli ---bytes ---simple > /tmp/speed.txt
    xak@zabbix-new:~$ cat /tmp/speed.txt
    Ping: 1.692 ms
    Download: 10.56 Mbyte/s
    Upload: 11.46 Mbyte/s

    В данном примере скорость измеряется с ближайшим сервером, вызвав справку
    speedtesthelp
    Вы можете сменить сервер для проверки на нужный.
  3. Создание графика выполнения скриптов
    Поскольку сценарий имеет довольно большую задержку, около 50 секунд для генерации результатов, мы не могли просто запустить его с zabbix и получить результаты. Zabbix имеет 30-секундный тайм-аут для внешних скриптов. Таким образом, один из способов, который я нашел, заключается в том, чтобы запланировать выполнение скрипта через Crontab. Я рекомендую прочитать немного больше о Crontab или тут.
    /etc/crontab: system-wide crontab
    Unlike any other crontab you don’t have to run the `crontab’
    command to install the new version when you edit this file
    and files in /etc/cron.d. These files also have username fields,
    that none of the other crontabs do.SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command
    17 * * * * root cd / && run-parts ---report /etc/cron.hourly
    25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.daily )
    47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.weekly )
    52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts ---report /etc/cron.monthly )
    */20 * * * * root /usr/bin/speedtest-cli ---simple > /tmp/speed.txt

    Поскольку speedtest использует пропускную способность интернета для выполнения тестов, не стоит его запускать сильно часто, в данном примере я настроил запуск каждые 20мин.
  4. Создание UserParameterПоскольку скрипт speedtest устанавливается на самом zabbix, нам нужно будет настроить UserParameter в собственном агенте Zabbix Server. Добавьте следующие строки в /etc/zabbix/zabbix-agentd.conf:
    UserParameter=upload[*],cat /tmp/speed.txt | grep «Upload:» | cut -d » » -f2
    UserParameter=download[*],cat /tmp/speed.txt | grep «Download:» | cut -d » » -f2
    Выполните описанную выше процедуру, перезапустите агент zabbix
    Используйте zabbixget, чтобы проверить, работает ли ключ.
    xak@zabbix-new:~$ zabbix_get -s 127.0.0.1 -p 10050 -k «download» && zabbix_get -s 127.0.0.1 -p 10050 -k «upload»
    87.31
    33.98

    Наш UserParameter работает правильно.
  5. Создание элемента данных в Zabbix
    В ключе определяем ключ, который мы создали в агенте.
    В окне Интервал обновления укажите 20-30мин
    Вы можете найти больше о пользовательских интервалах здесь.

    Повторяем действия для upload
  6. Дождитесь появления запланированного обновления в Zabbix.