SSD Nodes Learn Hosting plans →
Guias Matt ConnorPor Matt Connor

Instalar Zabbix 7.0 LTS no Ubuntu 24.04

Guia passo a passo para instalar o Zabbix 7.0 LTS no Ubuntu 24.04. Aprenda a configurar o MariaDB, ajustar o nginx e resolver erros comuns na importacao do esquema SQL.

O que você vai criar

Uma única VPS Ubuntu 24.04 com toda a stack Zabbix 7.0 LTS: o daemon zabbix-server, que consulta e gera alertas, uma base de dados MariaDB/MySQL que armazena todas as métricas, um frontend PHP servido pelo nginx e o zabbix-agent2, que recolhe métricas do próprio servidor. Depois de tudo estar a funcionar, aponte-o para um segundo servidor, associe um template e receba um email assim que um disco ficar cheio ou um serviço parar.

O Zabbix é mais pesado do que uma ferramenta de página de estado: é um sistema de séries temporais em tempo real, com templates, triggers, escalonamento e retenção de histórico. Quase todos os problemas concentram-se em três passos que muitas pessoas ignoram: importar o esquema da base de dados, definir a palavra-passe da base de dados que o servidor realmente lê e retirar os comentários de duas linhas na configuração do nginx. Faça esses passos corretamente e o resto é um assistente. Se só precisa de verificações de disponibilidade e de uma página de estado partilhável, um monitor de estado Uptime Kuma leve faz isso num único contentor; o Zabbix justifica o seu peso quando precisa de limites por métrica e escalonamento em muitos hosts.

Use a linha 7.0 LTS: o server, o frontend, o agent2 e o esquema são versionados em conjunto, e a linha recebe correções de segurança durante anos. Antes de copiar o nome do ficheiro do repositório abaixo, consulte rapidamente a página oficial de download do Zabbix. O pacote de lançamento latest apenas configura o repositório 7.0; não seleciona uma versão específica: o apt instala então os pacotes 7.0.x que estiverem disponíveis no repositório, o que faz com que seja instalada a versão mais recente. A página também pode listar pacotes de lançamento 7.0-N numerados, mas esse número identifica a versão da configuração do repositório, não a compilação do Zabbix. Todos os restantes comandos funcionam em toda a linha 7.0.

Dimensionamento, portas e pré-requisitos

Considere uma VPS KVM Ubuntu 24.04 nova, com root ou sudo. Seja realista quanto aos recursos: 2 GB de RAM e duas vCPUs são o mínimo razoável para executar o servidor, a base de dados, o nginx e o PHP no mesmo sistema, monitorizando alguns hosts. Um sistema com 1 GB arranca, mas deixa a base de dados sem recursos à medida que o histórico cresce; planeie 4 GB quando ultrapassar algumas dezenas de hosts e, acima de uma centena, coloque a base de dados no seu próprio servidor. O disco cresce conforme o número de itens recolhidos e o tempo durante o qual mantém o histórico; reserve alguns gigabytes para começar. O housekeeper elimina os dados antigos de acordo com as janelas de retenção que definir.

Portas: 80 e 443 para o frontend, públicas ou restringidas ao seu próprio IP. O servidor escuta na porta TCP 10051 para receber dados enviados por agentes ativos, e cada agente escuta na porta TCP 10050 para permitir que o servidor faça a recolha. Abra apenas as portas que expõe, se existir uma firewall à frente. Vale a pena criar um registo DNS A para o frontend, porque irá querer um certificado real nesse endereço. Uma instalação Zabbix monitoriza todos os outros serviços que executa, por isso pertence a uma stack mais ampla de self-hosting que vale a pena executar em 2026, em vez de ser adicionada como algo secundário.

Etapa 1, adicionar o repositório oficial do Zabbix 7.0

O pacote zabbix-release faz uma coisa: instala a lista de fontes do apt e a chave de assinatura no sistema. Instale-o e atualize o índice.

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update

Se wget devolver 404 Not Found, o nome do ficheiro mudou. Abra a página de transferências do Zabbix, selecione Ubuntu 24.04 e copie o URL zabbix-release exato apresentado. Um apt update limpo mostra uma linha repo.zabbix.com e nenhum aviso sobre a chave; The following signatures couldn't be verified because the public key is not available significa que o pacote da versão não instalou a chave, portanto execute novamente dpkg -i e atualize o índice.

Passo 2, instalar o servidor, o frontend e o agente

Instale de uma só vez o servidor compilado para MySQL, o frontend PHP, a configuração do nginx, os ficheiros de esquema SQL e o agent2.

sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
  zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

zabbix-server-mysql é o servidor compilado para MySQL/MariaDB. Para PostgreSQL, instale zabbix-server-pgsql e ajuste os passos da base de dados abaixo. zabbix-sql-scripts contém o esquema que vai importar em seguida. Na versão 7.0, é um pacote separado. Se o esquecer, o caminho de importação ficará indisponível mais tarde. Nenhum destes pacotes instala um motor de base de dados. Por isso, instale já o MariaDB se o servidor ainda não tiver um.

sudo apt install -y mariadb-server
sudo systemctl enable --now mariadb

Passo 3, Criar a base de dados com o conjunto de caracteres correto

O Zabbix é rigoroso quanto à collation: suporta apenas utf8mb4 com utf8mb4_bin ou a versão mais antiga utf8 (também conhecida como utf8mb3) com utf8_bin, e a documentação recomenda vivamente utf8mb4 com utf8mb4_bin, que é a combinação usada neste guia. Abra uma shell de root com sudo mysql e execute:

CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER zabbix@localhost IDENTIFIED BY 'choose-a-strong-password';
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost;
SET GLOBAL log_bin_trust_function_creators = 1;
FLUSH PRIVILEGES;

A linha SET GLOBAL é uma proteção para a importação. O esquema do Zabbix cria triggers determinísticas durante a importação, e uma conta que não seja SUPER, como zabbix, não pode criá-las enquanto o registo binário estiver ativo. O MySQL 8 ativa o registo binário por predefinição, e algumas compilações geridas do MariaDB também o fazem (o MariaDB padrão não). Se omitir a flag num servidor com registo binário ativo, a importação para com ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Defini-la como root resolve o problema; desative-a novamente depois da importação. Anote a palavra-passe exatamente, porque a configuração do servidor precisa da mesma sequência de caracteres, byte por byte.

Etapa 4, importe o esquema (a etapa que muitos ignoram)

Este é o motivo mais comum para um frontend recém-configurado não carregar: a base de dados que criou está vazia. Carregue nela o esquema incluído em zabbix-sql-scripts.

zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
  mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

É pedida a palavra-passe de zabbix. O comando demora entre trinta e sessenta segundos num VPS pequeno e não apresenta nada quando termina com sucesso. Neste caso, o silêncio é normal. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory significa que o pacote zabbix-sql-scripts não está instalado (volte à Etapa 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' significa que a palavra-passe ou a concessão de permissões da Etapa 3 está errada. Depois de terminar, desative novamente o sinalizador de segurança:

sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"

Confirme o carregamento com sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;". Um número, e não um erro doesn't exist, significa que o esquema foi carregado.

Passo 5, defina a palavra-passe da base de dados em zabbix_server.conf

O servidor lê as credenciais da base de dados a partir de /etc/zabbix/zabbix_server.conf. Apenas é necessário definir a palavra-passe. DBName e DBUser já têm zabbix como valor predefinido. Remova o comentário da linha # DBPassword= e defina-a:

DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-password

A palavra-passe tem de ser exatamente igual, byte a byte, à definida no Passo 3. Um DBPassword vazio ou incorreto é a principal causa do aviso "Zabbix server is not running" que aparece mais tarde: o daemon inicia, falha ao autenticar-se e termina. Nada no ecrã indica a causa. Apenas o log a mostra.

Etapa 6, Aponte o nginx para o frontend

O pacote zabbix-nginx-conf instala um bloco de servidor em /etc/zabbix/nginx.conf e cria uma ligação para ele no nginx a partir de /etc/nginx/conf.d/zabbix.conf, mas inclui as linhas listen e server_name comentadas. Por isso, o nginx não serve o Zabbix até as editar:

server {
    listen          80;
    server_name     zabbix.example.com;
    ...
}

Use o seu domínio ou o IP público do servidor se ainda não tiver DNS. Existem dois pontos importantes. O site de boas-vindas predefinido do nginx no Ubuntu também escuta na porta 80 e está marcado como servidor predefinido. Por isso, recebe qualquer pedido cujo nome não corresponda ao bloco configurado. Remova-o; caso contrário, será carregada a página errada: sudo rm -f /etc/nginx/sites-enabled/default. Se /etc/nginx/conf.d/zabbix.conf estiver em falta, uma anomalia conhecida do empacotamento, crie a ligação manualmente com sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Em seguida, teste e recarregue o nginx:

sudo nginx -t
sudo systemctl reload nginx

nginx -t deve apresentar test is successful. Se apresentar nginx: [emerg] a duplicate default server for 0.0.0.0:80, tanto o site predefinido como o bloco do Zabbix estão a declarar default_server. Remova o site predefinido e teste novamente. É mais comum o teste ser bem-sucedido apenas com um aviso conflicting server name, enquanto o navegador continua a mostrar a página de boas-vindas simples. Nesse caso, o site predefinido está a receber um nome que não corresponde a nenhum bloco, e removê-lo resolve o problema.

Etapa 7, Inicie e ative os serviços

Inicie o servidor, o agente, o PHP-FPM e o nginx, e ative-os para que continuem ativos depois de um reboot.

sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable  zabbix-server zabbix-agent2 nginx php8.3-fpm

O Ubuntu 24.04 disponibiliza o PHP 8.3, por isso o serviço FPM é php8.3-fpm; o pacote zabbix-nginx-conf executa o frontend sob esse mesmo processo principal. Confirme que o servidor iniciou e continua ativo:

sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.log

Um log normal termina com o servidor iniciado e os processos housekeeper, poller e trapper em execução. Se aparecer [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', o DBPassword da Etapa 5 não corresponde. Corrija-o e reinicie o serviço. Uma linha [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist significa que a importação do esquema na Etapa 4 foi ignorada. Nesse caso, o servidor não tem dados para ler.

Passo 8, conclua o assistente de configuração web

Aceda a http://your-domain-or-ip. O assistente de configuração do Zabbix é aberto. Siga estes passos:

  1. Boas-vindas, selecione um idioma.
  2. Verificação dos pré-requisitos, todas as linhas devem apresentar OK por predefinição; o pool /etc/zabbix/php-fpm.conf fornecido com o pacote já aumenta os limites do PHP necessários para o Zabbix.
  3. Configuração da ligação à base de dados, selecione MySQL como tipo de base de dados, use o host localhost, a porta 0 (que corresponde à porta ou socket predefinido), o nome da base de dados zabbix, o utilizador zabbix e a palavra-passe do Passo 3. Credenciais incorretas ou um esquema em falta são detetados nesta etapa.
  4. Definições, mantenha o host do servidor Zabbix localhost, a porta 10051 e atribua um nome à instalação.
  5. Resumo da pré-instalação e, em seguida, Instalar. O assistente escreve /etc/zabbix/web/zabbix.conf.php.
  6. Concluir, inicie sessão como Admin (com A maiúsculo), usando a palavra-passe zabbix, e altere imediatamente essa palavra-passe em Utilizadores.

Se o assistente indicar Cannot create the configuration file, o utilizador web não consegue escrever em /etc/zabbix/web/. Transfira o zabbix.conf.php disponibilizado, coloque-o manualmente nesse local com sudo e clique em Concluir.

Etapa 9, Adicione o host local e associe um template

O Zabbix não se monitoriza automaticamente. Aceda a Data collection → Hosts → Create host, defina o nome do host como zabbix-server, adicione-o ao grupo Linux servers e adicione uma interface Agent com o IP 127.0.0.1 e a porta 10050. Em Templates, associe Linux by Zabbix agent (a variante de consulta passiva; Linux by Zabbix agent active utiliza o envio de dados pelo agente). Guarde.

Dentro de 1 minuto, a linha do host apresenta uma etiqueta ZBX verde e as métricas aparecem em Monitoring → Latest data. Uma etiqueta ZBX vermelha significa que o servidor não consegue contactar o agente. Esta falha é explicada abaixo e não resulta de um erro nesta etapa.

Passo 10, Um trigger útil e um alerta por email

O template Linux by Zabbix agent já inclui triggers para CPU elevada, memória insuficiente e discos cheios, por isso terá alertas assim que o associar. Para ver como um trigger é criado, adicione um seu: abra o host, aceda a Triggers → Create trigger, atribua-lhe o nome Root filesystem over 90% full on {HOST.NAME}, defina a severidade como High e use esta expressão:

last(/zabbix-server/vfs.fs.dependent.size[/,pused])>90

vfs.fs.dependent.size[/,pused] é o item de percentagem de utilização que a descoberta do sistema de ficheiros do template cria para o sistema de ficheiros raiz (o template Linux do 7.0 recolhe vfs.fs.get uma vez e deriva itens dependentes por ponto de montagem), por isso o trigger é acionado sem recolha de dados adicional. Guarde-o.

Um trigger apenas altera a cor de uma linha no dashboard até que uma action notifique alguém. Em Alerts → Media types → Email, defina o servidor SMTP, a porta, o endereço do remetente, a segurança da ligação (normalmente STARTTLS) e quaisquer credenciais de relay. Depois use Test; uma falha nesse teste significa que o caminho SMTP está incorreto, antes de qualquer alerta real depender dele. Adicione um endereço ao utilizador Admin em Users → Users → Admin → Media → Add e escolha as severidades que devem gerar notificações. Depois configure a ação em Alerts → Actions → Trigger actions → Create action: adicione uma condição como Trigger severity >= Warning e, em Operations, envie a mensagem para Admin via Email. Guarde e ative a ação. Prefere chat? O Zabbix 7.0 inclui tipos de media webhook para Slack, Discord e Telegram, mas cada um exige a configuração do respetivo serviço em vez das definições SMTP: o Telegram, por exemplo, requer um bot criado através do BotFather, o respetivo token no parâmetro api_token do tipo de media e o ID do chat do destinatário no campo Send to do utilizador. Siga o README da integração, ative o tipo de media, atribua-o a um utilizador e use-o numa ação tal como faria com Email.

Monitorizar um segundo servidor com o agente

Para monitorizar outro servidor, adicione também o repositório do Zabbix nesse servidor. O Ubuntu 24.04 não fornece pacotes do Zabbix, por isso instale apenas o agente:

wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
sudo apt update
sudo apt install -y zabbix-agent2

Edite /etc/zabbix/zabbix_agent2.conf. Defina Server como o IP do servidor Zabbix para a recolha passiva e, para verificações ativas, defina ServerActive e um Hostname exclusivo que corresponda ao host criado no frontend:

Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01

Execute sudo systemctl restart zabbix-agent2 e abra a porta TCP 10050 do servidor Zabbix para este servidor. O reinício é necessário porque o pacote iniciou o agente assim que foi instalado, usando o Server=127.0.0.1 fornecido, e o agente só lê o seu ficheiro quando inicia. enable --now encontraria o agente já em execução e não alteraria nada. Por isso, o agente continuaria a rejeitar o servidor Zabbix. O arranque no boot já está configurado, porque o pacote também ativou a unidade. De volta ao frontend, crie um host cuja interface Agent aponte para o IP dessa máquina, associe o template Linux e o host começará a reportar dentro de um minuto.

Modos de falha e as mensagens apresentadas

O frontend apresenta Error connecting to database ou um erro de base de dados. No passo da base de dados do assistente, Access denied for user 'zabbix'@'localhost' (using password: YES) significa que a palavra-passe não corresponde à do passo 3 ou que GRANT nunca foi executado. Se a ligação à base de dados funcionar, mas o frontend apresentar The frontend does not match Zabbix database ou Table 'zabbix.users' doesn't exist, a importação do esquema no passo 4 foi ignorada ou falhou. Execute-a novamente numa base de dados criada de novo.

Faixa laranja: Zabbix server is not running: the information displayed may not be current. O frontend está ativo, mas não consegue contactar um servidor em execução. Existem três causas, por ordem provável. O serviço está parado; verifique systemctl status zabbix-server e inicie-o. O serviço está em execução, mas não consegue aceder à base de dados; o log apresenta [Z3001] connection to database 'zabbix' failed: [1045] Access denied, o que significa que DBPassword está incorreta ou vazia. Ou o frontend aponta para o servidor errado, definido pelo host localhost e pela porta 10051 em /etc/zabbix/web/zabbix.conf.php. No Ubuntu, o SELinux não está instalado por predefinição. Por isso, a causa relacionada com o socket do SELinux, mencionada nos guias para RHEL, não se aplica. Neste caso, o problema é quase sempre a palavra-passe da base de dados ou um serviço parado.

O host apresenta a etiqueta vermelha ZBX; erro do item: Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. O agente não está em execução ou não está a escutar. Verifique systemctl status zabbix-agent2 e confirme ListenPort=10050. Um timeout, em vez de "connection refused", significa que uma firewall está a descartar a porta 10050. O Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. relacionado significa que o agente está acessível, mas a respetiva linha Server= não inclui o endereço IP do servidor Zabbix. Adicione-o e reinicie o agente.

Página de boas-vindas predefinida do nginx ou 502 Bad Gateway. A página de boas-vindas indica que o site predefinido ainda está ativado ou que o bloco do Zabbix não está ligado. Remova /etc/nginx/sites-enabled/default e confirme que /etc/nginx/conf.d/zabbix.conf existe, conforme descrito no passo 6. Um 502 significa que o nginx chegou ao PHP, mas o PHP-FPM está parado ou a escutar noutro socket. Inicie php8.3-fpm e confirme que o socket fastcgi_pass no bloco do Zabbix corresponde ao pool em execução.

Backups, upgrades e TLS

A base de dados contém todo o histórico, por isso faça cópias de segurança com mysqldump de forma programada e guarde o dump fora do servidor:

mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gz

Os ficheiros de configuração do /etc/zabbix também são pequenos e vale a pena guardá-los, mas podem ser recriados; os dados não. A restauração é o processo inverso: crie a base de dados, importe o dump e aponte a configuração para ela.

As atualizações dentro da linha 7.0 são execuções normais de apt update && apt upgrade; o servidor aplica as migrações de esquema na inicialização seguinte, por isso atualize os pacotes e reinicie zabbix-server. Uma futura linha principal exige uma migração planeada. Leia as notas de atualização, faça primeiro um dump da base de dados e espere uma alteração de esquema unidirecional. Esse salto unidirecional é precisamente o motivo para fixar uma linha LTS e permanecer nela.

Não deixe o frontend exposto apenas por HTTP. Quando o DNS apontar para o servidor, configure um certificado com Certbot e Let's Encrypt no nginx para Ubuntu 24.04, que reescreve o bloco do servidor para escutar na porta 443 e redirecionar a porta 80. Enquanto reforça a segurança de um servidor que inicia sessão para monitorizar todos os outros servidores que gere, proteja também o SSH com fail2ban para bloquear tentativas de força bruta no SSH. Uma sessão de monitorização não deve transmitir dados em texto simples, e a sua porta de entrada não deve ficar aberta a tentativas de adivinhar palavras-passe.

FAQ

Preciso do agente Zabbix ou posso monitorizar sem ele?

As duas opções funcionam. O agente (agent2) fornece métricas detalhadas por host, incluindo CPU, memória, discos, processos, serviços e ficheiros de log. É a escolha habitual para servidores que controla. O monitoramento sem agente abrange dispositivos onde não pode instalar software: SNMP para switches e impressoras, ping ICMP para verificar a acessibilidade, verificações HTTP para endpoints e IPMI para o estado do hardware. A maioria das implementações reais combina as duas opções.

Por que o frontend informa que o servidor Zabbix não está em execução?

O frontend funciona, mas não consegue contactar um processo zabbix-server ativo. Normalmente, o servidor iniciou, não conseguiu iniciar sessão porque DBPassword em zabbix_server.conf está incorreta ou vazia e terminou logo a seguir. Execute systemctl status zabbix-server e leia /var/log/zabbix/zabbix_server.log; uma linha [Z3001] connection to database ... failed confirma o problema. Corrija a palavra-passe e reinicie o serviço. O aviso desaparece dentro de um minuto.

Tenho de usar MySQL ou posso usar PostgreSQL?

As duas opções são totalmente suportadas: zabbix-server-mysql com MariaDB ou MySQL, como neste guia, ou zabbix-server-pgsql com PostgreSQL. Em instalações pequenas, a escolha tem pouca importância. Em instalações grandes, o PostgreSQL com a extensão TimescaleDB particiona as tabelas de histórico e torna a manutenção muito mais barata. Por isso, as instalações de maior dimensão tendem a preferi-lo. Escolha uma opção e mantenha-a. Migrar mais tarde exige uma exportação e uma importação completas, não apenas uma alteração de configuração.

De quanta RAM precisa um servidor Zabbix tudo-em-um?

Para uma máquina que monitoriza alguns hosts, 2 GB é um mínimo realista e 4 GB oferece uma margem confortável acima de algumas dezenas de hosts. A memória é usada sobretudo pela cache da base de dados e pelos processos de consulta do servidor. Um VPS com 1 GB funciona, mas deixa a base de dados sem memória à medida que o histórico cresce. Acima de cem hosts, coloque a base de dados num servidor próprio e ajuste o respetivo buffer pool, em vez de adicionar mais RAM a uma única máquina.

O Zabbix é excessivo para alguns servidores?

Pode ser. Se apenas precisa de saber "está ativo?" e de uma página que possa partilhar, uma ferramenta mais simples, como Uptime Kuma para monitorização de disponibilidade e estado, é mais rápida de configurar e mais fácil de consultar rapidamente. Escolha o Zabbix quando precisar de limites por métrica, gráficos históricos, hosts baseados em templates e regras de escalonamento. São funcionalidades que um verificador simples de disponibilidade não consegue fornecer em toda uma infraestrutura.