7 Konfiguracja TimescaleDB
Przegląd
Zabbix obsługuje TimescaleDB, rozwiązanie bazodanowe oparte na PostgreSQL, które automatycznie partycjonuje dane na fragmenty oparte na czasie, aby zapewnić wyższą wydajność przy dużej skali.
Obecnie TimescaleDB nie jest obsługiwany przez Zabbix proxy.
Instrukcje na tej stronie można wykorzystać w następujących scenariuszach:
- Tworzenie bazy danych TimescaleDB lub migracja z istniejących tabel PostgreSQL do TimescaleDB (zobacz Konfiguracja).
- Aktualizacja schematu istniejącej bazy danych TimescaleDB podczas aktualizacji Zabbix (zobacz Aktualizacja schematu TimescaleDB).
Konfiguracja
Wymagania wstępne: rozszerzenie TimescaleDB w obsługiwanej wersji zainstalowane na serwerze bazy danych. Instrukcje instalacji znajdują się w dokumentacji TimescaleDB.
Przed instalacją TimescaleDB zainstaluj obsługiwaną wersję PostgreSQL z oficjalnego repozytorium PostgreSQL.
Włącz rozszerzenie TimescaleDB dla określonej bazy danych, wykonując:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
Uruchomienie tego polecenia wymaga uprawnień administratora bazy danych.
Jeśli używasz schematu bazy danych innego niż 'public', musisz dodać klauzulę SCHEMA do powyższego polecenia.
Np.:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb SCHEMA yourschema CASCADE;" | sudo -u postgres psql zabbix
Następnie uruchom skrypt postgresql/timescaledb/schema.sql.
W przypadku nowych instalacji skrypt należy uruchomić po utworzeniu standardowej bazy danych PostgreSQL z początkowym schematem/danymi (zobacz tworzenie bazy danych).
cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/schema.sql | sudo -u zabbix psql zabbix
Zignoruj komunikaty ostrzegawcze informujące o nieprzestrzeganiu najlepszych praktyk podczas uruchamiania skryptu schema.sql w TimescaleDB w wersji 2.9.0 i nowszej.
Niezależnie od tego ostrzeżenia konfiguracja zostanie ukończona pomyślnie.
Migracja istniejących danych historii, trendów i dziennika audytu może zająć dużo czasu. Na czas migracji serwer Zabbix i frontend muszą być wyłączone.
Skrypt schema.sql ustawia następujące parametry housekeeping:
- Zastąp okres przechowywania historii pozycji
- Zastąp okres przechowywania trendów pozycji
Aby używać partycjonowanego housekeeping dla historii i trendów, obie te opcje muszą być włączone. Możliwe jest również włączenie zastępowania indywidualnie tylko dla historii albo tylko dla trendów.
Dla PostgreSQL i TimescaleDB skrypt postgresql/timescaledb/schema.sql ustawia dwa dodatkowe parametry:
- Włącz kompresję
- Kompresuj rekordy starsze niż 7 dni
Aby housekeeper mógł pomyślnie usuwać skompresowane dane, muszą być włączone obie opcje: Override item history period oraz Override item trend period. Jeśli nadpisywanie jest wyłączone, a tabele zawierają skompresowane fragmenty, housekeeper nie będzie usuwał danych z tych tabel, a ostrzeżenia o nieprawidłowej konfiguracji będą wyświetlane w sekcjach Housekeeping oraz System information.
Wszystkie te parametry można zmienić w Administracja > Housekeeping po instalacji.
Możesz uruchomić narzędzie timescaledb-tune dostarczane przez TimescaleDB, aby zoptymalizować parametry konfiguracji PostgreSQL w pliku postgresql.conf.
Aktualizacja schematu TimescaleDB
Podczas aktualizacji Zabbix do wersji zawierającej nowe hypertabele TimescaleDB, serwer Zabbix nie konfiguruje automatycznie tych hypertabel (na przykład podczas aktualizacji z Zabbix 6.4 do 8.0, ponieważ wersje 7.0.0 i 7.0.2 wprowadziły nowe hypertabele).
Aby skonfigurować nowe hypertabele TimescaleDB, wykonaj następujące kroki:
- Uruchom serwer Zabbix; spowoduje to aktualizację istniejącej bazy danych.
- Sprawdź w pliku dziennika serwera, czy aktualizacja bazy danych została zakończona; po jej zakończeniu zatrzymaj serwer Zabbix. Zwróć uwagę, że serwer zapisuje ostrzeżenie, jeśli próbuje włączyć kompresję dla tabeli, która nie jest hypertabelą.
- Uruchom skrypt
postgresql/timescaledb/schema.sql; spowoduje to skonfigurowanie nowych hypertabel TimescaleDB. Zwróć uwagę, że od Zabbix 7.0.0 lokalizacja i nazwa skryptu zostały zmienione zpostgresql/timescaledb.sqlnapostgresql/timescaledb/schema.sql.
Zignoruj komunikaty ostrzegawcze informujące o nieprzestrzeganiu najlepszych praktyk podczas uruchamiania skryptu schema.sql w TimescaleDB w wersji 2.9.0 i nowszej.
Niezależnie od tego ostrzeżenia konfiguracja zostanie pomyślnie zakończona.
Kompresja TimescaleDB
Natywna kompresja TimescaleDB jest obsługiwana dla wszystkich tabel Zabbix, które są hypertabelami TimescaleDB. Podczas aktualizacji lub migracji do TimescaleDB początkowa kompresja dużych tabel może zająć dużo czasu.
Należy pamiętać, że kompresja jest obsługiwana w ramach licencji Timescale Community "timescale", natomiast nie jest obsługiwana w ramach licencji Apache 2.0 "apache". Jeśli Zabbix wykryje, że kompresja nie jest obsługiwana, do logu serwera Zabbix zostanie zapisany komunikat ostrzegawczy, a użytkownicy nie będą mogli włączyć kompresji we frontendzie.
Przed użyciem kompresji zaleca się użytkownikom zapoznanie się z mechanizmem kompresji w dokumentacji TimescaleDB.
Należy pamiętać, że istnieją pewne ograniczenia wynikające z kompresji, w szczególności:
- Modyfikacje skompresowanych chunków (wstawianie, usuwanie, aktualizacje) nie są dozwolone
- Zmiany schematu dla skompresowanych tabel nie są dozwolone
Ustawienia kompresji można zmienić w bloku History, trends and audit log compression w sekcji Administration > Housekeeping frontendu Zabbix.
| Parametr | Domyślnie | Uwagi |
|---|---|---|
| Enable compression | Włączone | Zaznaczenie lub odznaczenie pola wyboru nie aktywuje/dezaktywuje kompresji natychmiast. Ponieważ kompresja jest obsługiwana przez Housekeeper, zmiany zaczną obowiązywać maksymalnie po 2 × HousekeepingFrequency godzinach (ustawianych w zabbix_server.conf)Po wyłączeniu kompresji nowe chunki, które mieszczą się w okresie kompresji, nie będą kompresowane. Jednak wszystkie wcześniej skompresowane dane pozostaną skompresowane. Aby zdekompresować wcześniej skompresowane chunki, postępuj zgodnie z instrukcjami w dokumentacji TimescaleDB. W przypadku aktualizacji ze starszych wersji Zabbix z obsługą TimescaleDB kompresja nie będzie domyślnie włączona. |
| Compress records older than | 7d | Ten parametr nie może być mniejszy niż 7 dni. Ze względu na niezmienność skompresowanych chunków wszystkie opóźnione dane (np. dane opóźnione przez proxy), które są starsze niż ta wartość, zostaną odrzucone. |
:::note
Aby uzyskać lepszą wydajność aktualizacji trendów, można obniżyć wartość "chunk_time_interval" dla tabel trends i trends_uint z 30 dni do 7 dni lub mniej, w zależności od tego, ile pozycji korzysta z trendów.
Celem tego ustawienia jest stosowanie się do najlepszych praktyk TimescaleDB oraz zapewnienie, że rozmiar chunków pozostaje w granicach zasobów dostępnych w systemie.
:::