Instalação do Zabbix 5 LTS + Grafana 7/8 + NGINX + PostgreSQL + Notificação Telegram com Debian 10/11
O Zabbix é uma solução de nível enterprise, de código aberto. O Zabbix é um software que monitora vários parâmetros da rede, dos servidores e da saúde dos serviços. Utiliza-se de um mecanismo flexível de notificação que permite configurar alertas por e-mail entre outros como Telegram, para praticamente qualquer evento. As notificações permitem que se reaja rapidamente à problemas no ambiente. O Zabbix oferece excelentes recursos de relatórios e visualização de dados armazenados. Isso faz com que o Zabbix seja a ferramenta ideal para planejamento de capacidade.
O Grafana é um software livre que permite a visualização de formato de dados métricos. Ele permite criar painéis e gráficos a partir de várias fontes, mas aqui iremos vamos aprender a integra-lo com o Zabbix.
Requisitos se Debian 10 Buster
– * Debian 10 instalação limpa
– * Servidor WEB NGINX + PHP + PostgreSQL + phpPgAdmin + Letsencrypt (Opcional phpPgAdmin + Letsencrypt)
Requisitos se Debian 11 Bullseye
– Instalação do Debian 11 Bullseye limpa passo-a-passo
– Servidor WEB NGINX + PHP + PostgreSQL + phpPgAdmin + Letsencrypt no Debian 11 Bullseye (LNPP)
Instalação do Zabbix
Para instalação do Zabbix vamos incluir o repositório do oficial do Zabbix.
1 2 3 |
# su - # cd /tmp # apt install wget |
Repositório Debian 10
1 2 |
# wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-1+buster_all.deb # dpkg -i zabbix-release_5.0-1+buster_all.deb |
Repositório Debian 11
1 2 |
# wget https://repo.zabbix.com/zabbix/5.0/debian/pool/main/z/zabbix-release/zabbix-release_5.0-2+debian11_all.deb # dpkg -i zabbix-release_5.0-2+debian11_all.deb |
Atualize o repositório e realize a instalação
1 2 |
# apt update ; apt upgrade # apt install zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf zabbix-agent |
Vamos criar uma base de dados chamada zabbix e um usuário também chamado de zabbix no PostgreSQL.
Não esqueça de alterar a senha: Use o gerador de senha: https://senhasegura.remontti.com.br/
1 2 3 4 5 6 7 8 |
# su - postgres $ createuser --pwprompt zabbix Digite a senha para a nova role: <SENHA ZABBIX> Digite-a novamente: <SENHA ZABBIX> Senha: <SENHA POSTGRES CASO TENHA DEFINIDO NA INSTALAÇÃO DO MESMO> $ createdb -O zabbix zabbix Senha: <SENHA POSTGRES> |
Importe o esquema inicial e os dados. Você será solicitado a inserir a senha que foi criada anteriormente.
1 2 3 |
$ zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | psql -U zabbix -d zabbix &>/dev/null Senha para usuário zabbix: : <SENHA ZABBIX> $ exit |
Edite o arquivo zabbix_server.conf para informar os dados para conexão com do PostgreSQL.
1 |
# vim /etc/zabbix/zabbix_server.conf |
Procure por # DBPassword= descomente e sete sua senha.
1 2 3 |
#... DBPassword=<SENHA ZABBIX> #... |
Ajuste o arquivo /etc/zabbix/php-fpm.conf, descomente e defina o fuso horário correto. timezone Sua região.
1 |
# vim /etc/zabbix/php-fpm.conf |
Exemplo:
1 2 |
; php_value[date.timezone] = Europe/Riga php_value[date.timezone] = America/Sao_Paulo |
Este é modelo padrão, altere então para sua região, também irei alterar alguns valores padrões se quiser pode remover as conf do mod_php5.c
Ajuste as configurações do nginx.
1 |
# vim /etc/nginx/conf.d/zabbix.conf |
Deixei algumas linhas comentadas como exemplo, faça de acordo com sua necessidade.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
server { listen 80; listen [::]:80; server_name zabbix.remontti.com.br localhost; #server_name OU_SEU_IP; # Metodo simples para quem quer rodar em uma determinada porta #listen 8181; #listen [::]:8181; #server_name _; root /usr/share/zabbix; index index.php; # Desmomente para deixar restringido apenas para determinados prefixos #allow 192.168.87.0/24; #allow 127.0.0.1; #allow 2001:0db8::/32; #allow ::1; #deny all; #error_page 403 http://www.remontti.com.br; location = /favicon.ico { log_not_found off; } location / { try_files $uri $uri/ =404; } location /assets { access_log off; expires 10d; } location ~ /\.ht { deny all; } location ~ /(api\/|conf[^\.]|include|locale) { deny all; return 404; } location ~ [^/]\.php(/|$) { fastcgi_pass unix:/var/run/php/zabbix.sock; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /usr/share/zabbix; fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } |
Inicie o servidor Zabbix e os processos do agente e configure-os para que sejam iniciados durante o boot do sistema.
1 |
# systemctl enable zabbix-server zabbix-agent |
Debian 10
1 |
# systemctl restart zabbix-server zabbix-agent nginx php7.3-fpm |
Debian 11
1 |
# systemctl restart zabbix-server zabbix-agent nginx php7.4-fpm |
Acesse em seu navegador http://seu_ip:porta ou http://zabbix.seudominio.com.br
Next Step
Selecione PostgreSQL e informe a senha do usuário zabbix criada anteriormente, clique em Next step.
Next step
Entre com Usuário Admin e senha zabbix
Para dexa-lo em Português / Tema escuro:
Possível bug na instalação
Caso se deparar com essa tela não se assuste, faça o seguinte:
1 2 |
# touch /etc/zabbix/web/zabbix.conf.php # chown www-data. /etc/zabbix/web/zabbix.conf.php |
De um [Back] depois [Next] q é sucesso!
Alertas no Telegram
No Zabbix 5 temos o Telegram/Webhook, então bora aprender mexer nisso! Mas antes de mais nada será necessário criarmos um bot no Telegram.
Criando Bot no telegram
Abra o Telegram e procure por @BotFather.
Inicie a conversa com ele.
– Digite o comando /newbot para iniciar a criação de um novo bot.
– Após o comando você vai dar um nome para seu bot. Ex.: “Bot Legal RR”.
– Em seguida é necessário digitar o nome de usuário para o bot, sendo obrigatório terminar com bot. Ex.: “legallrr_bot”.
– Ao finalizar você receber informações com seu TOKEN, que vamos utilizar em seguida.
Neste exemplo nosso token para acessar a API HTTP ficou:
757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0
Agora que o token abra o menu Administração –> Tipos de mídias
Localize o Telegram e clique nele
Edite o ParseMode para HTML e Token para o token q você acabou de criar. Marque Process tags.
Neste momento que escrevo na própria descrição da mídia telegram ele recomenda você add o bot @myidbot para descobrir o seu ID, mas parace que este bot está “dormindo”. Vamos ao metodos tradicional. Você pode receber notificações direta do seu bot ou então adiciono-lo em um grupo.
Procure pelo seu bot e comece uma conversa com ele e envie uma mensagem de teste para o mesmo, pois vamos precisar descobrir o ID do seu usuário, para que ele possa lhe enviar as mensagens.
Abra em seu seu navegador a seguinte URL https://api.telegram.org/botTOKEN/getUpdates para descobrir o ID do usuário que enviou a mensagem ou de um grupo.
Ex.: https://api.telegram.org/bot757396508:AAHpaoyVN-95maOCax1vDPDQBnSaZd9P5r0/getUpdates
:: Chat privado ::
1 2 3 4 5 6 7 |
{"ok":true,"result":[{ "update_id":649208620,"message":{ "message_id":2,"from":{"id":221122111,"is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"}, "chat":{"id":999999999,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","type":"private"}, "date":1541210279,"text":"Testando" } }]} |
ID do chat privado: 999999999
Se desejar criar um grupo também, basta adicionar seu bot a ele, após adiciona-lo envia uma mensagem como /teste para que possamos coletar o ID do grupo.
:: Chat em Grupo ::
1 2 3 4 5 6 |
{"ok":true,"result":[{ "update_id":649208622,"message":{"message_id":4,"from":{ "id":221122111,"is_bot":false,"first_name":"Rudimar","last_name":"Remontti","username":"remontti","language_code":"pt-br"}, "chat":{"id":-88888888888,"title":"Grupo Legal","type":"group","all_members_are_administrators":true },"date":1541210975,"text":"/teste","entities":[{"offset":0,"length":6,"type":"bot_command"} }]} |
ID do chat grupo: -88888888888
Atenção para os grupos que sempre tem um sinal “-” na frente do ID.
Com o ID do grupo/usuário precisamos vincular ao usuário do Zabbix (Neste caso Admin)
Administração ⇒ Usuários Clique no usuário Admin
Com as opções do usuário aberto clique na aba Mídia em seguita clique no Adicionar, selecione o Tipo Telegram e insira o em Enviar para o ID.
Agora vamos criar a ação que fará o envios dos alertas.
Configurações ⇒ Ações ⇒ Criar ação
De um nome para sua ação
Em Condição clique em adicionar: Selecione Incidente suprimido e marque Não
Na aba Operações primeiro item Operações clique em adicionar
Enviar para usuário: Selecione o Admin
Enviar apenas para: Telegram
Marque Custom message, preencha com:
Assunto:
1 |
❌ Problema: <b>{HOST.NAME}</b> |
Mensagem
1 2 3 4 5 6 |
{EVENT.NAME} <b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i> Tempo do evento: {EVENT.AGE} <a href="{HOST.IP}">{HOST.IP}</a> <i>{EVENT.SEVERITY}</i> |
No item Operações de recuperação faremos praticamente o mesmo:
Assunto:
1 |
✅ Resolvido: <b>{HOST.NAME}</b> |
Mensagem padrão
1 2 3 4 5 6 7 |
{EVENT.NAME} <b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i> Tempo do evento: {EVENT.AGE} <a href="{HOST.IP}">{HOST.IP}</a> <i>{EVENT.SEVERITY}</i> ID's: {ITEM.ID}/{EVENT.ID} |
No item Operações de atualização
Assunto:
1 |
Problema atualizado: {EVENT.NAME} |
Mensagem padrão
1 2 3 |
{USER.FULLNAME} {EVENT.UPDATE.ACTION} problema em {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}. {EVENT.UPDATE.MESSAGE} O status atual do problema é {EVENT.STATUS}, reconhecido: {EVENT.ACK.STATUS}. |
Operações configurada, clique em atualizar.
Pronto! Agora precisamos gerar um incidente para ver se nosso alerta será enviado para o Telegram.
O sistema de envio de mensagem está concluído! 🙂
Grafana v7/v8
1 |
# apt install gnupg2 apt-transport-https software-properties-common wget |
Para versão 7.5.x: (Não recomendado)
1 2 3 4 5 |
# cd /tmp/ # wget https://dl.grafana.com/oss/release/grafana_7.5.11_amd64.deb # apt install ./grafana_7.5.11_amd64.deb # grafana-cli plugins update-all # systemctl restart grafana-server |
Para versão 8.2.x: (Não recomendado)
1 2 3 4 5 |
# cd /tmp/ # wget https://dl.grafana.com/oss/release/grafana_8.2.7_amd64.deb # apt install ./grafana_8.2.7_amd64.deb # grafana-cli plugins update-all # systemctl restart grafana-server |
Outras versões consulte https://grafana.com/grafana/download?edition=oss
Para Ultima versão v8.X: (Recomendado)
Vamos baixar a key do repositório e adiciona-lo
1 2 |
# wget -q -O - https://packages.grafana.com/gpg.key | apt-key add - # echo "deb https://packages.grafana.com/oss/deb stable main" | tee -a /etc/apt/sources.list.d/grafana.list |
Atualize o repositório e instale o grafana
1 2 |
# apt update # apt install grafana |
Antes de iniciar o grafana, se deseja alterar a porta padrão 3000 (recomendo) edite:
1 |
# vim /etc/grafana/grafana.ini |
Localize http_port e defina a porta de sua escolha.
1 2 |
# The http port to use ;http_port = 3000 |
Exemplo:
1 |
http_port = 53000 |
Instale o Plugin Zabbix
1 |
# grafana-cli plugins install alexanderzobnin-zabbix-app |
É recomendado que mensalmente você faça atualizações dos plugins instalados, com o comando:
1 |
# grafana-cli plugins update-all |
Agora sim colocamos o Grafana para iniciar junto com a inicialização, ativamos e inicializamos o serviço:
1 2 3 |
# systemctl daemon-reload # systemctl enable grafana-server # systemctl start grafana-server |
Acesse em seu navegador http://IP_URL:3000 ou pela porta que você alterou. O nome de usuário padrão é admin e a senha padrão é admin.
Ao fazer login pela primeira vez, você será solicitado a alterar sua senha.
Integração do grafana com o Zabbix
Acesse o Configuration –> Plugins:
Localize o Zabbix e clique no mesmo
Agora ative clicando em Enable.
Volte em Configuration –> Data Sources
Uma nova tela com varias fontes, localize Zabbix e clique em Select
Nas opções HTTP em URL informe o endereço do seu servidor Zabbix http://IP_URL/api_jsonrpc.php. Em Access selecione Browser. Em Zabbix API details informe seu usuário e senha do Zabbix e selecione a versão correspondente.
Role até o final e e clique em Save & Test Se tudo ocorreu bem uma altera positivo com“Zabbix API version: 5.x.x” aparecerá.
Você pode também pode fazer uma conexão PostgreSQL com o banco de dados do zabbix, para tornar as coisas mais rápidas. Para isso basta “Add data source” pesquisar por PostgreSQL, então basta informa nome do banco, usuário e senha.
Vá para as configurações do data source do zabbix, localize Direct DB Connection, ative-o e selecione PostgreSQL.
Agora vem a parte mais “chata/legal” que é você montar seus gráficos, como isso é algo bem peculiar de cada um, o intuito aqui era ensinar instalar. Recomendo a leitura de Introdução ao Grafana-Zabbix do autor do plugin.
Bônus – Proxy Nginx grafana
1 |
# vim /etc/nginx/sites-available/grafana.conf |
Adicione:
1 2 3 4 5 6 7 8 9 10 11 |
server { listen 80; listen [::]:80; server_name grafana.remontti.com.br; location / { proxy_pass http://localhost:53000; proxy_set_header Host $host; } } |
Cria o link para sites-enabled em seguida verifique as configurações e reinicie o serviço.
1 2 3 |
# ln -s /etc/nginx/sites-available/grafana.conf /etc/nginx/sites-enabled/ # nginx -t # systemctl restart nginx |
Simples né? Gostou e quer me ajudar? 🙂
Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!
Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.
Abraço!
Fontes:
https://www.zabbix.com/download
https://www.zabbix.com/documentation/
https://grafana.com/docs/grafana/latest/installation/debian/
https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app
https://alexanderzobnin.github.io/grafana-zabbix/configuration/
https://core.telegram.org/bots
Está aparecendo esse erro.
Pacote nginx-full não está configurado ainda
Pacote nginx-light não está instalado.
Pacote nginx-extras não está instalado.
dpkg: erro ao processar o pacote nginx (–configure):
problemas de dependência – deixando desconfigurado
Configurando snmpd (5.7.3+dfsg-5+deb10u4) …
adduser: Alerta: o diretório pessoal ‘/var/lib/snmp’ não pertence ao usuário que você está criando atualmente.
Created symlink /etc/systemd/system/multi-user.target.wants/snmpd.service → /lib/systemd/system/snmpd.service.
dpkg: problemas com dependências impedem a configuração de zabbix-nginx-conf:
zabbix-nginx-conf depende de nginx; porém:
Pacote nginx não está configurado ainda.
Pacote nginx-full, o qual fornece nginx ainda não está configurado.
dpkg: erro ao processar o pacote zabbix-nginx-conf (–configure):
problemas de dependência – deixando desconfigurado
A processar ‘triggers’ para libapache2-mod-php7.3 (7.3.31-1~deb10u3) …
A processar ‘triggers’ para systemd (241-7~deb10u8) …
A processar ‘triggers’ para libc-bin (2.28-10+deb10u2) …
A processar ‘triggers’ para php7.3-fpm (7.3.31-1~deb10u3) …
NOTICE: Not enabling PHP 7.3 FPM by default.
NOTICE: To enable PHP 7.3 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.3-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Erros foram encontrados durante o processamento de:
nginx-full
nginx
zabbix-nginx-conf
E: Sub-process /usr/bin/dpkg returned an error code (1)
olá, primeiramente muito bom seu material e obrigado por compartilhar seu conhecimento.
Utilizando o envio para telegram de problema, conforme a documentação acima:
{EVENT.NAME}
{ITEM.NAME1} {ITEM.VALUE1}
Tempo do evento: {EVENT.AGE}
{HOST.IP}
{EVENT.SEVERITY}
Para o envio do item {ITEM.VALUE1} quando se trata de Lock de banco de dados Oracle ele não envia a mensagem no telegram e informa o seguinte erro:
Sending failed: Bad Request: can’t parse entities: Unsupported start tag “p” at byte offset 99.
Não sei se já passou por isso e se consegue me ajudar?
perdi a senha da web do grafana como recuperar?
grafana-cli admin reset-admin-password
Fala, Senhores!
Apenas uma colaboração se estiverem tendo problemas ao tentar extrair os dados para base para banco de dados, usem o diretório que coloquei abaixo… Remontti, ótimo tutorial melhor da internet com nível de detalhes!
postgres@servidor:~$ zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | psql -U zabbix -d zabbix &>/dev/null
gzip: /usr/share/doc/zabbix-server-pgsql*/create.sql.gz: No such file or directory
postgres@servidor:~$ zcat /usr/share/doc/zabbix-sql-scripts/postgresql/create.sql.gz | psql -U zabbix -d zabbix &>/dev/null
Atenciosamente,
Igor Dantas
Valeu, a pasta zabbix-sql-scripts existe apenas nas versões acima da 5.0 >
quem não conseguir achar o arquivo create.sql.gz
é só instalar ele a parte:
apt install zabbix-sql-scripts
Ou adicione no final da linha onde o Remonti mostra no Passo a passo:
apt install zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf zabbix-agent zabbix-sql-scripts
E pronto, Resolvido!
NO DEBIAN 11: Impossível encontrar o pacote zabbix-nginx-conf
Excelente tutorial! Gostaria de saber qual a configuração mínima de ram, processadores e armazenamento para o debian rodar o zabbix satisfatoriamente?
Vai depender muito do número de dispositivos/itens que ira ser coletado.
Ola Rudimar, Onde configurou o retorno na porta 10051 no nginx?
BUG PLUGIN ZABBIX: NO DATA GRAFANA 8.0
Solução fazer downgrade para última versão 7:
Comente a linha.
https://github.com/alexanderzobnin/grafana-zabbix/issues/1221
Boa tarde Rudimar,
Atualiza o tutorial, não é necessário descometa a linha ;allow_loading_unsigned_plugins = alexanderzobnin-zabbix-datasource
zabbix já esta assinado por padrão, apenas sendo necessário instalar o plugin.
abraços
Em primeiro lugar parabéns ao tutorial. Muito pratico, um verdadeiro install guide destas soluções.
Gostaria de contribuir com uma pequena dica, que me ajudoumuito.
Após algum tempo de uso do Zabbix instalado a partir deste tutorial, o servidor do zabbix nao rodava mais! Eu tentava inicializar o serviço mas sempre ele caia imediatamente o start. Apos muito pesquisar descobri que precisamos aumentar o cache do Zabbix.
No arquivo /etc/zabbix/zabbix_server.conf adicione :
CacheSize=32M
Por padrao o valor é 8M, o que pode ser insuficiente para alguns.
Obrigado Stefano. Eu normalmente altero os padrões de:
Vai depender do hardware do servidor bem como o numero de itens/serviços no servidor.
Prezados atualizei sem querer para o Grafana v8.0.4 e agora ele fica informando que o plugin não esta assinado, já tem alguma resolução pra isso, conferir o que tinha que ser feito no /etc/grafana/grafana.ini mesmo assim não vai. Alguém poderia ajudar ?
https://github.com/alexanderzobnin/grafana-zabbix/issues/1221
Comenta a linha /etc/apt/sources.list.d/grafana.list para não atualizar…
Vamos aguardar o desenvolvedor corrigir….
Este problema foi discutido no https://t.me/remontticombr convido a participar…
Ótimo, voltou tudo normal como estava, Obrigado pela ajuda muito bom o seu conteúdo.
Alguém sabe se o plugin parou de funcionar no Grafana 8?
Desativa do database do Zabbix o integração com o Banco de dados (parece ser algum bug) quem sabe em uma atualização volte, não esqueça de atualizar os plugins também. # grafana-cli plugins update-all
Remoti, ao tentar integrar o postgres no grafana 7 aparece o erro de certificado:
x509: certificate is valid for zabbix-new, not localhost
como faço para resolver?
Rumidar, estou instalando uma maquina nova com zabbix 5.4 e ao instalar o grafana ele integra com o zabbix mas, ao tentar colocar o postgres no datasource da essa mensagem:
certificate is valid for zabbix-new.teste.net.br, not localhost
Sabe como resolver isso?
Boa Tarde.
Ao tentar adicionar o Data Source ” PostgreSQL”
Gera o seguinte erro ao clicar em Save & Test (dial tcp [::1]:5432: connect: connection refused)
O que devo fazer para reverter isso?
Nota 1000 funcionou perfeitamente
Muito bom Rudimar!
Não sei porque na instalação do zabbix server não copiou o arquivo “create.sql.gz” para o caminho, ai o comando abaixo é muito rápido:
zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | psql -U zabbix -d zabbix &>/dev/null
no inicio da parte web apresentou erro “Unable to determine current Zabbix database version: the table “dbversion” was not found”
Após copiar o create.sql.gz o zcat funcionou e o zabbix abriu…
Parabéns pelo tutorial, conseguir instalar todos recursos sem problemas. Obrigado rsrsrsrsr! Já fiz minha doação para o café! Gostaria de saber se tem aluns modelos de template BGP cisco série ASR.