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.
Este tutorial está também disponível no youtube:
Requisitos:
* Debian 10 (Buster) -> Instalação Limpa
* Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP” (Opcional phpMyAdmin)
Zabbix
Para instalação do Zabbix vamos incluir o repositório do oficial do Zabbix.
12345 | # su -# cd /tmp# apt install wget# 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 |
Atualize o repositório e realize a instalação
12 | # apt update ; apt upgrade# apt install zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-agent |
Vamos criar uma base de dados chamada zabbix e um usuário também chamado de zabbix no MariaDB.
Não esqueça de alterar a senha: Use o gerador de senha: https://senhasegura.remontti.com.br/
1 | # mariadb -u root -p |
Senha
1234 | create database zabbix character set utf8 collate utf8_bin;create user zabbix@localhost identified by ‘SUA_SENHA’;grant all privileges on zabbix.* to zabbix@localhost;quit; |
Importe o esquema de tabelas e dados padrões. (Demora um pouco!)
1 | # zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mariadb -uzabbix -p zabbix |
Digite a senha de seu usuário zabbix criada no passo anterior para importar as tabelas.
Edite o arquivo zabbix_server.conf para informar os dados para conexão com o MySQL.
1 | # vim /etc/zabbix/zabbix_server.conf |
Procure por # DBPassword= descomente e sete sua senha.
123 | #…DBPassword=SUA_SENHA#… |
Ajuste o timezone pela sua região.
1 | # vim /etc/zabbix/apache.conf |
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
Se você quiser um modelo para acessa-lo por ex: zabbix.remontti.com.br, vou deixar um em seguida como proceder, bem como fechar o acesso apenas a determinado IP ou bloco.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | # Define /zabbix alias, this is the default<IfModule mod_alias.c> Alias /zabbix /usr/share/zabbix</IfModule> <Directory “/usr/share/zabbix”> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all <IfModule mod_php5.c> php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value max_input_vars 10000 php_value always_populate_raw_post_data -1 # php_value date.timezone Europe/Rig </IfModule> <IfModule mod_php7.c> php_value max_execution_time 300 php_value memory_limit 512M php_value post_max_size 48M php_value upload_max_filesize 24M php_value max_input_time 300 php_value max_input_vars 10000 php_value always_populate_raw_post_data -1 php_value date.timezone America/Sao_Paulo </IfModule></Directory> <Directory “/usr/share/zabbix/conf”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files></Directory> <Directory “/usr/share/zabbix/app”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files></Directory> <Directory “/usr/share/zabbix/include”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files></Directory> <Directory “/usr/share/zabbix/local”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files></Directory> |
Caso você queira o modelo acima então mova o /etc/zabbix/apache.conf para /etc/zabbix/apache.conf.old. Faça uma apontamento em seu DNS do subdomínio zabbix para o IP do seu servidor. Agora crie um novo arquivo:
12 | # mv /etc/zabbix/apache.conf /etc/zabbix/apache.conf.default# vim /etc/zabbix/apache.conf |
Altere em Require ip para os ips que terão acesso.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | <VirtualHost *:80> ServerName zabbix.remontti.com.br ServerAlias localhost ServerAdmin [email protected] DocumentRoot /usr/share/zabbix ErrorDocument 403 http://www.remontti.com.br <Directory “/usr/share/zabbix”> Options FollowSymLinks AllowOverride all Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8::/32 192.168.0.0/16 <IfModule mod_php7.c> php_value max_execution_time 300 php_value memory_limit 512M php_value post_max_size 48M php_value upload_max_filesize 24M php_value max_input_time 300 php_value max_input_vars 10000 php_value always_populate_raw_post_data -1 php_value date.timezone America/Sao_Paulo </IfModule> </Directory> <Directory “/usr/share/zabbix/conf”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files> </Directory> <Directory “/usr/share/zabbix/app”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files> </Directory> <Directory “/usr/share/zabbix/include”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files> </Directory> <Directory “/usr/share/zabbix/local”> Order deny,allow Deny from all <files *.php> Order deny,allow Deny from all </files> </Directory> LogLevel warn ErrorLog ${APACHE_LOG_DIR}/zabbix_error.log CustomLog ${APACHE_LOG_DIR}/zabbix_access.log combined</VirtualHost> |
Por segurança recomendo remover a assinatura do servidor, evitando os “espertinhos”
12 | # sed -i ‘s/ServerTokens OS/ServerTokens Prod/’ /etc/apache2/conf-available/security.conf # sed -i ‘s/ServerSignature On/ServerSignature Off/’ /etc/apache2/conf-available/security.conf |
Ative a o serviço junto com a inicialização do sistema, e restarte os mesmos.
12 | # systemctl enable zabbix-server zabbix-agent# systemctl restart zabbix-server zabbix-agent apache2 |
Acesse em seu navegador http://seu_ip/zabbix ou http://zabbix.seudominio.com.br
Next Step
Se tudo estiver ok: Next step
Informe a senha do banco de dados criada anteriormente para o zabbix, e clique em Next step.
Next step
Next step
Finish
Entre com Usuário Admin e senha zabbix
Para dexa-lo em Português / Tema escuro:
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 ::
1234567 | {“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 ::
123456 | {“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.
Atualize
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
12345 | {EVENT.NAME}<b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i> <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
12345 | {EVENT.NAME}<b>{ITEM.NAME1}</b> <i>{ITEM.VALUE1}</i> <a href=”{HOST.IP}”>{HOST.IP}</a><i>{EVENT.SEVERITY}</i> |
No item Operações de atualização
Assunto:
1 | Problema atualizado: {EVENT.NAME} |
Mensagem padrão
123 | {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 7
Pacotes necessários:
1 | # apt install gnupg2 apt-transport-https software-properties-common |
Vamos baixar a key do repositório e adiciona-lo
12 | # 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
12 | # 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.
12 | # The http port to use;http_port = 3000 |
Exemplo:
1 | http_port = 53000 |
Localize em [plugins] ;allow_loading_unsigned_plugins descomente removendo o “;” e adicionando:
1 | allow_loading_unsigned_plugins = alexanderzobnin-zabbix-datasource |
Caso contrário o plugin de integração com o zabbix não irá funcionar.
Já instalamos também o plugin Zabbix com ferramenta grafana-cli:
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:
123 | # 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
Clique em Add data source.
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/zabbix/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 MySQL (MariaDB) com o banco de dados do zabbix, para tornar as coisas mais rápidas. Para isso basta “Add data source” pesquisar por mysql, e informar os dados de conexões, provavelmente seu grafana esteja junto com seu zabbix, 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 MySQL.
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.
Creditos: RUDIMAR REMONTTI
Acessa o Blog e confere que tem muito material bom https://blog.remontti.com.br/