Guía de despliegue

GreptimeDB en un VPS: métricas, logs y trazas en SQL

Desplegar en un VPS Cloud →

Tutorial

GreptimeDB en un VPS: métricas, logs y trazas en SQL

Autoalojamiento6 min de lectura4 pasos

Supervisar una aplicación suele significar mantener tres almacenamientos: Prometheus para las métricas, Loki o Elasticsearch para los logs, Tempo o Jaeger para las trazas. Tres servicios que actualizar, tres lenguajes de consulta y ninguna forma sencilla de cruzar un error con su latencia. GreptimeDB es una base de datos de observabilidad de código abierto (licencia Apache-2.0) que guarda las tres señales en un mismo motor y permite consultarlas tanto en SQL como en PromQL. Esta guía la instala en un VPS con Docker Compose, la protege con contraseña, conecta Prometheus, OpenTelemetry y Grafana, y configura la retención y las copias de seguridad.

Contenido· Por qué una base única para la observabilidad1/12
  1. 01Por qué una base única para la observabilidad
  2. 02Lo que aporta GreptimeDB
  3. 03GreptimeDB frente a una pila Prometheus, Loki y Tempo
  4. 04Requisitos previos
  5. 05Instalar GreptimeDB con Docker Compose
  6. 06Sin --user-provider, la base queda abierta a todos
  7. 07Enviar las métricas de Prometheus
  8. 08Enviar logs y trazas por OpenTelemetry
  9. 09Consultar GreptimeDB desde Grafana
  10. 10Retención, disco y copias de seguridad
  11. 11Actualizar GreptimeDB
  12. 12Instalación en un clic desde el Marketplace de ServOrbit

Por qué una base única para la observabilidad

Métricas, logs y trazas describen el mismo incidente desde tres ángulos. Cuando viven en tres herramientas, saltas de una pestaña a otra copiando marcas de tiempo, y la pregunta «¿qué peticiones lentas precedieron a estos errores?» exige tres consultas en tres lenguajes.

GreptimeDB los guarda todos en tablas, en un motor columnar diseñado para series temporales. Las métricas recibidas de Prometheus siguen siendo consultables en PromQL, y todo —métricas, logs y trazas— se consulta también en SQL, con uniones y agregados. Grafana la ve como una fuente Prometheus corriente.

Lo que aporta GreptimeDB

  • Tres señales, un motor — métricas, logs y trazas en tablas de un mismo almacenamiento columnar.
  • SQL y PromQL — uniones, ventanas y agregados en SQL; tus consultas PromQL funcionan tal cual.
  • Compatible con Prometheus — destino remote_write, API de consulta Prometheus, fuente de datos de Grafana sin plugin.
  • OpenTelemetry nativo — ingesta OTLP/HTTP de métricas, logs y trazas.
  • Otros protocolos — API push de Loki, line protocol de InfluxDB, API SQL por HTTP.
  • Panel integrado — editor SQL y PromQL, exploración de tablas, gráficos de los resultados.

GreptimeDB frente a una pila Prometheus, Loki y Tempo

Desplace la tabla

GreptimeDBPrometheus + Loki + Tempo
Servicios que operarUn solo contenedorTres servicios, tres configuraciones
Lenguajes de consultaSQL y PromQLPromQL, LogQL y TraceQL
Cruzar logs y métricasUna consulta SQLVarias consultas, a mano
Ingestaremote_write, OTLP, Loki, InfluxDB, SQLUn protocolo por servicio
GrafanaFuente de datos PrometheusUna fuente por servicio
RetenciónPor base o por tabla, en SQLUn ajuste por servicio

Requisitos previos

Un VPS Ubuntu 24.04 con 2 GB de RAM basta para empezar; prevé 4 GB y más disco si centralizas muchos servicios, porque los logs y las trazas ocupan mucho más espacio que las métricas. Necesitas Docker con el plugin Compose y un nombre de dominio que apunte al VPS, con nginx y un certificado HTTPS: tus servidores le enviarán sus datos y Grafana la consultará.

Instalar GreptimeDB con Docker Compose

  1. Preparar el directorio y la contraseña

    Crea el directorio de la aplicación y un archivo .env con la contraseña del usuario admin.

    mkdir -p /opt/greptimedb && cd /opt/greptimedb
    echo "ADMIN_PASSWORD=$(openssl rand -hex 16)" > .env
    chmod 600 .env
  2. Escribir el docker-compose.yml

    El puerto solo se publica en la interfaz local: solo nginx accede a él. La opción --user-provider declara el usuario admin y protege toda la API HTTP. La variable GREPTIMEDB_STANDALONE__ENABLE_TELEMETRY desactiva el informe de uso anónimo enviado al editor.

    services:
      greptimedb:
        image: greptime/greptimedb:v1.3.0
        restart: unless-stopped
        ports:
          - "127.0.0.1:4000:4000"
        environment:
          GREPTIMEDB_STANDALONE__ENABLE_TELEMETRY: "false"
        command:
          - standalone
          - start
          - --http-addr=0.0.0.0:4000
          - --data-home=/greptimedb_data
          - --user-provider=static_user_provider:cmd:admin=${ADMIN_PASSWORD}
        volumes:
          - greptimedb-data:/greptimedb_data
    
    volumes:
      greptimedb-data: {}
  3. Arrancar y comprobar

    El arranque tarda unos segundos. /health responde sin autenticación; la API SQL devuelve 401 sin credenciales.

    docker compose up -d
    curl -fsS http://127.0.0.1:4000/health
    curl -u admin:TU_CONTRASENA http://127.0.0.1:4000/v1/sql -d 'sql=SHOW TABLES'
  4. Publicar en HTTPS con nginx

    En el vhost de tu dominio (certificado obtenido con certbot), redirige hacia el puerto local. Aumenta client_max_body_size: los lotes remote_write y OTLP superan pronto el límite por defecto.

    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 32m;
    }

Sin --user-provider, la base queda abierta a todos

Sin proveedor de usuarios, GreptimeDB acepta cualquier petición: quien conozca la dirección puede leer tus logs y escribir, modificar o borrar tablas en SQL. Mantén la autenticación activa y nunca publiques el puerto 4000 directamente en la IP pública: pasa siempre por el proxy inverso HTTPS. Los puertos gRPC, MySQL y PostgreSQL de GreptimeDB tampoco necesitan publicarse.

Enviar las métricas de Prometheus

En el prometheus.yml de cada servidor, añade un bloque remote_write hacia GreptimeDB. El parámetro db indica la base de destino; public existe desde el primer arranque.

remote_write:
  - url: https://greptime.example.ma/v1/prometheus/write?db=public
    basic_auth:
      username: admin
      password: TU_CONTRASENA

Recarga Prometheus: cada métrica se convierte en una tabla, visible con SHOW TABLES; en el panel.

Enviar logs y trazas por OpenTelemetry

En el OpenTelemetry Collector (o directamente en el SDK de tu aplicación), declara un exportador OTLP/HTTP hacia GreptimeDB. La cabecera Authorization lleva admin:contraseña codificado en Base64, y las trazas exigen además la cabecera X-Greptime-Pipeline-Name: greptime_trace_v1. Declara por tanto dos exportadores: puesta en los logs, esa cabecera hace que se rechacen.

exporters:
  otlphttp/greptime:
    endpoint: https://greptime.example.ma/v1/otlp
    headers:
      Authorization: "Basic BASE64_ADMIN_CONTRASENA"
  otlphttp/greptime-traces:
    endpoint: https://greptime.example.ma/v1/otlp
    headers:
      Authorization: "Basic BASE64_ADMIN_CONTRASENA"
      X-Greptime-Pipeline-Name: greptime_trace_v1
service:
  pipelines:
    logs:
      exporters: [otlphttp/greptime]
    metrics:
      exporters: [otlphttp/greptime]
    traces:
      exporters: [otlphttp/greptime-traces]

Las métricas llegan a /v1/otlp/v1/metrics, los logs a /v1/otlp/v1/logs y las trazas a /v1/otlp/v1/traces: el colector añade estos sufijos por sí mismo. Si ya envías tus logs a Loki, Promtail y Grafana Alloy pueden apuntar a /v1/loki/api/v1/push.

Consultar GreptimeDB desde Grafana

En Grafana, añade una fuente de datos de tipo Prometheus con la URL https://tu-dominio/v1/prometheus, activa la autenticación básica e introduce el usuario admin y su contraseña. Tus paneles PromQL funcionan sin cambios.

Para logs y trazas, escribe tus consultas en SQL en el panel integrado (https://tu-dominio/dashboard/), donde las credenciales se introducen en los ajustes de conexión. Una consulta como SELECT * FROM opentelemetry_logs ORDER BY timestamp DESC LIMIT 50; muestra los últimos logs recibidos.

Retención, disco y copias de seguridad

Por defecto, GreptimeDB no borra nada. La retención se fija en SQL, para una base entera o por tabla (opción ttl al crearla). El comando COPY DATABASE exporta una base en formato Parquet dentro del volumen de datos, en /greptimedb_data/copy/:

ALTER DATABASE public SET 'ttl'='90d';
COPY DATABASE public TO 'backup/' WITH (FORMAT='parquet');

Copia después esa carpeta fuera del VPS, o respalda el volumen Docker greptimedb-data completo con el contenedor detenido. Vigila el espacio en disco: casi siempre es el tamaño de los logs lo que decide.

Actualizar GreptimeDB

Lee primero las notas de versión: una actualización mayor puede requerir un paso de migración. Cambia la etiqueta de la imagen en docker-compose.yml y después:

cd /opt/greptimedb
docker compose pull && docker compose up -d
docker compose logs --tail 20

Los datos del volumen se conservan. Haz un COPY DATABASE justo antes de una actualización mayor: es tu punto de retorno.

Instalación en un clic desde el Marketplace de ServOrbit

El Marketplace de ServOrbit instala GreptimeDB en tu VPS sin línea de comandos: despliega el contenedor oficial, genera la contraseña del usuario admin, activa la autenticación en toda la API HTTP, desactiva el informe de uso anónimo y publica el panel en HTTPS en un subdominio de tu dominio o en el subdominio gratuito del VPS (greptimedb.{dns_slug}.servorbit-dns.com). La contraseña aparece en tu área de cliente; solo queda conectar Prometheus, OpenTelemetry y Grafana.

Tu observabilidad en una sola base

Un VPS ServOrbit Ubuntu 24.04 con 2 GB de RAM basta para arrancar GreptimeDB. Instalación en un clic desde el Marketplace, HTTPS en tu dominio o en el subdominio gratuito del VPS, contraseña generada para ti.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva