Настройка 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 обрабатывает ключи JSON со значением NULL так же, как и отсутствующие ключи.

Важные примечания

  • housekeeper не удаляет данные из ClickHouse. Чтобы управлять сроком хранения данных, настройте период хранения данных ClickHouse в ClickHouse.
  • Zabbix не вычисляет и не хранит тренды в ClickHouse. Рассмотрите возможность увеличения периода хранения истории, чтобы сохранить более старые данные.
  • Если вы хотите перенести данные истории из существующей базы данных Zabbix (MySQL или PostgreSQL) в ClickHouse, см. схему ClickHouse и скрипты миграции истории.
  • ClickHouse не поддерживается для прокси Zabbix.

Настройка ClickHouse

Вам нужно создать и настроить базу данных Zabbix и пользователя, а также импортировать схему базы данных.

В этом руководстве приведены инструкции для установок ClickHouse через Docker или пакеты.

Docker

1. Создайте и настройте базу данных Zabbix и пользователя при запуске контейнера 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. Убедитесь, что ClickHouse работает и вы можете подключиться к нему:

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

# 26.4.4.38

3. Импортируйте схему базы данных с помощью скрипта history_all.sh из каталога Zabbix:

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

Период хранения данных (Time-To-Live, или TTL) для ClickHouse по умолчанию составляет 31 день. Чтобы изменить его, используйте параметр --ttl при импорте схемы базы данных (например, --ttl 604800 для 7 дней) или настройте его позже.

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. Импортируйте схему базы данных с помощью скрипта history_all.sh из каталога Zabbix:

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

Период хранения данных (Time-To-Live, или TTL) для ClickHouse по умолчанию составляет 31 день. Чтобы изменить его, используйте параметр --ttl при импорте схемы базы данных (например, --ttl 604800 для 7 дней) или настройте его позже.

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

В файле конфигурации веб-интерфейса Zabbix (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

Период хранения данных (Time-To-Live, или TTL) для ClickHouse по умолчанию составляет 31 день. Чтобы изменить его, выполните команды ниже.

В примерах ниже используется Docker. Если вы установили ClickHouse с помощью пакетов, выполняйте запросы напрямую в клиенте ClickHouse.

1. Измените таблицу (замените history_json и 3600 на нужные вам значения):

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. Перезапустите сервер Zabbix, чтобы обновить период хранения данных в Администрирование > Обслуживание:

systemctl restart zabbix-server

Устранение неполадок

Следующие шаги могут помочь вам устранить проблемы с вашей конфигурацией ClickHouse:

  1. Проверьте журналы ClickHouse или сервера Zabbix на наличие ошибок.

  2. Чтобы выявить медленные запросы, используйте параметр log_slow_queries в параметре конфигурации сервера Zabbix HistoryProvider.

  3. Убедитесь, что ClickHouse разрешает доступ с сервера Zabbix и веб-интерфейса Zabbix.

  4. Выполните запрос к ClickHouse, чтобы проверить, сохраняются ли данные, собранные Zabbix, например:

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