Monitoreo · 13 min read · Oct 27, 2025

Cómo instalar y configurar el sistema de monitoreo Graphite en Ubuntu 22.04

Graphite es una herramienta de código abierto utilizada para rastrear y graficar el rendimiento de los sistemas informáticos. Puedes usarla para rastrear el rendimiento de sitios web, aplicaciones, servicios empresariales y servidores en red. Es altamente flexible y se puede configurar para que puedas obtener los beneficios tanto de una representación detallada como de una visión general amplia del rendimiento y la salud de las métricas que estás rastreando.

Graphite está compuesto por varios componentes: la aplicación web, un backend de almacenamiento llamado Carbon, y la biblioteca de base de datos llamada whisper. En este tutorial, aprenderás a instalar y configurar Graphite en un servidor Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Un nombre de dominio completamente calificado (FQDN) apuntando al servidor. Para nuestro tutorial, usaremos el dominio graphite.example.com.
  • Un usuario no root con privilegios sudo.
  • El Firewall sin complicaciones (UFW) está habilitado y en funcionamiento.
  • Asegúrate de que todo esté actualizado. $ sudo apt update && sudo apt upgrade
  • Instala paquetes de utilidad básicos. Algunos de ellos pueden ya estar instalados. $ sudo apt install wget curl nano unzip -y

Paso 1 - Configurar el Firewall

Antes de instalar cualquier paquete, el primer paso es configurar el firewall para permitir conexiones HTTP y HTTPS.

Verifica el estado del firewall.

$ sudo ufw status

Deberías ver algo como lo siguiente.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permite los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Verifica el estado nuevamente para confirmar.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 - Instalar Paquetes Requeridos

Instalaremos Graphite usando el gestor de paquetes PIP de Python. El primer paso es instalar los paquetes requeridos para la instalación.

$ sudo apt install vim python3-dev python3-pip libcairo2-dev libffi-dev build-essential

Paso 3 - Instalar Graphite y Graphite Web

Instalaremos Graphite en el directorio /opt/graphite.

$ export PYTHONPATH="/opt/graphite/lib/:/opt/graphite/webapp/"
$ sudo pip install --no-binary=:all: https://github.com/graphite-project/whisper/tarball/master
$ sudo pip install --no-binary=:all: https://github.com/graphite-project/carbon/tarball/master
$ sudo pip install --no-binary=:all: https://github.com/graphite-project/graphite-web/tarball/master

Paso 4 - Instalar y Configurar PostgreSQL

Usaremos el repositorio APT oficial de PostgreSQL para instalar. Ejecuta el siguiente comando para agregar la clave GPG de PostgreSQL.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-key.gpg >/dev/null

Agrega el repositorio APT a tu lista de fuentes.

$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/postgresql-key.gpg arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Actualiza el repositorio del sistema.

$ sudo apt update

Ahora, puedes instalar PostgreSQL y paquetes auxiliares usando el siguiente comando.

$ sudo apt install postgresql postgresql-contrib libpq-dev

Verifica el estado del servicio de PostgreSQL.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2022-09-27 10:09:35 UTC; 4s ago
    Process: 4456 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
   Main PID: 4456 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Sep 27 10:09:35 matrix systemd[1]: Starting PostgreSQL RDBMS...
Sep 27 10:09:35 matrix systemd[1]: Finished PostgreSQL RDBMS.

Puedes ver que el servicio está habilitado y en funcionamiento por defecto.

Inicia sesión en la consola de PostgreSQL.

$ sudo -su postgres psql

Crea un usuario de base de datos para Graphite.

postgres=# CREATE USER graphite WITH PASSWORD 'your_password';

Crea una base de datos para Graphite y otorga la propiedad al usuario graphite.

postgres=# CREATE DATABASE graphitedb WITH OWNER graphite;

Sal de la consola de PostgreSQL.

postgres=# \q

Paso 5 - Configurar Graphite Carbon y Web

El siguiente paso es configurar Graphite Carbon y Graphite web.

Configurar Carbon

Carbon se compone de tres servicios:

  • carbon-cache: acepta métricas y las escribe en el disco.
  • carbon-relay: replica los datos.
  • carbon-aggregator: se ejecuta frente al servicio carbon-cache para almacenar métricas a lo largo del tiempo antes de reenviarlas a Whisper.

Configurar carbon-cache es necesario, pero carbon-relay y carbon-aggregator son opcionales.

Crea el archivo carbon.conf usando el archivo de ejemplo proporcionado.

$ sudo cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf

A continuación, crea la configuración de esquemas de almacenamiento.

$ sudo cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf

Abre el archivo de configuración del esquema de almacenamiento.

$ sudo nano /opt/graphite/conf/storage-schemas.conf

Dentro, encontrarás entradas como

[carbon]
pattern = ^carbon\.
retentions = 60:90d

Esto implica que un patrón que coincida con una expresión regular ^carbon\. debe retener los datos con una política de retención de 60:90d, lo que significa

  • con qué frecuencia se registra una métrica: 60 segundos
  • duración del tiempo para almacenar esos valores: 90 días

Puedes agregar tu propia entrada. Tomemos un ejemplo test, es decir, puntos de datos de monitoreo y nuestras entradas de puntos de datos comenzarán con la cadena test. Esta entrada debe agregarse antes de la entrada predeterminada mencionada al final del archivo.

[test]
pattern = ^test\.
retentions = 10s:10m,1m:1h

Esto coincidirá con cualquier métrica que comience con test. Almacenará los datos que recopila dos veces, con diferentes niveles de detalle. La primera definición (1s:10m) creará un punto de datos cada diez segundos. Solo almacenará los datos durante diez minutos. La segunda definición creará un punto de datos cada minuto. Recopilará todos los datos del último minuto (seis puntos, ya que la definición anterior crea un punto cada diez segundos) y los agregará para crear el punto. Almacena los datos a este nivel de detalle durante una hora.

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Inicia el servicio carbon-cache.

$ sudo /opt/graphite/bin/carbon-cache.py start

Configurar la Web de Graphite

El siguiente paso es configurar la aplicación web de Graphite.

Genera una clave secreta para la aplicación Graphite. Copia la clave mostrada para su uso posterior.

$ python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
sp%71)6b$%^bc(7xpz1d!)x3(azog01&k^8l02*!y0#)72p07y

Crea el archivo de configuración de la aplicación web.

$ sudo cp /opt/graphite/webapp/graphite/local_settings.py.example /opt/graphite/webapp/graphite/local_settings.py

Necesitas configurar la aplicación web de Graphite con la configuración de la base de datos. Abre el local_settings.py para editar.

$ sudo nano /opt/graphite/webapp/graphite/local_settings.py

Descomenta la variable SECRET_KEY e ingresa un valor aleatorio para ella.

SECRET_KEY = 'your-secret-key'

Descomenta la variable ALLOWED_HOSTS.

ALLOWED_HOSTS = [ '*' ]

Descomenta la variable TIME_ZONE y configúralo al valor apropiado.

TIME_ZONE = 'Asia/Kolkata'

Descomenta la variable USE_REMOTE_USER_AUTHENTICATION y configúralo en TRUE para que el usuario remoto se autentique antes de realizar cualquier cambio en la base de datos.

USE_REMOTE_USER_AUTHENTICATION = True

Cambia la configuración de la base de datos.

DATABASES = {
    'default': {
        'NAME': 'graphitedb',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'graphite',
        'PASSWORD': 'your_password',
        'HOST': '127.0.0.1',
        'PORT': ''
    }
}

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Instala algunos requisitos previos para el envoltorio de PostgreSQL de Python.

$ sudo pip install psycopg2-binary

Ejecuta el siguiente comando para importar el esquema de la base de datos.

$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py migrate --settings=graphite.settings

Obtendrás la siguiente salida.

Operations to perform:
  Apply all migrations: account, admin, auth, contenttypes, dashboard, events, sessions, tagging, tags, url_shortener
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying account.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying dashboard.0001_initial... OK
  Applying events.0001_initial... OK
  Applying sessions.0001_initial... OK
  Applying tagging.0001_initial... OK
  Applying tagging.0002_on_delete... OK
  Applying tags.0001_initial... OK
  Applying url_shortener.0001_initial... OK

A continuación, recopila los archivos estáticos.

$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py collectstatic --settings=graphite.settings

Establece los permisos de propiedad correctos.

$ sudo chown -R www-data:www-data /opt/graphite/storage/
$ sudo chown -R www-data:www-data /opt/graphite/static/
$ sudo chown -R www-data:www-data /opt/graphite/webapp/

Crea un usuario root para iniciar sesión.

$ sudo PYTHONPATH=/opt/graphite/webapp/ django-admin.py createsuperuser --settings=graphite.settings
Username (leave blank to use 'root'): navjot
Email address: [email protected]
Password: 
Password (again): 
Superuser created successfully.

Se te pedirá que crees un superusuario. Este usuario se usará más tarde para conectarse a la aplicación Graphite.

Paso 6 - Configurar Apache

Graphite se envía con archivos de configuración de Apache por defecto. Instala el servidor Apache.

$ sudo apt install apache2 libapache2-mod-wsgi-py3

Crea el archivo mod_wsgi.

$ sudo cp /opt/graphite/conf/graphite.wsgi.example /opt/graphite/conf/graphite.wsgi

Copia el archivo de configuración de ejemplo de graphite a la ubicación de Apache.

$ sudo cp /opt/graphite/examples/example-graphite-vhost.conf /etc/apache2/sites-available/graphite.conf

Abre el archivo de configuración de Graphite para editar.

$ sudo nano /etc/apache2/sites-available/graphite.conf

Cambia el número de puerto en la primera línea de 80 a 127.0.0.1:8080. Poner 127.0.0.1 delante de esto restringe el acceso a través de la web.


Agrega tu nombre de dominio.

ServerName graphite.example.com #Reemplaza con tu dominio

Agrega las siguientes líneas debajo de la línea Alias /static/ /opt/graphite/static/.

#Agrega las líneas a continuación

     Require all granted

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Desactiva el host virtual predeterminado y habilita el archivo de host virtual de Graphite.

$ sudo a2dissite 000-default
$ sudo a2ensite graphite

También necesitaremos decirle a Apache que escuche en el puerto 8080 y deje de escuchar en el puerto 80 porque usaremos Nginx como servidor proxy.

Abre el archivo /etc/apache2/ports.conf para editar.

$ sudo nano /etc/apache2/ports.conf

Encuentra la línea Listen 80 y reemplázala con lo siguiente.

Listen 127.0.0.1:8080

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Reinicia el servidor Apache.

$ sudo systemctl restart apache2

Para verificar que Graphite esté funcionando correctamente y sea accesible, ejecuta el siguiente comando.

$ curl 127.0.0.1:8080

Obtendrás la siguiente salida.





  
    Graphite Browser
  



  

    



Esto confirma que está funcionando bien.

Paso 7 - Instalar Nginx

Usaremos Nginx como servidor proxy para Apache. De esta manera, obtenemos los beneficios de seguridad y oscuridad mientras usamos la configuración existente proporcionada por Graphite.

Ubuntu 22.04 se envía con una versión más antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Agrega el repositorio para la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Inicia el servidor Nginx.

$ sudo systemctl start nginx

Paso 8 - Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot usando el repositorio de Ubuntu o obtener la última versión usando la herramienta Snapd. Usaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd esté actualizada.

$ sudo snap install core
$ sudo snap refresh core

Instala Certbot.

$ sudo snap install --classic certbot

Usa el siguiente comando para asegurarte de que el comando Certbot pueda ejecutarse creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d graphite.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/graphite.example.com en tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Verifica el servicio programador de renovación de Certbot.

$ sudo systemctl list-timers

Encontrarás snap.certbot.renew.service como uno de los servicios programados para ejecutarse.

NEXT                        LEFT          LAST                        PASSED   UNIT                           ACTIVATES              

.................................................................................................................................
Wed 2022-09-28 00:00:00 UTC 7h left       Tue 2022-09-27 00:00:01 UTC 16h ago  logrotate.timer                logrotate.service
Wed 2022-09-28 02:39:09 UTC 10h left      Tue 2022-09-27 09:42:42 UTC 6h ago   apt-daily.timer                apt-daily.service
Wed 2022-09-28 06:02:00 UTC 13h left      n/a                         n/a      snap.certbot.renew.timer       snap.certbot.renew.service

Para comprobar si la renovación de SSL está funcionando bien, haz una prueba en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves errores, estás listo. Tu certificado se renovará automáticamente.

Paso 9 - Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editar.

$ sudo nano /etc/nginx/nginx.conf

Agrega la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida.

Crea y abre el archivo /etc/nginx/conf.d/uvdesk.conf para editar.

$ sudo nano /etc/nginx/conf.d/graphite.conf

Pega el siguiente código en él.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  graphite.example.com;

    access_log  /var/log/nginx/graphite.access.log;
    error_log   /var/log/nginx/graphite.error.log;

    # SSL
    ssl_certificate      /etc/letsencrypt/live/graphite.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/graphite.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/graphite.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;

    location / {
       proxy_set_header Connection "upgrade";
       proxy_set_header Upgrade $http_upgrade;
       proxy_http_version 1.1;

       proxy_set_header Host $http_host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-NginX-Proxy true;

       proxy_pass http://127.0.0.1:8080;
       proxy_redirect off;
    }
}

# forzar HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  graphite.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo presionando Ctrl + X y entrando Y cuando se te pida una vez que hayas terminado.

Verifica la sintaxis del archivo de configuración de Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reinicia el servicio Nginx.

$ sudo systemctl restart nginx

Paso 10 - Acceder y Usar Graphite

Visita la URL https://graphite.example.com en tu navegador y obtendrás la siguiente pantalla.

Panel de Graphite

Haz clic en el enlace Iniciar sesión en la parte superior derecha para abrir la página de inicio de sesión. Ingresa tus credenciales de superusuario creadas en el paso 5 y presiona el botón iniciar sesión para continuar.

Hay varios métodos para alimentar datos a Graphite. Agregamos un coincididor de patrones en el esquema de almacenamiento, según el cual cualquier patrón que comience con test, se registrará como nuestro patrón. Agreguemos algunos datos aleatorios usando el siguiente comando.

$ echo "test.count 9 `date +%s`" | nc -q0 127.0.0.1 2003;

Esto agregará una métrica de datos de valor 9 al sistema. Agreguemos algunos datos más haciendo un bucle a través de los valores.

$ for i in 4 6 8 16 2; do echo "test.count $i `date +%s`" | nc -q0 127.0.0.1 2003; sleep 6; done

Regresa al panel de Graphite y abre Métricas >> test >> count desde la barra lateral izquierda. Deberías ver algo como lo siguiente.

Graphite Muestra datos en el Panel

Ahora puedes comenzar a usarlo para monitorear. También puedes combinarlo con Grafana para obtener un alto nivel de personalización.

Conclusión

Esto concluye nuestro tutorial sobre la instalación y configuración de Graphite en un servidor Ubuntu 22.04 junto con Nginx como servidor proxy. Si tienes alguna pregunta, publícalas en los comentarios a continuación.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.