Учебный проект: простой IoT-поток с контроллером (Flask), rule engine, симулятором данных, брокером RabbitMQ, хранилищем сообщений в MongoDB и алёртов в Postgres, с метриками (Prometheus/Grafana) и логами (ELK). UI — React/Vite.
- IoT Controller (Flask): принимает HTTP POST
/ingest, валидирует JSON, пишет в MongoDBiot.messages, публикует в RabbitMQ exchangeiot.msg. - Rule Engine: читает очередь
iot.rules, проверяет мгновенные и длящиеся правила (10 подряд пакетов), сохраняет алёрты в Postgresalerts. - Data Simulator: генерирует 15 устройств, 1 msg/сек/устройство, шлёт в контроллер.
- MongoDB: хранилище пакетов.
- RabbitMQ: обмен
iot.msg, очередьiot.rules. - Postgres: таблица
alerts(jsonb payload, индексы поdevice_id,triggered_at). - Metrics: Prometheus + exporters (Python, rabbit/mongo/postgres); Grafana дашборды.
- Logs: структурированные JSON → Filebeat/Fluent Bit → Elasticsearch; Kibana для просмотра.
- UI: React/Vite панель последних пакетов, алёртов, статуса; Compass для Mongo просмотра.
- Поток: Simulator → Controller → Mongo + RabbitMQ → Rule Engine → Postgres (алёрты).
- Схема сообщения:
device_id(str),ts(ISO8601),field_a(float),field_b(float),battery(0–100),seq(int),meta(obj, опц.). - Правила: мгновенное
field_a > 5дляdevice_id=42; длящееся — то же условие 10 подряд пакетов. - Подробности и диаграмма —
docs/architecture.md.
