InfluxDB - andyceo/documentation GitHub Wiki
Документация относится к open-source варианту InfluxDB (InfluxDB OSS). В примерах везде используется докер-образ influxdb:1.7-alpine
, есди нет - не успел обновить.
Мы будем разворачивать без поддержки 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
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. Полученный файл можно сохранить в системе контроля версий.
Позволяет:
- посмотреть подробную информацию о дисковых шардах
- экспортирует данные из шарды в формат 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
.
-
Показать базы данных:
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"
Показать все политики: 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"
- 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. Если она работает у вас в качестве сервиса 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/