Configuration de ClickHouse

Zabbix peut stocker les données d'historique dans ClickHouse comme alternative à une base de données relationnelle.

Ce guide couvre la configuration des versions prises en charge de ClickHouse. Si vous utilisez une version différente, certaines fonctionnalités risquent de ne pas fonctionner comme prévu.

ClickHouse peut stocker les types de valeurs suivants :

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 n'accepte pas les tableaux JSON. Une valeur JSON doit être soit un objet unique, soit un ensemble d'objets. De plus, ClickHouse gère les clés JSON avec NULL de la même manière que les clés manquantes.

Notes importantes

  • Le housekeeper ne supprime pas les données de ClickHouse. Pour contrôler la durée de conservation des données, configurez la période de stockage des données ClickHouse dans ClickHouse.
  • Zabbix ne calcule ni ne stocke les tendances dans ClickHouse. Envisagez d'étendre la période de stockage de l'historique afin de conserver les données plus anciennes.
  • Si vous souhaitez migrer vos données d'historique depuis une base de données Zabbix existante (MySQL ou PostgreSQL) vers ClickHouse, veuillez consulter le schéma ClickHouse et les scripts de migration de l'historique.
  • ClickHouse n'est pas pris en charge pour les proxies Zabbix.

Configuration de ClickHouse

Vous devez créer et configurer une base de données Zabbix et un utilisateur, puis importer le schéma de la base de données.

Ce guide fournit des instructions pour les installations de ClickHouse via Docker ou via package.

Docker

1. Créez et configurez la base de données et l'utilisateur Zabbix lors de l'exécution du conteneur 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. Vérifiez que ClickHouse fonctionne et que vous pouvez vous y connecter :

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

# 26.4.4.38

3. Importez le schéma de la base de données à l'aide du script history_all.sh depuis votre répertoire Zabbix :

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

La période de conservation des données (Time-To-Live, ou TTL) pour ClickHouse est, par défaut, de 31 jours. Pour la modifier, utilisez l'option --ttl lors de l'import du schéma de la base de données (par exemple, --ttl 604800 pour 7 jours), ou configurez-la ultérieurement.

4. Vérifiez que les tables ont été créées :

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

Packages

1. Démarrez ClickHouse :

sudo service clickhouse-server start

2. Créez et configurez la base de données et l'utilisateur 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. Importez le schéma de la base de données à l'aide du script history_all.sh depuis votre répertoire Zabbix :

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

La période de conservation des données (Time-To-Live, ou TTL) pour ClickHouse est, par défaut, de 31 jours. Pour la modifier, utilisez l'option --ttl lors de l'import du schéma de la base de données (par exemple, --ttl 604800 pour 7 jours), ou configurez-la ultérieurement.

4. Vérifiez que les tables ont été créées :

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

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

Configuration du serveur Zabbix

Dans le fichier de configuration de votre serveur Zabbix (zabbix_server.conf), définissez le paramètre HistoryProvider.

Par exemple, pour stocker tous les types de valeurs pris en charge dans ClickHouse :

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

Après avoir effectué les modifications, redémarrez le serveur Zabbix :

systemctl restart zabbix-server

Configuration de l'interface Zabbix

Dans votre fichier de configuration de l'interface Zabbix (zabbix.conf.php), définissez la variable $HISTORY_PROVIDERS de manière à correspondre à la configuration du serveur :

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

Configuration supplémentaire

Les étapes ci-dessous sont facultatives. Vous n'en avez pas besoin pour une configuration de base.

Configuration de la période de conservation des données ClickHouse

La période de conservation des données (Time-To-Live, ou TTL) pour ClickHouse est, par défaut, de 31 jours. Pour la modifier, exécutez les commandes ci-dessous.

Les exemples ci-dessous utilisent Docker. Si vous avez installé ClickHouse à l'aide de paquets, exécutez les requêtes directement dans le client ClickHouse.

1. Modifiez la table (remplacez history_json et 3600 par les valeurs dont vous avez besoin) :

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

2. Appliquez les modifications immédiatement :

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

3. Vérifiez que la période de conservation des données a changé :

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. Redémarrez le serveur Zabbix pour actualiser la période de conservation des données dans Administration > Nettoyage automatique :

systemctl restart zabbix-server

Dépannage

Les étapes suivantes peuvent vous aider à résoudre les problèmes liés à votre configuration ClickHouse :

  1. Vérifiez les journaux de ClickHouse ou du serveur Zabbix pour détecter des erreurs.

  2. Pour identifier les requêtes lentes, utilisez l'option log_slow_queries dans le paramètre de configuration du serveur Zabbix HistoryProvider.

  3. Vérifiez que ClickHouse autorise l'accès depuis le serveur Zabbix et l'interface Zabbix.

  4. Interrogez ClickHouse pour vérifier si les données collectées par Zabbix sont stockées, par exemple :

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