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/