Инструменты пользователя

Инструменты сайта


databases:influx

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
databases:influx [2022/10/21 04:39]
admin
databases:influx [2023/10/30 13:21] (текущий)
admin
Строка 3: Строка 3:
 База данных временных рядов (TSDB).\\ База данных временных рядов (TSDB).\\
  
 +<details>
 +<summary>:!: Теория </summary>
 Реляционные базы основаны на том что есть таблица, содержащая строки и столбцы. Таблицы обычно предназначены для определенных целей. Они эффективны, масштабируемые и т.д. Но ключевой аспект в том что они имеют **индекс**, который делает их медленными при росте данных.\\ Реляционные базы основаны на том что есть таблица, содержащая строки и столбцы. Таблицы обычно предназначены для определенных целей. Они эффективны, масштабируемые и т.д. Но ключевой аспект в том что они имеют **индекс**, который делает их медленными при росте данных.\\
 При добавлении новых записей, при наличии индексов, СУБД  будет многократно переиндексировать данные для быстрого доступа к ним => производительность со временем снижается.\\ При добавлении новых записей, при наличии индексов, СУБД  будет многократно переиндексировать данные для быстрого доступа к ним => производительность со временем снижается.\\
Строка 11: Строка 13:
  
 Присутствует встроенная т.н. **политика хранения данных**, которая позволяет очищать ненужные данные.\\ Присутствует встроенная т.н. **политика хранения данных**, которая позволяет очищать ненужные данные.\\
- 
 {{:databases:influxdb_1.png?direct&400 |}} {{:databases:influxdb_1.png?direct&400 |}}
 +</details>
  
  
  
 ===== Теги и поля ===== ===== Теги и поля =====
 +<details> 
 +<summary>:!: notes </summary>
 **Поля** представляют собой непосредственно данные таблицы, вокруг которых все происходит, а теги больше носят описательный характер\\ **Поля** представляют собой непосредственно данные таблицы, вокруг которых все происходит, а теги больше носят описательный характер\\
  
 **Теги** хранятся только в виде строк, **теги проиндексированы** поля нет, поэтому для поиска/фильтрации/группировок используются **только теги**\\ **Теги** хранятся только в виде строк, **теги проиндексированы** поля нет, поэтому для поиска/фильтрации/группировок используются **только теги**\\
 Учитывая индексацию, слишком уникальные данные не подойдут для тегов, **иначе сильно провиснет производительность**\\ Учитывая индексацию, слишком уникальные данные не подойдут для тегов, **иначе сильно провиснет производительность**\\
- 
  
 **Measurement** (измерение) контейнер тегов и полей и меткой времени, по сути можно провести параллель с таблицей\\ **Measurement** (измерение) контейнер тегов и полей и меткой времени, по сути можно провести параллель с таблицей\\
 "Серии" это вроде как записи\\ "Серии" это вроде как записи\\
- 
  
 **Series** (временная шкала данных) - это "**линии данных**", комбинация измерений и тегов. **Важная метрика**, считается на **всю базу целиком**, по умолчанию установлено ограничение в **миллион** [[https://archive.docs.influxdata.com/influxdb/v1.2/administration/config/#max-series-per-database-1000000|max-series-per-database]]\\ **Series** (временная шкала данных) - это "**линии данных**", комбинация измерений и тегов. **Важная метрика**, считается на **всю базу целиком**, по умолчанию установлено ограничение в **миллион** [[https://archive.docs.influxdata.com/influxdb/v1.2/administration/config/#max-series-per-database-1000000|max-series-per-database]]\\
  
 +**Point** - данные одной вставки (series + timestamp)\\
 +**Shard** - сегмент данных, относится **к физическому хранению в ОС** (TSM (Time Sort Merge Tree) Engine), рассчитывается из политики хранения, разбивается например по часу. Отвечает как за **хранение данных** в ОС так и за **операциями над ними**\\
 +Выше уровнем, разбиваются на группы\\
 +
 +**Хранение данных** (политика хранения, retention policy) задается к базе, есть умолчательная, можно указывать при каждой вставке данных (видимо персонально)\\
 +</details>
 <details> <details>
 <summary>:!: Нагрузка (кардинальность) серий </summary> <summary>:!: Нагрузка (кардинальность) серий </summary>
 **Серия** это комбинация измерений и тегов. Считается **на одну базу данных** рекомендуется не более 1 миллиона, регулируется переменной "max-series-per-database", как уже было сказано выше\\ **Серия** это комбинация измерений и тегов. Считается **на одну базу данных** рекомендуется не более 1 миллиона, регулируется переменной "max-series-per-database", как уже было сказано выше\\
- 
 Растет считай экспоненциально, например есть таблица с двумя тегами, в первом три разных значения, во втором два, **кол-во комбинаций 3 * 2 = 6**\\ Растет считай экспоненциально, например есть таблица с двумя тегами, в первом три разных значения, во втором два, **кол-во комбинаций 3 * 2 = 6**\\
  
 Важный момент, кол-во не просто перемножается а используется фактическое применение, например есть понятие **"зависимые теги"**, область действия которых ограничена другим (т.е. является алиасом) и по факту ко-во **комбинаций не увеличилось**\\ Важный момент, кол-во не просто перемножается а используется фактическое применение, например есть понятие **"зависимые теги"**, область действия которых ограничена другим (т.е. является алиасом) и по факту ко-во **комбинаций не увеличилось**\\
- 
 <code sql> <code sql>
   # Кардинальность текущей БД   # Кардинальность текущей БД
Строка 52: Строка 57:
   # хотя есть какая то корреляция с кол-вом таблиц   # хотя есть какая то корреляция с кол-вом таблиц
 SHOW MEASUREMENT CARDINALITY [on dbname] SHOW MEASUREMENT CARDINALITY [on dbname]
- 
 </code> </code>
 </details> </details>
- 
 {{:databases:inflx0.png?direct&400|}} {{:databases:inflx0.png?direct&400|}}
 {{:databases:inflx1.png?direct&400|}} {{:databases:inflx1.png?direct&400|}}
  
  
-**Point** - данные одной вставки (series + timestamp)\\ 
  
-**Shard** - сегмент данных, относится **к физическому хранению в ОС** (TSM (Time Sort Merge Tree) Engine), рассчитывается из политики хранения, разбивается например по часу. Отвечает как за **хранение данных** в ОС так и за **операциями над ними**\\ +===== Использование =====
-Выше уровнем, разбиваются на группы\\+
  
-**Хранение данных** (политика хранения, retention policy) задается к базе, есть умолчательная, можно указывать при каждой вставке данных (видимо персонально)\\+<details> 
 +<summary>:!: Установка</summary>
  
 +**Подготовка сервера**\\
 +Для БД временных рядов важна синхронизация времени, настраиваем временную зону и ставим службу синхронизации времени\\
 +*В каталоге /usr/share/zoneinfo список всех возможных вариантов временных зон
 +<code bash>
 +\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
 +apt install chrony && sudo systemctl enable chrony
 +</code>
  
 +<code bash>
 +   # Добавляем репозиторий
 +cat <<EOF | sudo tee /etc/yum.repos.d/influxdata.repo
 +[influxdata]
 +name = InfluxData Repository - Stable
 +baseurl = https://repos.influxdata.com/stable/\$basearch/main
 +enabled = 1
 +gpgcheck = 1
 +gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
 +EOF
 +
 +dnf update
 +dnf install influxdb
 +systemctl start/enable
 +open firewall
 +</code>
 +
 +По умолчанию вход открытый, включить надо в конфиге, в блоке "http", параметр - **auth-enabled = true # Set to true**, но перед этим **создайте учетку**\\
 +
 +<code bash>
 +influx
 +> CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES
 +> SHOW USERS
 +
 +> GRANT [READ,WRITE,ALL] ON "<database_name>" TO "<username>"
 +> REVOKE [READ,WRITE,ALL] ON "<database_name>" FROM "<username>"
 +> GRANT ALL PRIVILEGES TO "<username>"
 +> REVOKE ALL PRIVILEGES FROM "<username>"
 +> SHOW GRANTS FOR "<user_name>"
 +> SET PASSWORD FOR "<username>" = '<password>'
 +> DROP USER "<username>"
 +
 +> CREATE DATABASE
 +> DROP DATABASE
 +> DROP SERIES
 +> DROP MEASUREMENT
 +> CREATE RETENTION POLICY
 +> ALTER RETENTION POLICY
 +> DROP RETENTION POLICY
 +> CREATE CONTINUOUS QUERY
 +> DROP CONTINUOUS QUERY
 +</code>
 +
 +</details>
  
-===== Использование ===== 
  
 **Авторизация**\\ **Авторизация**\\
 +Сразу после установки авторизация отключена, т.к. нет пользователей, и по умолчанию "у всех все права"\\
 +Создаем админа "**CREATE USER admin WITH PASSWORD '<password>' WITH ALL PRIVILEGES**" и алга\\
 <code bash> <code bash>
   # Авторизация агрументами   # Авторизация агрументами
 influx -username "my_username" -password "my_password" influx -username "my_username" -password "my_password"
 + 
 +  # Права
 +GRANT [READ,WRITE,ALL] ON <database_name> TO <username>
 +
 +  # Из оболочки (отключаем историю bash чтобы пароль не сохранялся)
 +set +o history
 +influx -execute 'show databases;' -username 'admin' -password 'wswsws'
 +set -o history
  
   # Интерактивный режим   # Интерактивный режим
Строка 81: Строка 143:
 InfluxDB shell 1.8.10 InfluxDB shell 1.8.10
 > auth > auth
 +
 +# Некоторые команды
 +SET PASSWORD FOR 'user' = 'pass';
 +show users;
 +show grants for 'user';
 +create user username with password 'pass';
 +grant READ on dbname to username;
 </code> </code>
- 
- 
  
 Как такового создания таблиц нет, создается при записи в нее\\ Как такового создания таблиц нет, создается при записи в нее\\
Строка 95: Строка 162:
 show measurements show measurements
  
-  # Политика хранения+  # Запись данных в таблицу (имя таблицы, два тега, поле, последнее - временная метка в ms, указывать не обязательно) 
 +insert cpu_usage,host=server01,region=us-west value=0.64 1434055562000000000 
 +</code> 
 + 
 +<details> 
 +<summary>:!: Политика хранения </summary> 
 + 
 +<code bash>
 show retention policies; show retention policies;
  
Строка 102: Строка 176:
 CREATE RETENTION POLICY "one_day_only" ON "water_database" DURATION 1d REPLICATION 1 SHARD DURATION 1h DEFAULT  CREATE RETENTION POLICY "one_day_only" ON "water_database" DURATION 1d REPLICATION 1 SHARD DURATION 1h DEFAULT 
  
-  # Запись данных в таблицу (имя таблицы, два тега, поле, последнее - временная метка в ms, указывать не обязательно) +  # Чистка старых данных может длится несколько часов 
-insert cpu_usage,host=server01,region=us-west value=0.64 1434055562000000000+ALTER RETENTION POLICY "autogen" ON <dbname> DURATION 75d; 
 </code> </code>
 +</details>
  
  
Строка 112: Строка 188:
   # Еще вроде как такой вариант есть, но хз   # Еще вроде как такой вариант есть, но хз
 influx_inspect report-disk -detailed /var/lib/influxdb/data/  influx_inspect report-disk -detailed /var/lib/influxdb/data/ 
 +</code>
  
-  #  
  
  
 +===== Политика хранения =====
 +Retention policies. При записи данных, можно указывать конкретную политику хранения, либо используется умолчательная.\\
 +Похоже что это еще и какие то измерения данных, возможно, т.к. обращение из одного в другое в continuos query не удалось\\
 +
 +<code sql>
 +show retention policies;
 +
 +  # Аргумент "Default" делает ее по умолчанию
 +CREATE RETENTION POLICY "one_day_only" ON "NOAA_water_database" DURATION 23h60m REPLICATION 1 DEFAULT;
 +
 +ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 2h DEFAULT;
 +DROP RETENTION POLICY "15_day" ON <dn_name>
 </code> </code>
  
  
  
-==== ====+===== Хранение индексов ===== 
 +Схема хранения индексов "inmem"/"TSI", первая по умолчанию, в памяти, вторая с задействованием диска, для больших кардинальностей\\ 
 +Данные хранятся в "../data/", файлы "*.tsm" можно удалять, через время появляются снова\\ 
 + 
 +Содержимое\\ 
 +{{:databases:files.jpg?direct&400|}} 
 + 
 +Для перехода нужно остановить инфлюкс, сгенерировать файлы индекса, изменить пар-р в конфиге, запустить инфлюкс. [[https://community.influxdata.com/t/correct-procedure-to-transition-to-tsi1/12213|Форум]]\\
  
  
 <code bash> <code bash>
 +  # Команда для генерации tsi индексов
 +sudo -u influxdb influx_inspect buildtsi -datadir /var/lib/influxdb/data/ -waldir /var/lib/influxdb/wal/ -database dbname
 +
 +  # Должно быть удаление файлов tsm, но не работает сцуко
 +sudo -u influxdb influx_inspect deletetsm -sanitize ./data/*/autogen/*/*.tsm
 </code> </code>
  
  
 +
 +===== Continuous query =====
 +Cмысл схож с вложенными запросами, но промежуточные метрики сохраняются и хранятся в таблице, отдельным процессом, постоянно, а не получаются "на лету" как можно было бы сделать в реляционной базе.\\
 +
 +
 +<code sql>
 +SHOW CONTINUOUS QUERIES
 +
 +CREATE CONTINUOUS QUERY <Имя объекта> ON <Имя БД> BEGIN <sql запрос> END
 +
 +DROP CONTINUOUS QUERY <cq_name> ON <database_name>
 +</code>
 +
 +
 +<details>
 +<summary>:!: Примеры</summary>
 +<code sql>
 +CREATE CONTINUOUS QUERY <Имя объекта> ON mgaimport
 +BEGIN
 +    SELECT sum(counter) AS CountExceptRecords INTO <Имя БД>.autogen.<Имя новой таблицы> FROM mgaimport.autogen.<Существующая БД> WHERE resolution = 'exception' GROUP BY time(1m), db_name, log_type
 +END
 +
 +CREATE CONTINUOUS QUERY BalancerRequestAccount_agr ON metrics
 +BEGIN
 +    SELECT count("value") AS CountRequests INTO metrics."15_day".BalancerRequestAccount_agr2 FROM metrics.autogen.BalancerRequestAccount GROUP BY TIME(5m)
 +END
 +</code>
 +
 +
 +<code sql>
 +CREATE CONTINUOUS QUERY <Имя объекта> ON mgaimport
 +BEGIN
 +    SELECT sum(counter) AS CountExceptRecords INTO <Имя БД>.autogen.<Имя новой таблицы> FROM mgaimport.autogen.<Существующая БД> WHERE resolution = 'exception' GROUP BY time(1m), db_name, log_type
 +END
 +
 +/*Еще пример агрегации*/
 +CREATE CONTINUOUS QUERY BalancerRequestAccount_agr ON metrics
 +BEGIN
 +SELECT sum("counter")
 +    INTO myDB.autogen.myTable_test_1m
 +FROM "myTable"
 +WHERE  time > now() - 5m 
 +   AND "errorType" =~ /^(1008|1042)$/
 +GROUP BY time(1m), field1, field2
 +END
 +</code>
 +</details>
  
  
-==== ==== 
  
 +===== Общее =====
  
 +Проверку связи с сервером БД можно сделать так:\\
 <code bash> <code bash>
 +curl -v http://10.200.192.22:8086/ping
 </code> </code>
  
databases/influx.1666327156.txt.gz · Последнее изменение: 2022/10/21 04:39 — admin