Como instalar Zabbix 7.0 LTS no Ubuntu 24.04
Guia para instalar Zabbix 7.0 LTS no Ubuntu 24.04 com nginx e MySQL. Aprenda a importar o schema e configurar o agent2 sem erros de permissão ou conexão.
O que você está construindo
Um único VPS Ubuntu 24.04 executando a stack completa do Zabbix 7.0 LTS: o daemon zabbix-server para coleta e alertas, um banco de dados MariaDB/MySQL para armazenar métricas, um frontend PHP servido pelo nginx e o zabbix-agent2 coletando métricas do próprio servidor. Após a instalação, você o aponta para um segundo servidor, anexa um template e recebe um e-mail no momento em que um disco enche ou um serviço para de funcionar.
O Zabbix é mais robusto que uma ferramenta de status-page: é um sistema real de séries temporais com templates, triggers, escalonamento e retenção de histórico. A maioria dos problemas ocorre em três etapas que as pessoas pulam — importar o schema do banco de dados, configurar a senha do banco que o servidor utiliza e descomentar duas linhas no arquivo de configuração do nginx. Se configurar isso corretamente, o restante é simples. Se você precisa apenas de verificações de up/down e uma página de status compartilhável, um monitor de status leve como o Uptime Kuma faz isso em um único container; o Zabbix é indicado quando você precisa de limites por métrica e escalonamento em múltiplos hosts.
Use a linha 7.0 LTS: o server, frontend, agent2 e o schema são versionados juntos e recebem correções de segurança por anos. Antes de copiar o nome do repositório abaixo, verifique a página oficial de download do Zabbix — o pacote de release latest sempre aponta para a versão 7.0 mais recente, mas se preferir fixar um build 7.0-N específico, a página também lista esse nome de arquivo. Todos os outros comandos aqui são estáveis para toda a linha 7.0.
Dimensionamento, portas e pré-requisitos
Considere um VPS Ubuntu 24.04 KVM recém-instalado com acesso root ou sudo. Seja realista quanto aos recursos: 2 GB de RAM e duas vCPUs são o mínimo real para rodar server, database, nginx e PHP em uma única máquina monitorando alguns hosts. Uma máquina com 1 GB inicia o sistema, mas o banco de dados ficará sem recursos conforme o histórico cresce; planeje 4 GB após alguns dezenas de hosts e, acima de cem, mova o banco de dados para um servidor próprio. O uso de disco aumenta conforme a quantidade de itens coletados e o tempo de retenção do histórico; reserve alguns gigabytes para começar; o housekeeper remove dados antigos conforme as janelas de retenção configuradas.
Portas: 80 e 443 para o frontend, públicas ou restritas ao seu próprio IP. O server escuta na TCP 10051 para agentes ativos que enviam dados, e cada agente escuta na TCP 10050 para o server realizar o polling. Abra apenas o que for exposto se houver um firewall na frente. Ter um registro DNS A para o frontend é recomendável, pois você precisará de um certificado real para ele — um servidor Zabbix monitora todos os outros serviços que você executa, portanto, ele deve fazer parte de stack de self-hosting recomendada para 2026 em vez de ser adicionado posteriormente.
Passo 1 — Adicione o repositório oficial do Zabbix 7.0
O pacote zabbix-release realiza apenas uma tarefa: ele insere a lista de fontes do apt e a chave de assinatura no seu sistema. Instale-o e depois 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 updateSe o comando wget retornar 404 Not Found, o nome do arquivo mudou — abra a página de download do Zabbix, selecione Ubuntu 24.04 e copie a URL zabbix-release exata exibida. Um apt update limpo mostra uma linha repo.zabbix.com e não apresenta avisos de chave; The following signatures couldn't be verified because the public key is not available significa que o pacote de release não instalou a chave, portanto, execute o dpkg -i novamente e atualize de novo.
Passo 2 — Instalar o server, frontend e agent
Instale o server compilado para MySQL, o frontend PHP, a configuração do nginx, os arquivos de schema SQL e o agent2 de uma só vez.
sudo apt install -y zabbix-server-mysql zabbix-frontend-php \
zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2zabbix-server-mysql é o server compilado para MySQL/MariaDB; para PostgreSQL, instale zabbix-server-pgsql e ajuste os passos de banco de dados abaixo. zabbix-sql-scripts contém o schema que você importará a seguir — na versão 7.0, ele é um pacote separado; esquecer este pacote fará com que o caminho de importação não seja encontrado posteriormente. Nenhum destes pacotes instala um motor de banco de dados, portanto, instale o MariaDB agora se o servidor ainda não possuir um.
sudo apt install -y mariadb-server
sudo systemctl enable --now mariadbPasso 3 — Criar o banco de dados com o character set correto
O Zabbix exige uma collation específica: o banco de dados deve ser utf8mb4 com utf8mb4_bin, caso contrário a importação falhará com erros de foreign-key. Abra um shell 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 serve como uma medida de segurança para a importação. O schema do Zabbix cria stored functions, e um usuário não-SUPER como o zabbix não consegue criá-las com o binary logging ativado — o MySQL 8 habilita o binary logging por padrão, e algumas versões gerenciadas do MariaDB também (o MariaDB padrão não habilita). Se você pular essa flag em um servidor com binary logging ativado, a importação parará com ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled. Definir como root resolve isso; desative o recurso novamente após a importação. Anote a senha exatamente — a configuração do servidor exige a mesma string, byte a byte.
Passo 4 — Importar o schema (o passo que as pessoas pulam)
Este é o motivo mais comum para um frontend recém-instalado não carregar: o banco de dados criado está vazio. Importe o schema contido em zabbix-sql-scripts para dentro dele.
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | \
mysql --default-character-set=utf8mb4 -uzabbix -p zabbixO comando solicitará a senha do zabbix, levará de trinta a sessenta segundos em uma VPS pequena e não exibirá mensagens em caso de sucesso — o silêncio indica que o processo foi concluído corretamente. zcat: /usr/share/zabbix-sql-scripts/mysql/server.sql.gz: No such file or directory indica que o pacote zabbix-sql-scripts não está instalado (volte ao Passo 2). ERROR 1045 (28000): Access denied for user 'zabbix'@'localhost' indica que a senha ou a permissão do Passo 3 está incorreta. Assim que terminar, desative a flag de segurança novamente:
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 0;"Confirme a importação com sudo mysql -e "SELECT COUNT(*) FROM zabbix.users;" — um número, e não um erro de doesn't exist, confirma que o schema foi importado.
Passo 5 — Defina a senha do banco de dados em zabbix_server.conf
O servidor lê as credenciais do banco de dados em /etc/zabbix/zabbix_server.conf. Apenas a senha precisa ser configurada — DBName e DBUser já possuem o padrão zabbix. Descomente a linha # DBPassword= e defina-a:
DBName=zabbix
DBUser=zabbix
DBPassword=choose-a-strong-passwordA senha deve ser idêntica à definida no Passo 3. Uma DBPassword em branco ou incorreta é a principal causa do erro "Zabbix server is not running" que aparece posteriormente: o daemon inicia, falha no login e encerra a execução. Nenhuma mensagem aparece na tela — apenas nos logs.
Passo 6 — Aponte o nginx para o frontend
O pacote zabbix-nginx-conf instala um server block em /etc/zabbix/nginx.conf e cria um link simbólico para o nginx a partir de /etc/nginx/conf.d/zabbix.conf, mas as linhas listen e server_name vêm comentadas. O nginx não servirá nada para o Zabbix até que você as edite:
server {
listen 80;
server_name zabbix.example.com;
...
}Use seu domínio ou o IP público do servidor se ainda não tiver DNS. Dois pontos de atenção. O site de boas-vindas padrão do nginx no Ubuntu também escuta na porta 80 e é definido como o servidor padrão; por isso, ele responde a qualquer requisição cujo nome não coincida com o seu — remova-o para evitar que a página errada seja carregada: sudo rm -f /etc/nginx/sites-enabled/default. E se o /etc/nginx/conf.d/zabbix.conf estiver ausente (um problema conhecido de empacotamento), crie o link manualmente com sudo ln -s /etc/zabbix/nginx.conf /etc/nginx/conf.d/zabbix.conf. Em seguida, teste e recarregue:
sudo nginx -t
sudo systemctl reload nginxO comando nginx -t deve exibir test is successful. Se exibir nginx: [emerg] a duplicate default server for 0.0.0.0:80, tanto o site padrão quanto o bloco do Zabbix estão tentando responder em default_server — remova o site padrão e teste novamente. Frequentemente, o teste passa com apenas um aviso de conflicting server name, mas o navegador ainda exibe a página de boas-vindas padrão: isso ocorre porque o site padrão está respondendo a um nome não correspondente; removê-lo resolve o problema.
Passo 7 — Iniciar e habilitar os serviços
Inicie o server, o agent, o PHP-FPM e o nginx, e habilite-os para que iniciem automaticamente após um reboot.
sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.3-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.3-fpmO Ubuntu 24.04 utiliza o PHP 8.3, portanto o serviço FPM é php8.3-fpm; o pacote zabbix-nginx-conf executa o frontend sob esse mesmo master. Confirme se o server iniciou e permanece ativo:
sudo systemctl status zabbix-server --no-pager
sudo tail -n 20 /var/log/zabbix/zabbix_server.logUm log saudável termina com o server iniciado e seus processos housekeeper, poller e trapper em execução. Se você vir [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost', o DBPassword do Passo 5 está incorreto — corrija-o e reinicie. Uma linha [Z3005] query failed: [1146] Table 'zabbix.dbversion' doesn't exist significa que você pulou a importação do schema no Passo 4, portanto o server não tem dados para ler.
Passo 8 — Finalizar o assistente de configuração web
Acesse http://your-domain-or-ip. O assistente de configuração do Zabbix será aberto. Siga os passos:
- Welcome — escolha um idioma.
- Check of pre-requisites — todas as linhas devem exibir OK por padrão; o pool
/etc/zabbix/php-fpm.confjá define os limites de PHP necessários para o Zabbix. - Configure DB connection — tipo de banco de dados MySQL, host
localhost, porta0(porta padrão ou socket), nome do banco de dadoszabbix, usuáriozabbixe a senha do Passo 3. Credenciais incorretas ou esquema ausente causarão erro nesta etapa. - Settings — mantenha o host do servidor Zabbix como
localhost, porta10051, e defina um nome para a instalação. - Pre-installation summary, depois Install — o assistente criará o arquivo
/etc/zabbix/web/zabbix.conf.php. - Finish — faça login como
Admin(A maiúsculo) com a senhazabbixe altere essa senha imediatamente em Users.
Se o assistente reportar Cannot create the configuration file, o usuário web não consegue escrever em /etc/zabbix/web/ — baixe o arquivo zabbix.conf.php sugerido, coloque-o manualmente no diretório usando sudo e clique em Finish.
Passo 9 — Adicionar o host local e anexar um template
O Zabbix não monitora a si mesmo automaticamente. Vá em 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 porta 10050. Em Templates, vincule o Linux by Zabbix agent (a variante de passive-poll; o Linux by Zabbix agent active utiliza agent push). Salve.
Em menos de um minuto, a linha do host exibirá o rótulo verde ZBX e as métricas aparecerão em Monitoring → Latest data. Um rótulo ZBX vermelho indica que o servidor não consegue alcançar o agent — este é um erro de conectividade detalhado abaixo, não um erro deste passo.
Passo 10 — Um trigger útil e um alerta por e-mail
O template Linux by Zabbix agent já possui triggers para CPU alta, memória baixa e discos cheios, portanto você terá alertas assim que vinculá-lo. Para ver como um é construído, adicione o seu: abra o host, vá em Triggers → Create trigger, nomeie como 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])>90vfs.fs.dependent.size[/,pused] é o item de percentual de uso que o filesystem discovery do template cria para o filesystem root (o template Linux do 7.0 coleta vfs.fs.get uma única vez e deriva os itens dependentes por mount), portanto o trigger dispara sem coleta de dados adicional. Salve-o.
Um trigger apenas altera a cor de uma linha no dashboard até que uma action notifique alguém. Em Alerts → Media types → Email, configure o servidor SMTP, porta, endereço do remetente, segurança de conexão (geralmente STARTTLS) e as credenciais de relay, então use o Test — uma falha ali indica que o caminho SMTP está incorreto antes que qualquer alerta real dependa dele. Atribua um endereço ao usuário Admin em Users → Users → Admin → Media → Add e escolha quais severidades devem notificar. Em seguida, configure em Alerts → Actions → Trigger actions → Create action: adicione uma condição como Trigger severity >= Warning e, em Operations, envie para o Admin via Email. Salve e habilite. Prefere chat? O Zabbix 7.0 possui media types de webhook para Slack, Discord e Telegram — configure um exatamente como o Email e atribua-o a um usuário.
Monitorando um segundo servidor com o agent
Para monitorar outro servidor, adicione também o repositório do Zabbix nele — o Ubuntu 24.04 não possui pacotes do Zabbix nativos — e instale apenas o agent:
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-agent2Edite o arquivo /etc/zabbix/zabbix_agent2.conf, defina Server com o IP do servidor Zabbix (para polling passivo) e, para checks ativos, defina ServerActive junto a um Hostname único que corresponda ao host criado na interface web:
Server=10.0.0.10
ServerActive=10.0.0.10
Hostname=web-01Execute sudo systemctl enable --now zabbix-agent2 e libere a porta TCP 10050 no servidor Zabbix para esta máquina. Na interface web, crie um host com a interface Agent apontando para o IP desta máquina, vincule o template de Linux e o reporte ocorrerá em menos de um minuto.
Modos de falha e as strings que você verá
O frontend exibe Error connecting to database ou um erro de banco de dados. No passo de DB do wizard, Access denied for user 'zabbix'@'localhost' (using password: YES) significa que a senha não coincide com o Passo 3 ou o GRANT nunca foi executado. Se o banco de dados conecta, mas o frontend reporta The frontend does not match Zabbix database ou Table 'zabbix.users' doesn't exist, a importação do schema no Passo 4 foi pulada ou falhou — execute-a novamente em um banco de dados recém-criado.
Banner laranja: Zabbix server is not running: the information displayed may not be current. O frontend está ativo, mas não consegue alcançar um servidor em execução. Três causas possíveis, sendo a primeira a mais provável. O serviço está parado — verifique systemctl status zabbix-server e inicie-o. O serviço está rodando, mas não alcança o banco de dados — o log mostra [Z3001] connection to database 'zabbix' failed: [1045] Access denied, o que significa uma DBPassword incorreta ou em branco. Ou o frontend aponta para o servidor errado, armazenado como host localhost porta 10051 em /etc/zabbix/web/zabbix.conf.php. No Ubuntu não há SELinux por padrão, portanto a causa de socket do SELinux citada em guias de RHEL não se aplica; aqui o problema é quase sempre a senha do banco de dados ou um serviço parado.
O host exibe um rótulo vermelho ZBX; erro de item Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused. O agente não está rodando ou não está escutando. Verifique systemctl status zabbix-agent2 e confirme ListenPort=10050. Um timeout em vez de "connection refused" significa que um firewall está descartando a porta 10050. O erro Received empty response from Zabbix Agent. Assuming that agent dropped connection because of access permissions. relacionado significa que o agente é alcançável, mas a linha Server= não lista o IP do servidor Zabbix — adicione-o e reinicie o agente.
Página de boas-vindas padrão do nginx, ou 502 Bad Gateway. A página de boas-vindas significa que o site padrão ainda está habilitado ou o bloco do Zabbix não está linkado — remova /etc/nginx/sites-enabled/default e confirme se /etc/nginx/conf.d/zabbix.conf existe, conforme o Passo 6. Um 502 significa que o nginx alcançou o PHP, mas o PHP-FPM está parado ou escutando em um socket diferente — inicie o php8.3-fpm e verifique se o socket fastcgi_pass no bloco do Zabbix coincide com o pool em execução.
Backups, upgrades, and TLS
O banco de dados contém todo o histórico; faça o backup com mysqldump de forma programada e mantenha o dump fora do servidor:
mysqldump --single-transaction zabbix | gzip > zabbix-$(date +%F).sql.gzOs arquivos de configuração /etc/zabbix são pequenos e também vale a pena salvá-los, mas eles podem ser recriados; os dados não. O processo de restauração é o inverso — crie o banco de dados, importe o dump e aponte a configuração para ele.
Atualizações dentro da linha 7.0 são execuções comuns de apt update && apt upgrade; o servidor aplica as migrações de schema no próximo início, portanto, atualize os pacotes e reinicie o zabbix-server. Uma mudança para uma nova linha major é um procedimento deliberado — leia as notas de atualização, faça o dump do banco de dados primeiro e esteja ciente de que a mudança de schema é irreversível. Essa irreversibilidade é o motivo exato para você utilizar uma linha LTS e permanecer nela.
Não deixe o frontend em HTTP puro. Assim que o DNS apontar para o servidor, instale um certificado usando Certbot e Let's Encrypt no nginx para Ubuntu 24.04, que reescreve o server block para escutar na porta 443 e redirecionar a 80. Enquanto você reforça a segurança de um servidor que faz login para monitorar todos os outros servidores que você opera, proteja também o SSH dele com fail2ban banindo tentativas de brute-force no SSH. Um login de monitoramento não deve trafegar em texto claro, e sua porta de entrada não deve ficar aberta para tentativas de adivinhação de senha.
FAQ
Eu preciso do Zabbix agent ou posso monitorar sem ele?
Ambos funcionam. O agent (agent2) fornece métricas detalhadas por host — CPU, memória, discos, processos, serviços, arquivos de log — e é a escolha padrão para servidores sob seu controle. O monitoramento agentless atende dispositivos onde não é possível instalar software: SNMP para switches e impressoras, ICMP ping para conectividade, verificações HTTP para endpoints e IPMI para integridade do hardware. A maioria das implementações reais utiliza ambos.
Por que o frontend diz que o Zabbix server não está rodando?
O frontend está funcionando, mas não consegue alcançar um processo zabbix-server ativo. Geralmente o servidor iniciou, mas falhou ao fazer login porque o DBPassword em zabbix_server.conf está incorreto ou vazio, e o processo encerrou. Execute systemctl status zabbix-server e leia /var/log/zabbix/zabbix_server.log; uma linha [Z3001] connection to database ... failed confirmará o erro. Corrija a senha e reinicie; o aviso desaparecerá em um minuto.
Eu tenho que usar MySQL ou posso usar PostgreSQL?
Ambos são totalmente suportados: zabbix-server-mysql com MariaDB ou MySQL, como neste guia, ou zabbix-server-pgsql com PostgreSQL. Para instalações pequenas, a escolha é irrelevante. Para instalações grandes, o PostgreSQL com a extensão TimescaleDB particiona as tabelas de histórico e reduz o custo de manutenção, por isso grandes ambientes preferem esta opção. Escolha um e mantenha-o — migrar posteriormente exige um export e import completo, não apenas uma troca de configuração.
Quanta RAM um servidor Zabbix all-in-one precisa?
Para uma única máquina monitorando poucos hosts, 2 GB é o limite mínimo realista e 4 GB é confortável após algumas dezenas de hosts; a memória é usada principalmente pelo cache do banco de dados e pelos pollers do servidor. Um VPS de 1 GB funciona, mas causará falta de memória no banco de dados conforme o histórico cresce. Acima de cem hosts, separe o banco de dados em um servidor próprio e ajuste o buffer pool em vez de adicionar mais RAM em uma única máquina.
O Zabbix é exagero para apenas alguns servidores?
Pode ser. Se você precisa apenas de "está online?" e uma página para compartilhar, uma ferramenta mais leve como Uptime Kuma para monitoramento de uptime e status é mais rápida de configurar e mais fácil de ler rapidamente. Escolha o Zabbix quando precisar de limites por métrica, gráficos históricos, templates de hosts e regras de escalonamento — recursos que um pinger simples não consegue fornecer para um parque de máquinas.