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 :
-
Vérifiez les journaux de ClickHouse ou du serveur Zabbix pour détecter des erreurs.
-
Pour identifier les requêtes lentes, utilisez l'option
log_slow_queriesdans le paramètre de configuration du serveur ZabbixHistoryProvider. -
Vérifiez que ClickHouse autorise l'accès depuis le serveur Zabbix et l'interface Zabbix.
-
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"