Configurazione di ClickHouse

Zabbix può memorizzare i dati storici in ClickHouse come alternativa a un database relazionale.

Questa guida illustra la configurazione per le versioni supportate di ClickHouse. Se stai usando una versione diversa, alcune funzionalità potrebbero non funzionare come previsto.

ClickHouse può memorizzare i seguenti tipi di valore:

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 non accetta array JSON. Un valore JSON deve essere un singolo oggetto oppure un insieme di oggetti. Inoltre, ClickHouse gestisce le chiavi JSON con NULL allo stesso modo delle chiavi mancanti.

Note importanti

Configurazione di ClickHouse

È necessario creare e configurare un database e un utente Zabbix, quindi importare lo schema del database.

Questa guida fornisce istruzioni per installazioni di ClickHouse tramite Docker o pacchetto.

Docker

1. Creare e configurare il database e l'utente Zabbix quando si esegue il container 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. Confermare che ClickHouse sia in esecuzione e che sia possibile connettersi ad esso:

sudo docker exec -it clickhouse \
  clickhouse-client \
  --query "SELECT version()"

# 26.4.4.38

3. Importare lo schema del database usando lo script history_all.sh dalla directory di Zabbix:

./usr/share/zabbix/sql-scripts/clickhouse/history_all.sh \
  --user zabbix \
  --password <password> \
  --db zabbix \
  --server http://localhost:8123

Il periodo di conservazione dei dati (Time-To-Live, o TTL) per ClickHouse è, per impostazione predefinita, di 31 giorni. Per modificarlo, usare l'opzione --ttl durante l'importazione dello schema del database (ad esempio, --ttl 604800 per 7 giorni), oppure configurarlo in un secondo momento.

4. Verificare che le tabelle siano state create:

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

Pacchetti

1. Avvia ClickHouse:

sudo service clickhouse-server start

2. Crea e configura il database e l'utente 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. Importa lo schema del database usando lo script history_all.sh dalla tua directory Zabbix:

./usr/share/zabbix/sql-scripts/clickhouse/history_all.sh \
  --user zabbix \
  --password <password> \
  --db zabbix \
  --server http://localhost:8123

Il periodo di conservazione dei dati (Time-To-Live, o TTL) per ClickHouse è, per impostazione predefinita, di 31 giorni. Per modificarlo, usa l'opzione --ttl durante l'importazione dello schema del database (ad esempio, --ttl 604800 per 7 giorni), oppure configuralo in un secondo momento.

4. Verifica che le tabelle siano state create:

clickhouse-client \
  --user zabbix \
  --password <password> \
  --query "SHOW TABLES FROM zabbix"

# history
# history_json
# history_log
# history_str
# history_text
# history_uint

Configurazione di Zabbix server

Nel file di configurazione di Zabbix server (zabbix_server.conf), impostare il parametro HistoryProvider.

Ad esempio, per memorizzare tutti i tipi di valori supportati in ClickHouse:

HistoryProvider=clickhouse;value_types="uint,dbl,str,log,text,json",url=http://localhost:8123,db=zabbix,username=zabbix,password=<password>

Dopo aver apportato le modifiche, riavviare Zabbix server:

systemctl restart zabbix-server

Configurazione del frontend Zabbix

Nel file di configurazione del frontend Zabbix (zabbix.conf.php), impostare la variabile $HISTORY_PROVIDERS in modo che corrisponda alla configurazione del server:

$HISTORY_PROVIDERS[] = [
  'types' => ['uint','dbl','str','log','text','json'],
  'provider' => 'clickhouse',
  'url' => 'http://localhost:8123',
  'db' => 'zabbix',
  'username' => 'zabbix',
  'password' => '<password>'
];

Configurazione aggiuntiva

I passaggi seguenti sono opzionali. Non sono necessari per una configurazione di base.

Configurazione del periodo di conservazione dei dati di ClickHouse

Il periodo di conservazione dei dati (Time-To-Live, o TTL) per ClickHouse è, per impostazione predefinita, di 31 giorni. Per modificarlo, eseguire i comandi riportati di seguito.

Gli esempi seguenti usano Docker. Se ClickHouse è stato installato tramite pacchetti, eseguire le query direttamente nel client di ClickHouse.

1. Modificare la tabella (sostituire history_json e 3600 con i valori necessari):

sudo docker exec -it clickhouse \
  clickhouse-client \
  --user zabbix \
  --password <password> \
  --query "ALTER TABLE zabbix.history_json MODIFY TTL clock_ns + toIntervalSecond(3600)"

2. Applicare immediatamente le modifiche:

sudo docker exec -it clickhouse \
  clickhouse-client \
  --user zabbix \
  --password <password> \
  --query "OPTIMIZE TABLE zabbix.history_json FINAL"

3. Verificare che il periodo di conservazione dei dati sia cambiato:

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. Riavviare Zabbix server per aggiornare il periodo di conservazione dei dati in Administration > Housekeeping:

systemctl restart zabbix-server

Risoluzione dei problemi

I seguenti passaggi possono aiutarti a risolvere i problemi con la configurazione di ClickHouse:

  1. Controlla i log di ClickHouse o del server Zabbix per individuare eventuali errori.

  2. Per identificare le query lente, usa l'opzione log_slow_queries nel parametro di configurazione del server Zabbix HistoryProvider.

  3. Verifica che ClickHouse consenta l'accesso dal server Zabbix e dal frontend Zabbix.

  4. Interroga ClickHouse per verificare se i dati raccolti da Zabbix vengono archiviati, ad esempio:

sudo docker exec -it clickhouse \
  clickhouse-client \
  --user zabbix \
  --password <password> \
  --query "SELECT * FROM zabbix.history_uint WHERE itemid = 42269"