ClickHouseのセットアップ

Zabbixは、リレーショナルデータベースの代替として、ClickHouse に履歴データを保存できます。

このガイドでは、ClickHouseのサポート対象バージョンのセットアップについて説明します。
別のバージョンを使用している場合、一部の機能が想定どおりに動作しないことがあります。

ClickHouseは、次の値タイプを保存できます。

アイテムの値タイプ データベーステーブル ClickHouseの型
数値(符号なし) history_uint uint
数値(浮動小数点) history dbl
文字列 history_str str
ログ history_log log
テキスト history_text text
バイナリ history_bin Zabbixでは未サポート
JSON history_json json

ClickHouseはJSON配列を受け付けません。
JSON値は、単一のオブジェクト、またはオブジェクトの集合のいずれかである必要があります。
さらに、ClickHouseはNULLを含むJSONキーを扱う方法において、NULLを含まないキーと同じように扱います。

重要な注意事項

  • housekeeper は ClickHouse からデータを削除しません。 データの保持期間を制御するには、ClickHouse で ClickHouse のデータ保存期間を設定 してください。
  • Zabbix は ClickHouse でトレンドを計算または保存しません。 古いデータを保持するには、履歴保存期間 を延長することを検討してください。
  • 既存の Zabbix データベース (MySQL または PostgreSQL) から ClickHouse に履歴データを移行したい場合は、ClickHouse のスキーマと履歴の migration scripts を参照してください。
  • ClickHouse は Zabbix プロキシではサポートされていません。

ClickHouseの設定

Zabbixのデータベースとユーザーを作成して設定し、データベーススキーマをインポートする必要があります。

このガイドでは、ClickHouseのDockerまたはパッケージによるインストール手順を説明します。

Docker

1. ClickHouse コンテナを実行する際に、Zabbix データベースとユーザーを作成および設定します:

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. ClickHouse が動作しており、接続できることを確認します:

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

# 26.4.4.38

3. Zabbix ディレクトリにある history_all.sh スクリプトを使用して、データベーススキーマをインポートします:

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

ClickHouse のデータ保存期間 (Time-To-Live, TTL) は、デフォルトで 31 日です。 変更するには、データベーススキーマのインポート時に --ttl オプションを使用するか (例: 7 日間の場合は --ttl 604800)、後から 設定 します。

4. テーブルが作成されたことを確認します:

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

パッケージ

1. ClickHouseを起動します:

sudo service clickhouse-server start

2. 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. Zabbixディレクトリにあるhistory_all.shスクリプトを使用して、データベーススキーマをインポートします:

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

ClickHouseのデータ保存期間(Time-To-Live、TTL)は、デフォルトで31日です。 変更するには、データベーススキーマのインポート時に--ttlオプションを使用するか(例: 7日間の場合は--ttl 604800)、後から設定します。

4. テーブルが作成されたことを確認します:

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

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

Zabbixサーバーの設定

Zabbixサーバーの設定ファイル (zabbix_server.conf) で、HistoryProvider パラメーターを設定します。

たとえば、ClickHouse にサポートされているすべての値のタイプを保存するには、次のようにします。

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

変更を行った後、Zabbixサーバーを再起動します。

systemctl restart zabbix-server

Zabbix Webインターフェースの設定

Zabbix Webインターフェースの設定ファイル (zabbix.conf.php) で、サーバーの設定に合わせて $HISTORY_PROVIDERS 変数を設定します。

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

追加設定

以下の手順は任意です。 基本的なセットアップでは必要ありません。

ClickHouseのデータ保存期間の設定

ClickHouseのデータ保存期間(Time-To-Live、TTL)は、デフォルトで31日です。
変更するには、以下のコマンドを実行します。

以下の例ではDockerを使用しています。
ClickHouseをパッケージでインストールした場合は、ClickHouseクライアントでクエリを直接実行してください。

1. テーブルを変更します(history_json3600 を必要な値に置き換えてください):

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

2. 変更をすぐに適用します:

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

3. データ保存期間が変更されたことを確認します:

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. Administration > Housekeeping でデータ保存期間を更新するため、Zabbixサーバーを再起動します:

systemctl restart zabbix-server

トラブルシューティング

以下の手順は、ClickHouse のセットアップで問題をトラブルシュートするのに役立つ場合があります。

  1. ClickHouse または Zabbix サーバーのログでエラーを確認します。

  2. 遅いクエリを特定するには、Zabbix サーバーの設定パラメーター HistoryProviderlog_slow_queries オプションを使用します。

  3. ClickHouse が Zabbix サーバーおよび Zabbix Webインターフェースからのアクセスを許可していることを確認します。

  4. ClickHouse にクエリを実行して、Zabbix によって収集されたデータが保存されているか確認します。例:

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