Установка и использование ClickHouse в PHP
Установка ClickHouse на Ubuntu
- Добавление репозитория ClickHouse:
Сначала добавьте репозиторий ClickHouse в вашу систему.
sudo apt-get install -y apt-transport-https ca-certificates dirmngr
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4
echo "deb https://repo.clickhouse.com/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list
sudo apt-get update
- Установка ClickHouse:
Установите сервер и клиент ClickHouse.
sudo apt-get install -y clickhouse-server clickhouse-client
- Запуск и настройка ClickHouse:
После установки запустите сервер ClickHouse и включите его автозапуск.
sudo service clickhouse-server start
sudo systemctl enable clickhouse-server
- Проверка установки:
Подключитесь к ClickHouse с помощью клиента.
clickhouse-client
Если всё работает, вы увидите приглашение командной строки ClickHouse.
Пример использования ClickHouse с PHP для обработки логов
1. Создание таблицы для логов
Сначала создадим таблицу в ClickHouse для хранения логов.
CREATE TABLE logs (
timestamp DateTime,
level String,
message String,
source String
) ENGINE = MergeTree()
ORDER BY timestamp;
2. Установка PHP-клиента для ClickHouse
Для работы с ClickHouse из PHP можно использовать библиотеку smi2/phpclickhouse
.
Установите её через Composer:
composer require smi2/phpclickhouse
3. Пример PHP-кода для вставки и выборки логов
<?php
require 'vendor/autoload.php';
use ClickHouseDB\Client;
// Настройка подключения к ClickHouse
$config = [
'host' => '127.0.0.1',
'port' => '8123',
'username' => 'default',
'password' => ''
];
$db = new Client($config);
$db->database('default'); // Указываем базу данных
// Вставка логов
$logs = [
['2023-10-01 12:00:00', 'INFO', 'User logged in', 'auth'],
['2023-10-01 12:05:00', 'ERROR', 'Failed to connect to DB', 'database'],
['2023-10-01 12:10:00', 'WARNING', 'High memory usage', 'system'],
];
foreach ($logs as $log) {
$db->insert('logs', [$log], ['timestamp', 'level', 'message', 'source']);
}
// Выборка логов
$result = $db->select('SELECT * FROM logs WHERE level = \'ERROR\'');
// Вывод результатов
foreach ($result->rows() as $row) {
echo "Timestamp: {$row['timestamp']}, Level: {$row['level']}, Message: {$row['message']}, Source: {$row['source']}\n";
}
4. Запуск PHP-скрипта
Сохраните код в файл, например, clickhouse_example.php
, и запустите его:
php clickhouse_example.php
Что делает этот пример:
- Создаёт таблицу
logs
в ClickHouse. - Вставляет несколько записей логов в таблицу.
- Выполняет запрос для выборки логов с уровнем
ERROR
. - Выводит результаты на экран.
Дополнительные улучшения:
- Для работы с большими объемами данных можно использовать пакетную вставку (batch insert).
- Для анализа логов можно использовать агрегатные функции ClickHouse, такие как
COUNT
,GROUP BY
, и т.д. - Для интеграции с реальными логами можно настроить сбор логов из файлов или систем, таких как Fluentd, Logstash, или Kafka.
ClickHouse отлично подходит для обработки и анализа больших объемов логов благодаря своей производительности и простоте использования.