Tópicos

Introdução

Um monitor é, essencialmente, uma peça que observa a atividade de um dado sistema.

Um sistema contém recursos físicos e lógicos com estado (CPU, RAM, Disco, Memória virtual, Processos, Threads, etc).

O estado muda consoante eventos acontece. Informação sobre estes eventos pode ser adquirida através de traces. Normalmente, um trace possui informação sobre a timestamp (data e hora em que o evento ocorreu), o tipo de evento, duração, argumentos, erros, etc.

De notar que a utilização de um monitor implica a existência de algum overhead, alterando a atividade que está a ser observada. Isto pois, o monitor também consome recursos, que podem estar a ser utilizados pela atividade que se observa.

Características de um Monitor

O que pode despoletar o monitor?

Event-driven

  • A observação é despoletada todas as vezes que um certo evento ocorre.

Sampling

  • A observação é despoletada para um subset de eventos, por exemplo, a cada 100 eventos ou a cada 10 milissegundos.

Obviamente, a primeira opção irá ter uma eficácia maior (já que mais eventos são observados), mas a segunda terá uma melhor performance (menos overhead total introduzido pelo monitor).

Como pode o monitor ser implementado?

Hardware

  • São tipicamente mais precisos e têm melhor resolução (mais granularidade ao nível do tempo, por exemplo).

Software

  • Este tipo de monitor é, por norma, mais barato, flexível e extensível.

De que forma se distribuí o monitor?

Centralizada

  • O monitor é deployed num só servidor, por exemplo.

Distribuída

  • O serviço é espalhada (e até replicado) por diversos servidores.

Qual o scope de monitorização?

Não confundir o scope de monitorização com a forma como o monitor se distribui.

Um só servidor ou aplicação

  • Os eventos colecionados dizem respeito a um só servidor ou aplicação.

Distribuído

  • Os eventos colecionados dizem respeito a um conjunto de servidores ou aplicações.

Arquitetura de um Monitor

Um monitor é, na maioria dos casos, composto por quatro camadas.

Observação, coleta, análise e apresentação.

Observação

Esta camada é responsável pelo papel principal do monitor: observar. Este processo de observação pode ser feito de várias formas.

Observação passiva ou spying

  • Não existe a necessidade de instrumentar os recursos ou a aplicação a ser monitorada.

Instrumentação

  • O hardware, OS, e/ou as aplicações são instrumentadas (por exemplo, o código é alterado). Exemplos de monitores assim são: strace e eBFPs.

Probing

  • O monitor interage (faz probe) com o sistema ou aplicação a ser observado, colecionando certas métricas. Exemplo de monitor assim é a utilização do comando ping.

Coleta

A coleta dos eventos observados pode ser feita de duas formas.

Push-based

  • Os eventos são enviados pela camada de observação.

Pull-based

  • Os eventos são pedidos pela camada de coleta.

Além disso, esta camada é utilizada para efetuar uma normalização da informação. Por exemplo, agregar traces, normalizar os intervalos de tempo, sincronizar tempos quando são coletados de múltiplos servidores, etc.

Análise

Esta camada tem duas preocupações centrais: um armazenamento de dados eficiente e um processamento de informação eficiente.

A escolha de qual tecnologia usar nesta camada depende do tipo de dados que estamos a analisar. Podendo ser uma base de dados time-series, uma base de dados document-oriented, etc.

Apresentação

Camada responsável pela visualização da informação já coletada e corretamente processada.

Pode servir para mostrar, através de reports ou dashboards, métricas de performance, configuração dos servidores e aplicações observadas ou até mesmo erros.

Elastic Stack

Conjunto de ferramentas open source concebidas para ingerir, pesquisar, analisar e visualizar informação de qualquer fonte e formato, em tempo real.

Metricbeat

Ferramenta cujo objetivo é realizar a observação e enviá-la, posteriormente, para outras ferramentas.

Logstash

Ferramenta cujo objetivo é colecionar a informação vinda da Metricbeat.

Elasticsearch

Ferramenta cujo objetivo é indexar e pesquisar informação. Está assente em cima de uma engine distribuída e com uma forte capacidade de pesquisar sobre informação JSON.

Kibana

Ferramenta cujo objetivo é gerar dashboards (e outras formas de apresentação) capazes de ajudar o utilizador final a explorar a informação colecionada.

Atuação

Este processo todo de monitorização pode ser combinado com políticas específicas de atuação.

Por exemplo, quando a utilização de CPU de um determinado servidor atingir um dado threshold deve-se migrar as VMs para outro servidor. Ou, quando a utilização de CPU de uma determinada aplicação atingir um dado threshold deve-se aumentar o número de réplicas computacionais (o mesmo no caso contrário, garantindo elasticidade).