InfluxDB
InfluxDB — база данных временных рядов для метрик, телеметрии и событий IoT, оптимизированная под запись потока точек с меткой времени.
Что такое InfluxDB
InfluxDB — база данных временных рядов (TSDB, time-series database). Специализируется на данных, у которых есть метка времени и которые приходят непрерывным потоком: метрики серверов, показания датчиков, курсы, телеметрия приложений.
Временной ряд отличается от обычных данных характером нагрузки: пишется очень много, почти всегда «в конец» (новые точки с текущим временем), почти никогда не обновляется, а читается диапазонами («средняя загрузка CPU за последний час с шагом в минуту») и со временем теряет ценность. Универсальная СУБД на таком потоке ведёт себя плохо: таблица metrics в PostgreSQL на десятках тысяч вставок в секунду распухает, а старые данные приходится чистить вручную. InfluxDB под это и сделана — сжимает однородные ряды в разы и удаляет устаревшее сама.
Модель данных
measurement,tag=value,tag=value field=value,field=value timestamp
| Элемент | Что это | Индексируется |
|---|---|---|
| Measurement | Аналог таблицы: cpu, temperature |
— |
| Tag | Метаданные-строки: host, region |
Да |
| Field | Само значение: число, строка, bool | Нет |
| Timestamp | Метка времени | Да |
Различие тегов и полей — ключевое и определяет всё остальное. По тегам фильтруют и группируют, они проиндексированы. Поля — то, что измеряют; фильтровать по ним можно, но это полный перебор.
Пример в line protocol — родном формате записи:
cpu,host=web-01,region=ru-msk usage_idle=87.3,usage_user=9.1 1752739200000000000
temperature,sensor=s1,room=server field_value=23.5 1752739200000000000
Запись и чтение
# Записать точку через HTTP API (InfluxDB 2.x)
curl -X POST "http://localhost:8086/api/v2/write?org=my-org&bucket=metrics&precision=s" \
-H "Authorization: Token $INFLUX_TOKEN" \
--data-raw "cpu,host=web-01 usage_idle=87.3"
Языков запросов исторически два. InfluxQL — SQL-подобный, привычный:
SELECT mean("usage_idle") FROM "cpu"
WHERE "host" = 'web-01' AND time > now() - 1h
GROUP BY time(1m)
Flux — функциональный язык, появившийся во второй версии:
from(bucket: "metrics")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "cpu" and r.host == "web-01")
|> aggregateWindow(every: 1m, fn: mean)
Разработчики Flux впоследствии сместили приоритет обратно в сторону SQL и InfluxQL, так что при выборе версии стоит смотреть на актуальный статус языков в документации проекта — здесь у InfluxDB заметные метания между мажорными версиями.
Главная ловушка: кардинальность
Самая частая авария на InfluxDB — высокая кардинальность серий. Число серий — это произведение количества уникальных значений всех тегов. Каждая серия индексируется в памяти, и рост произведения съедает RAM до отказа сервиса.
# Хорошо: host (100 значений) × region (5) = 500 серий
cpu,host=web-01,region=ru-msk usage_idle=87.3
# Катастрофа: request_id уникален для каждого запроса
api,host=web-01,request_id=a3f9e2b1 duration=120
# → миллионы серий, база ложится
Правило: в теги идёт только то, у чего ограниченный набор значений. Уникальные идентификаторы (request_id, user_id, trace_id) — в поля, а не в теги. Если хочется хранить каждое событие с уникальным ID, вам нужна не TSDB, а ClickHouse или система трейсинга.
Retention и downsampling
Данные в InfluxDB устаревают, и хранилище это учитывает штатно. Retention policy задаёт срок жизни: старше указанного — удаляется автоматически, без cron и DELETE.
Отсюда стандартная схема: сырые данные с секундной детализацией хранят неделю, а фоновая задача (continuous query / task) агрегирует их до поминутных и пятиминутных средних и складывает в бакет с retention на год. Год истории занимает при этом немного места, потому что детализация уже не нужна.
Экосистема и альтернативы
Классический стек — TICK: Telegraf (сбор метрик), InfluxDB (хранение), Chronograf (интерфейс), Kapacitor (обработка и алерты). На практике визуализацию почти всегда берут из Grafana, которая работает с InfluxDB из коробки.
Telegraf — сильная часть: агент с сотнями плагинов, собирающий метрики ОС, баз данных, Docker, Nginx и принимающий данные по MQTT от устройств IoT.
| InfluxDB | Prometheus | |
|---|---|---|
| Модель сбора | Push (агент шлёт) | Pull (сервер опрашивает) |
| Профиль | Метрики, IoT, события | Мониторинг инфраструктуры |
| Долгое хранение | Штатное | Нужен внешний бэкенд |
| Язык | InfluxQL / Flux | PromQL |
Грубое разделение: мониторинг серверов и Kubernetes — обычно Prometheus, датчики и телеметрия с долгой историей — InfluxDB. Другие TSDB того же класса: TimescaleDB (расширение PostgreSQL, если хочется остаться в SQL), VictoriaMetrics, Graphite.
Связанные термины
- СУБД — класс, к которому относится InfluxDB
- Реляционные и NoSQL БД — где среди них TSDB
- ClickHouse — альтернатива при высокой кардинальности
- Prometheus — конкурент в мониторинге
- IoT — главный источник временных рядов
- Уведомления и алерты — что строят поверх метрик
Готовы запустить GPU-задачу?
Запустить GPU-сервер