Monitorando sua infraestrutura com Grafana, InfluxDB e CollectD





Para empresas que precisam gerenciar dados e aplicativos em mais de um servidor, a infraestrutura é fundamental.



Para cada empresa, uma parte significativa do fluxo de trabalho é monitorar nós de infraestrutura, especialmente na ausência de acesso direto para resolver problemas emergentes. Além disso, o uso intenso de alguns recursos pode ser um indicador de falhas e sobrecargas de infraestrutura. No entanto, o monitoramento pode ser usado não apenas para prevenção, mas também para avaliar as possíveis consequências do uso de um novo software em produção. Existem várias soluções prontas para uso atualmente no mercado para rastrear o consumo de recursos, mas, mesmo assim, apresentam dois problemas principais: o alto custo de instalação e configuração e os problemas de segurança associados a software de terceiros.



A primeira questão é a questão do preço: o custo pode ir de dez euros (tarifas ao consumidor) a vários milhares (tarifas corporativas) por mês, dependendo do número de hosts a monitorar. Por exemplo, digamos que eu queira monitorar três nós por um ano. Com um preço de 10 euros por mês, gastarei 120 euros, enquanto uma pequena empresa terá de desembolsar por dez a vinte mil, o que se revelará uma decisão financeiramente insustentável e simplesmente minará todo o orçamento.



O segundo problema é o software de terceiros. Tendo em vista que, para análise, os dados do usuário - seja pessoa física ou jurídica - devem ser processados ​​por um terceiro, surge a pergunta: como o terceiro coleta os dados e os apresenta ao usuário? Normalmente, para isso, um aplicativo especial é instalado no nó, por meio do qual é feito o monitoramento, mas muitas vezes tais aplicativos demoram a ficar desatualizados ou se tornarem incompatíveis com o sistema operacional do cliente. A experiência dos pesquisadores na área de segurança da informação lança luz sobre os problemas de trabalhar com " software proprietário ". Você confiaria nesse software? Eu não.



Eu tenho meus nós para Tor e algumas criptomoedasportanto, prefiro as alternativas de monitoramento gratuitas, de código aberto e facilmente personalizáveis. Nesta postagem, veremos três dessas ferramentas: Grafana, InfluxBD e CollectD.







Monitoramento



Para analisar com eficácia cada métrica de nossa infraestrutura, precisamos de um aplicativo que possa coletar estatísticas dos dispositivos de nosso interesse. Nesse sentido, CollectD vem em socorro : este daemon agrupa e coleta ("coleta", portanto, tal nome) todos os parâmetros que podem ser armazenados em disco ou transmitidos pela rede.



Os dados serão então transferidos para a instância do InfluxDB : este é um banco de dados de série temporal (TSBD) que vincula os dados à hora (carimbo de data / hora codificado em UNIX) em que o servidor os recebeu. Assim, os dados enviados pelo CollectD chegarão como uma sequência de eventos.



Finalmente, vamos usar Grafana: Este programa se conectará ao InfluxDB e exibirá os dados em painéis coloridos e fáceis de usar. Graças a todos os tipos de gráficos e histogramas, seremos capazes de rastrear os dados da CPU, RAM e assim por diante em tempo real.







InfluxDB







Vamos começar com o InfluxDB, um TSBD gratuito para armazenar dados como uma sequência de eventos. Este banco de dados desenvolvido pela Go será o coração de nosso "sistema" de monitoramento.



Sempre que os dados chegam, um rótulo UNIX é vinculado a eles por padrão . A flexibilidade dessa abordagem libera o usuário de ter que armazenar a variável "tempo", que de outra forma é bastante complicada. Vamos imaginar que temos vários dispositivos localizados em diferentes continentes. Como vamos lidar com a variável "tempo"? Vamos vincular todos os dados ao horário de Greenwich, ou daremos a cada nó seu próprio fuso horário? Se os dados são armazenados em fusos horários diferentes, como podemos exibi-los corretamente nos gráficos? Como você pode ver, os problemas surgem um após o outro.



Como o InfluxDB controla o tempo e marca automaticamente cada chegada de dados, ele pode gravar dados de forma síncrona em um banco de dados específico. É por isso que o InfluxDB é freqüentemente apresentado como uma linha do tempo: a gravação de dados não afeta o desempenho do banco de dados (o que às vezes acontece com o MySQL), uma vez que escrever é apenas adicionar um evento específico à linha do tempo. Portanto, o nome do programa vem da percepção do tempo como um "fluxo" infinito e ilimitado.



Instalação e configuração



Outra vantagem do InfluxDB é sua facilidade de instalação e a extensa documentação fornecida pela comunidade do projeto, que o apóia amplamente . O InfluxDB possui dois tipos de interface: a linha de comando (uma ferramenta útil para desenvolvedores, mas mal preparada para trabalhar com grandes quantidades de dados) e a API HTTP para interação direta com o banco de dados.



Você pode baixar o InfluxDB não apenas do site oficial, mas também através do sistema de gerenciamento de pacotes (vamos demonstrar isso através do Debian). Além disso, é recomendável verificar os pacotes via GPG antes de instalar, portanto, a seguir importamos as chaves do pacote InfluxDB:



root@node#~: curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
root@node#~: source /etc/os-release
root@node#~: echo "deb https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list


Finalmente, vamos atualizar e instalar o InfluxDB:



root@node#~: apt-get update 
root@node#~: apt-get install influxdb


Para executar, usaremos systemctl:



root@node#~: service start influxdb 


Para evitar que alguém com más intenções se conecte a nós, criaremos um usuário chamado "administrador". Você pode interagir com o banco de dados por meio da linguagem de consulta do InfluxDB SQL " InfluxQL ". Para criar um novo usuário, executaremos uma solicitação create user.



root@node#~: influx
Connected to http://localhost:8086
InfluxDB shell version: x.y.z
>
> CREATE USER admin WITH PASSWORD 'MYPASSISCOOL' WITH ALL PRIVILEGES


Na mesma interface CLI, criaremos um banco de dados "metrics", no qual armazenaremos nossas métricas.



> CREATE DATABASE metrics


A seguir, configuraremos o InfluxBD ( /etc/influxdb/influxdb.conf) para abrir a interface na porta 24589 (UDP) com uma conexão direta ao banco de dados "metrics" para suportar CollectD. Também precisaremos baixar o arquivo types.dbe colocá-lo no endereço /usr/share/collectd/(ou em qualquer outra pasta) para definir corretamente os dados que CollectD transmite em seu formato nativo .



root@node#~: nano /etc/influxdb/influxdb.conf
[Collectd]
enabled = true
bind-address = ":24589"
database = "metrics"
typesdb = "/usr/share/collectd/types.db"


Você pode ler mais sobre CollectD em configuração na documentação .



CollectD







O CollectD em nossa infraestrutura de monitoramento atuará como um agregador de dados que simplifica a transferência de dados para o InfluxDB. Por definição, CollectD coleta métricas de CPU, RAM, discos rígidos, interfaces de rede, processos ... O potencial deste programa é ilimitado, especialmente quando você considera a ampla gama de pluginsdisponíveis , bem como um conjunto de plugins planejados .



Como você pode ver, a instalação do CollectD é simples:



root@node#~: apt-get install collectd collectd-utils


Vamos ilustrar como CollectD funciona com um exemplo simplificado. Digamos que eu queira saber o número de processos em meu nó. Para verificar isso, CollectD fará uma chamada de API para descobrir o número de processos por unidade de tempo (5000 milissegundos por definição) e nada mais. Assim que o agregador receber os dados, ele irá transferi-los para o InfluxDB para configuração através de um módulo (chamado "Rede"), que precisaremos configurar.



Abra o arquivo com nosso editor /etc/collectd.conf, vá até a seção Networke edite-o conforme indicado abaixo. Certifique-se de especificar o IP onde a interface InfluxDB ( INFLUXDB_IP) está localizada .



root@node#~: nano /etc/collectd.conf
    ...
<Plugin network>
  <Server "INFLUXDB_IP" "24589">
  </Server>
  ReportStats true
</Plugin>
    ...


Sugiro alterar o hostname no arquivo de configuração que é encaminhado ao InfluxDB (em nossa infraestrutura, este é um banco de dados “centralizado”, pois está localizado no mesmo nó). Assim, não receberemos dados desnecessários e o risco de os dados serem sobrescritos por outros nós desaparecerá.







Grafana







Um gráfico vale mais que mil imagens


Considerando a citação parafraseada, observar as métricas de infraestrutura em tempo real por meio de gráficos e tabelas nos permite atuar de forma eficiente e em tempo hábil. Usaremos o Grafana para criar e personalizar o painel de nossos gráficos e tabelas.



O Grafana é uma ferramenta de métrica gráfica freeware, compatível com uma ampla gama de bancos de dados (incluindo o InfluxDB), em que o usuário pode criar alertas quando um dado atende a uma determinada condição. Por exemplo, se o seu processador estiver com pico, você pode receber um alerta no Slack, Mattermost, email e assim por diante. Além disso, configurei meus alertas para monitorar ativamente todos os casos em que alguém "entra" na minha infraestrutura.



O Grafana não requer nenhuma configuração especial: como observamos anteriormente, o InfluxDB "verifica" a variável "tempo". A integração em si é muito simples: começaremos importando a chave pública para adicionar o pacote do site oficial da Grafana (depende do seu sistema operacional):



root@node#~: wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
root@node#~: echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list 
root@node#~: apt-get update && apt-get install grafana


Então, vamos executá-lo através do systemctl:



root@node#~: systemctl start grafana-web


Agora, quando navegamos para a página localhost: 3000 no navegador, devemos ver a interface de login do Grafana. Por definição, você pode passar pelo administrador de login e senha admin (após o primeiro login é recomendado alterar as credenciais).







Vamos para a seção Sources e adicione nosso banco de dados Influx:











Agora vemos um pequeno retângulo verde sob o rótulo New Dashboard. Passe o cursor sobre ele e selecione Adicionar painel e, em seguida, Gráfico:







agora você pode ver um gráfico com dados de teste. Clique no título deste diagrama e clique em Editar. Com o Grafana, você pode criar consultas inteligentes: você não precisa conhecer todos os campos do banco de dados, o Grafana irá oferecê-los a partir de uma lista de parâmetros adequados para análise.







Escrever consultas nunca foi tão fácil: basta selecionar a métrica de seu interesse e clicar em Atualizar. Também recomendo dividir as métricas por host para facilitar o isolamento de problemas. Se estiver interessado em outras ideias de painel, você pode verificar o site da Grafana para todos os tipos de exemplos para se inspirar.



Percebemos que o Grafana é uma ferramenta muito extensível e que nos permite comparar dados muito diferentes entre si. Não há uma única métrica que não possa ser obtida, portanto, apenas sua engenhosidade o limita. Rastreie seus dispositivos e tenha a visão geral mais completa de sua infraestrutura em tempo real!






All Articles