Skip to content

InfluxDB

andyceo edited this page Nov 19, 2019 · 13 revisions

Документация относится к open-source варианту InfluxDB (InfluxDB OSS). В примерах везде используется докер-образ influxdb:1.7-alpine, есди нет - не успел обновить.

Устанавливаем InfluxDB на сервер в Docker-контейнере

Мы будем разворачивать без поддержки SSL, без поддержки кластеров (кластеры остались только в InfluxDB Enterprise), но с заданным админ-пользователем INFLUXDB_ADMIN_USER с паролем INFLUXDB_ADMIN_PASSWORD, включив обязательную идентификацию пользователей INFLUXDB_HTTP_AUTH_ENABLED, создав базу данных INFLUXDB_DB при старте, из официального докер-образа influxdb:

sudo docker run -d --name influxdb \
    --restart always \
    -p 8086:8086 \
    -v /data/influxdb:/data \
    -e INFLUXDB_ADMIN_USER="root" \
    -e INFLUXDB_ADMIN_PASSWORD="123qwe" \
    -e INFLUXDB_DB="testdb" \
    influxdb:1.7-alpine

Список доступных переменных окружения можно посмотреть тут.

Вот пример файла init_script.influxql, что нужен для создания одной базы данных для grafana:

mcedit /tmp/init_script.influxql

CREATE DATABASE grafana
CREATE RETENTION POLICY "default" ON "grafana" DURATION 72h REPLICATION 1 DEFAULT
CREATE USER grafana WITH PASSWORD '123qwe'
GRANT READ ON grafana TO grafana

Если была передана переменная окружения PRE_CREATE_DB, то для каждой БД будет создан одноименный пользователь, поэтому нам нужно будет лишь сменить пароль и задать Retention Policy. Для этого, сначала подключимся к командной строке InfluxDB:

sudo docker exec -ti influxdb-container-name /usr/bin/influx

А затем в консоли выполним следующие команды:

ALTER RETENTION POLICY "default" ON "grafana" DURATION 72h REPLICATION 1 DEFAULT
CREATE USER grafana WITH PASSWORD '123qwe'
GRANT READ ON grafana TO grafana
SET PASSWORD FOR root = '123qwe'

Либо выполним эти команды одна за одной, через утилиту influxdb:

sudo docker exec -ti influxdb-container-name /usr/bin/influx -host=127.0.0.1 -port=8086 -username=root -password="123qwe" -execute="ALTER RETENTION POLICY "default" ON "grafana" DURATION 72h REPLICATION 1 DEFAULT; CREATE USER grafana WITH PASSWORD '123qwe'; GRANT READ ON grafana TO grafana; SET PASSWORD FOR root = '123qwe'"

Также, можно установить с помощью Ansible-роли andyceo.docker: Ansible Docker config, Proxy Nginx virtual host configuration.

Интерфейсы на портах

  • 8086: HTTP API. Основной порт InfluxDB. Можно включить на нем HTTPS, указать сертификат.

См. Ports

Клиент командной строки InfluxDB

sudo docker exec -ti <INFLUXDB_CONTAINER_NAME_OR_ID> influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
>

А лучше использовать sh -il для входа в контейнер и затем в контейнере набирать команду influx с заданными параметрами доступа:

sudo docker exec -ti <INFLUXDB_CONTAINER_NAME_OR_ID> sh -il
# influx -username=root -password="secret" -database=your_db

Или:

sudo docker run --rm --net docknet -it influxdb:1.7-alpine influx -host influxdb

Можно взять файл, который будет содержать дефолтные настройки, объединенные с текущими прочитанными из конфигурационного файла настройками:

sudo docker exec -ti influxdb influxd config

Обычно эту команду делают, когда обновляют InfluxDB. Полученный файл можно сохранить в системе контроля версий.

Дисковая утилита influx_inspect

Позволяет:

  • посмотреть подробную информацию о дисковых шардах
  • экспортирует данные из шарды в формат line protocol, который затем можно вставить обратно в БД
  • преобразовывает TSM (in-memory) шарды в TSI (disk-based) индексированные шарды

Подробнее: Influx Inspect disk utility, а также раздел Обновление с InfluxDB 1.4 до 1.6 с включенной TSI этой страницы.

Получить конфиг по умолчанию

sudo docker container run --rm influxdb:alpine influxd config > /tmp/influxdb.conf

Затем можно сравнить с вашим конфигом, используя diff или meld.

Краткие полезные команды языка InfluxQL (совместно с curl)

Управление базами данных

  • Показать базы данных: SHOW DATABASES

  • Использовать базу данных mydb в будущих запросах: USE mydb

  • Создать базу данных mydb: CREATE DATABASE mydb

  • Создание базы данных из командной строки через curl, с аутентификацией:

      curl -i -X POST 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode 'q=CREATE DATABASE mydb'
    
  • Удаление базы данных:

      curl -i -X POST 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode 'q=DROP DATABASE mydb'
    
  • Запрос данных из базы данных:

      curl -i -GET 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode "db=DATABASE" --data-urlencode "q=SELECT * FROM MEASUREMENT LIMIT 2"
    

Управление политиками удержания (RETENTION POLICY)

Показать все политики: SHOW RETENTION POLICIES

Общий синтаксис: CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

Подробнее: Retention Policy Management

Управление пользователями

  • Показать всех пользователей и их привилегии: SHOW USERS
  • Создать глобального пользователя-админа: CREATE USER <username> WITH PASSWORD 'secret_password' WITH ALL PRIVILEGES
  • Создать обычного пользователя: CREATE USER <username> WITH PASSWORD '<password>'
  • Повысить/понизить обычного пользователя до глобавльного админа: [GRANT | REVOKE] ALL PRIVILEGES TO <username>
  • Дать/отобрать права READ, WRITE или ALL пользователю <username> на базу <database_name>: [GRANT | REVOKE] [READ,WRITE,ALL] ON <database_name> TO <username>
  • Сменить пароль пользователю: SET PASSWORD FOR <username> = '<password>'
  • Удалить пользователя: DROP USER <username>

Подробнее: Authentication and Authorization: User Management Commands

Создание обычного пользователя, из командной строки через curl, с аутентификацией:

curl -i -X POST 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode "q=CREATE USER <username> WITH PASSWORD '<password>'"

Дадим этому пользователю полный доступ на базу данных mydb:

curl -i -X POST 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode "q=GRANT ALL ON mydb TO <username>"

Примеры

  • Показать измерения в базе данных telegraf, используя curl:

      curl -GET 'http://influxdb:8086/query?pretty=true' -u '<username>:<password>' --data-urlencode "db=telegraf" --data-urlencode "q=SHOW MEASUREMENTS"
    
  • Показать данные измерения hddtemp в базе данных telegraf:

      curl -GET 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode "db=telegraf" --data-urlencode "q=SELECT \"temperature\" FROM \"hddtemp\""
    
  • Создадим базу данных, пользователя и дадим пользователю все права на эту БД с помощью curl, с аутентификацией:

      curl -i -X POST 'http://influxdb:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode "q=CREATE DATABASE mydb; CREATE USER <username> WITH PASSWORD <password>; GRANT ALL ON mydb TO <username>;"
    
  • Удалить точки из измерения (measurement) с именем metrics с заданным временем записи 874049400000000000 (что представляет собой таймстэмп с разрешением до миллиардной доли, т.е. на самом деле это 874049400 = 09/12/1997 @ 7:30am (UTC) умноженное на 1000000000) (может выполняться долго!):

      curl -GET 'http://localhost:8086/query?pretty=true' -u 'USERNAME:PASSWORD' --data-urlencode "db=telegraf" --data-urlencode "q=DELETE FROM metrics WHERE time=874049400000000000"
    

Пример Ansible-команд для запуска InfluxDB

- name: Run container with InfluxDB
  docker:
    name: influxdb
    image: tutum/influxdb:0.10
    state: started
    detach: yes
    restart_policy: always
    ports:
      - 8083:8083
      - 8086:8086
    env:
      ADMIN_USER: "root"
      INFLUXDB_INIT_PWD: "123qwe"
      PRE_CREATE_DB: "grafana;test"
    volumes:
      - /data/influxdb:/data

- name: Wait until InfluxDB port is available
  wait_for:
    port=8086
    delay=1
    timeout=20

- name: Execute some queries to the InfluxDB
  shell: docker exec -ti influxdb /usr/bin/influx -host=127.0.0.1 -port=8086 -username="{{ influxdb.admin_user }}" -password="{{ influxdb.init_pwd }}" -execute="ALTER RETENTION POLICY "default" ON "grafana" DURATION 72h REPLICATION 1 DEFAULT; CREATE USER grafana WITH PASSWORD '{{ influxdb.users.grafana }}'; GRANT READ ON grafana TO grafana"

Обновление с InfluxDB 1.4 до 1.6 с включенной TSI с помощью Docker

Сначала, нужно выключить InfluxDB. Если она работает у вас в качестве сервиса Docker Swarm:

sudo docker service update --replicas=0 databases_influxdb

Запустим контейнер с InfluxDB над над данными (предположим они в папке /data/influxdb хост-системы):

sudo docker run --rm -ti -v /data/influxdb:/var/lib/influxdb:rw influxdb:1.6-alpine sh -il

В открывшейся командной строке (которая запущена внутри контейнера с InfluxDB) запустить:

influx_inspect buildtsi -datadir /var/lib/influxdb/data -waldir /var/lib/influxdb/wal

Дождаться окончания операции.

Поменять в конфиге в секции[data]:

index-version = "inmem"

на

index-version = "tsi1"

Запустить InfluxDB.

Отсюда: https://docs.influxdata.com/influxdb/v1.6/administration/upgrading/

Ссылки

Sidebar is under construction

Clone this wiki locally