metric_temp
Описание
Языки
- HTML38%
- PHP35,5%
- JavaScript23,3%
- Dockerfile3,2%
metric_temp (metr_ch)
Небольшой каркас для сбора числовых метрик в ClickHouse и просмотра их на графике. Запись данных — отдельный REST API на PHP 8, построение графиков — отдельный сервис charts (Node.js + Chart.js).
Зачем это
- Принимать точки вида
и складывать их в ClickHouse.{ "name": "water.temperature", "value": 55 } - Смотреть ряды по имени метрики в браузере.
Состав
| Сервис | Технология | Роль |
|---|---|---|
| ClickHouse 24 | Хранение временных рядов |
| PHP 8.3 | → INSERT в таблицу |
| Node 20 | HTTP API для выборок + страница с графиком |
Схема данных (создаётся при первом старте из ):
- БД: metrics_db
- Таблица:
— колонкиmetrics(время),ts(строка),name(float)value
Быстрый старт
Откройте в браузере: http://localhost:8081/ — список метрик и график по выбранной.
API записи (PHP)
POST
Тело:
Имя метрики: только латиница, цифры, точка, подчёркивание и дефис ().
Успех: . Ошибки валидации — , проблемы с ClickHouse — .
Проверка живости: GET .
Сервис графиков (charts)
- GET
— JSON-массив имён метрик./api/metrics - GET
— точки/api/series?name=water.temperature(опционально{ t_ms, value }, максимум 50000).&limit=5000
Статика и график: GET на порту 8081.
ClickHouse с хоста
Порты проброшены: 8123 (HTTP), 9000 (нативный клиент).
Учётные данные по умолчанию задаются в (якорь ):
- пользователь: default
- пароль: metric_dev_pass
Пример запроса:
Важно про пароль и том
Пароль задаётся переменными окружения при первой инициализации данных. Если вы уже поднимали стек со старым томом , а потом сменили пароль в compose, возможен рассинхрон. Тогда один раз сбросьте данные ClickHouse:
Переменные окружения (api / charts)
| Переменная | Назначение |
|---|---|
| Базовый URL HTTP, например |
| Имя БД () |
| Пользователь ClickHouse |
| Пароль (пусто — без Basic Auth, только для локальных экспериментов) |
Локальная разработка charts
( ожидает доступный ClickHouse; порт приложения по умолчанию 3000.)
Структура репозитория
api/public/ # PHP: index.php, router.php
charts/ # Node: server.mjs, public/index.html
clickhouse/init/ # SQL при первом запуске контейнера
docker-compose.yml