Pi-hole
DNS-блокировщик рекламы: блокирует ли он, сколько запросов обрабатывает и блокирует, насколько устарели его списки блокировки, отказывают ли его внешние резолверы, ожидает ли обновление, и сообщения собственной страницы диагностики.
DumbMonit читает REST API Pi-hole v6 (/api). Pi-hole 5 и более ранние версии
не имеют такого API и не поддерживаются.
То, что идёт не так с Pi-hole, редко заметно: DNS продолжает отвечать. Блокировка поставлена на паузу «на пять минут» и не возвращается, еженедельное обновление списков блокировки (gravity) не удавалось месяц, внешний резолвер отвечает SERVFAIL, а страницу диагностики, которую никто не открывает, всё это время указывала причину.
Что отслеживается
Заголовок раздела «Что отслеживается»Все метрики с префиксом dumbmonit_pihole_. Pi-hole считает запросы за
последние 24 часа, скользящим окном, которое то растёт, то падает: эти
значения — gauge-метрики с суффиксом _24h, а не счётчики.
| Метрика | Что | Метки |
|---|---|---|
blocking_enabled | 1, когда блокировка включена; 0 — когда выключена, на паузе или не удалась | |
blocking_timer_seconds | время, оставшееся до того, как блокировка на паузе сама включится снова | |
queries_24h, queries_blocked_24h, queries_blocked_percent | запросы, обслуженные и блокированные за последние 24 часа | |
queries_forwarded_24h, queries_cached_24h, unique_domains_24h | запросы, отправленные вовне, ответы из кэша, уникальные домены | |
queries_per_second | среднее за последнюю минуту | |
replies_servfail_24h | ответы SERVFAIL за последние 24 часа: отказавший внешний резолвер проявляется здесь первым | |
clients_active, clients_total | увиденные клиенты | |
gravity_domains | домены в списках блокировки | |
gravity_last_update_timestamp_seconds, gravity_age_seconds | последняя пересборка списков блокировки, и сколько времени прошло | |
version_info | значение 1 | core, web, ftl, docker |
update_available | 1, когда опубликована более новая версия компонента, иначе 0; отсутствует до первого ежедневного проверки Pi-hole | component (core, web, ftl, docker) |
updates_available | обновления к установке: образ в Docker (core, web и FTL идут с ним), иначе каждый устаревший компонент | |
messages, messages_by_type | сообщения на странице диагностики | type (LOAD, RATE_LIMIT, LIST…) |
ftl_uptime_seconds, ftl_memory_percent, ftl_cpu_percent | демон FTL | |
privacy_level | уровень приватности Pi-hole, от 0 до 3 | |
scrape_errors | второстепенные вызовы API, завершившиеся ошибкой во время последней проверки |
В ветке разработки Pi-hole сравнивает коммиты, а не номера версий, и DumbMonit делает то же самое.
Применяемые встроенные правила: «Блокировка Pi-hole отключена», «Списки блокировки Pi-hole устарели», «Доступно обновление Pi-hole», «Диагностические сообщения Pi-hole», плюс «Монитор недоступен».
Страница монитора
Заголовок раздела «Страница монитора»Панель над графиками читает то, что сохранила проверка; открытие страницы никогда не подключается к Pi-hole. Она показывает, включена ли блокировка (и когда закончится пауза), запросы и долю блокированных за последние 24 часа, размер и возраст списков блокировки, клиентов, версии с ожидающими обновлениями, и число сообщений диагностики.
Создание пароля приложения в Pi-hole
Заголовок раздела «Создание пароля приложения в Pi-hole»-
Требуется Pi-hole v6 или новее: версия 5 не имела REST API. У Pi-hole нет учётной записи только для чтения; ближайший аналог — пароль приложения, который не может изменить ни одну настройку.
-
В веб-интерфейсе Pi-hole откройте Settings → Web interface / API и переключите страницу с Basic на Expert. Нажмите Configure app password, скопируйте показанный пароль, затем нажмите Enable new app password. Pi-hole показывает его только один раз, а новый заменяет предыдущий.
-
Пароль приложения остаётся доступным только для чтения настроек, пока webserver.api.app_sudo равен false, что является значением по умолчанию. Проверьте это на машине с Pi-hole (в Docker добавьте к команде префикс docker exec и имя контейнера):
pihole-FTL --config webserver.api.app_sudo -
В DumbMonit введите адрес Pi-hole, например «pi.hole» или «192.168.1.53», и вставьте пароль приложения. Для Pi-hole, чей веб-интерфейс не имеет пароля, выберите вместо этого No password.
-
DumbMonit только читает. Он никогда не ставит блокировку на паузу и никогда не меняет список, и держит одну сессию API открытой между проверками, а не открывает новую на каждую: Pi-hole допускает до 16 сессий одновременно.
Пароль приложения также входит без второго фактора, когда включена
двухфакторная аутентификация: для этого он и существует. Чтобы отозвать его,
очистите webserver.api.app_pwhash в Settings → All settings, либо включите
новый: предыдущий перестаёт работать немедленно.
Учётные данные
Заголовок раздела «Учётные данные»| Учётные данные | Поля |
|---|---|
| Пароль приложения | Пароль, сгенерированный выше. DumbMonit обменивает его на сессию, отправляемую в заголовке X-FTL-SID, и повторно использует эту сессию, пока Pi-hole её держит (30 минут с последнего использования). |
| Без пароля | Только для Pi-hole, чей веб-интерфейс не имеет пароля. |
Адрес: имя хоста или IP (pi.hole), host:port, или полный URL
(https://pi.hole); путь веб-интерфейса или API, скопированный из браузера,
игнорируется. Опции: протокол (по умолчанию HTTP), порт (80), проверка
сертификата (для HTTPS на 443, собственный сертификат Pi-hole самоподписан) и
таймаут запроса (10 с).
Если проверки не проходят с ошибкой «no free API session», все сессии
Pi-hole заняты, обычно скриптом, который входит при каждом запуске без
выхода. Они истекают через 30 минут; webserver.api.max_sessions поднимает
лимит.