Konfiguracja ClickHouse
Zabbix może przechowywać dane historyczne w ClickHouse jako alternatywę dla relacyjnej bazy danych.
Ten przewodnik obejmuje konfigurację obsługiwanych wersji ClickHouse. Jeśli używasz innej wersji, niektóre funkcje mogą nie działać zgodnie z oczekiwaniami.
ClickHouse może przechowywać następujące typy wartości:
| Item value type | Database table | ClickHouse type |
|---|---|---|
| Numeric (unsigned) | history_uint | uint |
| Numeric (float) | history | dbl |
| Character | history_str | str |
| Log | history_log | log |
| Text | history_text | text |
| Binary | history_bin | not supported by Zabbix |
| JSON | history_json | json |
ClickHouse nie akceptuje tablic JSON. Wartość JSON musi być pojedynczym obiektem albo zbiorem obiektów. Dodatkowo ClickHouse obsługuje klucze JSON z wartością NULL tak samo jak brakujące klucze.
Ważne uwagi
- housekeeper nie usuwa danych z ClickHouse. Aby kontrolować, jak długo dane są przechowywane, skonfiguruj okres przechowywania danych w ClickHouse w ClickHouse.
- Zabbix nie oblicza ani nie przechowuje trendów w ClickHouse. Rozważ wydłużenie okresu przechowywania historii, aby zachować starsze dane.
- Jeśli chcesz zmigrować dane historii z istniejącej bazy danych Zabbix (MySQL lub PostgreSQL) do ClickHouse, zapoznaj się ze schematem ClickHouse i skryptami migracji historii.
- ClickHouse nie jest obsługiwany dla proxy Zabbix.
Konfigurowanie ClickHouse
Należy utworzyć i skonfigurować bazę danych Zabbix oraz użytkownika, a także zaimportować schemat bazy danych.
Ten przewodnik zawiera instrukcje dotyczące instalacji ClickHouse za pomocą Docker lub pakietów.
Docker
1. Utwórz i skonfiguruj bazę danych Zabbix oraz użytkownika podczas uruchamiania kontenera ClickHouse:
sudo docker run -d \
--name clickhouse \
-e CLICKHOUSE_DB=zabbix \
-e CLICKHOUSE_USER=zabbix \
-e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 \
-e CLICKHOUSE_PASSWORD=<password> \
-p 8123:8123/tcp \
-p 9000:9000/tcp \
--cap-add=SYS_NICE \
--cap-add=NET_ADMIN \
--cap-add=IPC_LOCK \
--ulimit nofile=262144:262144 \
-v clickhouse_data:/var/lib/clickhouse \
clickhouse/clickhouse-server:26.4
2. Potwierdź, że ClickHouse działa i że możesz się z nim połączyć:
sudo docker exec -it clickhouse \
clickhouse-client \
--query "SELECT version()"
# 26.4.4.38
3. Zaimportuj schemat bazy danych za pomocą skryptu history_all.sh z katalogu Zabbix:
./usr/share/zabbix/sql-scripts/clickhouse/history_all.sh \
--user zabbix \
--password <password> \
--db zabbix \
--server http://localhost:8123
Domyślny okres przechowywania danych (Time-To-Live, TTL) dla ClickHouse wynosi 31 dni.
Aby go zmienić, użyj opcji --ttl podczas importowania schematu bazy danych (np. --ttl 604800 dla 7 dni) albo skonfiguruj go później.
4. Sprawdź, czy tabele zostały utworzone:
sudo docker exec -it clickhouse \
clickhouse-client \
--user zabbix \
--password <password> \
--query "SHOW TABLES FROM zabbix"
# history
# history_json
# history_log
# history_str
# history_text
# history_uint
Pakiety
1. Uruchom ClickHouse:
sudo service clickhouse-server start
2. Utwórz i skonfiguruj bazę danych oraz użytkownika Zabbix:
clickhouse-client --user default
localhost :) CREATE DATABASE IF NOT EXISTS zabbix
localhost :) CREATE USER IF NOT EXISTS zabbix IDENTIFIED WITH sha256_password BY '<password>'
localhost :) GRANT CREATE, ALTER, DROP, INSERT, SELECT, UPDATE, OPTIMIZE ON zabbix.* TO zabbix
localhost :) quit
3. Zaimportuj schemat bazy danych, używając skryptu history_all.sh z katalogu Zabbix:
./usr/share/zabbix/sql-scripts/clickhouse/history_all.sh \
--user zabbix \
--password <password> \
--db zabbix \
--server http://localhost:8123
Domyślny okres przechowywania danych (Time-To-Live, TTL) dla ClickHouse wynosi 31 dni.
Aby go zmienić, użyj opcji --ttl podczas importowania schematu bazy danych (np. --ttl 604800 dla 7 dni) albo skonfiguruj go później.
4. Sprawdź, czy tabele zostały utworzone:
clickhouse-client \
--user zabbix \
--password <password> \
--query "SHOW TABLES FROM zabbix"
# history
# history_json
# history_log
# history_str
# history_text
# history_uint
Konfigurowanie serwera Zabbix
W pliku konfiguracyjnym serwera Zabbix (zabbix_server.conf) ustaw parametr HistoryProvider.
Na przykład, aby przechowywać wszystkie obsługiwane typy wartości w ClickHouse:
HistoryProvider=clickhouse;value_types="uint,dbl,str,log,text,json",url=http://localhost:8123,db=zabbix,username=zabbix,password=<password>
Po wprowadzeniu zmian uruchom ponownie serwer Zabbix:
systemctl restart zabbix-server
Konfigurowanie frontend Zabbix
W pliku konfiguracyjnym frontend Zabbix (zabbix.conf.php) ustaw zmienną $HISTORY_PROVIDERS, aby odpowiadała konfiguracji serwera:
$HISTORY_PROVIDERS[] = [
'types' => ['uint','dbl','str','log','text','json'],
'provider' => 'clickhouse',
'url' => 'http://localhost:8123',
'db' => 'zabbix',
'username' => 'zabbix',
'password' => '<password>'
];
Dodatkowa konfiguracja
Poniższe kroki są opcjonalne. Nie są potrzebne do podstawowej konfiguracji.
Konfigurowanie okresu przechowywania danych ClickHouse
Domyślny okres przechowywania danych (Time-To-Live, czyli TTL) dla ClickHouse wynosi 31 dni. Aby go zmienić, uruchom poniższe polecenia.
Poniższe przykłady używają Dockera. Jeśli zainstalowano ClickHouse za pomocą pakietów, uruchom zapytania bezpośrednio w kliencie ClickHouse.
1. Zmień tabelę (zastąp history_json i 3600 wartościami, których potrzebujesz):
sudo docker exec -it clickhouse \
clickhouse-client \
--user zabbix \
--password <password> \
--query "ALTER TABLE zabbix.history_json MODIFY TTL clock_ns + toIntervalSecond(3600)"
2. Zastosuj zmiany natychmiast:
sudo docker exec -it clickhouse \
clickhouse-client \
--user zabbix \
--password <password> \
--query "OPTIMIZE TABLE zabbix.history_json FINAL"
3. Sprawdź, czy okres przechowywania danych został zmieniony:
sudo docker exec -it clickhouse \
clickhouse-client \
--user zabbix \
--password <password> \
--query "SHOW CREATE TABLE zabbix.history_json"
# CREATE TABLE zabbix.history_json
# (
# `itemid` UInt64,
# `clock_ns` DateTime64(9),
# `value` JSON,
# `value_str` String
# )
# ENGINE = MergeTree
# PARTITION BY toDate(clock_ns)
# PRIMARY KEY (itemid, clock_ns)
# ORDER BY (itemid, clock_ns)
# TTL clock_ns + toIntervalSecond(3600)
# SETTINGS index_granularity = 8192
4. Uruchom ponownie serwer Zabbix, aby odświeżyć okres przechowywania danych w Administracja > Housekeeping:
systemctl restart zabbix-server
Rozwiązywanie problemów
Poniższe kroki mogą pomóc w rozwiązywaniu problemów z konfiguracją ClickHouse:
-
Sprawdź dzienniki ClickHouse lub serwera Zabbix pod kątem błędów.
-
Aby zidentyfikować wolne zapytania, użyj opcji
log_slow_queriesw parametrze konfiguracji serwera ZabbixHistoryProvider. -
Sprawdź, czy ClickHouse zezwala na dostęp z serwera Zabbix i frontend Zabbix.
-
Wykonaj zapytanie do ClickHouse, aby sprawdzić, czy dane zbierane przez Zabbix są zapisywane, na przykład:
sudo docker exec -it clickhouse \
clickhouse-client \
--user zabbix \
--password <password> \
--query "SELECT * FROM zabbix.history_uint WHERE itemid = 42269"