Все три Go-сервиса (ingest, device-control, rule-engine) отдают /metrics в формате Prometheus: счётчики MQTT/RabbitMQ/ClickHouse операций, гистограммы длительности батч-флашей и диспатча правил, переходы устройств online/offline. Добавлены сервисы prometheus и grafana в docker-compose с провижининг конфигом (datasource + два готовых дашборда: "Ingest & Telemetry" и "Automation & Devices").
43 lines
2.5 KiB
Markdown
43 lines
2.5 KiB
Markdown
# 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.
|
||
|
||
## Запуск
|
||
|
||
```bash
|
||
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` и т.д.
|