Начало работы с InfluxDB
20.01.2019 - vvuri - Reading time ~2 Minutes
InfluxData представляет собой набор приложений, написанных на языке Go:
- Telegraf - утилита для сбора измерений временных рядов.
- InfluxDB - кластеризуемая база данных, специально разработанная для хранения временных рядов.
- Chronograf - инструмент для визуализации временных рядов. Web приложение для настройки графиков и dashboard’ов.
- Kapacitor - утилита для обработки значений временных рядов и контроля отклонений значений.
Скачиваем последнюю версию InfluxDB с сайта, и устанавливаем.
$ wget https://s3.amazonaws.com/influxdb/influxdb_0.9.6.1_amd64.deb
$ sudo dpkg -i influxdb_0.9.6.1_amd64.deb
После установки запускаем сервис influxdb:
$ sudo service influxdb start
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]
influx
show databases
create database mydb
use mydbinsert cpu,host=serverA,region=Yekaterinburg value=0.35
insert cpu,host=serverA,region=Yekaterinburg value=0.26
Мы добавили 2 точки измерения с именем “cpu” со значениями “0.35” и “0.26” и с тегами “host” и “region”. insert cpu,host=serverB,region=Yekaterinburg value=0.89select * from cpu
HTTP
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu,host=serverA,region=Yekaterinburg value=0.11'
добавляем через HTTP API точки по пути /write. Имя базы данных передается URL параметром db, а строка данных передается в теле запроса.
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=select * from cpu where host='serverB'"
Получить данные
Теория:
Описание-influxdb, Описание-telegraf, Описание-chronograf
Данные в InfluxDB организованы в виде временного ряда, который содержит измеренные значения, например загрузка процессора - “cpu_load” или температура - “temperature”. Временной ряд содержит 0 или несколько точек, по одной на каждое значение измерения метрики. Каждая точка содержит время (timestamp), имя измерения или метрики (measurement), не менее одного поля (fields) в формате ключ-значения (например value=0.5), и 0 или несколько тегов (tags) в формате ключ-значение, которые содержат метаинформацию о собранном значении (host=“server01”, region=“Yekaterinburg”).
Если провести аналогию с SQL базой данных, то измерение (measurement) - это таблица, в которой первичным ключом является колонка со временем (timestamp). Теги (tags) - это индексированные колонки, а поля (fields) - это не индексированные колонки. Только в отличие от SQL базы данных в InfluxDB, можно сохранить миллионы измерений (measurement), вы не обязаны заранее определять схему, и null значения не будут храниться.
В общем виде формат добавления новой точки измерения в БД выглядит так:
``
<measurement>[,<;tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp]