MTTx: a arte das métricas de DevOps

Quando trazemos à tona o tema DevOps, é natural que as pessoas sempre pensem em automações, pipelines e cloud, mas DevOps vai muito além disso. Dentro de DevOps, podemos dividir 5 grandes pilares, que foram comentados no artigo sobre Cultura DevOps, como Cultura, Automação, Lean, Medição e Compartilhamento. Hoje, nesse artigo, exploraremos o pilar de Medição e iremos refletir sobre como métricas e dados podem auxiliar toda a construção de um software. No coração do DevOps estão as métricas, e entre elas as MTTx (Mean Time To X) são fundamentais. Vamos explorar o que são essas métricas e por que elas são tão importantes. O que são as Métricas MTTx? MTTx são indicadores que ajudam a medir a eficiência e a eficácia dos processos de DevOps envolvidos na fase de criação de um software. O “MTT” significa “Mean Time To” (Tempo Médio Para) e podemos medir diversos eventos que o processo do nosso desenvolvimento podem gerar para poder fazer esse tipo de cálculo. As mais comuns são: MTTR (Mean Time to Recovery): Tempo Médio para Recuperação. MTTA (Mean Time to Acknowledge): Tempo Médio para Identificação. MTTD (Mean Time to Detect): Tempo Médio para Detecção. MTTR (Mean Time to Repair): Tempo Médio para Reparação. Métricas: imagine o uso de CPU e taxa de erros como termômetros do desempenho do seu sistema. As métricas são agregações numéricas de dados medidos regularmente ao longo do tempo que oferecem uma visão de alto nível do estado operacional. Métricas são dados conhecidos, ou seja pré-definidos, e capazes de ser mensuráveis ao longo do tempo. Todas essas métricas são geradas em diferentes momentos e ferramentas do processo, até a execução de uma versão do sistema, e é de responsabilidade da pessoa que ocupa o papel de DevOps agrupar esses dados para tomada de decisão. Iremos explorar cada uma dessas métricas e onde elas impactam no processo do desenvolvimento de um sistema. MTTA (Mean Time to Acknowledge): Tempo Médio para Identificação. MTTA mede o tempo médio que leva para identificar a causa raiz de um problema após a sua detecção. Para que isso ocorra, o sistema deverá conter mecanismos e ferramentas de observação pró-ativa para gerar logs/telemetria sobre o comportamento do sistema e assim avisar, através de alertas, que o sistema está com comportamento inesperado ou que não corresponde aos sinais vitais comuns. Benefícios do MTTA Agilidade na resolução de problemas, pois com processos e mecanismos de gerenciamento de incidentes, qualquer pessoa pode ser notificada a qualquer momento para ao menos ter conhecimento do que está acontecendo. Redução de impacto: quanto mais rápido um problema é identificado, o time pode adotar estratégias como rollback de deployment para mitigar os problemas do sistema. MTTD (Mean Time to Detect): Tempo Médio para Detecção É o tempo médio que leva para detectar o problema ocorrido, logo após a notificação do problema. Esta métrica é crucial para a quantificação de proatividade nos incidentes e também na capacidade de “troubleshooting” que o time tem para detectar a causa raiz de um problema. Dentro dessa métricas, podemos tirar lições aprendidas como: falta de treinamento e capacitação nas pessoas que suportam a operação, documentação defasada e falta de procedimento. Importância do MTTD Detecção precoce de problemas: quanto mais cedo um problema é detectado, mais rápido pode ser tratado. Prevenção de grandes falhas: detectar problemas cedo pode evitar que eles se transformem em grandes falhas. MTTR (Mean Time to Recovery): Tempo Médio para Recuperação Mede o tempo médio que uma equipe leva para restaurar um sistema ou serviço após uma interrupção ou falha. O MTTR começa a ser contado a partir do momento em que a falha é detectada e termina quando o serviço está totalmente restaurado e funcional. Essa métrica força os times a criarem mecanismos de deployment resilientes e tolerantes a falhas como: blue-green, canary, hot-hot, etc. Importância do MTTR Minimização do downtime: reduzir o tempo que um serviço fica indisponível é essencial para manter a satisfação do cliente e a continuidade dos negócios. Aumento da confiança do cliente: clientes confiam mais em serviços que são rapidamente restaurados após problemas, demonstrando a competência e a prontidão da equipe de TI. MTTR (Mean Time to Repair): Tempo Médio para Reparação Essa métrica mede o tempo médio necessário para reparar um sistema ou componente específico após a ocorrência de uma falha. O MTTR é calculado a partir do momento em que a falha é detectada até que o sistema ou componente esteja totalmente reparado e livre da última causa que tornou o sistema inoperante, assim tornando-se funcional novamente com a entrega que é necessária. Importância do MTTR Aprendizado: a excelência dessa métrica é alcançar maturidade no processo ao ponto de que bugs sejam reparados em um espaço curto de tempo e que times como suporte e desenvolvimento possam juntos encontrar a solução de forma rápida para a entrega do que é desejável. Melhoria na satisfação do cliente: clientes e usuários finais são menos impactados por falhas quando os tempos de reparação são curtos, aumentando a confiança nos serviços oferecidos. Acelere a sua carreira conosco! A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps. Clique aqui para entrar na prioridade pela melhor oferta de lançamento Conclusão Entender e monitorar as métricas MTTx é essencial para qualquer equipe de DevOps que busca melhorar a eficiência, a confiabilidade e a satisfação do seu software. Cada métrica oferece uma visão diferente e importante sobre como os processos estão funcionando e onde há espaço para melhorias. Aprender a gerar dados e medir todos esses pilares é sempre desafiador, mas são possíveis com as ferramentas existentes de mercado como Jira, pipelines ou ferramentas de monitoramento como OpenTelemetry.
Infra as Code com Pulumi: primeiros passos

Pulumi é uma ferramenta de infraestrutura como código open source que une o melhor do gerenciamento de infraestrutura de forma declarativa com as principais linguagens de programação de mercado, como Python, Node, .NET, entre outras. Essa ferramenta suporta diversos tipos de nuvens, infraestrutura nativa de nuvem, fornecedores de SaaS como Datadog ou TravisCI , e até mesmo nuvens privadas e híbridas. Cuidados Iniciais! O primeiro erro que muitos cometem na indústria quando o tema é Infra como Código e comparar Terraform e Pulumi. Não há uma conclusão objetiva de “X é melhor que Y”. Pulumi e Terraform têm dinâmicas diferentes, mesmo que entreguem o mesmo resultado. Pulumi, por exemplo, tem a vantagem de abstrair a complexidade de criação do manifesto da sua infraestrutura por uma linguagem que se aproxima muito do dia a dia de um desenvolvedor. Usar código elimina a necessidade de apontar e clicar na interface da nuvem para configurar a infraestrutura, um processo que é manual, tedioso, propenso a erros, irrepetível e simplesmente caótico. Exemplo em Python Outro ponto a se pensar é a polêmica na aquisição do Terraform pela IBM recentemente e querer usar o Pulumi por ser Open Source. Pulumi sim é open source, porém é grátis apenas para uso individual. Em qualquer cenário de uso em empresas, ele também acarreta custos e recursos, assim como Terraform. Como funciona o Pulumi? Pulumi é uma ferramenta desenvolvida por desenvolvedores para desenvolvedores. Isso significa que ela cria um ambiente totalmente intuitivo e acolhedor para permitir uma experiência boa para quem utiliza a ferramenta. Pulumi tem a vantagem de usar o sistema “language-host”, onde você pode utilizar linguagens de programação para intermediar a criação da sua infra estrutura. Por trás das cenas, o Pulumi traduz a sua requisição na linguagem que você escreveu seu código, avalia as mudanças solicitadas, comparando com as últimas execuções feitas e dispara a arquitetura solicitada para seu cloud provider. Como fica a estrutura de um projeto Pulumi ? Dentro de um projeto, o Pulumi se divide em Projeto e Stack. O projeto é a pasta onde você armazenará todas as configurações que você irá implementar em conjunto com o arquivo Pulumi.yaml. Esse arquivo é responsável por representar as informações básicas do projeto e em qual linguagem iremos trabalhar name: my-project runtime: name: nodejs options: typescript: false Exemplo de Pulumi para Node.js Outro ponto interessante é que o Pulumi tem nativamente o controle de Projetos e “ambientes” que chamamos de Stack. Diferentemente do Terraform, que é necessário o uso do Terragrunt para gerenciar complexidades de ambientes, o Pulumi vem com a solução nativa. Esses ambientes são chamados de “stack” e isolam completamente a sua execução para diferentes ambientes. Comandos básicos para usar o Pulumi Os comandos básicos que você utilizará no dia a dia serão os seguintes: pulumi new: Cria um novo projeto pulumi pulumi stack: Administra as stacks pulumi config: Configuração de variáveis e chaves e qualquer outro atributo nesse sentido. pulumi up: Faz o deploy das configurações solicitadas pulumi preview: Apresenta o que será publicado antes de ser aplicado pulumi destroy: Destrói toda infra estrutura solicitada Para aprofundar na lista de comandos do Pulumi, acesse a lista de comandos oficiais: https://www.pulumi.com/docs/cli/ Bora testar na prática? Todo exemplo utilizado está localizado aqui. Nele vamos criar uma instância de Cloud Run na GCP apontando para uma imagem Docker previamente publicada. Primeiro, ao executar o comando pulumi new, nosso terminal irá apresentar alguns questionamentos sobre nome do projeto, descrição e o nome da stack que usaremos para criar esse recurso dentro do projeto. No final da execução, teremos a estrutura de pastas seguindo essa lógica. No arquivo index.js, colocamos todo o código responsável por executar a criação de uma cloud-run. const pulumi = require(“@pulumi/pulumi”); const gcp = require(“@pulumi/gcp”); const _default = new gcp.cloudrun.Service(“default”, { name: “cloudrun-srv”, location: “us-central1”, template: { spec: { containers: [{ image: “gcr.io/toolbox-sandbox-388523/flask-app:latest”, }], }, }, }); const noauth = gcp.organizations.getIAMPolicy({ bindings: [{ role: “roles/run.invoker”, members: [“allUsers”], }], }); const noauthIamPolicy = new gcp.cloudrun.IamPolicy(“noauth”, { location: _default.location, project: _default.project, service: _default.name, policyData: noauth.then(noauth => noauth.policyData), }); // Export the status of the created Cloud Run service exports.grun = _default.status; Em seguida, executaremos o comando pulumi up para criar a nova infra estrutura. E pronto! Nossa API está criada! Se executarmos uma requisição HTTP, veremos o resultado: Acelere a sua carreira A Mentoria DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps. Clique aqui para entrar na prioridade pela melhor oferta de lançamento Conclusão Pulumi pode se tornar uma ótima opção para desenvolvedores e testadores de software se aventurarem, essa ferramenta tenta abstrair as dificuldades do mundo Ops com o atrativo de usar sua linguagem de programação preferida, além de uma comunidade ativa e um repositório de códigos prontos para você praticar.
MELT: Os pilares da Observabilidade

Observar sistemas é mais do que uma necessidade, é uma arte que distingue os verdadeiros heróis da engenharia de software.
Infra as Code com Terraform: um guia completo para iniciantes

O Terraform é uma ferramenta de infraestrutura como código (IaC) desenvolvida pela HashiCorp, que ganhou popularidade por sua capacidade de gerenciar infraestruturas de forma eficiente e escalável. Este guia visa desmistificar o Terraform para iniciantes, oferecendo uma visão abrangente e exemplos práticos. Mas afinal de contas, o que é Terraform? Terraform é uma ferramenta de IaC que permite definir, provisionar e gerenciar diferentes tipos de recursos e infraestruturas, como os principais players de mercado no quesito nuvem pública (AWS, Azure, Google Cloud, etc) usando uma linguagem de configuração declarativa conhecida como HashiCorp Configuration Language (HCL). Por que usar o Terraform? O Terraform é escolhido por sua capacidade de gerenciar recursos como código de maneira eficiente e escalável, onde ele suporta múltiplos provedores de nuvem, permitindo uma gestão unificada e simplificada. Com sintaxe declarativa, ele define o estado desejado da infraestrutura, automatizando a criação, atualização e destruição de recursos. Além do mais, o Terraform promove consistência e colaboração, pois os arquivos de configuração podem ser versionados e revisados como código e, sua execução em planos permite visualizar mudanças antes da aplicação, minimizando riscos. O Terraform é ideal para ambientes complexos e dinâmicos, onde ele ajuda com a otimização da gestão de infraestrutura, aumentando a produtividade e reduzindo erros humanos. Conceitos básicos do Terraform O Terraform é uma ferramenta madura que possui vários componentes e conceitos que podem ser usados no seu dia-a-dia porém, é sempre importante ter em mente que os itens abaixo são os fundamentais: Providers Os providers (ou provedores) permitem que o Terraform interaja com APIs de serviços como AWS, Azure, GCP, entre outros. Eles são essenciais para criar e gerenciar recursos. É possível consultar a lista de providers disponíveis para o Terraform em https://registry.terraform.io/browse/providers?category=security-authentication. Além do mais, é importante destacar que o Terraform consegue gerenciar não só os recursos de cloud em si, mas também diversos outros componentes como aplicações de comunicação, CI/CD, orquestração de containers entre diversos outros. Resources Os recursos são os componentes básicos da infraestrutura, como instâncias de máquina virtual, redes, e bancos de dados. Modules Os módulos nada mais são do que conjuntos de recursos que podem ser reutilizados e compartilhados entre projetos. State O estado do Terraform armazena informações sobre o ambiente gerido, permitindo que o Terraform saiba o que já foi provisionado. Essa é uma das parte mais sensíveis do Terraform, já que é dessa forma que ele sabe o que ele poderá gerenciar. Instalação do Terraform Para começar, é necessário instalar o Terraform em sua máquina local. Se estiver usando Linux, você pode executar os seguintes comandos: # Instala as bibliotecas básicas para o funcionamento do Terraform sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl # Adiciona a chave do repositório na máquina local curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add – # Adicionando o repositório na lista de repositórios locais sudo apt-add-repository “deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main” # Faz a instalação do Terraform sudo apt-get update && sudo apt-get install terraform Também é possível instalar usando no MacOS, utilizando o Brew: brew tap hashicorp/tap brew install hashicorp/tap/terraform Assim como é possível baixar o binário do Terraform diretamente no site oficial através do link https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli (onde inclusive você pode baixar o instalador caso esteja usando Windows). Exemplo prático: criando uma VM na AWS O exemplo que iremos usar está disponível no playground da empresa Toolbox, disponível no endereço: https://github.com/toolbox-playground/terraform-exemplo-aws Configuração inicial Com o Terraform instalado, você vai precisar de uma chave de acesso para poder criar seus recursos na AWS! Para isso, no console da AWS, procure pelo recurso IAM. Em seguida, gere um acesso do tipo de CLI, onde ele irá te fornecer a ACCESS KEY e a SECRET ACCESS KEY, que são os tokens de acesso que usaremos junto ao Terraform. Como nossa ideia é a de demonstrar o uso do Terraform, vamos utilizar o meio de autenticação mais simples que o Terraform possui, que é através das variáveis de ambiente. Para isso, iremos criar 3 variáveis de ambiente: # No caso de Linux / MacOS você pode rodar os seguinte comandos: export AWS_ACCESS_KEY_ID=”” export AWS_SECRET_ACCESS_KEY=”” export AWS_DEFAULT_REGION=”” Baixando o repositório e executando os comandos Como informado anteriormente, a Toolbox está disponibilizando um repositório de exemplo para você acompanhar e fazer o seu primeiro exercício com Terraform, que está disponível em https://github.com/toolbox-playground/terraform-exemplo-aws. Inicializando o Terraform Agora com tudo instalado e configurado, é hora de inicializar o Terraform. Para isso, basta ir no diretório do seu projeto e executado o seguinte comando: # Comando para inicializar o Terraform terraform init Este comando é o responsável por baixar todos requisitos para que o provider escolhido funcione corretamente. Planejando e Aplicando as configurações Rode o seguinte comando para ver o resultado do planejando (comando plan) e em seguida crie os recursos escolhidos: # Comando para verificar os recursos que serão criados terraform plan # Comando para criar os recursos informados terraform apply O comando plan é o responsável por mostrar todos os recursos que serão criados/alterados/destruídos pelo Terraform. Esse é um comando extremamente poderoso e que pode te ajudar a decidir se você continua ou não. Agora que você conferiu o que será modificado, é hora de informarmos para o Terraform que ele pode ir adiante fazendo tais ações. Para isso, você executará: O Terraform apply fará todas as mudanças informadas no passo anterior. No nosso exemplo, isso é algo simples de identificar, já que estamos fazendo uma criação do zero! Verificando a instância criada Acessando o console da AWS, será possível observar nossa máquina virtual já criada: Limpando os recursos criados Por fim, informaremos ao Terraform para deletar essa nossa recém máquina virtual. Para isso, o comando necessário é: # Comando para criar os recursos informados terraform destroy Boas práticas Como os outros comandos do Terraform, o comando destroy executa um comando plan informando tudo o que será destruído. Após fazer a confirmação, basta seguir para que o Terraform comece a destruição da nossa máquina virtual: Voltando no console da AWS, será possível observar que a
Como se Tornar um Engenheiro DevOps, SRE ou de Cloud ainda em 2024

Introdução No atual mercado de trabalho, funções como DevOps, SRE (Site Reliability Engineer) e Platform Engineer estão em alta demanda. Uma rápida pesquisa no LinkedIn no início de 2024 revelou mais de 2000 vagas para engenheiros, analistas ou especialistas DevOps no Brasil. Quando incluímos termos como SRE, Site Reliability Engineer, Platform Engineer ou Cloud, esse número salta para cerca de 3000 oportunidades. Se você está interessado em ingressar ou avançar na área de tecnologia, agora é a hora! Por que DevOps e SRE estão em alta? O mercado de TI é dinâmico e exige aprendizado constante. As empresas buscam profissionais capazes de integrar desenvolvimento e operações, garantindo a confiabilidade e escalabilidade dos sistemas. DevOps e SRE são metodologias que atendem a essa necessidade, promovendo eficiência e inovação. Vamos explorar como você pode se tornar um profissional desejado nessas áreas em 2024. Caminhos para se Tornar um Engenheiro DevOps ou SRE Existem diversas maneiras de se tornar um engenheiro DevOps ou SRE. Dedicação, estudo e prática são fundamentais. A seguir, são descritas algumas das melhores abordagens: 1. Cursos online gravados Os cursos online são uma excelente maneira de aprender no seu próprio ritmo. Existem várias plataformas que oferecem uma variedade de cursos gravados que abrangem desde os fundamentos até tópicos avançados em DevOps, SRE e Cloud. Estes cursos são projetados por especialistas da indústria e incluem material de leitura e laboratórios práticos para garantir um aprendizado completo. Empresas como a Next Wave Education oferecem esses tipos de cursos, proporcionando flexibilidade para os alunos. 2. Livros e material escrito Para aqueles que preferem a leitura, há uma vasta biblioteca de recursos escritos disponíveis. Livros essenciais sobre DevOps e SRE, como o “Google SRE“, são amplamente recomendados. Além disso, aqui na Next Wave Education você encontra artigos semanais, que lhe auxiliam na construção de uma base teórica sólida e trazem insights práticos. 3. Cursos online ao vivo Se você prefere uma abordagem mais interativa, empresas de consultoria e treinamento como a Next Wave Education oferecem esses cursos ao vivo e sob demanda. Com instrutores experientes, é possível interagir, tirar dúvidas em tempo real e se beneficiar de um ambiente de aprendizado colaborativo. Esses cursos são oferecidos tanto presencialmente quanto online, proporcionando flexibilidade para atender às diversas necessidades dos alunos. 4. Mentoria personalizada Programas de mentoria personalizada são altamente recomendados para um suporte mais individualizado. Mentores experientes oferecem orientação, conselhos valiosos e acompanhamento contínuo para ajudar os profissionais a alcançarem seus objetivos de carreira. Empresas de consultoria e treinamento como a Next Wave Education oferecem serviços de mentoria para guiar os alunos em seu desenvolvimento profissional. 5. Certificações profissionais Certificações são altamente valorizadas no mercado de trabalho. Existem cursos preparatórios para diversas certificações renomadas, como AWS Certified DevOps Engineer, Google Professional Cloud DevOps Engineer e Microsoft Certified: DevOps Engineer Expert. 6. Pós-graduação e MBA Para aqueles que buscam uma qualificação mais avançada, programas de pós-graduação e MBA com ênfase em DevOps, SRE e Cloud são ideais. Esses programas são voltados para profissionais que desejam aprofundar seus conhecimentos e obter uma qualificação reconhecida no mercado. A importância do aprendizado contínuo No mundo da TI, o aprendizado contínuo é essencial. As tecnologias evoluem rapidamente, e é crucial manter-se atualizado para se destacar no mercado. Programas de cursos atualizados, workshops e eventos são formas eficazes de garantir que os profissionais se mantenham em constante desenvolvimento. Empresas como a NextWave Education oferecem uma variedade de recursos para apoiar o aprendizado contínuo. Acelere sua carreira conosco A Mentoria Next Level DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps. Clique aqui para entrar na prioridade pela melhor oferta de lançamento Conclusão Se você está pronto para iniciar ou avançar sua carreira em DevOps, SRE, Cloud ou Platform Engineering, existem diversas opções disponíveis para ajudar nesse processo. Desde cursos online gravados até programas de mentoria personalizada, passando por bootcamps intensivos e certificações profissionais, há recursos que atendem a todas as necessidades. Visite a página da Next Wave Education para saber mais sobre como essas opções podem ajudar você a se tornar um profissional de sucesso em 2024.
CI/CD com Jenkins: Primeiros passos

Neste artigo vamos explorar como criar seu primeiro pipeline CI/CD usando Jenkins, uma das ferramentas mais populares para essa finalidade.
O que é CI? Quais são suas melhores práticas?

Este artigo tem como objetivo explicar o que é CI e apresentar as melhores práticas para implementá-la de forma eficaz.
Criando uma pipeline de CI/CD para aplicações Node.js no GitHub Actions

Este artigo explora a criação de uma pipeline de CI/CD para aplicações Node.js usando Docker e GitHub Actions, oferecendo um guia prático para implementar essas práticas no seu fluxo de trabalho.
Criando uma pipeline de CI/CD para aplicações Java no Azure DevOps

Neste artigo vamos criar um modelo prático de CI/CD para projetos Java, incluindo deploy contínuo em um cluster Kubernetes.
O que é a cultura DevOps?

Um pouco mais do que simplesmente uma metodologia, DevOps é um conjunto de boas práticas que podem reeducar sua equipe.