Files
home_automatization/services/ingest-service/README.md
cacto 81040eec62 Добавлены метрики Prometheus и дашборды Grafana (этап 2.5)
Все три Go-сервиса (ingest, device-control, rule-engine) отдают
/metrics в формате Prometheus: счётчики MQTT/RabbitMQ/ClickHouse
операций, гистограммы длительности батч-флашей и диспатча правил,
переходы устройств online/offline. Добавлены сервисы prometheus и
grafana в docker-compose с провижининг конфигом (datasource +
два готовых дашборда: "Ingest & Telemetry" и "Automation & Devices").
2026-08-11 21:58:59 +05:00

2.5 KiB
Raw Permalink Blame History

ingest-service (Go)

Статус: реализован (MVP).

Зона ответственности:

  • Подписка на MQTT-топики devices/{device_id}/telemetry.
  • Валидация/парсинг payload (device_id, sensor_type, value, timestamp).
  • Батч-запись сырых показаний в таблицу ClickHouse telemetry.
  • Публикация события «новое показание» в RabbitMQ для rule-engine-service.

Не входит в зону ответственности: интерпретация того, что означает показание датчика (пороги, действия) — это задача rule-engine-service. Этот сервис только принимает и сохраняет данные.

Про zone_id: payload телеметрии несёт zone_id напрямую (публикующее устройство/эмулятор само знает свою зону), а не ingest-service ищет его в PostgreSQL. Это удерживает зависимости ingest-service в рамках MQTT/ClickHouse/RabbitMQ, как и на диаграмме архитектуры в корневом README. Для реального парка устройств, которые не будут знать свою зону, понадобится lookup через реестр устройств (с кэшированием, как rule-engine кэширует правила) — это естественное развитие, пока не реализовано.

Метрики

GET /metrics (порт INGEST_METRICS_PORT, по умолчанию 9101) — формат Prometheus. Счётчики принятых/невалидных/отброшенных (backlog переполнен) MQTT-сообщений, флашей батча в ClickHouse (с latency и размером батча), публикаций в RabbitMQ.

Запуск

cd services/ingest-service
go test ./...
go build ./cmd/ingest-service

Конфигурация читается из переменных окружения (см. секцию ingest-service в корневом .env.example). Через docker compose up ingest-service сервис обращается напрямую к контейнерам mosquitto/clickhouse/rabbitmq; для локального запуска через go run выставь MQTT_HOST=localhost, CLICKHOUSE_HOST=localhost и т.д.