/devops_and_monitoring_study

DevOps é a disciplina responsável por cuidar de todo esse processo de entrega e monitoramento de softwares em ambientes de produção, sendo que existem dezenas de ferramentas para realizar tais tarefas.

Anotações da Formação em Engenharia de Software da Alura.

DevOps e monitoramento

image


Um software somente tem valor quando é entregue em ambiente de produção, para que as pessoas possam o utilizar e usufruir de seus benefícios.

Colocar um software em produção não é uma tarefa tão simples, pois envolve a utilização de diversas ferramentas para realização do deploy, principalmente em ambientes cloud hoje em dia, além de também exigir um acompanhamento contínuo, para garantir que tudo está funcionando corretamente, e, principlamente, detectar e antecipar possíveis problemas.

DevOps é a disciplina responsável por cuidar de todo esse processo de entrega e monitoramento de softwares em ambientes de produção, sendo que existem dezenas de ferramentas para realizar tais tarefas.

O que é DevOps? 🎥

Uma cultura baseada em fatores de desenvolvimento e operações em software. Busca o equilíbrio entre estabilidade dos serviços e performance de grandes softwares.

image

Formas de abordar a cultura DevOps:

  • Colaboração;
  • Qualidade;
  • Agilidade;
  • Segurança;
  • Containerização;
  • Infraestrutura;
  • Entrega contínua;
  • Monitoramento e análise.

image



O que é DevSecOps? 🎥

O processo levantado pela cultura DevOps regido por condutas de cibersegurança.

image

Pilares:

  • Segurança em primeiro lugar;
  • Velocidade;
  • Entrega contínua;
  • Confiabilidade.

É melhor que seja seguro e lento do que rápido e inseguro.

Você nunca pode ter segurança demais em suas aplicações. O que puder utilizar de ferramentas para automatizar processos de segurança, use.

Assim como no exemplo abaixo, a auditoria com processos de segurança precisam ser verificados logo após a compilação do código.

image

Ferramentas:

  • GitLab CI / GitHub Actions;
  • Circle CI;
  • Jenkins;
  • CodePipeline.


SRE - Engenharia de Confiabilidade de Sites 🎥

Criada pela Google para identificar níveis de confiabilidade em desenvolvimento e infraestruturas. O SRE leva as equipes de desenvolvimento às práticas de observabilidade utilizando métricas e atribuição de dados para comparação de versões. Utilizando o SRE é possível reduzir o tempo de resposta a um incidente.

image

image

Chaos engineering

Consiste em falhar no ambiente para verificar o quanto essa falha interfere no sistema, dessa forma avaliar sua resiliência.



O que é Observabilidade? 🎥

Pilares

  • Métricas;
  • Traços Distribuídos;
  • Logs.

Métricas

Prometheus e Grafana são algumas das principais ferramentas open-source para monitoramento de sistema de database. Permitem a observabilidade dos dados do software desenvolvido.

image

image

Traços distribuídos

Jaeger é uma ferramenta que permite a observabilidade das comunicações entre os microsserviços. Outras opções de ferramenta são Service Mesh e Proxy.

image

Logs

Log de dados é uma expressão utilizada para descrever o processo de registro de eventos relevantes num sistema computacional. Esse registro pode ser utilizado para restabelecer o estado original de um sistema ou para que um administrador conheça o seu comportamento no passado.

É geralmente programado em Java, através de Sidecar, instalação no Host ou Shell script. Pode ser vizualizado em ferramentas como Graylog.

image


Monitorando aplicações: 4 Golden Signals 🎥

O quatro sinais de ouro para monitoramento

  • Latência - Quanto tempo uma determinada requisição demora para ser executada?
  • Erros - O quão bem o cliente consegue utilizar o produto sem interrupções de sistema?
  • Tráfego - O quão otimizado meu produto é em relação a volume de dados?
  • Saturação - Qual o limite que meu produto consegue alcançar? O que posso fazer caso ele alcance esse limite?

Monitoramento com Netdata 🎥

image

Netdata é uma ferramenta de monitoramento open-source que pode se comunicar com outras ferramentas.

Ele oferece um overview da aplicação quando instalado, apresentando métricas e gráficos sobre comportamento de rede, buffers, performance, consumo de memória, especificações de hardware e praticamente tudo em relação a monitoramento.

O Netdata também possui uma configuração de alarmes. Se algo sai dos eixos da aplicação (seja por latência, erro, tráfego ou saturação), isso é comunicado pelo Netdata e até pode ser compartilhado em plataformas empresariais como o Slack.



O que são Containers? 🎥

Os containers são uma forma de gerenciar processamento computacional entre diferentes contextos funcionais. Em outras palavras, são unidades executáveis de software em que o código do aplicativo é empacotado com suas respectivas bibliotecas e dependências, usando métodos comuns para executá-los em qualquer lugar, seja em um computador desktop, na estrutura de TI tradicional ou na cloud.

image

Os containers eliminam a necessidade de cada aplicação possuir um novo sistema operacional, algo que não é alcançável com sistemas distribuídos e máquinas virtuais.

São mais leves, menos custosos em manutenção (um único SO) e mais rápidos para provisionar.


O que é Serverless? 🎥

Serverless é o paradigma de executar código sem se preocupar com servidores. Ao contrário do que o nome sugere, os servidores ainda existem, mas são executados por um provedor.

Os principais provedores de servidor são a AWS, a Azure e a Google; todos através de computação na nuvem.

Prós

  • Paga pelo que usa;
  • Cada função em linguagem diferente;
  • Arquiteturas orientadas a eventos;
  • Auto-escalável.

Contras

  • Duração de execução;
  • Vendor Lock-In (configurações e funcionamento presos aos serviços do provedor);
  • Difícil de debugar;
  • Ambiente de execução de difícil controle.

Componentes (AWS)

  • Lambda;
  • API Gateway;
  • SQS;
  • DynamoDB;
  • SNS;
  • S3.

O que é Infraestrutura como Código (IaC)? 🎥

Infraestrutura como código é um processo de gerenciamento de infraestrutura de TI que aplica as práticas recomendadas do desenvolvimento de software DevOps ao gerenciamento de recursos de infraestrutura de nuvem. Através de métodos como virtualização e automação, é possível desenvolver um sistema mais ágil, menos custoso e muito mais fácil de monitorar.