SmokePing измеряет задержку и потери пакетов до набора узлов и рисует графики по данным RRDtool. В отличие от разовых проверок ping, он хранит историю за месяцы и годы, показывает джиттер и позволяет сравнить несколько точек. Для домашней сети и небольшого офиса это наглядный способ заметить деградацию канала до того, как пользователи начнут жаловаться.
Как это работает
Демон периодически запускает probe — обёртку над fping, curl, dig или собственным скриптом — и записывает время отклика в Round Robin Database. Каждый target описывается в конфигурации, а веб-интерфейс строит по RRD графики за час, день, неделю и год. Потери считаются отдельно от задержки, поэтому «медленно» и «рвётся» видны по-разному.
- FPing — основной probe для ICMP, самый дешёвый по ресурсам.
- DNS — измеряет время ответа резолвера, полезен для проверки локального кэша.
- Curl — проверяет полный HTTP-запрос, включая TLS-рукопожатие.
- TCPConnect — фиксирует доступность порта без ICMP.
Установка
В Ubuntu и Linux Mint пакет smokeping есть в репозитории. Вместе с ним ставятся fping и веб-интерфейс на Perl/CGI. Если Apache уже занят другим сайтом, поднимите отдельный виртуальный хост; для первого запуска проще стандартная конфигурация.
sudo apt update
sudo apt install smokeping fping apache2
sudo systemctl enable --now smokeping
systemctl status smokeping --no-pager
Проверьте, что fping имеет право отправлять ICMP: getcap /usr/bin/fping должен показать cap_net_raw. Если capabilities сняты, графики будут пустыми, а в логе появится сообщение об ошибке доступа.
Конфигурация целей
Основной файл — /etc/smokeping/config, он подключает файлы из config.d. Цели удобно держать в Targets: группа задаётся одним плюсом, хост — двумя. В menu пишется короткое имя для веб-интерфейса, в title — заголовок графика, в host — адрес или имя.
*** Targets ***
probe = FPing
menu = Top
title = Network Latency
remark = Задержка и потери
+ Home
menu = Home
title = Домашняя сеть
++ Router
menu = Router
title = Роутер
host = 192.168.1.1
++ Provider
menu = Provider
title = Шлюз провайдера
host = 203.0.113.1
После правки конфигурации перезапустите службу. Синтаксис проверяется при старте: ошибка в отступе или лишний плюс не дадут демону подняться, поэтому смотрите journalctl -u smokeping.
Probes и интервалы
По умолчанию FPing отправляет 20 пакетов раз в 5 минут: эти значения задаются в секции General параметрами pings и step. Для нестабильного канала шаг можно уменьшить, но это увеличивает нагрузку и размер RRD. Не ставьте интервал меньше минуты без необходимости: графики станут шумными, а пользы не прибавится.
*** General ***
step = 300
pings = 20
*** Probes ***
+ FPing
binary = /usr/bin/fping
packetsize = 56
Для DNS-проверки нужен отдельный probe и указание сервера. Curl полезен, когда ICMP блокируется, но помните: он измеряет не сеть, а полный запрос вместе с приложением.
Алерты
SmokePing умеет отправлять письма при потере пакетов или превышении задержки. Правила задаются в Alerts: тип loss или rtt и шаблон pattern. Шаблон читается слева направо и описывает последние измерения; проще начать с одного условия и усложнять постепенно.
*** Alerts ***
to = admin@example.com
from = smokeping@example.com
+loss
type = loss
pattern = >10%,>10%,>10%
comment = Потери выше 10 процентов
+rtt
type = rtt
pattern = >150,>150,>150
comment = Задержка выше 150 мс
Письма отправляет системный sendmail или настроенный relay. Проверьте доставку вручную, иначе алерт останется только в логе. Для дежурств удобнее отправлять события в систему мониторинга, но это требует отдельной интеграции.
Несколько точек опроса
Если сеть распределена, один сервер может собирать данные с удалённых площадок. На площадке запускается SmokePing в режиме slave: он не хранит графики, а отправляет результаты мастеру по HTTP с общим секретом. Мастер описывает площадку в разделе Slaves и указывает её имя в целях.
*** Slaves ***
secrets = /etc/smokeping/smokeping_secrets
+office
display_name = Office
smokeping --master-url=http://mon.example.com/smokeping.cgi \
--shared-secret="$SMOKEPING_SECRET" \
--cache-dir=/var/lib/smokeping --slave-name=office
Файл секретов содержит строку office:change-me и доступен только владельцу. Значение должно совпадать с обеих сторон, а время — быть синхронизировано. Для одной площадки slave не нужен: он усложняет отладку и добавляет сетевой обмен.
- Синхронизируйте время через systemd-timesyncd или chrony.
- Секрет храните с правами 600 и не коммитьте в git.
- Для каждой площадки задайте отдельное имя slave.
Хранение и бэкап
Все графики лежат в /var/lib/smokeping в виде RRD-файлов. Копировать их на работающей службе рискованно: часть данных может попасть в середину записи. Надёжнее остановить службу на секунду или сделать снапшот файловой системы. Для домашней сети достаточно недельного бэкапа каталога: история полезна, когда нужно доказать провайдеру наличие потерь.
Веб-интерфейс
Пакет ставит конфигурацию Apache в conf-available. Включите её командой a2enconf smokeping и перезагрузите Apache. Интерфейс доступен по адресу /smokeping/smokeping.cgi; если отдаётся 403, проверьте права на каталог /var/lib/smokeping и настройку Require в конфиге.
sudo a2enconf smokeping
sudo systemctl reload apache2
curl -I http://localhost/smokeping/smokeping.cgi
namei -l /var/lib/smokeping
Каталог данных должен принадлежать пользователю smokeping. После смены владельца старые RRD не ломаются, но новые цели создаются только при следующем цикле опроса.
Диагностика
Если графики пустые, идите по цепочке: служба, права fping, конфигурация цели, запись RRD. Запуск в foreground с —debug показывает, какие цели опрашиваются и какие ошибки возникают. Фильтр —filter позволяет проверить одну группу, не трогая остальные.
sudo -u smokeping fping -c 3 192.168.1.1
sudo smokeping --config=/etc/smokeping/config --debug --filter='+/Home'
ls -l /var/lib/smokeping
journalctl -u smokeping -n 50 --no-pager
- Пустые графики — чаще всего права на fping или каталог RRD.
- «Target not found» — опечатка в menu или неверный отступ.
- Рваный график — нестабильный канал либо слишком частый опрос.
- Высокая нагрузка — уменьшите число пакетов и целей.
Чек-лист
- Ставьте fping из репозитория и проверяйте capabilities.
- Начните с 5–7 целей: шлюз, провайдер, два внешних сервиса.
- Интервал 300 секунд достаточен для домашней сети.
- Алерты настраивайте после недели наблюдений, когда известна норма.
- Каталог /var/lib/smokeping держите на диске с местом и бэкапом.
Итог
SmokePing даёт длинную историю задержек и потерь без сложной инфраструктуры. Установка сводится к пакету, fping и Apache, конфигурация — к списку целей и паре алертов. Главное преимущество — наглядность: по графику видно, проблема в домашнем роутере, у провайдера или на конкретном сервисе, и это экономит часы споров со службой поддержки.