Por qué autoalojar ClickHouse en un VPS
ClickHouse destaca en las consultas analíticas (OLAP): gracias a su almacenamiento en columnas y a su compresión agresiva, puede escanear terabytes en hardware modesto allí donde una base de datos relacional clásica se hundiría. Autoalojarlo en un VPS le evita los costes por volumen de consultas de los servicios gestionados (ClickHouse Cloud, BigQuery) y le da el control completo del esquema, de los motores de tabla y de la retención. Resulta especialmente pertinente para ingerir sus propios logs de aplicación, métricas de producto o eventos de analítica sin enviar sus datos a un tercero. Como ClickHouse suele comprimir los datos en un factor de 5 a 10, un VPS con un disco SSD razonable puede almacenar cientos de millones de eventos. También conserva el control sobre la latencia: sus paneles consultan una instancia cercana a sus usuarios en lugar de un servicio remoto.
Las ventajas concretas de autoalojar ClickHouse
- Consultas analíticas extremadamente rápidas: agregaciones sobre cientos de millones de filas en menos de un segundo.
- Compresión en columnas de 5x a 10x que reduce drásticamente el coste de almacenamiento de sus logs y eventos.
- Ingesta masiva: cientos de miles de filas por segundo en un solo nodo bien ajustado.
- Compatible con SQL y con numerosos conectores (Grafana, Metabase, clientes HTTP y nativos).
- Soberanía analítica: sus logs y métricas de producto permanecen en su infraestructura.
- Sin facturación por consulta: un coste de VPS fijo para un volumen analítico elevado.
Requisitos de hardware y de software
A ClickHouse le gustan la RAM y el disco rápido. El mínimo absoluto es 2 GB de RAM para un entorno de pruebas o desarrollo, pero 4 GB es el umbral recomendado para cargas de producción ligeras, y 8 GB ofrecen un margen mucho más sano para agregaciones voluminosas y el mark cache. En cuanto a la CPU, 2 vCPU permiten a ClickHouse explotar el paralelismo en consultas sencillas; 4 vCPU se vuelven necesarias para agregaciones o joins en tablas densas. El disco es el factor más crítico: un SSD NVMe es obligatorio — ClickHouse genera una I/O intensa durante los merges de particiones. Los dos puertos clave son el 8123 para la interfaz HTTP y el 9000 para el protocolo TCP nativo. Nunca exponga el puerto 9000 directamente a Internet.
Desplegar ClickHouse paso a paso
Preparar el VPS
Instale Docker y aumente los límites del sistema (
ulimit -na 262144), porque ClickHouse abre muchos descriptores de archivo. Desactive el swap excesivo y compruebe que el disco es realmente SSD NVMe.Lanzar ClickHouse con Docker
Utilice la imagen oficial
clickhouse/clickhouse-server. Monte tres volúmenes persistentes:/var/lib/clickhouse(datos),/var/log/clickhouse-server(logs) y una carpeta de configuración/etc/clickhouse-server/config.d. Añadaulimits: nofile: 262144en el compose.Crear un usuario y una contraseña
Nunca deje al usuario
defaultsin contraseña. Cree un archivousers.d/custom.xmlcon un usuario dedicado, una contraseña con hash (echo -n password | sha256sum) y cuotas. Restrinja<networks>a las IP autorizadas.Ajustar la memoria y el perfil
En
config.d, fijemax_server_memory_usage_to_ram_ratioen 0.8 y defina unmax_memory_usagepor consulta adaptado a su VPS para evitar los OOM. Active la retención de particiones con un TTL en sus tablas (TTL date + INTERVAL 90 DAY).Exponer la interfaz HTTP detrás de un reverse proxy
ClickHouse expone una API HTTP en el puerto
8123. Ponga Nginx o Caddy delante para el TLS y una autenticación adicional, y no abra el puerto nativo9000al público.Conectar una herramienta de visualización
Conecte Grafana o Metabase al endpoint HTTPS para construir sus paneles. Cree sus tablas con el motor
MergeTree, elija unORDER BYpertinente y particione por mes para obtener consultas y purgas eficientes.
Configuración post-instalación: usuarios, base de datos y compresión
Una vez que ClickHouse está en marcha, tres pasos de configuración consolidan la seguridad y el rendimiento. Primero, cree una base de datos dedicada con CREATE DATABASE analytics;. Luego, defina sus usuarios en un archivo users.d/production.xml en lugar del users.xml principal: esta separación permite recargar los usuarios sin reiniciar el servidor (SYSTEM RELOAD USERS). Por último, active la compresión LZ4 en config.d/compression.xml: es el códec por defecto de ClickHouse para las columnas y ofrece un buen equilibrio entre tasa de compresión y velocidad de descompresión. Para un almacenamiento aún más compacto, ZSTD (niveles 1 a 3) es una alternativa viable para columnas con pocas consultas.
Casos de uso concretos: logs de aplicación y métricas time-series
ClickHouse es una alternativa natural a Elasticsearch para los pipelines de logs analíticos. Donde Elasticsearch indexa cada campo de cada documento JSON y requiere una memoria JVM significativa, ClickHouse almacena cada columna por separado y comprime los valores repetitivos de forma muy eficiente. Para un pipeline de logs, cree una tabla logs con el motor MergeTree particionado por día y ordenado por (service, timestamp). Ingiera datos a través de la API HTTP en INSERT por lotes, o mediante Vector.dev, Fluent Bit o Filebeat. Una consulta típica sobre 500 millones de filas filtradas por un intervalo de tiempo se ejecuta en 2 a 8 segundos en un VPS de 4 vCPU / 8 GB — de 10 a significativamente más rápido que las bases OLTP para análisis que una base de datos relacional estándar.
Rendimiento: inserciones por lotes y monitorización de partes
El comportamiento de escritura de ClickHouse es fundamentalmente diferente al de las bases OLTP. Cada INSERT crea una nueva parte en el disco, y ClickHouse fusiona estas partes en segundo plano. Si inserta fila por fila o en lotes pequeños (menos de 1.000 filas), inundará el sistema de partes pequeñas y obtendrá el error Too many parts. La regla de oro es insertar en lotes de 10.000 a 100.000 filas como mínimo. Monitorice el estado de las partes con SELECT table, count() as parts FROM system.parts WHERE active GROUP BY table ORDER BY parts DESC.
Resolución de errores frecuentes
Tres errores aparecen con regularidad al desplegar ClickHouse en un VPS. Too many parts: está insertando en lotes demasiado pequeños; agrupe sus inserts o use el motor Buffer. Error OOM: la consulta consumió más RAM de lo que permite max_memory_usage; añada LIMIT a sus consultas exploratorias o migre a un VPS con más RAM. Permission denied en /var/lib/clickhouse: el usuario de sistema clickhouse (UID 101 en la imagen Docker oficial) no tiene derechos de escritura sobre el volumen montado; ejecute chown -R 101:101 /su/ruta/clickhouse-data en el host antes de lanzar el contenedor.
Instalarlo con un solo clic desde el Marketplace de ServOrbit
Todo lo anterior se hace a mano, y es útil saber hacerlo. Si prefiere no hacerlo, ClickHouse figura en el Marketplace de ServOrbit y se instala en su VPS con un solo clic. La plantilla despliega la versión 26.3 LTS fijada, monta los volúmenes persistentes para los datos y los registros, eleva el límite de descriptores de archivo a 262144 tal como exige ClickHouse, y crea una base de datos analytics en el primer arranque. Sobre todo, cierra la trampa más habitual del despliegue manual: la imagen de origen incluye una cuenta default sin ninguna contraseña, y la instalación la retira en el arranque para sustituirla por una cuenta admin cuya contraseña se genera para su servidor y se muestra en su área de cliente.
ClickHouse vs Elasticsearch para logs: ¿qué base de datos elegir?
Desplace la tabla
| Backend | a | b | verdict |
|---|---|---|---|
| Almacenamiento por GB de logs | ClickHouse | Elasticsearch | ClickHouse (compresión 5-10x vs 1-2x) |
| Consultas analíticas (agregados, tendencias) | Segundos sobre 500M filas | Minutos o degradación | ClickHouse |
| Búsqueda de texto completo en mensajes | Limitada (LIKE, token BF) | Nativa y eficiente | Elasticsearch |
| RAM requerida para arrancar | 2 GB mínimo | 4-8 GB mínimo (JVM) | ClickHouse |
| Ingesta en tiempo real (streaming) | Se recomienda por lotes | Nativa y optimizada | Elasticsearch |
| Conectores Grafana / BI | Plugin nativo ClickHouse | Plugin Elasticsearch | Equivalente |
La elección de la clave de ordenación (ORDER BY) del motor MergeTree es el factor decisivo del rendimiento: coloque primero las columnas más filtradas en sus consultas (a menudo una fecha y un identificador). Utilice tablas Buffer o inserciones por lotes de varios miles de filas en lugar de inserciones fila por fila, que crean multitud de particiones pequeñas y disparan merges costosos. Vigile system.merges y system.parts para detectar una fragmentación excesiva.