feat(smoke): смоук спрашивает Kafka снаружи — по объявленному адресу
- Зачем:
- деление целей оставило дыру: про Airflow, Superset, Prometheus и Grafana
смоук стучится с машины в отображённый порт, а про Kafka после переезда
check_kafka_from_host знал только «контейнер здоров».
- вердикт этот приходит из healthcheck в compose.yaml, а тот спрашивает
брокер изнутри и по внутреннему слушателю: объявленный наружу адрес может
вести не туда, и Kafka всё равно останется здоровой.
- поломка популярная и показательная: клиент подключается, получает
метаданные и молча виснет на адресе, которого с его стороны нет. Менти
узнаёт, что у брокера два слушателя и зачем нужен advertised.listeners.
Генератор будет писать в Kafka именно с машины.
- Что:
- check_kafka_external_listener в make smoke: запрос списка топиков с машины
через отображённый порт, ответ приходит только если объявленный адрес ведёт
туда же. Комментарий у проверки объясняет, от чего она заведена.
- ожидание ответа ограничено 15 секундами при замеренных 2,6 — впятеро
больше, чем стоит зелёный прогон.
- README и карта проверок: новая проверка названа, доводы записаны, цена
смоука обновлена с 6 до 8 секунд.
- Проверка:
- make config-test, make smoke (20 проверок, 8 с), make check-clickhouse,
make check-services — зелёные.
- краснеет на своей поломке: брокеру объявлен адрес kafka-nowhere:29092 при
целом внутреннем слушателе — проверка состояния контейнера осталась
зелёной, смоук покраснел именно на этой строке. После проверки Kafka
возвращена в исходное состояние, посторонних контейнеров не осталось.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -38,7 +38,7 @@ ClickHouse: строки в `ods.event` считает сам сервер и о
|
||||
| `make typecheck` | Типы генератора сходятся (ty) | не нужен | 0,5 с |
|
||||
| `make test` | Генератор делает то, что обещает; схема события остаётся объявленным контрактом, а собранное из неё [описание выгрузки](../formats/clickstream-event.md) — свежим | не нужен | 40 с |
|
||||
| `make config-test` | Compose разбирается, Bash и Python синтаксически целы, в diff нет пробельных ошибок. О работоспособности не говорит ничего | не нужен | 1 с |
|
||||
| `make smoke` | Стенд **собран**: службы живы, порты отвечают, подключения настроены друг на друга. Вширь и по касательной к каждой службе. Единственная цель, которая здесь правда смоук | нужен | 6 с |
|
||||
| `make smoke` | Стенд **собран**: службы живы, порты отвечают, подключения настроены друг на друга. Вширь и по касательной к каждой службе. Единственная цель, которая здесь правда смоук | нужен | 8 с |
|
||||
| `make check-clickhouse` | Всё, что спрашивают **у ClickHouse** и он отвечает сам: макросы, шарды, реплики, путь в keeper, ключ шардирования, очередь распределённых DDL | нужен | 7 с |
|
||||
| `make check-services` | **Службы работают**: DAG запускается и доходит, топик создаётся и удаляется, Superset логинится и ходит в базу | нужен | 44 с |
|
||||
|
||||
@@ -117,7 +117,7 @@ ClickHouse отвечает сразу.
|
||||
контейнер Docker поднимает сам, и проверка здоровья об этом промолчит
|
||||
(ADR 0004). Стенд нагружает `check-services`, а увидеть последствия нужно и
|
||||
тому, кто гонял один смоук. Это единственная проверка, которая считается
|
||||
дважды: 19 у смоука плюс 7 у `check-services` — это 25 разных проверок.
|
||||
дважды: 20 у смоука плюс 7 у `check-services` — это 26 разных проверок.
|
||||
- **Зависимости машины считает только смоук.** «На машине есть Docker, curl и
|
||||
jq» — вопрос к машине, а не к службам, и на оси он стоит рядом с «стенд
|
||||
собран». Для `check-services` это условие запуска: без них он не начнёт
|
||||
@@ -131,19 +131,34 @@ ClickHouse отвечает сразу.
|
||||
|
||||
Замеры 6 августа 2026 года, стенд поднят заранее; время `make up` в цену целей
|
||||
не входит. Время взято по `time` и совпадает с тем, что цель печатает сама. Оно
|
||||
плавает от прогона к прогону: смоук дал 5 и 6 секунд, `check-services` — 43 и
|
||||
44. В таблице стоит большее из замеренных.
|
||||
плавает от прогона к прогону: смоук дал 8 секунд дважды (без проверки Kafka,
|
||||
до её появления, — 5 и 6), `check-services` — 43 и 44. В таблице стоит большее
|
||||
из замеренных.
|
||||
|
||||
До деления `scripts/stand-smoke.sh` шёл 48 секунд на 25 проверок, из них
|
||||
42 секунды съедали шесть: Kafka с машины, два запуска пробников Airflow и три
|
||||
проверки Superset. После деления те же 25 проверок разошлись по двум целям:
|
||||
19 в смоуке и 6 в `check-services`. Содержание ни одной из них не менялось.
|
||||
|
||||
Что обе разделённые цели умеют краснеть, проверено руками в тот же день: со
|
||||
снятым `prometheus` смоук дал три ошибки и ненулевой код возврата; с
|
||||
Двадцатая проверка смоука — единственная новая: Kafka спрашивают с машины через
|
||||
отображённый порт. Деление оставило дыру, которой раньше не было. Про Airflow,
|
||||
Superset, Prometheus и Grafana смоук стучится с машины в отображённый порт, а
|
||||
про Kafka после переезда знал только «контейнер здоров» — а это вердикт
|
||||
проверки состояния из `compose.yaml`, и та спрашивает брокер изнутри по
|
||||
внутреннему слушателю. Внешняя дверь оставалась непроверенной до
|
||||
`check-services` с его 44 секундами, хотя генератор пишет в Kafka именно с
|
||||
машины. Стоит проверка 2,6 секунды, и почти всё это — старт JVM в разовом
|
||||
контейнере; ожидание ответа ограничено пятнадцатью секундами, впятеро больше
|
||||
замеренного.
|
||||
|
||||
Что обе разделённые цели умеют краснеть, проверено руками в тот же день. Со
|
||||
снятым `prometheus` смоук дал три ошибки и ненулевой код возврата. С
|
||||
подменённым ожидаемым UUID подключения Superset так же покраснел
|
||||
`check-services`. Обе краснеют и когда на машине не хватает команды из списка
|
||||
зависимостей.
|
||||
`check-services`. Новую проверку Kafka проверили её собственной поломкой:
|
||||
брокеру объявили адрес `kafka-nowhere:29092`, оставив внутренний слушатель
|
||||
целым, — проверка состояния контейнера осталась зелёной, а смоук покраснел
|
||||
именно на этой строке. Краснеют они и когда на машине не хватает команды из
|
||||
списка зависимостей.
|
||||
|
||||
Семантика счётчиков Docker `OOMKilled` и `RestartCount`, на которой держится
|
||||
`check_containers_survived`, снята отдельными контейнерами и записана в
|
||||
|
||||
Reference in New Issue
Block a user