Não dá para tomar decisões sem dados, certo? Por isso mesmo é de extrema importância o monitoramento de suas soluções tecnológicas! Não seja surpreendido por incidentes em momentos inoportunos, previna-se deles, e mais, resolva-os antes que ocorram! Parece mágica? Mas não é. Tudo está relacionado ao monitoramento!

Neste post irei falar sobre monitoramento utilizando a ferramenta mais utilizada para esta finalidade, o Zabbix. Montaremos uma stack completamente funcional utilizando um ambiente com containers Docker, então, não perca tempo e venha aprender mais sobre monitoramento!

Mas afinal, o que é monitoramento?

O monitoramento é a análise contínua de uma série de ativos tecnológicos para detectar e corrigir quaisquer problemas de desempenho, muitas vezes antes mesmo de acontecerem. Envolve a coleta de estatísticas e métricas para determinar a qualidade dos serviços oferecidos pela organização. 

Este processo ajuda a apontar a localização exata do problema ou mesmo provar onde não é o problema. O monitoramento contínuo pode ajudá-lo a identificar possíveis problemas antes que eles ocorram. Isso significa que você pode resolver problemas proativamente antes que eles cheguem aos usuários. Por exemplo, você pode detectar e solucionar problemas como lentidão da rede antes que isso afete as operações comerciais. 

Com a pandemia fazendo com que muitos funcionários trabalhem em casa, é vital garantir que sua rede de negócios funcione de maneira ideal. O monitoramento remoto de rede pode garantir que sua rede não tenha problemas de desempenho e seja segura o suficiente para que os funcionários acessem os recursos da empresa.

Porque utilizar o Zabbix?

Segundo a documentação oficial do Zabbix, disponível para acesso aqui, O Zabbix foi criado por Alexei Vladishev, e atualmente é mantido e suportado pela Zabbix SIA. Trata-se de uma solução de nível enterprise, de código aberto e com suporte a monitoração distribuída.

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

Zabbix é livre de custos. É desenvolvido e distribuído através da licença pública GPLv2. Isso garante que seu código-fonte seja distribuído e esteja disponível para o público em geral.

Por conta disso o utilizaremos neste laboratório. Mas, é importantíssimo ressaltar que eu mesmo já implementei o Zabbix em ambientes de risco com números altíssimos de hosts e itens monitorados, fazendo com que ele atuasse na linha de frente de operações milionárias.

Entendendo a solução

O código aqui utilizado está disponível em meu gitlab, no link:

https://gitlab.com/sg-wolfgang/zabbix-stack/-/tree/main

Vamos comentar agora cada trecho do código, para compreendermos a solução e implementar as modificações necessárias.

version: '3.7'
services:
  mysql:
    container_name: mysql
    hostname: mysql
    image: mysql:8.0
    networks:
      - network-zabbix
    ports:
      - '3306:3306'
    volumes:
      - zabbix-var-lib-data:/var/lib/data
      - zabbix-var-lib-mysql:/var/lib/mysql
    command: ['mysqld', '--character-set-server=utf8', '--collation-server=utf8_bin', '--default-authentication-plugin=mysql_native_password']
    environment:
      - MYSQL_ROOT_PASSWORD=Senha123
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=Senha123

Podemos perceber que na primeira linha declarei a versão do docker compose utilizada. Após isso iniciamos a criação dos serviços. O primeiro serviço criado é o banco de dados MySQL para que o Zabbix possa se conectar e gerenciar os dados. Chamo a atenção para a linha command: ['mysqld', '--character-set-server=utf8', '--collation-server=utf8_bin', '--default-authentication-plugin=mysql_native_password'] que nos trás as configurações necessárias para que o Zabbix utilize a base de dados no formato correto.

Outro ponto importante são as seguintes linhas:

      - MYSQL_ROOT_PASSWORD=Senha123
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=Senha123

Estas são as credenciais que serão utilizadas. Estas informações se repetem ao longo do arquivo, visto que outros containers precisarão de autenticar neste primeiro.

Observação importante!

Altere as credenciais para utilizar o laboratório em seu ambiente!

O próximo serviço será o “motor”, o Zabbix Server. Vamos analisar o seguinte bloco de código:

  zabbix-server:
    container_name: zabbix-server
    hostname: zabbix-server
    image: zabbix/zabbix-server-mysql:latest
    networks:
      - network-zabbix
    links:
      - mysql
    restart: always
    ports:
      - '10051:10051'
    volumes:
      - zabbix-alertscripts:/usr/lib/zabbix/alertscripts
    environment:
      - DB_SERVER_HOST=mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=Senha123
    depends_on:
      - mysql

Aqui podemos observar as credenciais para conexão no banco de dados, e também que existe um bloco onde é declarado que o Zabbix Server depende do mysql para funcionar. Também temos o mapeamento de um volume para persistir os dados de alerta personalizados. O próximo bloco trata do zabbix frontend, o componente responsável pela “carinha bonita” do zabbix:

  zabbix-frontend:
    container_name: zabbix-frontend
    hostname: zabbix-frontend
    image: zabbix/zabbix-web-apache-mysql:latest
    networks:
      - network-zabbix
    links:
      - mysql
    restart: always
    ports:
      - '8080:8080'
      - '8443:8443'
    environment:
      - DB_SERVER_HOST=mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=Senha123
      - PHP_TZ=America/Sao_Paulo
    depends_on:
      - mysql

Podemos perceber mais uma vez as credenciais, e a declaração de dependência do banco de dados. Aqui ressalto as portas mapeadas:

    ports:
      - '8080:8080'
      - '8443:8443'

Como podemos perceber, para acessar o zabbix em nosso ambiente acessaremos a porta 8080 ou 8443, para http e https respectivamente.

O último serviço declarado foi o do Agente Zabbix, responsável por coletar as métricas do servidor local.

  zabbix-agent:
    container_name: zabbix-agent
    hostname: zabbix-agent
    image: zabbix/zabbix-agent2:latest
    user: root
    networks:
      - network-zabbix
    links:
      - zabbix-server
    restart: always
    privileged: true
    volumes:
      - /var/run:/var/run
    ports:
      - '10050:10050'
    environment:
      - ZBX_HOSTNAME=Zabbix server
      - ZBX_SERVER_HOST=zabbix-server

Aqui temos o nome do servidor declarado, também temos as dependências do container.

O último e não menos importante bloco de código trata do mapeamento e criação dos volumes e redes utilizados pelos containers:

networks:
  network-zabbix:
    driver: bridge
volumes:
  zabbix-var-lib-data:
  zabbix-var-lib-mysql:
  zabbix-alertscripts:

Levantando o ambiente de monitoramento

Aqui utilizarei um computador com OpenSUSE instalado, bem como o Docker e Docker Compose. Vou deixar alguns links que poderão te ajudar a preparar o ambiente:

  1. Como instalar o Linux: https://youtu.be/OybdAYBopbw
  2. Como instalar o Docker: https://docs.docker.com/engine/install/
  3. Como instalar o Docker-compose: https://docs.docker.com/compose/install/

Você também precisará do git instalado.

Vamos colocar a mão na massa. O primeiro passo é clonar o repositório que disponibilizei com o arquivo:

git clone https://gitlab.com/sg-wolfgang/zabbix-stack.git

Depois, entre no diretório clonado:

cd zabbix-stack

Agora execute o ambiente:

docker-compose up -d

Você verá algo como:

docker-compose up -d
Creating mysql ... done
Creating zabbix-server   ... done
Creating zabbix-frontend ... done
Creating zabbix-agent    ... done

Aguarde alguns instantes, pois o Zabbix após a criação dos containers irá popular a base de dados. Após aguardar podemos acessar o ambiente no link http://127.0.0.1:8080/. Veremos algo como:

Para se logar e testar, utilize as credenciais:

Username: Admin

Password: zabbix

Você verá o seguinte painel:

Caso tenha chegado até aqui, parabéns! Você tem um ambiente de monitoramento funcional com zabbix. Os próximos passos são adicionar novos hosts e iniciar agora mesmo o monitoramento de suas soluções!

Se houver qualquer dúvida não deixe de me falar nos comentários. Compartilhe este post com todos, e sucesso!

Abraço!

Deixe um comentário

Este post tem 2 comentários

  1. Eduardo Almeida

    Olá Samuel, tudo bem?
    Que bom encontrei seu artigo, vai me ajudar bastante, montei um ambiente de lab para fazer os testes, assim que aprimorar quero botar pra rodar em outro ambiente maior.

    Porém, fiz o procedimento conforme orientado, mas o Zabbix Server não inicializa, fica reiniciando constantemente, segue erro gerado no log:
    using configuration file: /etc/zabbix/zabbix_server.conf
    cannot use database “zabbix”: its “users” table is empty (is this the Zabbix proxy database?)

    O que estou fazendo de errado?

    Agradeço a iniciativa ao compartilhar seus conhecimentos e ajudar a galera, parabéns!

    Eduardo Almeida

    1. sgoncalves

      Saudações Eduardo, tudo bem?
      Valeu demais meu caro, fico feliz que o conteúdo tem sido útil pra ti!
      Sobre o erro que você está enfrentando, aparentemente é um problema com o container do Banco de Dados. Esse container subiu normalmente?