InfluxDB — база данных для временных рядов: показаний датчиков, метрик серверов, событий и результатов опросов. В отличие от универсальной реляционной базы, она оптимизирована под запись потока точек с метками времени и агрегаты по интервалам. В 2026 году актуальна линейка InfluxDB 3 с SQL и InfluxQL, а старые 2.x и 1.x всё ещё встречаются в эксплуатации. Разберём запуск, запись, схему, запросы и обслуживание без привязки к облаку.

Модель данных и версии

Точка состоит из измерения (таблицы), набора тегов, полей и метки времени. Теги — это атрибуты, по которым фильтруют и группируют: комната, устройство, регион. Поля — сами значения: температура, влажность, счётчик. В 2.x теги индексируются, в 3.x данные хранятся в Parquet и обрабатываются DataFusion, но принцип остаётся: теги должны быть низкой кардинальности, а уникальные идентификаторы и произвольный текст — полями.

  • 3.x Core — локальный сервер с HTTP API на порту 8181, SQL и InfluxQL, объектное хранилище (файл, S3, Azure, GCS).
  • 2.x — зрелая ветка с Flux, бакетами и задачами; подходит, если у вас уже написаны Flux-запросы.
  • 1.x — устаревшая схема с базами и retention policies; новые проекты на неё закладывать не стоит.

Важно: InfluxDB 3 не выполняет Flux. Если миграция с 2.x критична, проверьте, какие запросы и задачи придётся переписать на SQL или InfluxQL. Для новых домашних проектов проще сразу начать с 3 Core.

Запуск в Docker

Для домашнего сервера удобен Docker Compose: данные лежат в локальном каталоге, порт открыт только на loopback. Такой запуск не требует установки пакетов в систему.

services:
  influxdb3:
    image: influxdb:3-core
    container_name: influxdb3
    ports:
      - "127.0.0.1:8181:8181"
    command:
      - influxdb3
      - serve
      - --node-id=home
      - --object-store=file
      - --data-dir=/var/lib/influxdb3/data
    volumes:
      - ./influxdb3-data:/var/lib/influxdb3/data
    restart: unless-stopped

Запуск: docker compose up -d, логи: docker compose logs -f influxdb3. Если нужен доступ с других машин, не публикуйте порт в интернет напрямую: поставьте reverse proxy с TLS и авторизацией. До создания первого токена endpoint настройки открыт, поэтому начинайте с привязки к 127.0.0.1.

Токен и база

Создайте административный токен. Он выводится один раз — сохраните его в менеджере паролей. Для удобства можно определить alias, который выполняет CLI внутри контейнера.

alias idb='docker exec -i influxdb3 influxdb3'
idb create token --admin
export TOKEN='вставьте_токен'
idb create database --token "$TOKEN" --retention-period 30d sensors
idb show databases --token "$TOKEN"

Параметр --retention-period 30d означает, что данные старше 30 дней перестанут быть доступны для запросов. Для архива агрегатов лучше создать отдельную базу с большим сроком и писать туда свёртки, а не хранить сырые точки годами.

Запись данных

Формат line protocol прост: измерение, теги, поля, время. В примере — показания комнатного датчика. Время можно не указывать, тогда сервер подставит текущее; для повторной загрузки истории эпоху задают явно.

idb write --database sensors --token "$TOKEN" \
  'climate,room=kitchen,device=esp32-01 temp=21.4,hum=45.2 1767225600000000000
climate,room=office,device=esp32-02 temp=20.8,hum=41.0 1767225600000000000'

Дробные значения пишутся без кавычек, целые — с суффиксом i, строки — в кавычках. Точку с запятой в конце не ставят. Для пакетной загрузки используйте --file и файл с несколькими строками: так меньше накладных расходов, чем при вызове CLI на каждую точку.

Не делайте тегом серийный номер каждого устройства, идентификатор запроса или сообщение об ошибке. Кардинальность растёт, индексы и словари разбухают, а запросы замедляются. Лучше вынести такие данные в поля или отдельную таблицу событий.

Запросы на SQL

В 3 Core доступен SQL. Начните с последних значений и убедитесь, что данные вообще дошли.

idb query --database sensors --token "$TOKEN" \
  "SELECT room, temp, hum, time FROM climate
   ORDER BY time DESC LIMIT 5"

Дальше — агрегаты по часам. date_trunc округляет время, avg и max считают статистику, GROUP BY группирует по комнате и интервалу.

idb query --database sensors --token "$TOKEN" \
  "SELECT date_trunc('hour', time) AS bucket, room,
          avg(temp) AS temp_avg, max(hum) AS hum_max
   FROM climate
   WHERE time > now() - INTERVAL '24 hours'
   GROUP BY date_trunc('hour', time), room
   ORDER BY bucket DESC"

Для дашборда Grafana подключите источник InfluxDB и используйте SQL или InfluxQL в зависимости от плагина. Не пытайтесь строить JOIN между сырыми точками и справочником на каждом шаге: лучше денормализовать нужные атрибуты в теги или отдельную таблицу.

Обслуживание и диагностика

Проверяйте состояние сервера, место на диске и логи. Для файлового хранилища рост каталога данных — нормальный, но он должен соответствовать объёму и retention.

curl -sS http://127.0.0.1:8181/health
docker compose logs --tail=100 influxdb3
docker stats --no-stream influxdb3
du -sh influxdb3-data

Если запросы перестали возвращать старые точки, проверьте retention базы и системное время. Если запись отклоняется, смотрите ответ API: чаще всего это несовпадение типа поля (например, temp сначала был целым, потом стал дробным) или неверный токен. Тип поля в InfluxDB фиксируется при первом появлении, поэтому смешивать 21 и 21.4 в одном поле нельзя.

Резервная копия для файлового хранилища — это каталог данных вместе с метаданными. Останавливайте сервис или используйте штатный механизм backup, а затем проверяйте восстановление на тестовом экземпляре. Копировать только Parquet-файлы без каталога недостаточно.

Когда InfluxDB не нужна

Если у вас одна таблица на миллион строк и запросы вида «среднее за месяц», хватит PostgreSQL с индексом по времени. InfluxDB выигрывает на потоковой записи, retention и типовых агрегатах. Для логов лучше подходят Loki или Elasticsearch, для бизнес-данных — реляционная база. Не превращайте временной ряд в универсальное хранилище. Отдельно проверьте, что метки времени приходят в UTC и в одной точности: смесь секунд и наносекунд превращает полезные данные в мусор.

Итог

InfluxDB 3 Core — практичный выбор для метрик и датчиков: HTTP API, SQL, retention и хранение в локальных файлах или S3. Начните с Docker на loopback, создайте токен и базу с разумным сроком, пишите точки пакетно и держите теги низкой кардинальности. Проверяйте /health, логи и занятое место, а старые 2.x с Flux оставляйте только там, где они уже работают.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте