Monitoramento · 13 min read · Oct 27, 2025

Como Instalar e Configurar o Sistema de Monitoramento Graphite no Ubuntu 22.04

Graphite é uma ferramenta de código aberto usada para rastrear e graficar o desempenho de sistemas de computador. Você pode usá-la para rastrear o desempenho de sites, aplicativos, serviços empresariais e servidores em rede. É altamente flexível e pode ser configurado para que você possa obter os benefícios tanto de representações detalhadas quanto de visões gerais amplas do desempenho e da saúde das métricas que está rastreando.

Graphite é composto por vários componentes: o aplicativo web, um backend de armazenamento chamado Carbon e a biblioteca de banco de dados chamada whisper. Neste tutorial, você aprenderá a instalar e configurar o Graphite em um servidor Ubuntu 22.04.

Pré-requisitos

  • Um servidor rodando Ubuntu 22.04.
  • Um nome de domínio totalmente qualificado (FQDN) apontando para o servidor. Para nosso tutorial, usaremos o domínio graphite.example.com.
  • Um usuário não-root com privilégios sudo.
  • O Firewall sem complicações (UFW) está habilitado e em execução.
  • Certifique-se de que tudo está atualizado. $ sudo apt update && sudo apt upgrade
  • Instale pacotes de utilitários básicos. Alguns deles podem já estar instalados. $ sudo apt install wget curl nano unzip -y

Passo 1 - Configurar o Firewall

Antes de instalar qualquer pacote, o primeiro passo é configurar o firewall para permitir conexões HTTP e HTTPS.

Verifique o status do firewall.

$ sudo ufw status

Você deve ver algo como o seguinte.

Status: ativo

Para                         Ação      De
--                         ------      ----
OpenSSH                    PERMITIR   Em qualquer lugar
OpenSSH (v6)               PERMITIR   Em qualquer lugar (v6)

Permita as portas HTTP e HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Verifique o status novamente para confirmar.

$ sudo ufw status
Status: ativo

Para                         Ação      De
--                         ------      ----
OpenSSH                    PERMITIR   Em qualquer lugar
80/tcp                     PERMITIR   Em qualquer lugar
443                        PERMITIR   Em qualquer lugar
OpenSSH (v6)               PERMITIR   Em qualquer lugar (v6)
80/tcp (v6)                PERMITIR   Em qualquer lugar (v6)
443 (v6)                   PERMITIR   Em qualquer lugar (v6)

Passo 2 - Instalar Pacotes Necessários

Instalaremos o Graphite usando o gerenciador de pacotes PIP do Python. O primeiro passo é instalar os pacotes necessários para a instalação.

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

Passo 3 - Instalar Graphite e Graphite Web

Instalaremos o Graphite no diretório /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

Passo 4 - Instalar e Configurar PostgreSQL

Usaremos o repositório APT oficial do PostgreSQL para instalar. Execute o seguinte comando para adicionar a chave GPG do PostgreSQL.

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

Adicione o repositório APT à sua lista de fontes.

$ 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'

Atualize o repositório do sistema.

$ sudo apt update

Agora, você pode instalar o PostgreSQL e pacotes auxiliares usando o seguinte comando.

$ sudo apt install postgresql postgresql-contrib libpq-dev

Verifique o status do serviço 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.

Você pode ver que o serviço está habilitado e em execução por padrão.

Faça login no shell do PostgreSQL.

$ sudo -su postgres psql

Crie um usuário de banco de dados para o Graphite.

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

Crie um banco de dados para o Graphite e dê a propriedade ao usuário graphite.

postgres=# CREATE DATABASE graphitedb WITH OWNER graphite;

Saia do shell do PostgreSQL.

postgres=# \q

Passo 5 - Configurar Graphite Carbon e Web

O próximo passo é configurar o Graphite Carbon e o Graphite web.

Configurar Carbon

O Carbon é composto por três serviços:

  • carbon-cache: aceita métricas e as grava no disco.
  • carbon-relay: replica os dados.
  • carbon-aggregator: roda na frente do serviço carbon-cache para armazenar métricas ao longo do tempo antes de encaminhá-las para o Whisper.

Configurar carbon-cache é necessário, mas carbon-relay e carbon-aggregator são opcionais.

Crie o arquivo carbon.conf usando o arquivo de exemplo fornecido.

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

Em seguida, crie a configuração dos esquemas de armazenamento.

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

Abra o arquivo de configuração do esquema de armazenamento.

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

Dentro, você encontrará entradas como

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

Isso implica que um padrão que corresponde a uma expressão regular ^carbon\. deve reter os dados com uma política de retenção 60:90d, o que significa

  • com que frequência uma métrica é registrada: 60 segundos
  • duração do tempo para armazenar esses valores: 90 dias

Você pode adicionar sua própria entrada. Vamos pegar um exemplo test, ou seja, monitorando pontos de dados e nossas entradas de pontos de dados começarão com a string test. Esta entrada deve ser adicionada antes da entrada padrão mencionada na parte inferior do arquivo.

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

Isso corresponderá a quaisquer métricas que comecem com test. Ele armazenará os dados que coleta duas vezes, em detalhes variados. A primeira definição (1s:10m) criará um ponto de dados a cada dez segundos. Ele armazenará os dados apenas por dez minutos. A segunda definição criará um ponto de dados a cada minuto. Ele coletará todos os dados do último minuto (seis pontos, uma vez que a definição anterior cria um ponto a cada dez segundos) e agregará para criar o ponto. Ele armazena os dados nesse nível de detalhe por uma hora.

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Inicie o serviço carbon-cache.

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

Configurar o Graphite Web

O próximo passo é configurar o aplicativo web do Graphite.

Gere uma chave secreta para o aplicativo Graphite. Copie a chave exibida para 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

Crie o arquivo de configurações do aplicativo web.

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

Você precisa configurar o aplicativo web do Graphite com as configurações do banco de dados. Abra o local_settings.py para edição.

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

Descomente a variável SECRET_KEY e insira um valor aleatório para ela.

SECRET_KEY = 'your-secret-key'

Descomente a variável ALLOWED_HOSTS.

ALLOWED_HOSTS = [ '*' ]

Descomente a variável TIME_ZONE e defina-a para o valor apropriado.

TIME_ZONE = 'Asia/Kolkata'

Descomente a variável USE_REMOTE_USER_AUTHENTICATION e defina-a como TRUE para que o usuário remoto seja autenticado antes de fazer qualquer alteração no banco de dados.

USE_REMOTE_USER_AUTHENTICATION = True

Altere as configurações do banco de dados.

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

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Instale alguns pré-requisitos para o wrapper PostgreSQL do Python.

$ sudo pip install psycopg2-binary

Execute o seguinte comando para importar o esquema do banco de dados.

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

Você receberá a seguinte saída.

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

Em seguida, colete os arquivos estáticos.

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

Defina as configurações de propriedade corretas.

$ 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/

Crie um usuário root para login.

$ 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.

Ele pedirá que você crie um superusuário. Este usuário será usado mais tarde para se conectar ao aplicativo Graphite.

Passo 6 - Configurar o Apache

O Graphite vem com arquivos de configuração do Apache por padrão. Instale o servidor Apache.

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

Crie o arquivo mod_wsgi.

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

Copie o arquivo de configuração de exemplo do graphite para o local do Apache.

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

Abra o arquivo de configuração do Graphite para edição.

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

Altere o número da porta na primeira linha de 80 para 127.0.0.1:8080. Colocar 127.0.0.1 na frente restringe o acesso pela web.


Adicione seu nome de domínio.

ServerName graphite.example.com #Substitua pelo seu domínio

Adicione as seguintes linhas abaixo da linha Alias /static/ /opt/graphite/static/.

#Adicione as linhas abaixo

     Require all granted

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Desative o host virtual padrão e ative o arquivo de host virtual do Graphite.

$ sudo a2dissite 000-default
$ sudo a2ensite graphite

Também precisaremos informar ao Apache para escutar na porta 8080 e parar de escutar na porta 80, pois usaremos o Nginx como servidor proxy.

Abra o arquivo /etc/apache2/ports.conf para edição.

$ sudo nano /etc/apache2/ports.conf

Encontre a linha Listen 80 e substitua-a pela seguinte.

Listen 127.0.0.1:8080

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Reinicie o servidor Apache.

$ sudo systemctl restart apache2

Para verificar se o Graphite está funcionando corretamente e é acessível, execute o seguinte comando.

$ curl 127.0.0.1:8080

Você receberá a seguinte saída.





  
    Navegador Graphite
  



  

    



Isso confirma que está funcionando bem.

Passo 7 - Instalar Nginx

Usaremos o Nginx como servidor proxy para o Apache. Dessa forma, podemos colher os benefícios de segurança e obscuridade, enquanto usamos a configuração existente fornecida pelo Graphite.

O Ubuntu 22.04 vem com uma versão mais antiga do Nginx. Para instalar a versão mais recente, você precisa baixar o repositório oficial do Nginx.

Importe a chave de assinatura do Nginx.

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

Adicione o repositório para a versão estável do 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

Atualize os repositórios do sistema.

$ sudo apt update

Instale o Nginx.

$ sudo apt install nginx

Verifique a instalação.

$ nginx -v
nginx version: nginx/1.22.0

Inicie o servidor Nginx.

$ sudo systemctl start nginx

Passo 8 - Instalar SSL

Precisamos instalar o Certbot para gerar o certificado SSL. Você pode instalar o Certbot usando o repositório do Ubuntu ou pegar a versão mais recente usando a ferramenta Snapd. Usaremos a versão Snapd.

O Ubuntu 22.04 vem com o Snapd instalado por padrão. Execute os seguintes comandos para garantir que sua versão do Snapd esteja atualizada.

$ sudo snap install core
$ sudo snap refresh core

Instale o Certbot.

$ sudo snap install --classic certbot

Use o seguinte comando para garantir que o comando Certbot possa ser executado criando um link simbólico para o diretório /usr/bin.

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

Execute o seguinte comando para gerar um Certificado SSL.

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

O comando acima fará o download de um certificado para o diretório /etc/letsencrypt/live/graphite.example.com em seu servidor.

Gere um certificado de grupo Diffie-Hellman.

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

Verifique o serviço do agendador de renovação do Certbot.

$ sudo systemctl list-timers

Você encontrará snap.certbot.renew.service como um dos serviços agendados para execução.

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 verificar se a renovação do SSL está funcionando bem, faça um teste do processo.

$ sudo certbot renew --dry-run

Se você não ver erros, está tudo certo. Seu certificado será renovado automaticamente.

Passo 9 - Configurar Nginx

Abra o arquivo /etc/nginx/nginx.conf para edição.

$ sudo nano /etc/nginx/nginx.conf

Adicione a seguinte linha antes da linha include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Crie e abra o arquivo /etc/nginx/conf.d/uvdesk.conf para edição.

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

Cole o seguinte código nele.

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;
    }
}

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

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado ao terminar.

Verifique a sintaxe do arquivo de configuração do 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

Reinicie o serviço Nginx.

$ sudo systemctl restart nginx

Passo 10 - Acessar e Usar o Graphite

Visite a URL https://graphite.example.com em seu navegador e você verá a seguinte tela.

Painel do Graphite

Clique no link Login no canto superior direito para abrir a página de login. Insira suas credenciais de superusuário criadas no passo 5 e pressione o botão login para prosseguir.

Existem vários métodos para alimentar dados ao Graphite. Adicionamos um correspondedor de padrões no esquema de armazenamento, de acordo com o qual qualquer padrão que comece com test será registrado como nosso padrão. Vamos adicionar alguns dados aleatórios usando o seguinte comando.

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

Isso adicionará uma métrica de dados com valor 9 ao sistema. Vamos adicionar mais dados percorrendo 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

Volte ao painel do Graphite e abra Metrics >> test >> count na barra lateral esquerda. Você deve ver algo como o seguinte.

Graphite Mostra dados no Painel

Agora você pode começar a usá-lo para monitoramento. Você também pode combiná-lo com o Grafana para obter um alto nível de personalização.

Conclusão

Isso conclui nosso tutorial sobre como instalar e configurar o Graphite em um servidor Ubuntu 22.04 junto com o Nginx como servidor proxy. Se você tiver alguma dúvida, poste nos comentários abaixo.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.