Platform Monitoring - Primeiros Conceitos
Tags: monitoring, kubernetes, prometheus, cloudnative
Published: 2021-12-02 11:45:10

Bem, há muito tempo não compartilho minha experiência como engenheiro de software trabalhando em uma equipe de observabilidade, mas adivinha quem está de volta?

![Ghess who's back](https://media.giphy.com/media/uDQPT2rxh6Gwo/giphy.gif)

É importante lembrar que, antes de pularmos para tópicos avançados, quero cobrir os fundamentos e garantir que engenheiros de qualquer nível possam consumir esse conteúdo. Hoje, vou falar de monitoring como um dos pilares de observabilidade.

## O que é monitoring?
Monitoring fornece visibilidade detalhada de desempenho, disponibilidade, experiência do usuário e utilização de recursos, ajudando-nos a fornecer um desempenho de plataforma consistente com um baixo MTTR (Mean Time To Resolve).

## Por que monitoring é crítico?
Quando uma plataforma apresenta problemas de desempenho ou não está disponível, a empresa que possui essa plataforma corre o risco de perder clientes. As ferramentas de monitoring fornecem insights de desempenho e disponibilidade em tempo real que permitem às equipes reagir rapidamente quando surge um problema.

## Por que uma plataforma deve usar uma ferramenta de monitoring?

Uma ferramenta de monitoring pode oferecer algumas vantagens para uma organização, como:

### Reduzir MTTR
Uma ferramenta de monitoring ajuda os engenheiros a entender como um dia normal se parece, usando métricas de desempenho para definir suas linhas de base, definir alertas adequados com base nessas métricas e identificar a causa raiz dos problemas de desempenho ou disponibilidade.

### Aumento da receita
Uma ferramenta de monitoring ajudará as equipes de engenharia a identificar rapidamente um problema crítico de desempenho ou disponibilidade que frustra os clientes da plataforma. Clientes frustrados começam a encontrar outras plataformas para executar suas necessidades, o que impacta diretamente sua receita.

### Reduzir custos
Uma ferramenta de monitoring ajuda uma organização a entender como é um dia normal, verificando quanta memória e CPU um aplicativo precisa e verificar se os recursos de uma máquina virtual forem superdimensionados.

A equipe de engenheiros pode ajustar a utilização de seus recursos, economizando dinheiro em infraestrutura com essas informações.

## Estratégias de monitoramento
Existem dois tipos de estratégias de monitoramento disponíveis, monitoramento de caixa aberta, conhecido como monitoramento de caixa branca, e monitoramento de caixa fechada, conhecido como monitoramento de caixa preta.

Ambas as estratégias são importantes e fornecem visibilidade de plataforma diferente sobre desempenho e disponibilidade.

### Monitoramento de caixa aberta
O monitoramento de caixa aberta oferece uma visão abrangente do serviço ou aplicativo. Para entender melhor isso, vamos usar o seguinte serviço em python como exemplo.

```python

from flask import Flask
from prometheus_client import make_wsgi_app
from werkzeug.middleware.dispatcher import DispatcherMiddleware

app = Flask("apione")

app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
    '/metrics': make_wsgi_app()
})

@app.route("/")
def monitoring_ready():
    return "Hi there..."

app.run(host="0.0.0.0", port="3000")
```
Esse exemplo de serviço simples expõe o estilo de métricas do Prometheus no endpoint `/metrics`. Instrumentar um serviço ou aplicativo usando o cliente Prometheus não é nada complexo, mas se você não estiver familiarizado com isso, recomendo que dê uma olhada na [documentação oficial](https://prometheus.io/docs/practices/instrumentation/).

De agora em diante, quando invocarmos o endpoint de métricas, estamos obtendo a página de métricas do Prometheus que retorna um monte de métricas padrão com base em sua tech stack.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/851txr8kjz4p3lh7s0pe.png)

Dado que é um exemplo simples que retorna apenas as métricas padrão do Python, podemos começar a adicionar métricas personalizadas para esse aplicativo monitorando o serviço com precisão. 

### Monitoramento de caixa fechada
O monitoramento de caixa fechada, conhecido como monitoramento de caixa preta, é uma estratégia para monitorar serviços de fora usando sondas artificiais. Isso significa que não aproveitamos nenhuma informação interna do serviçóalém do resultado de uma probe artificial.

### O que significa probes artificiais?
Os probes artificiais podem ser uma solicitação HTTP, soquete TCP ou execução de script para executar uma tarefa específica no serviço ou aplicativo.

### Por que o monitoramento de caixa fechada é necessário?
O monitoramento de caixa fechada é fundamental para ajudar as organizações a implementar o monitoramento sintético e simular o comportamento do usuário periodicamente, e essa é uma estratégia que muitas empresas já utilizam.

Para obter mais informações sobre o monitoramento sintético e como o monitoramento de caixa fechada ajuda nessa implementação, verifique a [documentação oficial do Grafana](https://grafana.com/docs/grafana-cloud/synthetic-monitoring/).

## Conclusão
Como podemos ver, monitoring é crucial para qualquer organização, não importa seu tamanho. A organização responderá rapidamente a incidentes, escalará seus negócios e aumentará a felicidade do cliente usando estratégias de monitoramento de caixa aberta e caixa fechada. Implementações de monitoramento mais sofisticadas podem ajudar a organização a prever incidentes e abordar de forma proativa os problemas de desempenho e confiabilidade.

Como você pode imaginar, existem várias ferramentas de monitoramento disponíveis no mercado, tais como:

- Zabbix
- Nagios
- Prometheus

Sempre utilizaremos o Prometheus como exemplo nessas postagens, pois é uma tecnologia cloud-native que nos permite trabalhar com qualquer tipo de infrastructure.

Monitoring é um assunto amplo e profundo que abordaremos passo a passo nas próximas postagens. Eu espero que você tenha gostado. Fique à vontade para compartilhar seus comentários ou dúvidas.