Настройка 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:
-
Проверьте журналы ClickHouse или сервера Zabbix на наличие ошибок.
-
Чтобы выявить медленные запросы, используйте параметр
log_slow_queriesв параметре конфигурации сервера ZabbixHistoryProvider. -
Убедитесь, что ClickHouse разрешает доступ с сервера Zabbix и веб-интерфейса Zabbix.
-
Выполните запрос к ClickHouse, чтобы проверить, сохраняются ли данные, собранные Zabbix, например:
sudo docker exec -it clickhouse \
clickhouse-client \
--user zabbix \
--password <password> \
--query "SELECT * FROM zabbix.history_uint WHERE itemid = 42269"