Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

Timescale - БД временных рядов с открытым исходным кодом, основанная на Postgresql. В отличие от InfluxDB, не хранит все индексы в оперативной памяти, поэтому может быть использована для хранения больших объемов метрик. Кроме того, в этом случае используется одна и та же БД Postgresql для хранения метрик, статистики потоков и настроек сбора данных.

Установка и настройка TimescaleDB

В процессе настройки должна быть установлена определенная версия Postgresql (9.6, 10 или 11). Если на сервере установлена более ранняя версия Postgresql (например, из стандартных репозиториев Centos 7 устанавливается Posgresql 9.2), необходимо ее удалить, включая исполняемые файлы в /usr/bin.

Для того, чтобы настроить Postgresql 9.6+TimescaleDB на CentOS 7, необходимо сделать следующее:

1. Установить репозиторий Postgresql

yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

2. Создать файл /etc/yum.repos.d/timescale_timescaledb.repo

[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

3. Установить Postgresql

yum install -y postgresql96-server

4. Установить TimescaleDB

yum install -y timescaledb-postgresql-9.6

5. Инициализировать БД Postgresql

/usr/pgsql-9.6/bin/postgresql96-setup initdb

6. Настроить Postgresql для работы с  TimescaleDB

timescaledb-tune --yes --pg-config=/usr/pgsql-9.6/bin/pg_config

7. Настроить доступ к таблицам Postgresql в файле /var/lib/pgsql/9.6/data/pg_hba.conf

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

8. Запустить Postgresql

su - postgres
/usr/pgsql-9.6/bin/postgresql &

9. Войти в консоль Postgresql

/usr/pgsql-9.6/bin/psql

10. Создать пользователя и БД

CREATE USER wcsoam WITH PASSWORD 'wcsoam';
CREATE DATABASE wcsstat;

12. Дать пользователю права на доступ к БД

\с wcsstat
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "wcsoam";

13. Выйти из консоли Postgresql и войти как пользователь wcsoam

\q
/usr/pgsql-9.6/bin/psql -U wcsoam

14. Создать таблицу для хранения метрик

\с wcsstat
CREATE TABLE IF NOT EXIST conditions(
 time timestamptz not null,
 node_id bigint not null,
 mediaid varchar(255),
 video_height bigint,
 video_width bigint,
 video_rate bigint,
 video_sync bigint,
 video_fps bigint,
 video_nack bigint,
 video_pli bigint,
 video_codec bigint,
 audio_sync bigint,
 audio_rate bigint,
 audio_lost bigint,
 audio_codec bigint);

15. Установить расширение для работы функций TimescaleDB

CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

16. Настроить гипертаблицу TimescaleDB с указанием длительности хранения каждого фрагмента, например, 1 час:

SELECT create_hypertable('conditions', 'time', 'node_id', 1, chunk_time_interval => interval '1 hour');

17. Cоздать БД для хранения статистики потоков

CREATE DATABASE wcsoam;
\c wcsoam
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "wcsoam";

18. Выйти из консоли Postgresql

\q
exit

Настройка удаления устаревших данных при помощи cron

Для экономии дискового пространства устаревшие данные могут удаляться периодически при помощи cron. Например, проверка таблицы conditions каждые 5 минут и удаление данных старше 12 часов может быть настроена следующим образом:

*/5 * * * * PGPASSWORD="wcsoam" /usr/pgsql-9.6/bin/psql -h localhost -p 5432 -U wcsoam -d wcsstat -w -c "SELECT drop_chunks(interval '12 hours', 'conditions');"

Структура БД

Postgresql должен содержать следующую таблицу для хранения метрик

ПолеТипПримечание
CONDITIONS
timetimestamptzNOT NULL
node_idbigintNOT NULL
media_idcharacter varying(255)
video_heightbigint
video_widthbigint
video_ratebigint


video_syncbigint
video_fpsbigint
video_nackbigint
video_plibigint
video_codecbigint
audio_syncbigint
audio_ratebigint
audio_lostbigint
audio_codecbigint

Данные метрик фрагментируются и хранятся в подтаблицах, объем каждой из которых определяется заданной при настройке длительностью фрагмента. Для ограничения количества подтаблиц рекомендуется настройка очистки устаревших данных при помощи cron с указанием максимального времени хранения данных.

  • No labels