Диагностика¶
Сначала — общее правило: у трекера есть строка на каждый клик и на каждый постбэк, а для разбора конкретного случая — пошаговый Traffic log. Почти любой вопрос «почему так» решается чтением журналов, а не догадками.
Traffic log по умолчанию выключен
Пошаговый трейс весит больше самого клика, поэтому включается вручную: Настройки → Валюты → Traffic log — сэмплирование, процент кликов 0–100. Включите на время разбора и верните в 0. На статистику кликов и конверсий это не влияет.
Клик не редиректит¶
Проверяйте по порядку:
- Кампания активна? На паузе или в архиве трекер отвечает
404, и клик никуда не записывается — если журнал пуст, а трафик идёт, причина обычно здесь или в опечатке в алиасе ссылки. Проверьте заодно авто-правила: возможно, кампанию остановило правило. - Режим ротации кампании не
disabled— в этом режиме кампания всегда отвечает204. - Есть подходящий поток? Клик, не попавший ни в один
regular, уходит в204, если нетdefault-потока. Заведитеdefaultбез фильтров. - У потока есть назначение? Активному потоку нужен лендинг, оффер или redirect URL.
- Журнал кликов, фильтр «исход» → «только отказы». Отказной клик виден с
пометкой
no_match(ни один поток не совпал) илиdo_nothing(клик намеренно остановлен потоком-заглушкой). - Traffic log — там видно, какое условие отсекло клик.
Клик уходит не в тот поток¶
Откройте Traffic log и прочитайте трейс. Типичные причины:
- у
forced-потока совпали фильтры — он выбирается вперёд ротации; - при режиме
without_rotationпобеждает первый подходящий поток по позиции — у перехватчика она меньше, чем у ожидаемого; - у кампании включено залипание посетителя: вернувшийся уходит туда же, куда
в первый раз — в трейсе это причина
binding_replay; - фильтр написан строкой, а значение приходит в другом регистре — используйте glob или regex.
Конверсии не приходят¶
| Что видно | Причина |
|---|---|
| Журнал постбэков пуст | партнёрка не отправляет: проверьте URL в её кабинете |
401 Incorrect postback key |
в адресе нет ключа воркспейса или ключ не тот. Старый адрес без ключа (/postback?…) отвечает именно так |
400 missing required parameter: subid/clickid |
в ссылке оффера нет макроса click_id |
400 unparseable payout |
сумма приходит как $10.50 или 10.50 USD |
503 conversion not stored, retry, а строки в журнале нет |
click_id не привязан ни к одной кампании: постбэк обогнал сам клик, клик слишком старый или click_id не от этой инсталляции. Ответ 5xx — намеренный: партнёрка повторит |
401 приходит и тогда, когда ключ верный, но click_id принадлежит чужому
воркспейсу: ответ намеренно неотличим, чтобы по нему нельзя было перебирать
чужие клики.
Ручная проверка — возьмите click_id из журнала кликов:
Готовый адрес с ключом лежит в Настройки → Интеграции → Postback URL
(входящий). Успех — 200 и ok в теле; подробности в
Приёме конверсий.
Источник не видит конверсии¶
- Заполнен ли S2S postback URL в кампании? Если нет — берётся шаблон источника трафика, а он тоже может быть пустым.
- Ограничен ли список статусов в кампании? Конверсия со статусом вне списка наружу не уходит.
- Что в журнале постбэков в направлении «исходящие» — какой код ответа?
- Не лежат ли доставки в DLQ (Настройки → DLQ)? Оттуда их можно переотправить.
- Конверсия пришла из браузера (
/action,/px.gif) без валидного токена клика? Такая конверсия записывается, но наружу — в S2S, вебхуки и CAPI — не уходит: см.MINIK_CONV_TOKEN_ENFORCEв переменных окружения. - Если используете CAPI, смотрите лог доставок интеграции, а не постбэков.
Гео определяется неверно¶
- Нужны базы MaxMind:
GEOIP_MMDBдля гео,GEOIP_ASN_MMDBдля детекта дата-центров,GEOIP_ISP_MMDBдля ISP и мобильных операторов (переменные). Без них гео будет пустым. Путь указывают внутри контейнера —/data/geoip/…. - Если домен за Cloudflare в proxy-режиме, вместо IP посетителя в отчёты
попадёт IP edge-узла CDN, пока не выставлен
TRUST_EDGE_HEADERS=1— только с ним трекер читаетCF-Connecting-IP(реальный IP и CDN). - Если перед трекером стоит свой балансировщик с публичным адресом, добавьте
его подсети в
TRUSTED_PROXIES— иначе клиентом будет считаться он. - В Click API IP нужно передавать явно, иначе посчитается IP вашего сервера.
Не выпускается SSL¶
- A-запись домена смотрит на IP этого сервера?
- Порты 80 и 443 открыты снаружи?
- Домен добавлен в разделе Домены? Сертификаты выпускаются только для известных трекеру доменов.
- Смотрите логи:
docker compose logs caddy.
Панель не открывается¶
Частая причина на маленьких серверах — нехватка памяти: ClickHouse прожорлив. Установщик создаёт swap как страховку, но лучше добавить RAM.
Если контейнер server перезапускается по кругу, прочитайте первые строки
его лога:
refusing to start: insecure built-in default crypto secret(s) in use— в.envостались дефолтныеJWT_SECRETилиTRACKER_SECRET_KEY, задайте случайные (секреты);- ошибки подключения к PostgreSQL или ClickHouse — смотрите их контейнеры.
Отдельный случай: контейнеры Up, панель открывается, но вместо интерфейса —
экран о лицензии. Клики, редиректы и постбэки при этом работают; что делать —
в установке.
Сброс пароля администратора¶
Если потеряны и пароль, и второй фактор — восстановление выполняется на сервере по SSH:
Команда печатает новый случайный пароль и снимает 2FA. Задать пароль
аргументом нельзя — он остался бы в истории команд и в списке процессов.
Трогается только PostgreSQL, поэтому панель может быть недоступна. Если сам
контейнер не запущен, exec не сработает — запустите разовый:
Раздел «Система»¶
Первое место, куда стоит смотреть, если «всё стало странно»:
- PostgreSQL, ClickHouse и Redis — отвечают ли и с какой задержкой;
- сервер — версия, аптайм, память процесса;
- системный лог — предупреждения и ошибки с фильтрами по уровню и
источнику: потерянные события очереди (
queue), проблемы с курсами валют (fx). Записи о лицензии тоже попадают в лог, но отдельного пункта в выпадающем списке источников для них нет — ищите их в общем перечне.
Метрики Prometheus — на /metrics. Наружу edge отдаёт на этот путь 404:
собирать их можно только изнутри, из compose-сети (например, контейнером
Prometheus или Grafana Agent рядом).
Клики теряются под нагрузкой¶
При штатной работе клики не теряются. Если счётчики расходятся:
- загляните в системный лог раздела Система, источник
queue: там видны потерянные события и пересозданные группы Redis; - в метриках смотрите
minik_eventq_lost_total,minik_chwriter_enqueue_dropped_total,minik_chwriter_flush_lost_total,minik_track_bg_dropped_total— при штатной работе они стоят на нуле; - посмотрите, хватает ли ClickHouse памяти и диска, а Redis — памяти
(
REDIS_MAXMEMORY, парой сEVENTQ_MAXLEN); - при нагрузочном тестировании выключайте пер-запросный HTTP-лог
(
HTTP_ACCESS_LOG=0) — он сам по себе стоит латентности.