Prévia do material em texto
<p>Disciplina</p><p>Infraestrutura Ágil</p><p>Unidade 1</p><p>A cultura DevOps</p><p>Aula 1</p><p>A cultura DevOps</p><p>Introdução da unidade</p><p>Objetivos da Unidade</p><p>Ao �nal desta Unidade, você será capaz de:</p><p>analisar os fundamentos da cultura DevOps e da infraestrutura ágil;</p><p>discutir sobre os conceitos, ferramentas, evolução e importância no desenvolvimento de</p><p>softwares na atualidade;</p><p>apontar como a DevOps mudou a forma de pensar softwares.</p><p>Olá, estudante! Boas vindas!</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>A cultura digital moldou nossas práticas, costumes e formas de interação social. Era esperado</p><p>que o mundo dos negócios sofreria também um grande impacto com as transformações</p><p>oriundas do digital. Para atender a toda essa demanda de interação homem-máquina, houve um</p><p>crescimento exponencial no desenvolvimento de sistemas computacionais, sobretudo em</p><p>aplicativos simples, que atendam a demandas pontuais do cotidiano.</p><p>Esse crescimento exigiu maior agilidade e qualidade, já que a concorrência também aumentou e</p><p>a exigência por melhores experiências. O que se percebia era uma estrutura apartada, na qual os</p><p>pro�ssionais responsáveis pela operação desconheciam os processos da engenharia de</p><p>software, e os desenvolvedores, por sua vez, não tinham real noção das nuances envolvidas na</p><p>implementação de uma solução.</p><p>Sendo assim, o mercado de desenvolvimento de software passou a ter uma mentalidade</p><p>diferenciada, focada no usuário e em práticas ágeis que satis�zessem a vontade imediata do</p><p>cliente sem perder a qualidade. Para que essa carência fosse suprida, movimentos oriundos da</p><p>infraestrutura ágil desenvolveram uma organização de trabalho, a qual, de tão complexa, passou</p><p>a ser chamada de cultura, o DevOps.</p><p>Esta unidade lhe ajudará a conhecer os fundamentos da cultura DevOps e da infraestrutura ágil:</p><p>conceitos, ferramentas, evolução e importância no desenvolvimento de softwares na atualidade,</p><p>e a entender e fundamentar como a DevOps mudou a forma de pensar softwares, a padronização</p><p>da infraestrutura ágil e as formas de monitoramento e otimização de diferentes SO (sistemas</p><p>operacionais) e servidores.</p><p>Vamos conhecer essa cultura, as técnicas e as práticas que enfatizam o trabalho cooperativo</p><p>das equipes de desenvolvimento e operações. Essa envolvente “�loso�a”, que está ganhando o</p><p>mundo e vem se fortalecendo como método nas maiores empresas de desenvolvimento do</p><p>mundo.</p><p>Introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar os principais conceitos da cultura DevOps.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>identi�car o per�l do pro�ssional inserido na cultura DevOps e como ele se adequa ao</p><p>mercado de trabalho;</p><p>apontar as vantagens da cultura DevOps;</p><p>analisar os conceitos da cultura DevOps, sua história e o impacto da transformação digital</p><p>a partir da união de ferramentas e da mudança de mentalidade na produção de softwares.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O conjunto de práticas, costumes e formas de interação social realizadas por meio da tecnologia</p><p>nos possibilitou uma nova forma de nos relacionarmos com o mundo. A interação homem-</p><p>máquina (IHC) é, hoje, uma realidade. Atividades rotineiras, como planejar uma viagem, fazer</p><p>uma compra, ler um livro, pensar um lazer com a família, dirigir-se até um determinado destino,</p><p>por exemplo, já são comumente facilitadas pelo uso de programas e/ou sistemas</p><p>computacionais. Software é o termo genérico usado para descrever esses programas.</p><p>Com uma cultura cada vez mais voltada para o digital, as empresas tiveram que se adequar às</p><p>novas realidades e passaram a produzir softwares para tratar de problemas diversos. Existem</p><p>softwares para analisar desempenho de setor, faturamento, �uxo de caixa, funcionários,</p><p>investimentos, etc. É de se esperar que, com tanta demanda, a área de desenvolvimento tenha</p><p>crescido exponencialmente.</p><p>O problema é que esse processo acontecia de forma desregrada e, muitas vezes, os</p><p>desenvolvedores não conseguiam dar conta de tanto trabalho. A entrega de softwares tornou-se</p><p>um problema em diversas empresas, e grande parte disso ocorre por conta da má distribuição de</p><p>funções entre as equipes.</p><p>A DevOps surge para automatizar os processos de desenvolvimento e de infraestrutura, criando</p><p>uma nova cultura de trabalho que facilita a capacidade de uma empresa em desenvolver e</p><p>distribuir aplicativos ou serviços de qualidade e em alta velocidade.</p><p>Focando em automação, pode-se criar uma política de trabalho colaborativo, de</p><p>compartilhamento de ferramentas e conhecimentos, que facilita o trabalho em equipe e cria uma</p><p>cultura de cooperação mútua.</p><p>Para contextualizar sua aprendizagem, imagine que você é um trainee em uma empresa de</p><p>desenvolvimento de software com padrões tradicionais de modelo de desenvolvimento em</p><p>cascata e hierarquia Top Down. A empresa trabalha com processos sequenciais, um longo</p><p>período para o planejamento, todos os custos e os cronogramas são bem de�nidos desde o</p><p>começo, tarefas são distribuídas e as equipes fazem todo o trabalho para que outra equipe o</p><p>complete até que a produção seja feita.</p><p>Há algum tempo, você tenta sugerir a mudança de mindset. Já argumentou que o mercado e as</p><p>transformações digitais pedem uma abordagem mais ágil, mas, como a empresa ainda é um</p><p>sucesso no mercado, o presidente, seu chefe, ainda não viu a necessidade de mudança.</p><p>No entanto, surgiu um projeto longo e complexo, que sofreu impactos nos prazos, nos custos e</p><p>até na qualidade. O feedback do cliente foi o pior possível e, para completar, ele questionou o</p><p>porquê de a empresa não trabalhar com DevOps e foi procurar uma outra empresa que trabalha</p><p>dessa forma.</p><p>O seu chefe, lembrando as inúmeras conversas que teve com você, convidou-lhe para uma</p><p>reunião e pediu para que você montasse uma proposta de reestruturação de trabalho da</p><p>empresa para apresentar aos superiores em uma reunião. A ideia é que a proposta possa ser</p><p>analisada e, se viável, ser incorporada na organização inteira.</p><p>Agora, você está com a oportunidade que esperava para mostrar os seus conhecimentos e quem</p><p>sabe até ganhar uma promoção e se tornar o gerente de projetos. Então, seu desa�o será</p><p>planejar e apresentar para os seniores da empresa as vantagens da cultura DevOps.</p><p>Aponte todas as questões pertinentes, use sua criatividade e organização e, para impressionar,</p><p>cite o exemplo de uma grande empresa que adotou o DevOps e como isso impactou nas suas</p><p>práticas e resoluções de problemas.</p><p>Chegou a hora de conhecermos a cultura DevOps, seus conceitos, sua história e o impacto da</p><p>transformação digital a partir da união de ferramentas e da mudança de mentalidade na</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>produção de softwares, propondo uma entrega mais adaptável, com pronta resposta às</p><p>mudanças. Conheceremos o per�l do pro�ssional inserido nessa cultura e como ele se adequa</p><p>ao mercado de trabalho.</p><p>Esta aula disponibilizará uma base para que você possa ser inserido num “universo” de práticas,</p><p>disciplinas e processos na área de serviços de softwares e infraestrutura.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Introdução à DevOps</p><p>Empresas focadas em desenvolvimento procuram constantemente técnicas de gestão que</p><p>melhorem o desempenho das entregas de suas aplicações informatizadas (softwares). O</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>DevOps surge como um movimento cultural e pro�ssional que trata a colaboração entre as</p><p>equipes de desenvolvimento e operações, a �m de proporcionar uma nova abordagem</p><p>automatizada e assertiva.</p><p>Através da cultura DevOps, busca-se integrar todo o ciclo de produção, que vai desde a análise de</p><p>requisitos até a sua produção. A ideia é que essa integração seja feita por processos</p><p>sistematizados, com testes constantes, para garantir que o software satisfaça os requisitos</p><p>de métricas, eventos e logs em um banco</p><p>de dados de série temporal de alto desempenho; projetado para lidar com grandes volumes</p><p>e várias fontes de dados.</p><p>Elastic Stack: o acrônico ELK surgiu como um projeto OpenSource que reunia três</p><p>ferramentas: Elasticksearch, Logstash e Kibana. Com o aumento desses projetos, uma</p><p>nova ferramenta foi inserida, a Beats, o que fez com que surgisse a ferramenta Elastic</p><p>Stack e os projetos �cassem independentes.</p><p>Assim, o Elastic Stack se tornou uma solução de monitoramento de aplicação, infraestrutura,</p><p>análise de logs e segurança integrada, avançada e cheia de possiblidades.</p><p>Logstash: é um pipeline que, de forma dinâmica, faz ingestão, transformação e envio de</p><p>dados.</p><p>Kibana: é um visualizador de dados do Elasticksearch e do Elastic Stack. Com ele, você</p><p>pode criar visualizações interativas, simples e intuitivas e criar dashboards com grá�cos,</p><p>mapas e �ltros.</p><p>Fluentd: é um coletor de dados, também de código aberto, que possibilita a uni�cação da</p><p>coleta e do consumo dos dados, melhorando o uso e a compreensão desses dados.</p><p>Grafana: é uma das ferramentas mais simples para observar métricas (Prometheus e</p><p>Gra�te), logs e traces. Com o uso de agentes e integrações, ele monitora o sistema, de�ne</p><p>regras para alertas e noti�cações, agenda silêncios, entre outras funções.</p><p>FogMon: é uma ferramenta leve para monitoramento distribuído. Criada para ser executada</p><p>em infraestruturas heterogêneas entre cloud e edge, no entanto Correia (2019), em estudo</p><p>de caso, constatou que as soluções que tiram proveito apenas da cloud dispõem de</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>recursos ilimitados, contudo apresentam resultados de latência elevada e congestão na</p><p>rede.</p><p>E as soluções orientadas apenas para a perspectiva da edge podem não satisfazer os requisitos</p><p>da aplicação, dada a instabilidade que apresentam em termos de recursos e falhas.</p><p>A FogMon foi escrita em C++ e tem uma arquitetura de duas camadas peer-to-peer. Opera com</p><p>dois agentes de software: followers ou leaders. Os leaders monitoram os nós e agregam</p><p>periodicamente os dados que os followers recolhem.</p><p>FMonE: criada com foco em infraestruturas fog, ou seja, o processamento acontece no hub</p><p>de dados ou em um roteador ou gateway, reduzindo a quantidade de dados enviados para a</p><p>nuvem.</p><p>Essa ferramenta contempla as principais características de sistemas com essa infraestrutura,</p><p>que são: heterogeneidade, mobilidade, conectividade e distribuição geográ�ca, apresentando</p><p>requisitos fundamentais, como: não necessidade de instalações, agregação e �ltragem de</p><p>métricas, back-end �exível, elasticidade, resiliência, atenção nas localizações, monitoração de</p><p>plugins, agnóstico no hardware e sistema operativo (CORREIA, 2019).</p><p>E não esgotamos aqui as ferramentas de monitoramento, podemos citar Data Dog, New Relic,</p><p>Elastic APM, Dinatrace, Graylog, Sentry, Alertmanager, Pagerduty e muitas outras amplamente</p><p>trabalhadas no mundo DevOps. Existem ferramentas para cada realidade de monitoramento e de</p><p>infraestrutura.</p><p>As métricas e ferramentas de monitoração diferirão de acordo com a necessidade de cada</p><p>empresa (cliente), mas, com a dinâmica e a importância dos computadores nos negócios de</p><p>qualquer empresa, é imprescindível que se utilize da monitoração, seja para controle de</p><p>infraestrutura, de aplicações ou até de negócios.</p><p>Com o monitoramento, os mecanismos de noti�cações e os alertas, é possível perceber tudo o</p><p>que está acontecendo na rede. Assim, é plausível projetar sistemas que �quem disponíveis 24</p><p>horas, tomar decisões quando houver necessidade de aumento de escala, fazer backups</p><p>seguros, monitorar unidades remotas e ambientes de virtualização, garantir a segurança dos</p><p>seus ativos, usar dashboards para visualizar dados de forma mais e�ciente e se adequar de</p><p>forma �exível às mudanças, sempre presentes, nos processos tecnológicos.</p><p>Videoaula: resolução da situação-problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Conclusão</p><p>Como vimos nesta aula, existem várias ferramentas de monitoramento, e as métricas devem ser</p><p>de�nidas de acordo com o projeto de cada sistema, porém, para atender os requisitos propostos</p><p>no desa�o, é importante que a ferramenta escolhida consiga:</p><p>oferecer um dashboard com as informações mais importantes (esse painel pode sugerir</p><p>métricas para facilitar a customização do monitoramento.</p><p>mostrar estatísticas de desempenho dos servidores e dos clientes.</p><p>monitorar todas as dependências, seja de aplicativos ou base de dados, para melhor</p><p>diagnosticar um problema.</p><p>identi�car anomalias no desempenho.</p><p>quanti�car os serviços mais requeridos pelos clientes.</p><p>alguma automatização que permita encontrar pontos com falhas.</p><p>deve disponibilizar o controle de tráfego das redes virtuais.</p><p>mensurar as disponibilidades das ligações com os endpoints.</p><p>manter um registro de atividades.</p><p>Como se trata do monitoramento de uma rede de suporte, a prática DevOps deve prever, também,</p><p>o monitoramento dos containers. Portanto, deve poder monitorar os cluster, pods e os nós. E,</p><p>claro, cumprir com o básico do monitoramento, que são as noti�cações, correções que</p><p>divergirem das métricas, alertas, entre outros.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Além das métricas levantadas na seção, outras métricas pertinentes da cultura DevOps são: a</p><p>medição do impacto do produto ou serviço, tanto no cliente �nal como no negócio em si, a</p><p>agilidade e a e�ciência e que esteja em conformidade com as políticas de produção e segurança.</p><p>Como tudo passa por um planejamento bem estruturado, a ferramenta e as métricas variarão de</p><p>acordo com a necessidade e o custo investido na prevenção, já que a monitoração é uma prática</p><p>de prevenção.</p><p>Apresentando essas características, seu chefe �cará feliz com o seu trabalho, e toda a equipe se</p><p>bene�ciará das melhorias empregadas com a otimização proporcionada com o monitoramento.</p><p>Videoaula: resumo da unidade</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com o resumo da unidade.</p><p>Referências</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>AMARAL, D. C. et al. Gerenciamento ágil de projetos: aplicação em produtos inovadores. São</p><p>Paulo: Saraiva, 2011.</p><p>BACK, N.; LEAL, L. C. M. Uma metodologia de planejamento de teste de produtos industriais.</p><p>Produção, Rio de Janeiro, v. 2, n. 1, p. 61-69, out. 1991. Disponível em: https://bit.ly/3xEAe8d.</p><p>Acesso em: 13 dez. 2021.</p><p>BASSO, D. E. Administração de redes de computadores. Curitiba, PR: Contentus, 2020.</p><p>BECK, K. et al. O Manifesto Ágil. Trad. João Rotta Neto. [S. l.: s. n.], 2002. Disponível em:</p><p>https://bit.ly/3CNSRKE. Acesso em: 13 dez. 2021.</p><p>BELMIRO, N. J. Tecnologia da informação gerencial. São Paulo: Pearson Education do Brasil,</p><p>2015.</p><p>BERMAN, D. Prometheus x gra�te: qual você deve escolher para séries temporais ou</p><p>monitoramento?. Logz.io, 2020. Disponível em: https://bit.ly/3lXfA13. Acesso em:13 dez. 2021.</p><p>BEYER, B. et al. Engenharia de Con�abilidade do Google: como o Google administra seus</p><p>sistemas de produção. São Paulo: Novatec, 2016.</p><p>BOAGLIO, F. Jenkins, automatize tudo sem complicações. São Paulo: Casa do Código, 2016.</p><p>BOSCARI, R. P. Implantando e testando o CACTI em uma rede empresarial. Curitiba, PR: Pontifícia</p><p>Universidade Católica do Paraná, 2010. Disponível em: https://bit.ly/3AAqY6U. Acesso em: 13</p><p>dez. 2021.</p><p>COUTINHO, T. Lean Manufacturing: por que adotar o sistema toyota de produção? Por que adotar</p><p>o Sistema Toyota de Produção?. Voitto, 2020. Disponível em: https://bit.ly/3iOxelP. Acesso em:</p><p>13 dez. 2021.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>CONTRIBUIDOR. Surpresa! Amplo acordo sobre a de�nição de DevOps. DevOps, 2015. Disponível</p><p>em: https://bit.ly/3xLMfc9.</p><p>Acesso em: 13 dez. 2021.</p><p>CORREIA, P. Monitoração para suporte de auto-gestão em aplicações de micro-serviços. 2019,</p><p>147f. Dissertação (Mestrado em Engenharia Informática) – Universidade Nova de Lisboa, Lisboa,</p><p>2019.</p><p>CRITES, A. What devops means to me. Medium, 2016. Disponível em: https://bit.ly/3AJECF7.</p><p>Acesso em: 13 dez. 2021.</p><p>DENARDIN, G. W; BARRIQUELLO, C. H. Sistemas operacionais de tempo real e sua aplicação em</p><p>sistemas embarcados. São Paulo: Blucher, 2019.</p><p>ELASTIC. O que é o ELK Stack?. 2021. Disponível em: https://bit.ly/2VNVco0. Acesso em: 13 dez.</p><p>2021.</p><p>ELASTIC. Conheça os principais produtos – todos gratuitos e abertos. 2021. Disponível em:</p><p>https://bit.ly/3jLusg4. Acesso em:13 dez.. 2021.</p><p>ELASTIC STACK. Disponível em: https://bit.ly/2VNWLCo. Acesso em:13 dez. 2021.</p><p>FLUENTD. Disponível em: https://bit.ly/3g17Jvu. Acesso em:12 dez. 2021.</p><p>GAEA. O guia completo sobre CALMS em DevOps. GAEA, 2020. Disponível em:</p><p>https://bit.ly/2VWqeKG. Acesso em: 18 abr. 2021.</p><p>GAEA. Quais são as características dos pro�ssionais especialistas em DevOps. GAEA, 2020.</p><p>Disponível em: https://bit.ly/3sdm0tW. Acesso em: 23 mar. 2021.</p><p>GOLDIN, P. 25 vantagens do DevOps. DevOps Digest, 2016. Disponível em: https://bit.ly/37CIRFZ.</p><p>Acesso em: 13 dez. 2021.</p><p>GOMES, R.; SOUZA, R. Docker: infraestrutura como código, com autonomia e replicabilidade. In:</p><p>WORKSHOP DE TECNOLOGIA DA INFORMAÇÃO E COMUNICAÇÃO DAS IFES, 9., 2015, Belo</p><p>Horizonte. Anais [...]. Belo Horizonte, MG: IFES, 2015.</p><p>GONÇALVES, R. C. Gestão da informação em redes com servidores virtualizados: um modelo de</p><p>apoio para gestores de microempresas e analistas de sistemas. 2017, 152f. Dissertação</p><p>(Mestrado em Gestão Organizacional) – Universidade Federal de Goiás, Catalão, 2017.</p><p>GOOGLE CLOUD. Medição de DevOps: monitoramento e observabilidade. 2021. Disponível em:</p><p>https://bit.ly/2VSXp1C. Acesso em: 13 dez. 2021.</p><p>GRAFANA. Disponível em: https://bit.ly/2VSHLnc. Acesso em:13 dez. 2021.</p><p>GRAPHITE. Disponível em: https://bit.ly/3jUlrBG. Acesso em: 13 dez. 2021.</p><p>HUMBLE, J.; FARLEY, D. Entrega Contínua: como entregar de forma rápida e con�ável. Porto</p><p>Alegre, RS: Bookman, 2014.</p><p>IESE BUSINESS SCHOOL. The 5 keys to a digital mindset. Forbes, 2014. Disponível em:</p><p>https://bit.ly/3jPnWVH. Acesso em: 13 dez. 2021.</p><p>JUNIOR, P. R. Monitoramento de servidores e infraestrutura. [S. I.: s. n.], 2015. Disponível em:</p><p>https://bit.ly/3CLmv3b. Acesso em: 13 dez. 2021.</p><p>KIBANA. Disponível em: https://bit.ly/37Jtewt. Acesso em: 13 dez. 2021.</p><p>LIMA, J. dos R. Monitoramento Zabbix. 2. ed. Rio de Janeiro: Brasport, 2020.</p><p>MARTIN, R. C. Desenvolvimento ágil limpo: de volta às origens. Rio de Janeiro: Alta Books, 2020.</p><p>OLIVEIRA, K. C. de A. Um processo de gerência de con�guração baseado no 2 de CMMI</p><p>estagiado para fábricas de softwares orientadas para produtos. 2007, 146f. Dissertação</p><p>(Mestrado em Ciências da Computação) – Universidade Federal de Pernambuco, Recife, 2007.</p><p>Disponível em: https://bit.ly/3AGBXvS. Acesso em: 13 dez. 2021.</p><p>OPENNMS. Disponível em: https://bit.ly/3AIxglk. Acesso em: 13 dez. 2021</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>POPPENDIECK, M.; POPPENDIECK, T. Implementando o desenvolvimento lean de software: do</p><p>conceito ao dinheiro. Porto Alegre, RS: Bookman, 2011.</p><p>PROMETHEUS. Disponível em: https://bit.ly/3jYOCng. Acesso em: 13 dez. 2021.</p><p>ROSSATO, C. A. Comparativo entre o método ágil e o tradicional. 2015, 20f. Artigo</p><p>(Especialização em Governança de TI) – Universidade do Sul de Santa Catarina, Tubarão, 2017.</p><p>Disponível em: https://bit.ly/3jQLE3W. Acesso em: 5 maio 2021.</p><p>SENS, E.; RODRIGUES, J. R. S. O tripwire e a integridade de sistemas GNU/Linux. Lavras, MG:</p><p>Universidade Federal de Lavras, 2003. Disponível em: https://bit.ly/2VVt6aT. Acesso em: 13 dez.</p><p>2021.</p><p>SHAHIN, M.; BABAR, M. A.; ZHU, L. Continuous Integration, Delivery and Deployment: a</p><p>systematic review on approaches, tools, challenges and practices. Ieee, Sidney, v. 5, p. 3909-3943,</p><p>mar. 2017. Disponível em: https://bit.ly/3sf7ZvP. Acesso em:13 dez. 2021.</p><p>SOUSA, L.; TRIGO, A.; VARAJÃO, J. DevOps – fundamentos e perspectivas. In: CONFERÊNCIA DA</p><p>ASSOCIAÇÃO PORTUGUESA DE SISTEMAS DE INFORMAÇÃO, 19., 2019, Lisboa. Anais [...].</p><p>Lisboa, Portugal: APSI, 2019.</p><p>TANENBAUM, A. S. Sistemas operacionais modernos. 3. ed. São Paulo: Pearson Prentice Hall,</p><p>2009.</p><p>THE (SHORT) HISTORY OF DEVOPS. [S. l.: s. n.], 2012. Publicado pelo canal Damon Edwards.</p><p>Disponível em: https://bit.ly/3jREi03. Acesso em: 13 dez. 2021.</p><p>TRANSFORMAÇÃO DIGITAL. Mindset Digital: onde começa a transformação. Transformação</p><p>digital, 2018. Disponível em: https://bit.ly/3jOGENj. Acesso em: 13 dez. 2021.</p><p>TRIPWIRE. Disponível em: https://bit.ly/3m1oo63. Acesso em: 13 dez. 2021.</p><p>TURNBULL, J. Pulling Strings with Puppet. New York: Apress, 2007.</p><p>Aula 4</p><p>Roteiro de Aula Prática</p><p>Roteiro de Aula Prática</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula práitca!</p><p>,</p><p>https://bit.ly/3sf7ZvP</p><p>https://bit.ly/3sf7ZvP</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/manual1.pdf</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/U1.pdf</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Unidade 2</p><p>Mudanças con�áveis na infraestrutura ágil</p><p>Aula 1</p><p>Fluxo automatizado para aplicar mudanças (pipeline)</p><p>Introdução da unidade</p><p>Objetivos da Unidade</p><p>Ao �nal desta Unidade, você será capaz de:</p><p>aplicar as ferramentas de pipeline de mudanças;</p><p>praticar cases de infraestrutura de produção e monitoramento de aplicação;</p><p>analisar as aplicações de técnicas e Rollbacks automatizados.</p><p>O mundo da tecnologia está em constante evolução e, justamente por isso, os processos de</p><p>como entregamos essa tecnologia também evolui, se transforma.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dizemos que DevOps é cultura, porque não é apenas uma forma de criar automação dentro da</p><p>sua infraestrutura, isso já era feito por administradores de sistemas. Também, não é apenas uma</p><p>forma de colaboração dos desenvolvedores com a equipe de operações, pois isso, em certa</p><p>medida, era praticado em muitas empresas de softwares.</p><p>A ideia do DevOps é mais completa, engloba toda a forma como produzimos software hoje em</p><p>dia e como podemos atender à demanda dos clientes de maneira mais assertiva, fazendo</p><p>entregas mais ligeiras do que o método tradicional fazia.</p><p>A forma tradicional planejava grandes entregas, as quais tinham prazos e escopo de�nidos no</p><p>momento da criação do projeto. Isso não estava mais atendendo à demanda, que passou a</p><p>pressionar o mercado por uma agilidade de desenvolvimento e um escopo mais aberto, exigindo</p><p>entregas cada vez mais rápidas.</p><p>Essa exigência do mercado acabou por culminar no que chamamos de “metodologias ágeis”,</p><p>que visavam substituir as metodologias tradicionais de desenvolvimento de software. O mercado</p><p>já vinha tentando utilizar métodos mais ágeis de desenvolvimento há algum tempo, mas</p><p>somente em 2001 foi batizado o termo, quando um grupo de especialistas se reuniram em Utah,</p><p>nos EUA, para discutir como poderiam agilizar os processos de desenvolvimento, e desse</p><p>encontro nasceu o Manifesto para Desenvolvimento Ágil de Software (MANIFESTO, 2001).</p><p>Nesse manifesto, basicamente, determinou-se que o foco do desenvolvimento do software deve</p><p>ser os indivíduos e as interações, o software precisa estar executável e deve haver a colaboração</p><p>do cliente, assim como respostas rápidas a mudanças e alterações (SOARES, 2004).</p><p>Essa foi a pedra fundamental para a mudança de paradigma de toda a indústria de software,</p><p>porém, enquanto o mundo do desenvolvimento estava trabalhando dessa forma, o modo como</p><p>se entregava e operava a infraestrutura ainda seguia um processo engessado, que exigia uma</p><p>série de controles, para garantir que nada fosse alterado e pudesse gerar problemas e/ou</p><p>indisponibilidades às aplicações em produção.</p><p>Isso</p><p>começou a criar barreiras para a agilidade que se propunha com o método ágil, já que, se</p><p>não temos a infraestrutura disponível também de maneira ágil, perdemos um tempo precioso</p><p>para as entregas do software.</p><p>Existiam, assim, duas abordagens diferentes e con�itantes: o desenvolvimento precisava fazer</p><p>entregas cada vez mais ágeis, e a operação de TI tinha por objetivo manter toda a infraestrutura</p><p>ativa e disponível e, para isso, precisava manter o mínimo de alterações no ambiente como um</p><p>todo.</p><p>Ocorreu, então, o surgimento de um movimento chamado de DevOps, com o intuito de remover</p><p>as barreiras entre as equipes de desenvolvimento e de operações, propondo uma abordagem de</p><p>colaboração e interação entre os times, desde a concepção da aplicação até sua entrega em</p><p>produção (DEBOIS, 2008).</p><p>Para se atingir este objetivo, algumas ferramentas e técnicas foram criadas. Em especial, a ideia</p><p>de criar esteiras de entrega de software, conhecidas como pipelines de entrega, que</p><p>automatizam uma série de testes e implantações, para tornar a disponibilização, a con�guração</p><p>e os retornos da infraestrutura um processo automatizado e prático.</p><p>Pensando de maneira prática, como garantir que todas essas mudanças não criem um problema</p><p>na operação, visto que a quantidade de alterações nesse modelo é exponencial? Para responder</p><p>a esse questionamento, foram introduzidas ferramentas de monitoramento especí�cas para esse</p><p>modelo de implantação ágil.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Introdução da aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá conhecer conceitos e técnicas para produção automática.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>criar e de�nir Rollbacks automatizados;</p><p>identi�car as técnicas de produção automática;</p><p>analisar cases de aplicações de técnicas e Rollbacks automatizados.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Quando você pensa em automação, o que vem à sua cabeça? Se você pensar como a indústria, a</p><p>automação é um dos assuntos mais atuais, desde os robôs que montam veículos até aqueles</p><p>que montam pequenas peças eletrônicas, que seriam impossíveis de serem feitas manualmente.</p><p>A automação veio para �car.</p><p>Se você consultar o dicionário, uma das de�nições para o termo será: “Sistema constituído por</p><p>dispositivos mecânicos ou eletrônicos, destinado à operacionalização e controle dos processos</p><p>de produção, que dispensa a intervenção direta do homem” (MICHAELIS, 2021, [s. p.]). Isso</p><p>signi�ca que não é apenas ser automático, e sim ser capaz de usar mecanismos capazes de se</p><p>autocorrigir.</p><p>Por exemplo, um robô construindo um veículo tem que ter a capacidade de perceber diferenças</p><p>para poder se autocorrigir e não agir igual em todos os casos, causando falhas que podem</p><p>custar muito dinheiro.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Trazendo para o nosso contexto de tecnologia, a automação também é semelhante, ela não é</p><p>simplesmente criar scripts para tornar automático um processo que você faria manualmente.</p><p>Isso já era feito enchendo os servidores de scripts.</p><p>O problema era que, ao fazer isso, na maioria das vezes, apenas quem tinha criado o script sabia</p><p>de fato o que ele fazia e para qual propósito ele tinha sido feito, tornando as manutenções e/ou</p><p>migrações um verdadeiro caos.</p><p>A automação vem ligada a uma ideia muito mais ampla, que é a de tornar sua infraestrutura</p><p>como um código-sigla (IaC), ou seja, não basta apenas encher seu servidor de scripts para ter</p><p>automação, você deve transformar sua infra em código, a ponto de poder simplesmente destruir</p><p>seu servidor em produção e subir um igualzinho em poucos minutos.</p><p>Com uma automação ligada à ideia de infra como um código, você consegue criar ambientes</p><p>inteiros automaticamente e já con�gurados para uso, abrindo seu leque de oportunidades, como</p><p>criar ambiente de homologação idêntico ao de produção; rodar testes de todos os tipos nesse</p><p>ambiente, para simular o comportamento em produção; recuperar-se rapidamente de desastres e</p><p>incidentes, ao ponto de ter o mínimo de indisponibilidade; o compartilhamento e agrupamento</p><p>das con�gurações em um único repositório de código, possibilitando a revisão e avaliação do</p><p>que é feito no ambiente; diversas outras possibilidades.</p><p>Perceba que a ideia de automação é um conceito que tem uma ligação intrínseca com a infra</p><p>como um código, portanto, estudando esse assunto, você mergulhará de cabeça na obrigação de</p><p>escrever sua infra em um código e em como fazer desse código o mais robusto e bem escrito</p><p>possível, para que outras pessoas consigam entender o que existe e possam reproduzi-lo da</p><p>maneira que quiserem.</p><p>Imagine que você foi contratado por uma grande empresa para con�gurar toda a infraestrutura</p><p>dela de maneira ágil, usando todas as ferramentas disponíveis e podendo customizá-la e alterá-la</p><p>a seu bel-prazer.</p><p>As únicas exigências que seu diretor fez são: manter a aplicação principal da empresa</p><p>funcionando durante todo o tempo da mudança e con�gurar um ambiente de testes, para que o</p><p>código dos desenvolvedores, hoje espalhado, seja uni�cado.</p><p>Faça um trabalho de DevOps completo, não se apegue somente à parte “ferramental”. Lembre-se</p><p>de que DevOps é cultura, e não apenas instalar e con�gurar ferramentas. Pense em como</p><p>resolver con�itos que virão das mudanças que você proporá.</p><p>Como você vai quebrar paradigmas do time de operações e desenvolvimento, que já tem uma</p><p>rotina estabelecida? Como manter a aplicação principal funcionando e fazer alterações ao</p><p>mesmo tempo? Pense em modos de migrar o que existe para o conceito de infra ágil aos</p><p>poucos.</p><p>Entre você ter um servidor de difícil manutenção, que poucos conseguiriam trabalhar, e um</p><p>código contendo tudo que tem instalado e con�gurado, podemos garantir que a segunda opção é</p><p>muito melhor e mais pro�ssional. Entenda bem o conceito de infra como um código e, uma vez</p><p>feito, você jamais irá querer retornar aos tempos de con�gurações manuais.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Conceito de pipeline de mudanças</p><p>Agora que já conheceu um pouco da história do termo DevOps, viu como o desenvolvimento ágil</p><p>pressionou o mundo de operações a ser mais ágil e como a automação é um termo mais amplo</p><p>que comumente pensamos, começaremos a detalhar como podemos utilizar as</p><p>esteiras/pipelines de mudança para automatizar trabalhos manuais, criar rollbacks e monitorar</p><p>toda essa nossa infraestrutura.</p><p>O pipeline, ou esteira de mudança, é um conceito que tem ligação com a automação mencionada</p><p>anteriormente, quando foi pensada a ideia de criar uma forma de empacotar softwares desde</p><p>sua concepção até a sua entrega no ambiente de produção de maneira automática.</p><p>Claro que isso não é a de�nição �nal de esteira, já que ela pode fazer tudo o que for programada</p><p>a fazer. Podemos ter esteiras para alterar infraestrutura, criar servidores, escanear softwares em</p><p>busca de falhas de segurança, en�m podemos utilizá-la para vários tipos de trabalho.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Sempre que você encontrar o conceito de pipelines, ele estará ligado a termos que veremos</p><p>agora em detalhes, que são resumidos nas abreviações CI e CD, que signi�ca Continuos</p><p>Integration e Continuos Delivery, ou em português, Integração Contínua e Entrega Contínua.</p><p>Vamos dar uma olhada em cada um deles.</p><p>Integração Contínua (CI)</p><p>Nasce diretamente do conceito de metodologias ágeis. Pode ser assim de�nida:</p><p>“A integração contínua é uma prática de desenvolvimento de software em que os</p><p>membros de uma equipe integram seu trabalho com frequência, geralmente cada</p><p>pessoa se integra pelo menos diariamente - levando a várias integrações por dia.</p><p>Cada integração é veri�cada por um build automatizado (incluindo teste) para</p><p>detectar erros de integração o mais rápido possível”. (FOWLER, 2006, [s. p.])</p><p>Para que exista integração contínua, não é obrigatório o</p><p>uso de ferramentas, porém essas</p><p>integrações entre os vários desenvolvedores podem gerar con�itos no código e, para evitar isso,</p><p>utilizam-se amplamente as ferramentas de controle de versões (SCM), como CVS, SVN e Git – o</p><p>mais utilizado hoje em dia.</p><p>Para resumir em uma frase simples, a integração contínua é a etapa em que várias pessoas</p><p>diferentes geram códigos, os quais, depois, são mesclados em um código único, gerando, assim,</p><p>a possibilidade de um trabalho descentralizado e focado entre vários colaboradores.</p><p>Mas, você pode estar se perguntando: o que isso tem a ver com a infraestrutura? No mundo</p><p>DevOps, tem tudo. Você deve se lembrar de que a infra ágil trata tudo como um código e, no</p><p>nosso caso, seriam vários analistas DevOps criando códigos da infra, como redes, servidores e</p><p>discos, integrando tudo em repositórios de código, uni�cando e compartilhando as informações</p><p>entre si.</p><p>Entrega Contínua e Implantação Contínua (C/D)</p><p>No caso do termo C/D, ele assume duas abordagens: na primeira, o Continuos Delivery, ou</p><p>entrega contínua, seria quando o código está integrado o su�ciente, maduro e testado, e é</p><p>liberada uma versão (release) segura para implantação do software para a produção, mas</p><p>necessita de uma aprovação para que isso ocorra; na segunda, a implantação contínua, ou</p><p>Continuos Deployment, seria a automação de todo o processo de entrega desse software em</p><p>produção, sem interação ou aprovação (SHAHIN; ALI BABAR; ZHU, 2017).</p><p>Quando juntamos os processos, temos algo como o mostrado na �gura a seguir:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Fluxo de implantação. Fonte: elaborada pelo autor.</p><p>_____</p><p>Atenção</p><p>Cuidado, pois existe muita confusão com os termos Continuos Delivery (Entrega Contínua) e</p><p>Continuos Deployment (Implantação Contínua). Se você con�gurou sua pipeline para usar o</p><p>código integrado nos estágios anteriores, testou e criou uma versão pronta para a produção, mas</p><p>não aplica em produção de maneira automatizada, ou necessita de alguma aprovação para fazê-</p><p>lo, você não tem Continuos Deployment con�gurado na sua pipeline.</p><p>Criação do �uxo de mudanças automáticas</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Por onde você pode começar para aplicar um �uxo automatizado seguindo as práticas que</p><p>acabou de ver no CI/CD? O primeiro passo é con�gurar a sua integração, ou seja, o seu CI.</p><p>Para isso, falaremos um pouco sobre as ferramentas que são largamente utilizadas para</p><p>con�gurar uma integração, que permitem que várias pessoas trabalhem no mesmo código, ao</p><p>mesmo tempo, e que consigam criar um código único depois, com todas as alterações feitas.</p><p>Estamos falando do SCM.</p><p>SCM Git</p><p>Como mencionado, hoje, é praticamente uma unanimidade o uso do Git como SCM. Inicialmente,</p><p>ele foi desenvolvido pelo criador do Kernel do Linux, o desenvolvedor �nlandês Linus Torvalds,</p><p>que não encontrava uma solução no mercado para o problema de controle de versão no</p><p>desenvolvimento do Kernel (TORVALDS, 2005).</p><p>O Git gera um controle de todas as alterações que são feitas em um código e consegue mesclar</p><p>com alterações feitas por outras pessoas, permitindo que cada um trabalhe descentralizado na</p><p>sua própria alteração.</p><p>O funcionamento dele é simples. Digamos que você comece a desenvolver um simples script em</p><p>Python para automatizar uma tarefa. No exemplo a seguir, foi criado um script de “hello world”.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Hello World. Fonte: elaborada pelo autor.</p><p>A primeira linha desse script diz para usar o interpretador do python para rodar o script, e a</p><p>terceira executa um comando chamado print, para escrever na tela a mensagem “hello world”.</p><p>Para dizer para o Git usar a pasta como repositório, basta iniciar o Git naquele diretório, com o</p><p>comando “git init”, como na próxima �gura.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Git Init. Fonte: elaborada pelo autor</p><p>A partir de agora, o diretório se torna um diretório Git, e toda alteração feita no script será</p><p>percebida por ele. Como é a primeira alteração, podemos, nesse momento, veri�car com o “git</p><p>status”, que dirá que o arquivo script.py foi alterado e precisa ser versionado, conforme a �gura a</p><p>seguir.</p><p>Git Status. Fonte: elaborada pelo autor.</p><p>Agora, precisamos dizer para o Git que queremos preservar essa versão do script. Para isso,</p><p>utilizamos o comando “git add”. Por �m, digitamos uma mensagem de “commit”, que serve para</p><p>dizer para outra pessoa quais alterações �zemos.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Git Commit. Fonte: elaborada pelo autor.</p><p>Esses passos são simples, mas exempli�cam o que o sistema de versionamento pode fazer por</p><p>você. Qualquer alteração mínima no código a partir de agora será rastreada pelo Git e gerará uma</p><p>nova versão.</p><p>Obviamente, você sempre deve rodar o Git add para dizer ao sistema que quer que ele adicione a</p><p>versão nova gerada.</p><p>Agora que você tem o git con�gurado para enxergar suas alterações locais, expandiremos para</p><p>termos um sistema centralizado de código.</p><p>Hospedagem centralizada de código-fonte</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Se você testar seu código com frequência, já fará a parte da integração contínua, que ajuda a</p><p>integrar as equipes de DevOps, já que, ao testar sempre seu código, você pode provar para a área</p><p>de operações que ele é funcional (SWARTOUT, 2014).</p><p>Existem diversos serviços que podem servir de hospedagem centralizada de código para o seu</p><p>CI. Entre os mais conhecidos, podemos citar GitHub, BitBucket e GitLab. Temos algumas</p><p>diferenças entre os serviços, e é importante entendê-las para você fazer a melhor escolha</p><p>possível.</p><p>Começando pelo mais conhecido, o GitHub. Ele é um repositório e, ao mesmo tempo, uma rede</p><p>social, o qual permite que qualquer pessoa possa enviar seu código para ele usando o Git, e</p><p>�cará disponível para toda a comunidade. O GitHub foi concebido seguindo os princípios do</p><p>Open Source, ou código aberto, que, basicamente, enfatiza a colaboração da comunidade e a</p><p>liberdade de compartilhar o código com todos.</p><p>Porém, muitas vezes, você não pode compartilhar o código da sua aplicação assim e precisa de</p><p>um repositório privado, para isso, o GitHub tem um serviço pago, que permite que você crie seus</p><p>códigos e controle o acesso a eles.</p><p>Já o serviço do BitBucket permite que você crie até cinco repositórios privados por projeto na</p><p>conta gratuita.</p><p>Muitas ferramentas que você encontrará no mercado de trabalho estão amplamente ligadas ao</p><p>código aberto, e o GitLab é uma delas. Com sua versão “Community”, permite que você instale</p><p>localmente um servidor de SCM e de CI, sendo uma grande opção para quem deseja ter uma</p><p>ferramenta de CI completa e repositórios privados.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para �ns didáticos, enviaremos um código de uma aplicação para dentro de um repositório</p><p>centralizado em um GitLab. Para isso, precisaremos mais do que apenas um “hello world” em</p><p>python. Usaremos uma API simples, que terá como resposta usuários cadastrados em um</p><p>pequeno banco de dados, chamado SQLite. Não entraremos em detalhes da aplicação, pois o</p><p>foco é entender como a integração contínua funciona na prática.</p><p>API de exemplo. Fonte: elaborada pelo autor.</p><p>Essa simples aplicação usará bibliotecas do python para criar um serviço web, que responderá</p><p>os usuários cadastrados no banco Sqlite, toda vez que alguém enviar o método GET na rota</p><p>“/users”.</p><p>_____</p><p>Assimile</p><p>Rest API é um design de desenvolvimento de software usado para transferir informações entre</p><p>sistemas Web, usando os métodos HTTP (GET, HEAD, POST, PUT, PATCH, DELETE, CONNECT,</p><p>OPTIONS e TRACE).</p><p>_____</p><p>Agora que você já foi devidamente apresentado a essa simples API, enviaremos esse código</p><p>para o repositório centralizado no GitLab instalado localmente.</p><p>Primeiramente, criamos um projeto dentro do GitLab com o nome de api-python.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Interface GitLab. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Ele vai ser o repositório central da aplicação no GitLab. Depois de criar o projeto, você já receberá</p><p>instruções de como adicionar o repositório local para ser enviado para o GitLab.</p><p>Criando um repositório. Fonte: captura de tela do GitLab (GITLAB,</p><p>2021).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>As instruções indicam como criar um repositório, se ele não existir, e como enviar um repositório</p><p>existente, como no nosso caso. Daremos os comandos, conforme descritos nas instruções.</p><p>Git add.Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Por �m, daremos o comando “push”(empurrar) para enviar o código local para o GitLab.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Git push. Fonte: elaborada pelo autor.</p><p>Veri�cando novamente on-line, podemos ver o código da aplicação no GitLab.</p><p>Repositório criado. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Agora realmente começa a parte da integração do código. Se você olhar no menu à esquerda,</p><p>verá o ícone do CI/CD. Ao clicar ali, abrirá o menu do CI/CD contendo os pipelines. No nosso</p><p>caso, ainda não temos nenhum con�gurado, pois faremos agora.</p><p>Antes de qualquer coisa, devemos de�nir o que queremos que nossa integração faça. Caberia,</p><p>aqui, neste momento, uma reunião entre as equipes de desenvolvimento e operações para de�nir</p><p>o que a nossa aplicação precisa possuir mandatoriamente para ser considerada “integrada”, qual</p><p>infra que ela usará, assim como qual tecnologia, qual testes devem ser realizados, etc.</p><p>No nosso exemplo, usaremos uma tecnologia chamada Docker para criar um container da</p><p>aplicação e, com isso, padronizar como a aplicação será entregue ao usuário �nal.</p><p>Voltando ao nosso projeto, existe um botão chamado Setup CI/CD, que cria um script para</p><p>con�gurar um pipeline padrão. Usaremos o padrão do Docker e alteraremos algumas coisas.</p><p>Assim que você ativar o CI/CD, ele criará um arquivo chamado “gitlab-ci.yml”, o qual é escrito em</p><p>formato YAML, que é um formato de serialização de dados legível por humanos e modelos de</p><p>processamento (INGERSON; EVANS; BEM-KIKI, 2001).</p><p>Com ele, descreveremos os passos que queremos que o nosso pipeline precisa seguir. No nosso</p><p>caso, temos o seguinte:</p><p>primeiro, faremos login na plataforma DockerHub, um repositório público de imagens que</p><p>permite que você envie suas imagens Docker para lá.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>depois, pegaremos a aplicação e construiremos uma imagem dockerizada, graças ao</p><p>DockerFile presente no projeto, que diz quais passos ele precisa que instalar dentro da</p><p>imagem para que a aplicação funcione.</p><p>após isso, aplicaremos uma Tag (etiqueta), item obrigatório do Docker, para que ele possa</p><p>diferenciar as imagens.</p><p>por �m, enviaremos essa imagem para o dockerhub, e nossa aplicação estará pronta para</p><p>ser usada em produção.</p><p>O resultado será apresentado na �gura a seguir:</p><p>Gitlab-ci.yaml. Fonte: elaborada pelo autor.</p><p>O importante é que toda a vez que alterarmos um trecho do código, ou seja, desenvolver, o</p><p>pipeline receberá essa alteração, criará a imagem Docker e deixará preparada para a versão nova</p><p>da aplicação.</p><p>Lembrando novamente que, segundo os conceitos que aprendemos, esse pipeline não é um</p><p>CI/CD completo, pois faltam ainda alguns passos para isso. Como nos testes, replicar isso em</p><p>ambiente de homologação e, por �m, em produção.</p><p>Voltando ao GitLab, se você for agora em CI/CD, verá o histórico das pipelines executadas.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>CI/CD. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Veremos os logs da pipeline #42 para entender o que foi feito na �gura a seguir:</p><p>Pipeline 42. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Podemos, agora, ver os passos que a pipeline executou sozinha para nós, se foi exatamente o</p><p>que você declarou no gitlab-ci.yml.</p><p>Final da pipeline 42. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Testaremos se a imagem que criamos está funcionando como esperado, conforme a �gura a</p><p>seguir:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Aplicação funcionando. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>OBS.: a nossa pipeline não aplicou isso em local nenhum, apenas enviou essa imagem ao</p><p>repositório Docker. Foi testado rodando manualmente.</p><p>Ambiente de homologação</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>A homologação é uma forma de se garantir que a versão que será enviada para a produção é</p><p>exatamente o que foi desenvolvido e que nada está falhando. Além de validar se todas as</p><p>funcionalidades desenvolvidas funcionam corretamente (SALVADOR, 2015).</p><p>Nesse passo, podemos criar um item a mais na nossa pipeline, que enviará aquela versão ao</p><p>ambiente de homologação e executará sua aplicação para rodar uma bateria de testes, validando</p><p>se o que foi desenvolvido não “quebrou” a aplicação e é exatamente o que se pretendia fazer.</p><p>Claro que, como estamos falando de construção de infraestrutura como código, precisamos</p><p>codi�cá-la e criar uma infraestrutura semelhante à de produção, para simularmos que a nossa</p><p>aplicação está funcionando corretamente.</p><p>Para este �m, existem diversas ferramentas, mas vamos tratar especialmente da mais usada</p><p>atualmente, o Terraform. Com ela, podemos criar, com poucas linhas de comando, itens de</p><p>infraestrutura e ambientes inteiros. Ela é especialmente útil se você possui um ambiente em</p><p>nuvem, como GCP e AWS, mas pode ser usada dentro da sua infraestrutura local também.</p><p>Criaremos um item a mais na nossa pipeline para criar uma infraestrutura de homologação.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Load Balancer GCP. Fonte: elaborada pelo autor.</p><p>Basicamente, o nosso script criará uma infraestrutura de rede dentro da GCP com duas</p><p>máquinas virtuais, uma em cada região, a �m de evitar falhas e um balanceador (load balancer)</p><p>para distribuir o tráfego para os usuários.</p><p>Para isso, precisamos criar os scripts do Terraform e incluí-los na nossa pipeline, em uma pasta</p><p>chamada “terraform” .</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Terraform incluído. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Dentro desses scripts, tem o passo a passo para a criação da infraestrutura, da rede e das VMS.</p><p>Terraform scripts. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Terraform VPC</p><p>Não detalharemos item por item, pois isso seria extenso demais. Vamos ao pipeline, para isso,</p><p>precisamos alterar o gitlab-ci.yml, para incluir a instalação automática do Terraform e a execução</p><p>dos scripts, criando a infraestrutura:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Pipeline com Terraform. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Rodando a pipeline agora, ela inclui o Terraform Plan, que planejará a instalação da infraestrutura</p><p>e mostrará, nesse plano, o que o Terraform criará, para você conseguir validar se está correto, e o</p><p>passo Terraform Apply, que serve para criar a infraestrutura propriamente dita na GCP.</p><p>Terraform Apply. Fonte: captura de tela do GitLab (GITLAB, 2021).</p><p>Logo, criamos uma integração com o repositório centralizado da nossa aplicação, construímos</p><p>um CI que realiza uma con�guração na aplicação, para que ela possa ser disponibilizada em</p><p>produção, e criamos um ambiente de testes simulando exatamente o de produção.</p><p>Poderíamos incluir um ambiente de testes automatizados, scanners de vulnerabilidade e o</p><p>deployment da aplicação em produção, formando, assim, o CD (Continuos Deployment), e</p><p>teríamos um ambiente de CI/CD completo, porém o que �zemos mostra como podemos integrar</p><p>o código da nossa infraestrutura ágil, usando o Terraform com o código da aplicação em si,</p><p>cumprindo um ambiente de DevOps mínimo.</p><p>Como mencionado, não existe uma fórmula para a criação das ferramentas utilizadas, isso deve</p><p>ser decidido em reunião das partes envolvidas, levando os conceitos de integração e</p><p>colaboração pregados pelo DevOps como premissas, pois ninguém melhor para dizer qual</p><p>tecnologia usar do que todos os envolvidos, desde a área de desenvolvimento até a de</p><p>operações, resolvendo o que é melhor para o uso dentro dos requisitos exigidos.</p><p>Para você, �ca a dica de se aprofundar ainda mais nesse tema e nas ferramentas que se pode</p><p>utilizar para todo este processo. Lembre-se de que todas as ferramentas utilizadas até aqui</p><p>foram de código aberto e gratuitas. Encorajamos você a instalá-las e buscar bons tutoriais na</p><p>internet, pois isso, com certeza, se somará aos conhecimentos</p><p>aqui adquiridos.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Um dos maiores desa�os que os pro�ssionais de TI enfrentam é se tornarem excessivamente</p><p>técnicos ao ponto de enxergarem apenas as tecnologias usadas para resolver um determinado</p><p>problema, e não o que originou aquele problema em si. Essa situação-problema procura, acima</p><p>de tudo, estimular você a re�etir sobre como contribuir para uma resolução completa, e não</p><p>somente buscar a “ferramenta perfeita” para algo.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Em primeiro lugar, entenda como o processo de desenvolvimento da aplicação ocorre de ponta a</p><p>ponta. Para isso, mapeie o que é feito e como é feito, desde os planejadores, os desenvolvedores,</p><p>até chegar à infraestrutura usada. Só assim você entenderá detalhes importantes, por exemplo:</p><p>como é desenvolvido o planejamento, qual linguagem e qual tecnologia são utilizadas, infra de</p><p>suporte usa, etc.</p><p>Após isso, agende reuniões entre as equipes para encontrar, principalmente, onde estão os</p><p>atritos entre eles e começar a mudar a cultura de como pensam e agem. Em seguida, construa o</p><p>ferramental da empresa com o apoio de todos os envolvidos, escolhendo bem qual ferramenta</p><p>usar para solucionar o problema.</p><p>Já na infraestrutura não temos uma resposta única, mas é de bom tom utilizar uma ferramenta</p><p>de CI para cumprir o objetivo que seu diretor lhe pediu, que era uni�car o código dos</p><p>desenvolvedores em um local único, além de poder ser utilizado também para criar uma infra de</p><p>homologação.</p><p>Nessa parte, você já poderá testar como funcionará sua infra ágil quando for para a produção.</p><p>Por �m, com o ambiente homologado, reproduza utilizando o pipeline, até que a aplicação em</p><p>homologação esteja madura o su�ciente para ser colocada em produção e ser feita a troca</p><p>de�nitiva para esta infra criada.</p><p>Aula 2</p><p>Padronização da infraestrutura ágil</p><p>Introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá conhecer os pilares e as ferramentas da infraestrutura ágil.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>analisar os conceitos de provisionamento automatizado de VMs (Máquinas Virtuais);</p><p>discutir sobre a gestão de con�guração na padronização na infraestrutura ágil;</p><p>identi�car as ferramentas no desenvolvimento ágil.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>A infraestrutura mudou para se adequar ao ambiente de desenvolvimento cada vez mais</p><p>frenético, porém a velocidade excessiva com que as aplicações são atualizadas em produção</p><p>gerou uma série de preocupações para quem tem a obrigação de manter essa infraestrutura</p><p>funcional e respondendo com tempo aceitável.</p><p>Desenvolveram-se técnicas avançadas, que possibilitaram uma mudança completa em como era</p><p>entregue a aplicação em produção. A manutenção dos sistemas também foi drasticamente</p><p>alterada, forçando os pro�ssionais dessa área a entender cada vez mais da aplicação que eles</p><p>cuidam, ao invés de apenas da infraestrutura, como anteriormente.</p><p>Veremos, em detalhes, técnicas aplicadas em produção usando ferramentas DevOps para</p><p>automatizar e acelerar este processo, bem como o processo automatizado de retomar uma</p><p>con�guração anterior, em caso de uma aplicação mal sucedida na produção.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Isso possibilita tanto uma rápida aplicação de atualizações do desenvolvimento em ambiente de</p><p>produção quanto uma rápida recuperação em caso de falhas, evitando perdas �nanceiras ao</p><p>negócio, as quais, às vezes, podem ser irrecuperáveis.</p><p>Digamos que você seja contratado de uma grande empresa para corrigir urgentemente</p><p>problemas graves com relação ao processo de implantação da principal aplicação dela, como</p><p>falha na implantação, testes falhos, ambiente de homologação diferente do ambiente de</p><p>produção e rollbacks mal mapeados, causando downtime excessivo na operação e impactando</p><p>os clientes, os quais, normalmente, dão retornos negativos com relação ao uso da aplicação.</p><p>Ao analisar o processo, você mapeia os principais problemas enfrentados, que são:</p><p>a arquitetura da aplicação foi construída como um único serviço e, por isso, toda vez que</p><p>ela é atualizada, tem que ser atualizada como um todo, e não é bem dividido.</p><p>os testes não conseguem mapear adequadamente os erros antes de ocorrerem, pois</p><p>testam apenas a página principal da aplicação.</p><p>o ambiente de homologação da aplicação não é semelhante ao ambiente de produção e,</p><p>muitas vezes, os desenvolvedores e a equipe de operações precisam fazer ajustes na infra</p><p>para se adequarem.</p><p>alguns testes em homologação são um sucesso, mas, ao implantar em produção, ocorrem</p><p>falhas graves.</p><p>o plano de regresso, ou rollback, também não é feito, ou é feito apenas pela equipe de</p><p>operações, que leva em conta a última versão estável da aplicação na hora da volta, o que,</p><p>muitas vezes, não é o su�ciente.</p><p>Como você faria para melhorar o tempo de downtime da aplicação durante as atualizações?</p><p>Procure criar um plano de ação para todos os itens mapeados e pesquise ferramentas que</p><p>podem te auxiliar nesse processo.</p><p>Entender o �uxo de aplicação de fazer a implantação de uma aplicação ajudará você a se</p><p>familiarizar com itens, responsabilidades e ferramentas usadas no mundo DevOps. Com certeza,</p><p>isso possibilitará a você uma experiência importante a ser usada no mercado de trabalho.</p><p>Aprofunde-se nas técnicas e ferramentas, pois, assim, você estará preparado para quando for</p><p>usá-las e aplicá-las na vida real.</p><p>Implantação do DevOps (Parte I)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Antes de entrarmos nos conceitos desta aula, é importante relembrarmos itens que já</p><p>comentamos sobre a adoção do DevOps em si. Apesar de não termos uma ideia única de como</p><p>implantar a cultura DevOps, temos alguns tópicos que, hoje, são praticamente um consenso nas</p><p>literaturas que encontramos sobre o assunto, tanto no mercado quanto na academia.</p><p>Conforme Kim et al. (2016), devemos seguir os seguintes passos na implantação do DevOps:</p><p>criação dos ambientes: não podemos esperar semanas ou meses para termos ambientes</p><p>criados tanto para testes quanto para a produção, precisamos agilizar esse processo o</p><p>máximo possível.</p><p>instalação do código: da mesma forma que o item anterior, para termos agilidade na</p><p>instalação da aplicação (deployment), não podemos depender de centenas de ações</p><p>manuais e correções de con�guração para só então termos a aplicação utilizável e testável</p><p>em produção.</p><p>Precisamos tornar a instalação o menos dependente possível do software e com menos</p><p>manipulações de con�guração do ambiente de testes para o de produção. Dessa forma, temos</p><p>que ter um entregável (package) da aplicação, já pronta em homologação, para ser utilizável em</p><p>produção.</p><p>testes na aplicação: claro que nenhum dos itens citados funcionará como o esperado se,</p><p>antes de aplicarmos em produção, não testarmos para garantir que o código que está</p><p>sendo instalado em produção é con�ável e não permitirá que problemas graves sejam</p><p>entregues ao cliente �nal, gerando prejuízos �nanceiros e de imagem à empresa. Para que</p><p>isso também não seja um impedimento das entregas, todo o processo deve ser</p><p>automatizado.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>arquitetura da aplicação: não podemos esquecer que construir aplicações que possibilitem</p><p>atualizações frequentes não podem ser construídos como serviços únicos, não permitindo</p><p>que sejam feitas adequações em sua arquitetura, por serem grandes monólitos, em que</p><p>qualquer leve alteração pode causar uma falha sistêmica.</p><p>Por isso, a adoção de microsserviços no DevOps é praticamente unânime atualmente.</p><p>Antes de falarmos em técnicas para enviarmos uma aplicação para a produção e de ferramentas</p><p>para fazer isso, precisamos pensar no cenário todo, analisar e estudar se toda a cadeia tem seus</p><p>elementos respeitados,</p><p>para só então passarmos a considerar as técnicas em si.</p><p>Para isso, analisaremos o primeiro passo da nossa saga DevOps: garantir que temos facilidade</p><p>de subir ambientes idênticos ao de produção e de maneira automatizada.</p><p>Nesse item, podemos abordar várias ferramentas que permitam isso, mas, para podermos</p><p>ilustrar, usaremos os contêineres. O contêiner é, de maneira simpli�cada, uma forma de</p><p>isolarmos o hardware no qual rodaremos nossa aplicação, tornando o software e seu ambiente o</p><p>mais abstraído possível.</p><p>Para isso, o contêiner usa de isolamento de recursos do sistema operacional (SO) e do hardware</p><p>(GARCIA; PEREIRA, 2019), fazendo com que o hardware em si seja apenas um transportador de</p><p>uma aplicação, não in�uindo nela. Isso pode parecer um tanto complexo, mas pretendemos</p><p>clarear um pouco mais a ideia.</p><p>Sairemos um pouco da tecnicidade para falar de maneira mais �losó�ca. Re�ita: o que são, na</p><p>prática, o hardware e o software da sua máquina? Faremos uma abstração com um automóvel.</p><p>Qual utilidade prática na vida do ser humano ele traz? Fazer o nosso deslocamento de um ponto</p><p>A para um ponto B em menos tempo do que se �zermos caminhando.</p><p>Se tivéssemos criado um sistema de locomoção confortável, mas que fosse mais lento do que o</p><p>deslocamento normal que um humano consegue fazer caminhando, ele perderia o sentido de</p><p>existência.</p><p>Pouco importa se o carro em si é de última geração, ou o que ele tem dentro do capô, se a</p><p>utilidade �m dele for comprometida, por exemplo, em uma eventual escassez de combustível,</p><p>você poderia ter o carro mais veloz, mas não serviria de nada. E muita gente dirige o carro</p><p>simplesmente alheia ao que tem embaixo do capô dele, ou como ele se desloca. Simplesmente</p><p>usa.</p><p>Agora, voltando ao hardware e ao software que rodam em seu computador. Eles são</p><p>semelhantes ao exemplo citado. Qual é a utilidade prática do hardware do seu computador ou da</p><p>infraestrutura em si, se não for para fornecer uma plataforma para rodar um software?</p><p>Nós instalamos roteadores, servidores, placas de rede, cabos e satélites, para, no �m, fornecer</p><p>um software ao usuário �nal. E o programa em si fornece uma utilidade prática na vida de quem</p><p>o usa. Se você tiver o hardware mais potente rodando e não tiver o software, ele perde o sentido</p><p>de existência, assim como no exemplo do carro sem combustível.</p><p>E por que �zemos essa analogia? Porque justamente toda a aplicação que instalamos depende</p><p>de uma infraestrutura, sejam servidores, discos rígidos, banco de dados, rede, etc. Entretanto, no</p><p>�m, sua infraestrutura só existe para servir àquela aplicação para o usuário �nal, ela só tem sua</p><p>existência prática por ter uma aplicação para prover. Por isso, quanto menos a infraestrutura</p><p>in�uir diretamente na aplicação, melhor.</p><p>Imagine que você pudesse trocar o motor do seu carro por qualquer outro carro do mundo, sem</p><p>afetar em nada o funcionamento do seu. Por trás de todo esse conceito está a ideia da</p><p>conteinerização, pois, da mesma forma que um navio carrega todo tipo de carga dentro de um</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>contêiner, independentemente do que esteja dentro, o contêiner tecnológico procura o mesmo</p><p>ideal: um desenvolvedor programará dentro da máquina dele, independentemente do sistema</p><p>operacional e de toda a gama de con�gurações que possa ali existir.</p><p>E, ao criar o contêiner, ele poderá ser executado em qualquer hardware e SO, desde que tenha o</p><p>programa que execute aquele contêiner.</p><p>Essa abstração trouxe diversas vantagens com relação ao modelo tradicional de</p><p>desenvolvimento. Primeiro, porque não importava mais o que o desenvolvedor �zesse dentro da</p><p>máquina local dele, contanto que ele “conteinerizasse” a sua aplicação no �m, permitindo que ela</p><p>rode da mesma forma em qualquer ambiente, seja na máquina dele, em um servidor de</p><p>homologação, de produção, ou em qualquer outro lugar que tivesse o programa de contêiner</p><p>instalado.</p><p>Segundo, porque foi possível uma reprodução automatizada do ambiente de produção, muito</p><p>mais próximo do real, fazendo, assim, a homologação muito mais con�ável, já que o ambiente</p><p>não afetava diretamente a aplicação instalada.</p><p>Também, o restabelecimento de um ambiente em caso de desastres se tornou uma tarefa muito</p><p>mais simples do que antes, quando o software dependia fortemente do hardware e, dependendo</p><p>da con�guração feita, levava um tempão para se descobrir o que falhou e restabelecer o sistema.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Implantação de DevOps (Parte II)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Veri�caremos como funciona essa tecnologia na prática. Para isso, usaremos uma aplicação</p><p>Open Source escrita em Java, chamada Metabase, que serve como uma plataforma para</p><p>demostrar dados de maneira mais simples.</p><p>Essa aplicação é subdividida em frontend e backend, como hoje em dia é bem comum. O</p><p>frontend é responsável pela interface grá�ca com o usuário (GUI), e ele se encarrega de receber</p><p>as requisições que o usuário faz no sistema e encaminha para o backend. Já o backend faz a</p><p>tradução dos dados enviados pelo frontend, processa e executa as tarefas, enviando o resultado.</p><p>Para tanto, o frontend utiliza as seguintes tecnologias: webpack, babel e cssnext; e o backend,</p><p>Leiningen e Jetty.</p><p>Se você perceber, nossa aplicação é bem completa, utilizando diversas tecnologias diferentes, o</p><p>que exige um grau de con�guração complexo se precisarmos criar um ambiente do zero.</p><p>Olhando na raiz do projeto, você verá diversos arquivos criados. Todos são arquivos de</p><p>con�guração do ambiente:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Con�guração de ambiente. Fonte: elaborada pelo autor.</p><p>Antes do DevOps, os ambientes eram con�gurados manualmente, muitas vezes, com o auxílio do</p><p>desenvolvedor que trabalhou no projeto para ajudar a fazer todas as customizações, instalações</p><p>e con�gurações que eram necessárias para que o ambiente funcionasse como o esperado,</p><p>levando um bom tempo para fazer isso.</p><p>Com o surgimento do DevOps, pensou-se em automatizar e padronizar o ambiente, de maneira</p><p>que todo o necessário para que ele funcionasse fosse declarado em arquivos, os quais seriam</p><p>lidos na hora que a aplicação fosse construída (build).</p><p>E os contêineres vão mais além, pois eles leem um arquivo de instruções, chamado DockerFile,</p><p>no qual contêm todos os pacotes que são necessários instalar para que a aplicação funcione,</p><p>mais os arquivos de con�guração, e montam uma “imagem”, que será usada depois pelo Docker</p><p>para criar um contêiner, que conterá tudo isso dentro dele, sem necessidade de con�guração de</p><p>ambiente ou customização, tudo �ca dentro da imagem.</p><p>O DockerFile deste projeto, por exemplo, tem este conteúdo:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>DockerFile. Fonte: elaborada pelo autor.</p><p>Veja que ele instala diversas aplicações e copia diversos parâmetros de con�guração do Java</p><p>para dentro da imagem do contêiner, que, por �m, copia o código que foi desenvolvido e o .jar,</p><p>que é o executável da aplicação depois de compilado, para dentro da imagem pronta para ser</p><p>executada em qualquer local que possua o Docker instalado, seja Windows, Linux, etc.</p><p>E esse é o poder que a abstração pode fazer por você. Com isso em mãos, podemos, agora,</p><p>simplesmente, enviar nossa imagem “contêinerizada” da aplicação para um repositório de</p><p>imagens Docker e, depois, executá-la com o comando Docker run.</p><p>No nosso exemplo, con�guramos o pipeline para criar uma imagem dessa aplicação e enviar ao</p><p>Docker hub, a plataforma mais conhecida para armazenamento de imagens públicas. Veja o</p><p>conteúdo do pipeline na �gura a seguir.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Gitlab-ci.yml. Fonte: elaborada pelo autor.</p><p>Usamos o GitLab para criar a imagem Docker, através do comando Docker build, e logo após</p><p>fazemos um envio dessa imagem para o Docker hub. Você pode se perguntar: o que signi�cam</p><p>os valores com um $ na frente.</p><p>Eles são</p><p>chamados de variáveis de ambiente e servem, basicamente, para você passar valores</p><p>que não gostaria de expor em um arquivo declarativo, como é o caso da pipeline.</p><p>Se utilizássemos Docker login, por exemplo, teríamos que passar o usuário e a senha do Docker</p><p>hub, o que não é uma boa prática de segurança, portanto substituímos pelas variáveis de</p><p>ambiente $CI_REGISTRY_USER e $CI_REGISTRY_PASSWORD, que serão trocadas pelos valores</p><p>reais durante a execução da pipeline, tornando o código da sua pipeline muito mais seguro.</p><p>Agora que temos uma imagem con�gurada, podemos criar um ambiente para ela, que consiste</p><p>instalar o Docker em um servidor, se conectar lá e rodar a imagem “buildada” (quando uma</p><p>aplicação passa pelo processo de build).</p><p>Para isso, adicionaremos o passo de conectar no servidor usando o SSH, conforme a próxima</p><p>�gura, serviço de rede amplamente utilizado para conexões seguras entre servidores.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Pipeline com SSH. Fonte: elaborada pelo autor.</p><p>Ao executar remotamente o comando Docker run no servidor, conseguimos rodar a aplicação,</p><p>que foi instalada localmente como se fosse na nossa máquina e, ao abrir a URL de acesso, a</p><p>aplicação está funcionando como esperado.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Tela da aplicação. Fonte: elaborada pelo autor.</p><p>Obviamente, em produção, teríamos que rodar mais testes para garantir que a aplicação não está</p><p>com problemas em algum ponto, mas, para o nosso exemplo, está funcionando.</p><p>Técnicas para implantação em produção</p><p>Fizemos uma instalação básica da aplicação metabase, aliada à instalação e à con�guração do</p><p>ambiente “contêinerizado”, porém, como �zemos apenas de demonstração, algumas etapas</p><p>foram suprimidas.</p><p>No dia a dia, em uma aplicação real em produção que sofre diversas mudanças devido ao</p><p>processo de Deployment Continuous, temos que tomar outros cuidados antes, para termos</p><p>certeza de duas coisas: a primeira é que as alterações feitas não “quebrem” a aplicação, e a</p><p>segunda, que não exista um tempo de indisponibilidade para os clientes, conhecido como</p><p>downtime.</p><p>A primeira parece ser simples, mas é mais complicado do que parece, pois, muitas vezes, a</p><p>alteração feita não quebra a página principal da aplicação, mas uma funcionalidade interna, que</p><p>só apresentará o erro ao ser acionada, levando, muitas vezes, a um falso negativo, por levar a</p><p>equipe ao erro de se avaliar apenas a página principal.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para se avaliar esses itens, além dos testes, foram criadas técnicas de implantação</p><p>(deployment), que visam, sobretudo, dois objetivos: evitar o downtime enquanto a aplicação</p><p>antiga conviver com a nova e avaliar se a nova versão atende a determinados requisitos e,</p><p>portanto, pode substituir a antiga (BRAGA, 2015). São elas:</p><p>Roll Deployments: essas implantações são as mais simples de se usar, pois, basicamente,</p><p>apenas se preocupam com o downtime da aplicação. Nelas, a nova versão da aplicação é</p><p>implantada, mas a antiga ainda convive no ambiente e vai sendo “rolada” para fora do</p><p>ambiente à medida que as cópias da nova versão são implementadas com sucesso.</p><p>Importante dizer que isso é feito de maneira automática.</p><p>Os sistemas e as ferramentas, quando con�gurados para isso, conseguem avaliar se a versão</p><p>nova é estável e trocará automaticamente a versão antiga pela nova, até que todas as cópias da</p><p>aplicação sejam da nova versão. Isso faz com que os usuários não percebam a mudança, pois,</p><p>mesmo que eles acessem a aplicação durante a rolagem, ainda receberão a resposta de uma</p><p>aplicação, seja da cópia antiga ou da nova.</p><p>Blue-green Deployments: esse tipo de implantação já se preocupa em avaliar a resposta da</p><p>aplicação durante um tempo para veri�car se a nova versão se mantém estável e pode</p><p>substituir por completo a antiga. Para isso, implanta-se a versão nova, e ela convive com a</p><p>antiga o tempo todo.</p><p>Diferente da técnica de “roll”, ela não retira as versões antigas, mantém as duas e usa um</p><p>balanceador de carga (Load Balancer), que direcionará alguns usuários para o deploy antigo</p><p>“azul” e outros para o “verde”, até que a equipe avalie se mantém a nova ou a antiga.</p><p>Canary Deployments: a implantação canário é a mais avançada de todas, pois ela é uma</p><p>melhoria da Blue-green, permitindo um controle de quantos usuários utilizarão a versão</p><p>nova e quantos utilizarão a antiga. Por exemplo, 30% receberão a cópia nova da aplicação,</p><p>e 70%, a cópia da antiga. Ao avaliar se a resposta é positiva para uma parcela dos usuários,</p><p>pode-se estender a versão nova para o restante.</p><p>Ainda dentro dessa abordagem, em um controle maior, pode-se liberar uma versão da aplicação</p><p>baseada no próprio usuário, como liberar 25% para mulheres entre 20 e 30 anos, por exemplo.</p><p>Isso permite um controle da implantação a nível de experiência do usuário. Também, por ser a</p><p>mais avançada, tem um nível de complexidade de con�guração das ferramentas mais alto.</p><p>_____</p><p>Assimile</p><p>Você pode se perguntar: por que “testar em produção”? Não é uma prática ruim? É e não é, pois</p><p>existem situações que somente o tráfego real de uma aplicação consegue simular. Por exemplo,</p><p>a quantidade de acessos que ela receberá e a quantidade de informações que ela terá que</p><p>processar. Por isso, essas técnicas foram criadas. Quando o ambiente de homologação é</p><p>idêntico em termos de infraestrutura, mas o comportamento é totalmente diferente em</p><p>produção.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Rollback e Rollforward</p><p>Rollback é um nome em inglês que signi�ca retorno ao estado anterior da aplicação, e</p><p>rollforward seria aplicar uma correção, mas não retomar à versão anterior, apenas criar a</p><p>correção da falha e aplicar outra versão já com a correção.</p><p>Pensando nessas técnicas, podemos constatar que o retorno a uma versão anterior não é tão</p><p>complicado como antigamente, mas também não é tão trivial.</p><p>Quando pensamos de maneira simples no rollback de aplicações, simplesmente pensamos que,</p><p>ao aplicar a versão anterior do código, tudo estará funcionando, correto? Mas, muitas vezes, a</p><p>versão de uma aplicação faz mudanças de dados em um banco, aplica uma �la incorreta e a</p><p>simples reversão não é su�ciente.</p><p>Portanto, um bom sistema de reversão deve ser um misto entre ferramentas que possibilitam o</p><p>retorno de uma versão, com uma documentação das mudanças pelo time de desenvolvimento,</p><p>capaz de mapear o que foi alterado e poder decidir se faz a correção avançada (rollforward) ou o</p><p>retrocesso (rollback) da versão anterior.</p><p>Da parte de sistemas, as mesmas ferramentas que fazem implantações blue/green, canary e roll</p><p>conseguem retomar uma versão anterior facilmente.</p><p>_____</p><p>Exempli�cando</p><p>Imagine que a versão aplicada em produção crie uma nova tabela no banco de dados. Você que</p><p>cuida da infraestrutura, pensa em retomar a versão do código anterior, reaplicando a pipeline</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>com essa versão. O problema é que, quando você sobe a versão anterior, a aplicação continua</p><p>falhando, porque ela não conhece essa nova tabela adicionada.</p><p>Nesse cenário, você precisará invariavelmente que o desenvolvedor tenha documentado o que</p><p>ele alterou e um plano de reversão, talvez deletar a tabela nova do banco, ou uma nova versão da</p><p>aplicação que corrija a falha sem retrocesso, o rollforward.</p><p>Rollback no pipeline</p><p>Para entendermos o rollback, retomaremos nosso código da aplicação do metabase. Uma das</p><p>boas práticas que usamos ao criar versões da aplicação é um mapeamento simples, que permite</p><p>que se encontre facilmente uma versão no meio de centenas criadas.</p><p>No nosso caso do pipeline, foi criada a imagem da aplicação usando uma variável no GitLab que</p><p>utiliza um algoritmo usado para se obter uma assinatura única de um arquivo (hash) da última</p><p>alteração enviada ao código (commit) e retira os sete primeiros caracteres a</p><p>$CI_COMMIT_SHORT_SHA. Isso garante que a imagem que usarmos no contêiner poderá ser</p><p>facilmente rastreada até as alterações feitas no código:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Pipeline com hash. Fonte: elaborada pelo autor.</p><p>Olhando o commit dentro do GitLab, vemos o “ef7eaeac”,</p><p>conforme a �gura a seguir:</p><p>SHA do commit. Fonte: elaborada pelo autor.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>E, ao olhar no repositório de imagens, logo percebemos qual imagem foi construída naquele</p><p>processo automático:</p><p>Docker hub. Fonte: elaborada pelo autor.</p><p>Nesse caso, podemos usar como estratégia de rollback uma outra variável que o GitLab possui,</p><p>chamada de $CI_COMMIT_BEFORE_SHA, que tem o valor do SHA do commit anterior à pipeline</p><p>que está rodando, e criar um processo que aplicará a imagem anterior em caso de falha do</p><p>processo de produção, que é ativado manualmente.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Pipeline de rollback. Fonte: elaborada pelo autor.</p><p>Claro que este processo é uma forma simpli�cada de rollback, apenas para exempli�cação, que</p><p>não é à prova de falhas, mas é uma forma de se fazer, de maneira automatizada, o retorno rápido</p><p>em caso de falhas.</p><p>Entender os conceitos de implantação de aplicações em produção dará a você a bagagem</p><p>necessária para compreender os termos usados e o uso no seu dia a dia quando estiver atuando</p><p>no mercado de trabalho.</p><p>Compreender bem como os diferentes tipos de implantação podem trazer ganhos para a sua</p><p>aplicação e seu processo como um todo, além de estudar com cuidado como aplicar os</p><p>processos de retrocesso em caso de falhas, com certeza o tornarão um pro�ssional mais</p><p>completo dentro desse mercado de DevOps. Tenha isso em mente e se aprofunde ainda mais no</p><p>assunto.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>O primeiro passo para a resolução do problema era fazer o mapeamento dos problemas que</p><p>causavam a indisponibilidade na aplicação, e isso já foi feito na própria pergunta. O segundo</p><p>passo é justamente pegar os itens mapeados e escolher soluções para aplicar no caso.</p><p>Sempre é bom lembrar que não existe uma resposta única, e que cada empresa é uma empresa.</p><p>Portanto, exigirão de você respostas diferentes para uma mesma pergunta. Esteja preparado</p><p>para isso.</p><p>No caso do primeiro problema levantado, descobrimos que a arquitetura da aplicação é feita em</p><p>bloco, o chamado monolito, logo a cada pequena alteração nela acaba sendo necessária uma</p><p>nova versão dela. Isso é uma prática considerada ruim hoje em dia, devendo ser estudada uma</p><p>forma de quebrar a aplicação em pequenos pedaços, cada qual com sua função, chamada de</p><p>microsserviços, e com isso as atualizações podem ser feitas apenas em pedaços especí�cos,</p><p>sendo mais fácil de planejar a implantação e o rollback. Neste item não existe uma ferramenta,</p><p>mas, sim, uma nova arquitetura para a aplicação.</p><p>No caso do segundo problema, é necessário um plano de ação. Primeiro, podemos usar uma</p><p>ferramenta que simula ações do mouse e que pode fazer uma bateria de testes mais profundos</p><p>do que simplesmente testar se a aplicação está abrindo a página inicial. Essa ferramenta é a</p><p>Selenium, e podemos inclui-la no nosso pipeline para executar alguns testes.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Outro item ainda dentro desse quesito seria coordenar com os desenvolvedores quais alterações</p><p>foram feitas para mapear bem tudo que foi criado na versão, em conjunto com o time de</p><p>Qualidade de Software (QA), para melhorar os testes e incluir retornos em caso de falhas.</p><p>Isso já leva a um outro item, pois, se o time de QA está integrado às operações e mapeia bem as</p><p>mudanças, os planos de retorno (rollback ou fallback) se tornam muito mais simples de serem</p><p>executados, pois todas as mudanças são facilmente detectadas.</p><p>Aula 3</p><p>Monitoramento de SO (Sistemas Operacionais) e Servidores</p><p>Introdução da aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar os fundamentos de monitoramento em diferentes SO e servidores.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>identi�car as métricas de monitoramento para SO e servidores;</p><p>discutir sobre monitoramento de infraestrutura;</p><p>distinguir os conceitos de observabilidade e monitoramento.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Todos os serviços ou microsserviços dentro de ambientes con�gurados para serem atualizados</p><p>frequentemente têm um “calcanhar de Aquiles”: o monitoramento. Na infraestrutura tradicional,</p><p>já existiam ferramentas para isso, mas com uma diferença grande: a frequência de atualização</p><p>era muito menor.</p><p>No mundo DevOps, tudo pode ser atualizado o tempo todo, e o ideal é que se possa efetuar as</p><p>atualizações a hora que quiser, por isso, é de suma importância que exista um meio de garantir e</p><p>acompanhar tanto a saúde da infraestrutura quanto dos serviços.</p><p>Assim como temos ferramentas especí�cas para realizar o deployment das aplicações de</p><p>maneira rápida, também temos que ter ferramentas de monitoramento capazes de entender e</p><p>validar esses ambientes.</p><p>Nesta aula, você entenderá quais técnicas e ferramentas são amplamente utilizadas para</p><p>garantir que tudo esteja bem e que você não seja surpreendido com falhas e evitar que a</p><p>empresa tenha perdas �nanceiras com elas.</p><p>Imagine que você trabalha em uma empresa que passa constantemente por falhas nos seus</p><p>sistemas e seu monitoramento não prevê os incidentes que ocorrem. O time de DevOps levantou</p><p>três principais problemas com o monitoramento:</p><p>falha em veri�car quando um micro serviço não está respondendo e seus impactos.</p><p>lentidão da aplicação em certos horários não previstos pelo monitoramento.</p><p>excesso de alertas, misturando problemas reais com falsos positivos.</p><p>O que você faria para melhorar o sistema de monitoramento deles?</p><p>Você pode ter certeza que os pro�ssionais que conhecem o ambiente que têm e possuem um</p><p>monitoramento bem con�gurado estão à frente de muitos outros que não têm e são</p><p>surpreendidos com falhas críticas. Ao estudar e se aprofundar no assunto, você estará dando</p><p>passos sólidos para ser um pro�ssional DevOps completo.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Monitoramento</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>A monitoração é um assunto que tem tido cada vez mais atenção nas equipes DevOps pelo</p><p>mundo afora, pois está sempre sendo aprimorada com novas técnicas e ferramentas, para</p><p>acompanhar a mesma evolução que as implantações contínuas têm tido.</p><p>Muitas vezes, o monitoramento é negligenciado, causando falhas em ambientes produtivos, que</p><p>podem levar a perdas �nanceiras e até à falência, dependendo do tamanho do negócio, do seu</p><p>espaço no mercado e do tempo de resolução do incidente.</p><p>Por isso, um dos itens que englobam todo o ciclo do DevOps é um monitoramento bem</p><p>con�gurado e que consiga trazer o feedback necessário, não só para prever falhas, como</p><p>também servir de base para melhorias de todo o processo (FRAZÃO, 2019).</p><p>Antes de qualquer coisa, devemos falar que o processo de monitoramento já existia antes do</p><p>mundo DevOps e tinha um papel voltado, basicamente, a testar se a infraestrutura estava</p><p>funcionando como o esperado.</p><p>Mas, com o advento da computação em nuvem (cloud computing), e a adoção de</p><p>microsserviços, muito do foco do monitoramento foi alterado para veri�car os estados internos</p><p>das aplicações e as interrelações dos microsserviços (BEYER et al., 2016).</p><p>É claro que existem diversos tipos de monitoramento, para diversos tipos de abordagens e</p><p>ambientes, por isso, precisamos veri�car quais são ideais para cada tipo de infraestrutura e</p><p>arquitetura de sistemas utilizada.</p><p>Importante, também, escolher o que monitorar, já que existem diversos itens que podem ser</p><p>utilizados como métricas. Devemos saber quais utilizar, tendo em mente como fazer uma</p><p>separação inteligente, que traga assertividade ao monitoramento.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>E aliado a todo esse sistema devemos pensar em criar alertas, que nos avisarão em caso de</p><p>falhas, e de�nir as políticas deles, para que possamos atingir os objetivos de sermos avisados</p><p>somente se um item crítico ao funcionamento das aplicações estiver com problema e evitar o</p><p>envio excessivo de alertas, com coisas banais misturadas a informações críticas, causando um</p><p>efeito indesejado de recebermos alertas demais e não conseguirmos diferenciar o que é crítico</p><p>do que não é.</p><p>Métricas</p><p>Algo comum em todo o sistema de monitoramento é o uso de métricas, con�guradas de acordo</p><p>com o hardware e o sistema que se está pretendendo monitorar. A�nal, como avaliar se algo está</p><p>respondendo corretamente se a métrica utilizada é errada?</p><p>Por isso, algumas soluções foram sendo criadas para retirar essas métricas de sistemas e</p><p>aplicações. Uma das mais utilizadas hoje em dia é o Prometheus. Ele é uma aplicação de código</p><p>aberto, que visa retirar métricas de diversos sistemas conhecidos e transformar essas</p><p>informações em um banco de dados, para formar grá�cos temporais com as métricas coletadas.</p><p>Essas métricas podem ser uso de CPU, uso de memória, carga de rede de um servidor e itens de</p><p>aplicação, como número de usuários conectados, resposta da aplicação, etc.</p><p>Cada métrica é feita especi�camente para cada tipo de aplicação que se deseja monitorar, e é</p><p>chamado de exportador. Um exemplo seria um exportador para o banco de dados MySQL, banco</p><p>relacional da Oracle, amplamente utilizado.</p><p>Esse exportador foi desenvolvido para retirar métricas importantes para veri�car a saúde do</p><p>banco, como bloqueios na base (locks), tempo de resposta de queries e muitos outros, e com</p><p>isso formar os grá�cos, que podem ser veri�cados dentro de um período especí�co de tempo.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Temos uma outra ferramenta amplamente utilizada em conjunto com o Prometheus chamada</p><p>Grafana. Outro projeto de código aberto, que reúne as métricas produzidas pelo Prometheus e as</p><p>transforma em grá�cos, como o visto na �gura a seguir:</p><p>Exemplo de grá�cos gerados por métricas coletadas. Fonte: Wikimedia Commons.</p><p>Monitoramento de infraestrutura e Logs</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Geralmente, quando pensamos em infraestrutura de TI, alguns itens vêm à nossa cabeça, como</p><p>roteadores, switches, servidores e �rewalls. Mas, hoje em dia, muita coisa foi alterada com</p><p>relação à monitoração, então precisamos abordar alguns assuntos.</p><p>Em primeiro lugar, o surgimento do DevOps está intrinsicamente ligado ao advento da</p><p>computação em nuvem (cloud computing), porém não é exclusivo dela. Uma empresa pode</p><p>muito bem possuir sua infraestrutura interna, conhecida como on-premises, e ainda utilizar a</p><p>cultura DevOps. Atualmente, muitas empresas adotaram o modelo híbrido, em que parte da infra</p><p>está no on-premises e parte está no cloud computing.</p><p>Todas essas abordagens têm suas diferenças, vejamos algumas. Quando monitoramos infra on-</p><p>premises, nos preocupamos muito com a parte física de cada equipamento e servidor. Portanto,</p><p>devemos nos preocupar com itens, como:</p><p>uso de CPU e memória: não devemos deixar que os aplicativos esgotem todo o recurso</p><p>computacional dos servidores antes de tomarmos uma ação.</p><p>espaço disponível em disco: temos que saber preventivamente se um disco está �cando</p><p>cheio, pois isso pode causar a parada de todo o ambiente.</p><p>disponibilidade de componentes de rede: switches e �rewalls podem falhar e, se isso</p><p>acontecer, temos que ter uma forma de contornar o problema rapidamente. Porém, isso só</p><p>será possível se tivermos um monitoramento nesses equipamentos para saber quando eles</p><p>vierem a falhar.</p><p>Já no caso de infra em cloud, boa parte dos itens são de responsabilidade do provedor, como a</p><p>disponibilidade dos servidores e até, muitas vezes, os recursos de CPU e memória, que podem</p><p>ser escaláveis à medida que forem necessários.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Isso alterou algumas coisas, já que nosso foco agora não é tanto a infraestrutura, e sim as</p><p>respostas da aplicação como um todo.</p><p>Um outro conceito que alterou também a maneira como o monitoramento é feito é a arquitetura</p><p>de microsserviço. Antigamente, os sistemas eram construídos de maneira única, provendo todos</p><p>em um único serviço no �nal.</p><p>Agora, o conceito mais utilizado é o de separar a aplicação em pequenos serviços, como na</p><p>próxima �gura, cada um com uma função, e eles se falarão internamente para prover a resposta</p><p>ao usuário (VILLAÇA; PIMENTA JÚNIOR; AZEVEDO, 2018).</p><p>Monolito versus Microsserviços. Fonte: elaborada pelo autor.</p><p>Exatamente por mudar a arquitetura, não é mais possível simplesmente monitorar a saída única</p><p>do serviço principal que o usuário acessa, mas, sim, todo o ecossistema dos microsserviços,</p><p>para veri�cá-los individualmente.</p><p>Por exemplo, imagine que sua aplicação foi construída usando uma arquitetura monolito e,</p><p>quando está funcionando perfeitamente, abre uma página http e o status dela é 200 (código do</p><p>protocolo http para respostas). Bastava adicionar um monitoramento para testar de tempos em</p><p>tempos se a resposta http era 200 e, em caso de diferença, ele alertava o time de operações para</p><p>veri�car.</p><p>Isso era a forma padrão de monitorar uma aplicação monolito, mas, no caso da arquitetura de</p><p>microsserviços, não basta a página inicial retornar 200, você precisa con�rmar se todos os</p><p>microsserviços estão funcionando e se eles estão retomando os itens necessários, pois pode ser</p><p>que a página inicial abra normalmente ao usuário, mas, quando ele executa uma função interna,</p><p>que aciona um micro serviço que esteja fora, o problema ocorra.</p><p>Todo e qualquer sistema gera informações sobre seu funcionamento, que são utilizadas pelos</p><p>times de operações como uma poderosa ferramenta. São os chamados logs, os quais fornecem</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>pistas sobre um possível problema com algum sistema inoperante.</p><p>Para isso, os sistemas de logs, geralmente, fornecem uma saída padrão, em arquivo de texto,</p><p>com tudo que o sistema fez ao iniciar, seja de sucesso ou erro. Esse arquivo é consultado como</p><p>uma forma de encontrar pistas sobre os problemas.</p><p>Um bom sistema de monitoramento inclui gerenciar esses logs em um local único para</p><p>centralizar a análise, fazer correlações de problemas com outros sistemas e possibilitar</p><p>encontrar falhas relacionadas.</p><p>Nesse quesito, podemos mencionar ferramentas amplamente usadas, como o Elastic Stack e o</p><p>Fluentd, que fazem uma indexação de logs vindos de diversas fontes, tanto de infraestrutura</p><p>como de aplicações.</p><p>Monitorando aplicações</p><p>Dentro do assunto de monitoração, a aplicação tem que ter uma atenção especial, pois é para ela</p><p>que a infraestrutura toda é con�gurada. Portanto, monitorar a aplicação corretamente é</p><p>fundamental.</p><p>Como comentado anteriormente, as aplicações, hoje, rodam, basicamente, com arquitetura de</p><p>microsserviços, que faz com o que a monitoração tradicional seja alterada para uma que consiga</p><p>analisar traços e relacionamentos internos que uma aplicação faz.</p><p>Por isso, surgiram ferramentas chamadas de Application Performance Monitoring (APM), ou</p><p>Monitoramento de Performance de Aplicação. Elas fornecem uma gama de visualizações e</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>interações entre as aplicações internas, capazes de monitorar quanto tempo uma determinada</p><p>ação dentro de sistema está levando, quais classes e itens são chamados internamente, etc.</p><p>As ferramentas de APM são o que há de mais avançado dentro do conceito de monitoramento.</p><p>Relacionado a isso, podemos citar a Elastic APM. A versão mais simples é de código aberto, mas</p><p>possui uma versão paga com mais funcionalidades. Como exemplos de ferramentas pagas</p><p>temos: Data Dog, Dynatrace e New Relic.</p><p>Na �gura a seguir, podemos ver um exemplo de APM funcionando e mostrando o tempo que</p><p>cada transação levou para executar dentro da aplicação.</p><p>Exemplo de APM. Fonte: elaborada pelo autor.</p><p>Ainda dentro desse assunto de logs, é importante citar o Sentry, uma ferramenta especí�ca para</p><p>fazer rastreamento de erros de aplicações, cujo foco é nas exceções que a aplicação</p><p>de</p><p>qualidade. Assim, qualquer erro encontrado é facilmente corrigido pela equipe de</p><p>desenvolvimento, e uma nova versão do software passa a ser desenvolvida (HUMBLE; FARLEY,</p><p>2014).</p><p>Com a DevOps, qualquer alteração pode ser feita em qualquer fase do desenvolvimento, de</p><p>acordo com a avaliação feita pelo cliente. Esses testes acontecem seguindo a operacionalidade</p><p>do controle de qualidade, métricas criadas para validar os requisitos do software.</p><p>O termo surge da junção das palavras Dev (Development) e Ops (Operations), ou seja,</p><p>desenvolvimento e operações. Algumas empresas de TI têm equipes distintas, as quais, embora</p><p>trabalhem sempre juntas, organizam-se para criar novos produtos e aplicações</p><p>(desenvolvimento) e para cuidar desses produtos e aplicações em produção (operação). Um</p><p>preza pela inovação, e o outro, pela estabilidade.</p><p>Dito isso, a grande vantagem da metodologia de desenvolvimento ágil está na velocidade das</p><p>entregas. Os produtos desenvolvidos são facilmente adaptados. Essa característica, em um</p><p>mercado dinâmico, como o de softwares, é essencial. A velocidade de entrega e atualização</p><p>representa uma grande vantagem competitiva.</p><p>A outra grande vantagem é que, com o sistema de entregas contínuas, é possível oferecer mais</p><p>produtos por preços mais competitivos.</p><p>A entrega contínua é uma premissa do manifesto ágil, que possibilita pequenos ciclos de entrega</p><p>de softwares. Ao invés de entregar uma aplicação complexa de funções, são disponibilizadas</p><p>versões do produto ou serviço em tempos curtos.</p><p>Parece óbvio que as empresas só têm ganhos apostando nessa nova cultura de trabalho, mas a</p><p>migração para uma gestão nesses moldes não é tão simples. A maioria das empresas já traz em</p><p>suas estruturas uma organização setorial. A divisão em equipes por departamentos facilita a</p><p>fragmentação do trabalho, mas prejudica o trabalho quando é preciso pensar de forma integrada</p><p>e uni�cada. Muitas vezes, essa divisão gera um tipo de competição e rixas que di�cultam a</p><p>produção.</p><p>Para melhor sintetizar os processos de DevOps, Jez Humble criou o acrônimo CALMS, que</p><p>passou a ser usado a partir de 2008, no livro O Manual DevOps, no qual ele é coautor.</p><p>O acrônimo signi�ca Culture (Cultura), Automation (Automação), LeanIT (Metodologia Lean),</p><p>Measurement (Mensuração) e Sharing (Compartilhamento) (GAEA, 2020).</p><p>Entender o signi�cado dos conceitos apresentados neste acrônimo ajuda a de�nir melhor a</p><p>organização dos processos DevOps. Essa estrutura de�ne as entregas e como a equipe implanta</p><p>e se integra coletivamente, dando sentido aos negócios.</p><p>Cultura, Automação, Metodologia Lean e Mensuração</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Cultura (Culture)</p><p>DevOps não é um processo ou uma ferramenta, mas uma mudança de pensamento, que se</p><p>concentra na colaboração entre equipes separadas em uma organização. O foco principal do</p><p>desenvolvimento não é mais na produção de uma tecnologia por si só, e sim no atendimento de</p><p>uma demanda do mercado.</p><p>Cultura, portanto, visa tratar o relacionamento interpessoal das equipes. Os agentes envolvidos</p><p>no processo precisam ter disposição para aprender, experimentar e con�ar na organização e na</p><p>capacitação do seu pessoal.</p><p>Automação (Automation)</p><p>Existem processos que exigem criatividade e intuição humana; outros podem ser feitos mais</p><p>facilmente por computadores. A ideia da automação é que esses processos rotineiros, possíveis</p><p>de serem programados computacionalmente, sejam feitos de forma automatizada.</p><p>A automatização, quando bem feita, evita erros humanos, traz economia �nanceira e agiliza</p><p>etapas do �uxo de criação, documentando e padronizando etapas do processo. É comum, nessa</p><p>etapa, o uso da técnica de pipeline (segmentação de instruções). O DevOps usa implantações</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>automatizadas para enviar código totalmente testado para ambientes provisionados de forma</p><p>idêntica.</p><p>Pensamento Enxuto (Lean It)</p><p>O Lean It ajuda a melhorar as etapas de entrega. Mapeando os processos, é possível entender e</p><p>apontar os pontos que estão levando mais tempo para serem concluídos, assim como aqueles</p><p>que estão exigindo que se faça novamente o mesmo trabalho. Com esses entendimentos, é</p><p>possível eliminar desperdícios, melhorar o aprendizado e facilitar a tomada de decisão e a</p><p>entrega rápida com qualidade.</p><p>Um processo enxuto faz pouca diferença na experiência do cliente �nal, já na produção tem um</p><p>grande valor. Uma mentalidade DevOps sempre identi�ca oportunidades de melhoria contínua.</p><p>_____</p><p>Assimile</p><p>O conceito de Lean surgiu no Japão, durante a Segunda Guerra Mundial, com a �nalidade de</p><p>reconstrução da indústria automobilística da Toyota. Com o nome de Lean Manufacturing</p><p>(manufatura enxuta), o engenheiro Taiichi Ohno apresentou o mesmo conceito usado hoje pela</p><p>cultura DevOps.</p><p>A empresa criou um conjunto de ferramentas que identi�cava e eliminava o desperdício.</p><p>Percebeu-se que essa técnica de gestão melhorou a qualidade e reduziu tempo e custo da</p><p>produção.</p><p>Observando o status da Toyota atualmente, podemos facilmente concluir que as modi�cações</p><p>foram pertinentes ao sucesso, e o método mostrou-se comprovadamente e�caz (COUTINHO,</p><p>2020).</p><p>_____</p><p>Medição (Measurement)</p><p>As medições devem permitir que os erros sejam identi�cados rapidamente durante o estágio de</p><p>pós-implantação para correção do código, se necessário, com mais agilidade. A mensuração do</p><p>ambiente gera feedbacks importantes para saber o que acontece no software. É possível que</p><p>esse conhecimento auxilie na previsão de incidentes ou desastres, analisando falhas e gerando</p><p>melhoria.</p><p>O ideal é que se meça tudo o que for possível: desempenho, processo, negócios, etc. A medição</p><p>é o melhor suporte para a avaliação. Dentre o que pode ser medido, temos: usuários afetados por</p><p>bugs, tempo médio de resposta do sistema, com que frequência estão acontecendo bugs</p><p>recorrentes e classi�car quais bugs são resolvidos e quais são novos.</p><p>Compartilhamento (Sharing)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Um dos objetivos principais do DevOps é o trabalho compartilhado com equipes distintas, e esse</p><p>é também um dos maiores desa�os, já que todo o trabalho deve ser pensado como um todo.</p><p>Nessa etapa, avaliam-se as equipes que estão trabalhando juntas e se comunicando de forma</p><p>e�ciente.</p><p>O trabalho compartilhado ajuda para que os processos sejam autossustentáveis, dessa forma, a</p><p>ausência de um colaborador não atrapalha o �uxo do processo. Esse pensamento sugere a</p><p>nivelação do conhecimento em detrimento da descentralização. Os membros de uma equipe</p><p>aprendem com as experiências de outros membros, isso faz com que todos trabalhem com o</p><p>pensamento voltado a uma única direção.</p><p>Todos esses pontos se comunicam e são tratados de forma única. É isso que faz com que a</p><p>DevOps se sustente e traga essa característica transformadora. Portanto, embora muitos a</p><p>identi�quem como sendo uma metodologia de desenvolvimento de software ou um método para</p><p>a gestão de projetos, percebe-se claramente que se trata de uma mudança de cultura. E como</p><p>toda mudança, exige paciência, conhecimento e comprovações para a aceitação.</p><p>Existem várias práticas quando levamos em conta a cultura DevOps, tais como: Continuous</p><p>Integration (CI), Continuous Delivery e Continuous Deployment (CD) (SHAHIN; BABAR; ZHU,</p><p>2017).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Resumindo, CI e CD lançam novas versões de softwares com mais agilidade e frequência, assim</p><p>sendo, os obstáculos que existem entre o desenvolvimento e a produção são superados (SOUSA;</p><p>TRIGO; VARAJÃO, 2019).</p><p>O ciclo DevOps integra várias ferramentas que podem ser utilizadas em diferentes fases, as mais</p><p>conhecidas são:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Jira: é uma ferramenta muito usada em gestão ágil, em que é possível fazer o</p><p>planejamento, acompanhamento e gerenciamento de vários projetos usando apenas uma</p><p>ferramenta.</p><p>Jenkins: é uma ferramenta poderosa, que automatiza as etapas de produção e teste,</p><p>implementa e serve de suporte à integração das equipes e aos processos de entregas</p><p>contínuas.</p><p>Docker: essa ferramenta usa recursos do kernel do Linux, como Cgroups e</p><p>gera.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Exemplo do Sentry. Fonte: elaborada pelo autor.</p><p>Alertas e limites (thresholds)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Alertas</p><p>Fechando todo o ciclo de monitoração, temos o sistema de alertas, que serve, basicamente, para</p><p>informar quando um item do monitoramento estiver com problemas e fora dos parâmetros</p><p>considerados normais. Devemos con�gurar os limites previamente para que o sistema saiba</p><p>quando é considerado um problema ou não.</p><p>Limites (Thresholds)</p><p>Cada item tem um limite que deve ser con�gurado e que precisa ser revisado constantemente,</p><p>para ver se atende aos casos mais recentes.</p><p>Os limites são baseados nas métricas que cada recurso recebe, por exemplo, em uma métrica de</p><p>medição de uso de CPU, você pode considerar que um uso acima de 80% é um comportamento</p><p>padrão, baseado no histórico de uso de um servidor crítico, enquanto que o mesmo número para</p><p>um servidor considerado de uso moderado precisa gerar um alerta para ser veri�cado o motivo</p><p>deste uso intenso.</p><p>Logo, precisamos de�nir algumas métricas padrões, mas ainda precisamos fazer os ajustes</p><p>�nos em cada item monitorado, para que não ocorram dois problemas: o primeiro é algo falhar</p><p>sem que você seja informado previamente, pois o limite estava con�gurado para aceitar muito</p><p>mais do que deveria; o segundo é justamente o contrário, você ser inundado de alertas</p><p>desnecessários com serviços funcionando normalmente porque o limite está con�gurado baixo</p><p>demais.</p><p>Dentro dessa categoria, podemos citar ferramentas, como o Alert Manager, que trabalha em</p><p>conjunto com o Prometheus, recebendo os itens dele que estão fora dos limites con�gurados e</p><p>disparando alertas em ferramentas de comunicação, como Email, Slack e Telegram. Podemos</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>citar também o Pagerduty, que possui várias integrações para disparar alertas em SMS, ligações,</p><p>Slack e Telegram.</p><p>Exemplo de métricas e limites. Fonte: elaborada pelo autor.</p><p>Nesse exemplo, podemos ver os conceitos de maneira mais detalhada. Primeiro, o alerta,</p><p>chamado de MysqlDown, está usando a métrica “mysql_up”, que o exportador retira do banco de</p><p>dados para ver se ele está funcionando. Essa métrica por si só não diz nada, precisamos criar o</p><p>alerta, comparando com algo.</p><p>Nesse caso é simples, porque basta dizer ao Prometheus que, se a métrica “mysql_up” for igual a</p><p>zero em um período de cinco minutos, signi�ca que o banco está fora e precisa disparar um</p><p>alerta para o Alertmanager.</p><p>Já no segundo alerta, o exemplo é mais complexo, pois temos a métrica</p><p>“mysql_global_status_threads_connected”, que retira do banco a quantidade de threads abertas</p><p>por ele, fazemos a média pelos últimos cinco minutos, usando o operador “avg” do Prometheus,</p><p>dividimos pela média de conexões abertas no banco (métrica</p><p>“mysql_global_variables_max_connections”) e, por �m, multiplicamos o resultado por 100, para</p><p>pegarmos o valor em porcentagem.</p><p>Se essa conta for maior que 80%, signi�ca que o número de conexões com o banco está quase</p><p>se esgotando e alertaremos, usando o Alertmanager, para que se veri�que antes de se</p><p>esgotarem todas elas.</p><p>Na �gura a seguir, temos um exemplo de alerta disparado por consumo alto de memória em um</p><p>servidor.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Alertas no Prometheus. Fonte: elaborada pelo autor.</p><p>Isso dentro do sistema do Alertmanager �ca como na �gura:</p><p>Alerta no Alertmanager. Fonte: elaborada pelo autor.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>_____</p><p>Assimile</p><p>Importante: métricas são os itens usados para criar as regras de alerta, como a quantidade de</p><p>uso de CPU de um servidor, mas o limite (threshold) é o analista que con�gura caso a caso.</p><p>Portanto, podemos ter diferentes métricas em casos de alertas diferentes.</p><p>Observabilidade vs Monitoramento</p><p>Diante desse cenário de microsserviços, surge um debate sobre o monitoramento já não ser</p><p>mais su�ciente para atingir o objetivo de prever falhas. Surge, então, o termo “observabilidade”,</p><p>que propõe usar os monitoramentos para identi�car e depurar, dentro dos microsserviços, as</p><p>possíveis falhas e problemas.</p><p>Assim como diversos termos usados dentro da tecnologia, não sabemos ao certo quando foi</p><p>criado e quem o utilizou pela primeira vez, mas temos, hoje, praticamente, todas as grandes</p><p>empresas de monitoramento o utilizando.</p><p>Segundo Beyer et al. (2016), o sistema de monitoramento deve responder a duas perguntas:</p><p>1. o que está quebrado?</p><p>2. por quê?</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>A primeira questão remete ao item em si que está falhando, e a segunda, ao sintoma que está</p><p>causando o problema.</p><p>Por exemplo, o sistema de monitoramento avisa que existe uma falha do acesso ao servidor da</p><p>aplicação. Essa é a resposta da primeira pergunta. Mas, a causa, o porquê, pode ser várias</p><p>coisas, desde uma sobrecarga de acessos até a falhas de hardware, ataques, etc.</p><p>Como temos diversas causas de uma falha, precisamos correlacionar várias fontes para termos</p><p>uma visão profunda da aplicação, suas relações com outros componentes e com a</p><p>infraestrutura.</p><p>Isso acaba se tornando uma contradição com a ideia do monitoramento em si, pois um bom</p><p>sistema de monitoramento deve possuir itens simples e métricas precisas, para que as equipes</p><p>não sejam inundadas com informações demais e, no �m, não monitorarem nada (BEYER et al.,</p><p>2016).</p><p>Então, como podemos ter uma visão profunda das correlações entre os componentes e, ao</p><p>mesmo tempo, manter o monitoramento con�gurado de modo simples e objetivo? Aí que surge o</p><p>termo “observabilidade”, derivado da teoria do controle (GONZALEZ, 2018).</p><p>Ao combinar itens, como inspeção de sistemas com depuração de aplicação, infraestrutura,</p><p>exceções e travamentos e inspeção de tráfegos, temos uma visão holística do todo (BEYER et al.,</p><p>2016).</p><p>A observabilidade em si não signi�ca um monitoramento melhorado, mas uma combinação de</p><p>elementos monitorados que, juntos, podem trazer uma visão mais completa do todo, um</p><p>complementa o outro.</p><p>Ela é uma capacidade de entender os estados internos dos sistemas, ou seja, você usa as saídas</p><p>do monitoramento e consegue extrair deles as informações que ajudam a melhorar os sistemas</p><p>como um todo e, para isso, você precisa conhecer muito bem o que deveria ser a resposta</p><p>aceitável e o que não está bem e pode ser melhorado.</p><p>Podemos dizer que a observabilidade é como uni�car as visões, tanto das aplicações e do</p><p>negócio quanto da infraestrutura e das operações, como na ideia de uni�cação do time de Dev e</p><p>Operações pregada pelo DevOps.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Observabilidade. Fonte: elaborada pelo autor.</p><p>Malha de serviços</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dentro do item de monitoração de microsserviços, entra também um conceito que ajuda a</p><p>rastrear as interações entre eles, e como isso pode afetar a resposta �nal ao usuário. É a malha</p><p>de serviços, ou Service Mesh, no termo em inglês.</p><p>Ele ajuda muito a monitorar e encontrar defeitos não tão aparentes como em outros sistemas de</p><p>monitoramento. Para sermos completos com o termo, o Service Mesh em si não é apenas para</p><p>monitoramento, ele é usado como uma forma de controle granular dos microsserviços, como</p><p>fazer deployment canário e blue/green, que vimos anteriormente, por exemplo.</p><p>Na próxima �gura, podemos ver que o micro serviço de produtos está falhando em trazer as</p><p>promoções para o sistema, e o problema não está no micro serviço de promoções, e sim no que</p><p>faz o ranking, que está fora, falhando o processo como um todo.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Malha de serviço. Fonte: elaborada pelo autor.</p><p>_____</p><p>Re�ita</p><p>Observabilidade em microsserviços pode ser simpli�cada com monitoramento simpli�cado? O</p><p>que você acha que é melhor dentro desse tema? Trazer menos métricas, porém mais assertivas,</p><p>ou mais métricas e mais detalhamento?</p><p>_____</p><p>Exempli�cando</p><p>Imagine que você possua um sistema que faça consultas a serviços de terceiros na web. É</p><p>preciso garantir que seu sistema esteja em funcionamento, assim como o serviço no qual você</p><p>faz as consultas.</p><p>Portanto, uma ideia seria usar um monitoramento web para fazer consultas ao serviço</p><p>e, em</p><p>caso de falha no acesso, avisar você e seu usuário que o problema é no serviço do terceiro.</p><p>Um exemplo é você construir sua aplicação para usar o login da conta do Facebook ou Google</p><p>para acesso do usuário e, se por algum motivo esse serviço de login estiver fora, você pode</p><p>avisar para o seu usuário, deixando claro que o problema é externo, e não no seu sistema.</p><p>_____</p><p>Todo sistema de monitoramento é, na verdade, um processo contínuo, que deve ser calibrado</p><p>para alertar itens importantes e dispensar itens irrelevantes. Um monitoramento bem</p><p>con�gurado ajudará você a sempre estar à frente de um incidente e diminuir as perdas</p><p>�nanceiras de falhas catastró�cas.</p><p>Pode também trazer ganhos ao negócio, melhorando o tempo de resposta de uma aplicação e a</p><p>experiência do usuário. Portanto, nunca o negligencie. Ele será seu melhor aliado neste mundo</p><p>DevOps.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Nesse caso, já sabemos que temos problemas com microsserviços, portanto é importante que</p><p>possamos usar um sistema de malha de serviço, para que possamos enxergar o relacionamento</p><p>interno entre eles e mapear possíveis problemas.</p><p>Para o segundo problema, devemos con�gurar um APM para analisar, durante a lentidão sentida,</p><p>se a falha está na aplicação e/ou na infraestrutura.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para o terceiro problema, devemos fazer uma restruturação de todo o ambiente de alertas, para</p><p>que as métricas recebidas sejam as corretas, a �m de que os alertas tenham os limites</p><p>con�gurados corretamente e nenhum item não crítico envie alertas o tempo todo.</p><p>Videoaula: resumo da unidade</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com o resumo da unidade.</p><p>Referências</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>AWS AMAZON. Disponível em: https://aws.amazon.com/. Acesso em:14 dez. 2021.</p><p>BEYER, B. et al. Site Reliability Engineering: how google runs production systems. United States:</p><p>O’reilly Media, 2016.</p><p>BITBUCKET. Disponível em: https://bitbucket.org/. Acesso em:14 dez. 2021.</p><p>BRAGA, F. A M. Um panorama sobre o uso de práticas DevOps nas indústrias de software. 2015,</p><p>123f. Dissertação (Mestrado em Ciência da Computação) – Universidade Federal de</p><p>Pernambuco, Recife, 2015. Disponível em: https://bit.ly/3kbZu1b. Acesso em: 14 dez. 2021.</p><p>DATA DOG. Disponível em: https://www.datadoghq.com/. Acesso em:15 dez. 2021.</p><p>DEBOIS, P. Agile infrastructure and operations: how infra-gile are you?. [S. l.: s. n.], 2008.</p><p>Disponível em: https://bit.ly/3mhTTsG. Acesso em: 14 dez. 2021.</p><p>DOCKER HUB. Disponível em: https://hub.docker.com/. Acesso em: 14 dez. 2021.</p><p>DYNATRACE. Disponível em: https://www.dynatrace.com/. Acesso em: 15 dez. 2021.</p><p>ELASTIC. Disponível em: https://www.elastic.co/. Acesso em:15 dez. 2021.</p><p>FIELDING, R. T. Architectural Styles and the Design of Network-based Software Architectures.</p><p>Irvine: University of California, 2000. Disponível em: https://bit.ly/3svG8HM. Acesso em: 14 dez.</p><p>2021.</p><p>FLUENTD. Disponível em: https://www.�uentd.org/. Acesso em: 15 dez. 2021.</p><p>FOWLER, M. Continuous Integration. martinFowler, 2006. Disponível em: https://bit.ly/3kbxivh.</p><p>Acesso em: =14 dez. 2021.</p><p>FRAZÃO, D. de A. A utilização do DevOps como fonte de vantagem competitiva para uma</p><p>organização. 2019, 32f. Trabalho de Conclusão de Curso (Graduação em Ciência da</p><p>Computação) – Universidade Federal Rural de Pernambuco, Garanhuns, 2019.</p><p>GARCIA, W.; PEREIRA, F. C. Docker: Containers não são vm’s. Seminário de Tecnologia Gestão e</p><p>Educação, v. 1, n. 2, p. 5 10, 2019.</p><p>GIORDANI, V. A. Automatização do Processo de Entrega de Softwares. 2019, 75f. Monogra�a</p><p>(Curso de Engenharia de Controle e Automação) – Universidade Federal de Santa Catarina,</p><p>Florianópolis, 2019. Disponível em: https://bit.ly/3iXA4Vx. Acesso em: 14 dez. 2021.</p><p>GIT. Disponível em: http://git-scm.com/. Acesso em: 14 dez. 2021.</p><p>GIT HUB. Disponível em: https://github.com. Acesso em: 14 dez. 2021.</p><p>GITLAB. Disponível em: about.gitlab.com. Acesso em: 14 dez. 2021.</p><p>GONZALEZ, J. C. M. Observabilidade de Sistemas de Controle. 2018, 89f. Dissertação (Mestrado</p><p>em Matemática) – Universidade Federal do Amazonas, Manaus, 2018.</p><p>GOOGLE CLOUD. Disponível em: https://cloud.google.com/. Acesso em:14 dez. 2021.</p><p>GRAFANA. Disponível em: https://grafana.com/. Acesso em:15 dez. 2021.</p><p>HTTP STATUS CODES. Disponível em: https://httpstatuses.com/. Acesso em:14 dez. 2021.</p><p>HÜTTERMANN, M. Devops for Developers: integrate development and operations, the agile way.</p><p>New York: Apress, 2012. p. 135-156.</p><p>INGERSON, B.; EVANS C. C.; BEN-KIKI, O. Yet Another Markup Language. [S. l.: s. n.], 2001.</p><p>Disponível em: https://bit.ly/3iYCe7a. Acesso em: 14 dez. 2021.</p><p>KIM, G. et al. The DevOps Handbook: how to create world-class agility, reliability, and security in</p><p>technology organizations. Portland: It Revolution Press, 2016.</p><p>LIMA, J. dos R. Monitoramento Com Zabbix. 2. ed. Rio de Janeiro: Brasport, 2020.</p><p>MANIFESTO para desenvolvimento ágil de software. [S. l: s. n.], 2001. Disponível em:</p><p>https://bit.ly/2W2irvc. Acesso em: 14 dez. 2021.</p><p>MASCHIETTO, L. G. et al. Processos de desenvolvimento de software. Porto Alegre, RS: Sagah,</p><p>2020.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>MELO, J. A. P. de. Uma proposta de Arquitetura de Referência para DevOps. 2019, 68f. Trabalho</p><p>de Conclusão de Curso (Graduação em Sistemas de Informação) – Universidade Federal de</p><p>Pernambuco, Recife, 2019. Disponível em: https://bit.ly/2XHbrEn. Acesso em: 14 dez. 2021.</p><p>METABASE. Disponível em: https://www.metabase.com/. Acesso em:14 dez. 2021.</p><p>MICHAELIS. Dicionário Brasileiro da Língua Portuguesa. Automação. São Paulo: Melhoramentos,</p><p>2021.</p><p>MYSQL. Disponível em: https://www.mysql.com/. Acesso em:15 dez. 2021.</p><p>NEW RELIC. Disponível em: https://newrelic.com/. Acesso em: 15 dez. 2021.</p><p>OPEN SSH. Disponível em: https://www.openssh.com/. Acesso em: 14 dez. 2021.</p><p>PROMETHEUS. Disponível em: https://prometheus.io/. Acesso em: 15 dez. 2021.</p><p>RODRIGUES, C. H. B. Gerenciamento de con�gurações com PUPPET: garantindo uma</p><p>infraestrutura ágil, estável e segura. 2017, 54f. Monogra�a (Pós-graduação em Rede de</p><p>Computadores com Ênfase em Segurança) – Instituto CEUB de Pesquisa e Desenvolvimento,</p><p>Centro Universitário de Brasília, Brasília, 2017. Disponível em: https://bit.ly/2UugjLI. Acesso em:</p><p>14 dez. 2021.</p><p>SALVADOR, M. C. T. Processo de Homologação: um estudo de caso. Monogra�a (Especialização</p><p>em Engenharia de Projetos de Software) – Universidade do Sul de Santa Catarina, Tubarão, 2015.</p><p>Disponível em: https://bit.ly/3CWpbLL. Acesso em: 10 abr. 2021.</p><p>SATO, D. Devops na Prática: entrega de software con�ável e automatizada. São Paulo: Casa do</p><p>Código, 2013.</p><p>SELENIUM. Disponível em: https://www.selenium.dev. Acesso em:14 dez. 2021.</p><p>SENTRY. Disponível em: https://sentry.io/. Acesso em:15 dez. 2021.</p><p>SHAHIN, M.; ALI BABAR, M.; ZHU, L., Continuous Integration, Delivery and Deployment: A</p><p>Systematic Review on Approaches, Tools, Challenges and Practices. IEEE Access, v. 5, p. 3909-</p><p>3943, 2017.</p><p>SOARES, M. dos S. Comparação entre Metodologias Ágeis e Tradicionais para o</p><p>Desenvolvimento de Software. INFOCOMP Journal of Computer Science, v. 3, n. 2, p. 8-13, nov.</p><p>2004.</p><p>SWARTOUT, P. Continuous Delivery and DevOps - A Quickstart Guide: Deliver quality software</p><p>regularly and painlessly by adopting CD and DevOps. 2. ed. Birmingham: Packt Publishing, 2014.</p><p>TERRAFORM. Disponível em: https://www.terraform.io/. Acesso em: 14 dez. 2021.</p><p>TORVALDS, L. Re: Kernel SCM saga. [S. l: s. n.], 2005. Disponível em: https://bit.ly/2UxbaCP.</p><p>Acesso em: 14 dez. 2021.</p><p>TORVALDS, L.; DIAMOND, D. Just For Fun:</p><p>The Story of an Accidental Revolutionary. New York:</p><p>HarperCollins, 2001.</p><p>VILLAÇA, L. H.; PIMENTA JUNIOR, A. F.; AZEVEDO, L. G. Construindo aplicações distribuídas com</p><p>microsserviços. In: SIMPÓSIO BRASILEIRO DE SISTEMAS DE INFORMAÇÃO, 15., 2018, Porto</p><p>Alegre. Anais [...]. Porto Alegre, RS: SBC, 2018.</p><p>Aula 4</p><p>Roteiro de Aula Prática</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Roteiro de Aula Prática</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula práitca!</p><p>,</p><p>Unidade 3</p><p>Infraestrutura em containers</p><p>Aula 1</p><p>Implantação de containers</p><p>Introdução da unidade</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/manual2.pdf</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/U2.pdf</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Objetivos da Unidade</p><p>Ao �nal desta Unidade, você será capaz de:</p><p>identi�car a estrutura de containers e seu monitoramento;</p><p>analisar os diferentes conceitos de containers;</p><p>aplicar ferramentas para escalonamento automático em nuvens focado na infraestrutura</p><p>ágil.</p><p>Olá, estudante! Boas-vindas!</p><p>Devido à praticidade que os novos tempos nos impõem, as aplicações computacionais</p><p>precisaram se adequar a uma nova mentalidade que impactou diretamente na produção dos</p><p>softwares. A entrega rápida, importante característica da cultura DevOps, exigiu que os</p><p>desenvolvedores buscassem formas de dinamizar os seus processos, potencializando a</p><p>�exibilidade, escalabilidade e consequentemente buscando formas mais e�cientes de trabalho.</p><p>Você certamente já deve ter ouvido falar nos containers, aquelas grandes “caixas” transportadas</p><p>nos navios. A ideia do container é que tudo que está dentro dele pode ser transportado para</p><p>qualquer lugar e ser usado em um outro ambiente.</p><p>Uma outra característica é que com o isolamento dos containers, caso um dos “caixotes” sofra</p><p>algum dano, os demais não serão impactados. Você pode adicionar e remover quantos</p><p>containers necessitar, sem que isso inter�ra diretamente na propriedade dos demais.</p><p>Essa mesma analogia é usada na computação. Os containers são ambientes isolados em um</p><p>servidor, que permitem rodar múltiplas funções de forma isolada em um mesmo sistema</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>operacional. São usados em larga escala no desenvolvimento, no teste e no ambiente de</p><p>produção de software.</p><p>Nesta unidade, você aprenderá a identi�car e monitorar a infraestrutura de containers, estudará</p><p>sobre a infraestrutura ágil em cloud e o escalonamento automático, será apresentado aos</p><p>orquestradores Kubernetes e Docker, bem como às principais ferramentas de monitoramento de</p><p>containers e escalonamento automático em nuvens.</p><p>Convidamos a conhecer a infraestrutura em containers e todas as qualidades oriundas dela. É</p><p>um conceito que está enraizado nas produções de softwares e que merece a nossa atenção.</p><p>Então, vamos lá? Bons estudos!</p><p>Introdução da aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar a de�nição e os aspectos referentes aos containers.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>discutir sobre monitoramento de containers e sistemas virtualizados;</p><p>analisar a arquitetura Kubernetes e Docker containers;</p><p>identi�car exemplos de replicação e padronização de containers.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O uso dos containers na produção de software facilita a integração entre as equipes de</p><p>desenvolvimento e operação, portanto é uma prática considerada indispensável na cultura</p><p>DevOps. O Container possibilita o isolamento, compartilhamento e portabilidade de aplicações e,</p><p>indiretamente, facilita a homologação e entrega do software.</p><p>Um container consegue encapsular uma aplicação usando apenas alguns recursos necessários</p><p>e conta com orquestradores que gerenciam arquiteturas de microsserviços e containers em</p><p>escala.</p><p>O Docker é uma das tecnologias mais conhecidas e usadas nessas aplicações. É uma</p><p>plataforma de código aberto que se destaca em implementações de isolamento de recursos e</p><p>bibliotecas do Kernel em um container do sistema operacional em um único ambiente.</p><p>A containerização permite o trabalho em ambientes separados com uma integração na esteira</p><p>da produção, esse isolamento facilita o escalonamento, o que é muito útil para sistemas que</p><p>precisam mudar constantemente sua carga de trabalho.</p><p>Além disso, o uso da técnica conhecida como Copy-On-Write, empregada na arquitetura de</p><p>camadas do Docker, ao mesmo tempo em que facilita a inclusão, também assegura reversões</p><p>para o caso de algum problema acontecer, ou seja, se algo der errado, é possível retomar a</p><p>versão anterior.</p><p>Para trilhar com propriedade no mundo DevOps é imprescindível o entendimento sobre o</p><p>funcionamento dos Containers.</p><p>Embora as principais linguagens de desenvolvimento ofereçam condições para a fragmentação</p><p>da complexidade de sistemas por meio de módulos, são projetadas para a criação de um único</p><p>executável conhecido como monolítico, ou seja, toda a modulação é executada em uma máquina</p><p>com compartilhamento da CPU, memórias, banco de dados e arquivos.</p><p>Esse tipo de arquitetura, com o tempo, apresenta alguns problemas como: aumento do tamanho,</p><p>pouca �exibilidade para mudanças, problemas com escalabilidade, necessidade de</p><p>reinicialização dos sistemas sempre que houver alguma mudança, dentre outros.</p><p>Você é o novo gerente de produção de uma empresa de softwares e está atento às novidades do</p><p>mercado. Aos poucos, está implantando práticas DevOps na sua empresa, mas o orçamento</p><p>ainda é pequeno, forçando-o a recorrer a outras opções econômicas.</p><p>Ao chegar na empresa você constatou que o desenvolvimento é projetado em arquitetura</p><p>monolítica e, por conta disso, muitos dos produtos estão com complexidades desnecessárias, e</p><p>as alterações nesses produtos são muito trabalhosas.</p><p>Aos poucos, você está preparando a equipe de desenvolvedores para se adequar às práticas</p><p>DevOps e facilitar a equipe de operações; a ideia é começar a produzir através de uma</p><p>arquitetura de microsserviços para o desenvolvimento de aplicações complexas que cresçam ao</p><p>longo de um período de tempo.</p><p>Detalhe os procedimentos práticos que precisam ser tomados para a adequação desse novo</p><p>meio de produção e descreva quais ganhos espera conseguir com a mudança.</p><p>Convidamos você a conhecer essa técnica que já se consolidou como uma prática ágil por trazer</p><p>benefícios indispensáveis para a produção de softwares na atualidade. Espero que esta leitura</p><p>seja enriquecedora para os seus conhecimentos e o convença sobre a necessidade de adotar os</p><p>containers em suas produções.</p><p>Videoaula: introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Containers, o que são?</p><p>Sempre que ouvimos a expressão containers já associamos aos containers de transporte dos</p><p>navios cargueiros. A expressão, inclusive, veio dessa associação. Na cultura DevOps, os</p><p>containers são muito usados no desenvolvimento, testes e no ambiente de produção de</p><p>softwares.</p><p>Muitos confundem os containers com máquinas virtuais, no entanto, eles não funcionam tal qual</p><p>a virtualização que conhecemos. Uma das diferenças é que o container compartilha o mesmo</p><p>Kernel do Sistema Operacional. Em um sistema como o Linux, por exemplo, a modularidade</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>característica de seu Kernel permite provisionamentos de sistemas mais enxutos e com</p><p>economia de recursos.</p><p>Ou seja, “containers têm recursos isolados de CPU, memória e rede enquanto compartilham o</p><p>kernel do sistema operacional. Eles hospedam código-fonte, ferramentas de sistema e</p><p>bibliotecas. Diferem-se de formas especí�cas</p><p>das máquinas virtuais (VMs), mas podemos</p><p>pensar neles como iterações leves de VMs” (FREEMAN, 2021, p. 56).</p><p>Outra diferença é a forma como ele pode ser provisionado. Em uma máquina virtual você pode</p><p>criar um ambiente que pode se valer de várias ferramentas (PHP, MSQL, Apache, dentre outros),</p><p>tudo rodando no mesmo Sistema Operacional; já os containers assumem apenas uma função,</p><p>isolando os processos de cada ferramenta. A vantagem é que facilita bastante a escalabilidade,</p><p>consequentemente, a performance e �exibilidade dos processos.</p><p>Os containers agrupam tudo de uma aplicação e suas dependências, compartilhando o mesmo</p><p>Kernel do Sistema Operacional de uma máquina (hardware ou VM) onde esteja rodando.</p><p>“Quando estamos utilizando máquinas virtuais, nós emulamos um novo sistema</p><p>operacional e todo o seu hardware utilizando mais recursos da máquina host, o que</p><p>não ocorre quando utilizamos containers, pois os recursos são compartilhados. O</p><p>ganho óbvio disso é a capacidade de rodar mais containers em um único host, se</p><p>comparado com a quantidade que se conseguiria com máquinas virtuais”.</p><p>(VITALINO; CASTRO, 2016, p. 13)</p><p>Outra característica importantíssima dos containers é a portabilidade. O programador pode criar</p><p>ambientes em qualquer host que tenha o Docker instalado. Suponhamos que você esteja usando</p><p>o Linux, por exemplo. Será possível executar em qualquer sistema operacional, seja ele MacOs</p><p>ou Windows, bastando que o Docker esteja instalado.</p><p>Outro exemplo é que você, como desenvolvedor, pode criar uma aplicação na sua própria</p><p>máquina e, depois, levar para um servidor de produção. Portanto, enquanto uma máquina virtual</p><p>emula sistema operacionais dentro de um host, o container emula somente as aplicações e</p><p>dependências, tornando-as portáteis.</p><p>_____</p><p>Exempli�cando</p><p>Para simpli�car o entendimento sobre a de�nição de containers, Emily Freeman (2021)</p><p>apresenta, em seu livro DevOps para leigos - os primeiros passos para o sucesso, uma</p><p>associação bem didática com a saga Harry Potter. Ela compara os containers ao conceito da</p><p>penseira presente na saga do bruxo.</p><p>Ela lembra que “a penseira do mundo Harry Potter é uma bacia grande e rasa na qual as</p><p>memórias são recriadas de forma �el ao ambiente original — em todos os detalhes — e podem</p><p>ser experienciadas por qualquer pessoa exatamente como ocorreu originalmente. Uma memória</p><p>é tirada do armazenamento e colocada na penseira.</p><p>Quando um bruxo coloca o rosto na penseira, ele é empurrado para a memória como se a</p><p>estivesse vivendo �sicamente. Podemos comparar uma imagem de container à memória</p><p>armazenada sem degradação até que esteja pronta para ser experienciada por outro bruxo por</p><p>intermédio da penseira. O container seria o reviver da experiência — uma instância dessa</p><p>memória” (FREEMAN, 2021, p. 56).</p><p>_____</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Em resumo, as máquinas virtuais (VMs) passaram a emular o hardware, executando software em</p><p>servidores físicos, ou seja, uma VM executa um sistema operacional exclusivo (kernel,</p><p>bibliotecas, aplicativos, arquivos de con�guração) dentro de um servidor físico e, no mesmo</p><p>servidor, é possível projetar VMs com sistemas diferentes, por exemplo.</p><p>Os containers oferecem uma maneira de executar esses sistemas de forma isolada, sem a</p><p>necessidade de virtualizar todo o Hardware e o Sistema Operacional, fornecendo apenas o</p><p>básico para os aplicativos serem executados, ou seja, é instalado apenas o su�ciente para a</p><p>implantação de uma aplicação.</p><p>Os containers já eram usados há décadas no sistema Unix através do comando chroot (embora</p><p>de forma simplória, sem os recursos que temos hoje, já era possível fazer isolamentos), em</p><p>seguida o conceito foi usado nos jails do FreeBSD, também do OpenVZ, do CGgroups da Google</p><p>e do projeto LXC, mas foi em 2013 que os containers se popularizaram e passaram a ser</p><p>utilizados de forma massiva pelas grandes empresas, graças ao Docker.</p><p>O projeto Docker começou em meados de 2008, quando Solomon Hykes fundou a dotCLoud. Em</p><p>março de 2013, decidiram tornar o projeto Open Source e mudar o nome para Docker. A partir daí,</p><p>quando desenvolvedores do mundo inteiro passaram a poder visualizar o código e contribuir com</p><p>melhorias, fazer correções de bugs e lançar melhorias de forma colaborativa, o Docker ganhou</p><p>força e se tornou quase um sinônimo de containers (VITALINO; CASTRO, 2016).</p><p>Mas é preciso entender que são conceitos diferentes. O container é um ambiente isolado, o</p><p>Docker é uma plataforma de implementação de containers que usa um esquema de camadas,</p><p>montadas a partir das técnicas de Copy-On-Write, que é um procedimento que permite</p><p>compartilhar dados entre camadas, mas só é possível alocar um novo recurso a partir do</p><p>momento em que esteja modi�cado.</p><p>Na prática, funciona assim: a cópia de um arquivo é mandada para uma camada superior, são</p><p>visualizadas somente as informações modi�cadasdessa camada, no entanto, o arquivo original</p><p>permanece em uma camada inferior e pode ser visualizado, caso se exclua a camada</p><p>sobreposta.</p><p>O uso dos containers já é uma realidade na indústria de desenvolvimento de software, tornando o</p><p>seu monitoramento essencial para garantir que tudo esteja funcionando da melhor forma</p><p>possível, com disponibilidade e e�ciência, a�nal, quando se trata de desenvolvimento de</p><p>software, já sabemos que, em algum momento, algo não vai funcionar como deveria e o</p><p>monitoramento é capaz de se anteceder ao problema.</p><p>Com o monitoramento é possível visualizar os containers que estão operando e onde estão</p><p>sendo executados, exibir uma auditoria que detalhe os comandos de containers usados,</p><p>identi�car ruídos, consumo excessivo de recursos, ter ciência do uso da CPU, da memória,</p><p>armazenamento e outras informações de desempenho, dentre outras funções.</p><p>Dentre as ferramentas de monitoramento de containers, podemos destacar: Docker Stats,</p><p>CAdvisor, Scout, Data Dog, Sensu Monitoring Framework, Prometheus, Sysdic Cloud, etc.</p><p>Kubernetes</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>É um sistema open source de orquestração de containers que automatiza deploy, facilita o</p><p>escalonamento e gerencia aplicações. Dentre as suas muitas características destaca-se a</p><p>capacidade de trabalhar com atualizações diversas nas aplicações. Ele permite que se altere</p><p>novos releases da aplicação com muito mais frequência e de forma automática.</p><p>Com o Kubernetes é possível agendar a implantação de uma versão nova e, se ocorrer problema,</p><p>reverter tudo de forma automática, sem comprometer a disponibilidade da aplicação.</p><p>No Kubernetes, vários containers rodam em uma única aplicação, balanceando de acordo com</p><p>as requisições. Na prática, uma aplicação pode aumentar rapidamente e exponencialmente a sua</p><p>capacidade.</p><p>_____</p><p>Assimile</p><p>Vamos supor que você tenha projetado um sistema de vendas de ingressos para um dado</p><p>festival de música. No começo das vendas, as requisições de compras serão menores, mas, a</p><p>partir do momento em que se aproximar o dia do festival, as compras aumentarão</p><p>vertiginosamente.</p><p>O Kubernetes cria e remove containers no cluster de forma programada. A partir do momento em</p><p>que a aplicação requer mais recursos, o orquestrador adicionará novos containers e os removerá</p><p>quando não precisar mais deles.</p><p>Esse é um conceito conhecido como autoscaling (escalonamento automático) uma solução</p><p>presente no Google Compute Engine (GCE), no Google Container Engine (GKE) e no Elastic</p><p>Kubernetes Service (EKS) da AWS.</p><p>_____</p><p>Com o Kubernetes é possível que se faça implantações e atualizações de forma rápida e a todo</p><p>instante. Passar de um container para vários rapidamente, o que chamamos de escalonamento</p><p>dinâmico.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Também conta com uma busca de dispositivos e serviços de forma automática (Service</p><p>Discovery), faz o balanceamento de carga e, se associado a uma malha de serviço no cluster,</p><p>como o Istio, pode interromper a comunicação entre front-end e back-end se uma falha for</p><p>detectada no back-end (circuit breaker), dentre outros serviços.</p><p>Dentre os principais benefícios em usar o kubernetes destacam-se: a automatização de</p><p>implantações</p><p>e atualizações de aplicações; a facilidade para escalonar aplicativos em</p><p>containers; a capacidade de operar containers em diferentes hosts; a otimização do uso do</p><p>hardware, reduzindo custos e o suporte de carga para diversas aplicações.</p><p>Open shift, Docker swarm, Docker EE (Enterprise Edition)</p><p>Open shift</p><p>É uma plataforma de gerenciamento e orquestração de containers que faz monitoramento,</p><p>automação, gera relatórios e integração com outras ferramentas. Foi desenvolvida pela Red Hat,</p><p>uma empresa especialista nesse mercado, que oferece também a versão Enterprise do produto,</p><p>o Red Hat OpenShift Container Platform, que tem as mesmas funções, mas para grande escala e</p><p>maior segurança.</p><p>Dentre as suas características estão: desenvolvimento, hospedagem, escalonamento e entrega</p><p>de aplicações ágeis na nuvem, redução de burocracia, criação de ambientes de testes, elevação</p><p>do poder de processamento dos servidores da empresa, melhor aproveitamento dos recursos</p><p>computacionais, redução de custos, �exibilidade aos sistemas, etc. (EVEO, 2017).</p><p>Docker swarm</p><p>O orquestrador já vem instalado com o Docker e permite a construção de clusters de containers</p><p>de forma nativa, usando balanceamento de carga e failover. Você cria clusters facilmente</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>indicando os hosts que serão supervisionados; quando criar um novo container, por conta do</p><p>balanceamento de carga, ele direcionará ao host que possuir a menor carga. “A estrutura se</p><p>resume em um manager e diversos workers.</p><p>O manager orquestra os containeres e distribui em hosts workers, os workers hospedam o</p><p>container” (VITALINO; CASTRO, 2016).</p><p>Docker Swarm é, portanto, outra forma de orquestrar seus containers através da criação de um</p><p>cluster com alta disponibilidade, balanceamento de carga e comunicação criptografada, tudo</p><p>isso nativo, sem esforço e di�culdade.</p><p>Docker EE (Enterprise Edition)</p><p>Embora o Docker Swarm seja também um orquestrador, o Docker EE atenderá melhor a demanda</p><p>do mundo corporativo com mais e�ciência e velocidade. Isso acontece por conta da solução</p><p>Docker Universal Control Plane (UCP), que auxilia no gerenciamento de inúmeros clusters e</p><p>aplicativos por meio de uma interface simples.</p><p>Dentre as tarefas do Docker EE estão: analisar as imagens nos repositórios para veri�car se</p><p>estão livres de vulnerabilidades, conectar os containers a volumes, administrar a maneira com os</p><p>containers se comunicam entre si e externamente, controlar a autenticidade dos usuários, fazer</p><p>registros das imagens, etc. (FREITAS, 2021).</p><p>Replicação e padronização de containers docker</p><p>Containers Dockers permitem a padronização e facilitam a replicação de suas imagens. Uma vez</p><p>que essas imagens são construídas por meio de arquivos de de�nição, já se tem um</p><p>determinado padrão. Assim, facilita o escalonamento da estrutura, utilizando replicações dessa</p><p>imagem.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Por exemplo, caso chegue um novo membro para trabalhar na equipe, com apenas alguns</p><p>comandos, rapidamente pode ser gerado um ambiente de trabalho para ele, baseado no padrão</p><p>usado na empresa. E também pode ser con�gurado para testar versões, mudando parâmetros do</p><p>arquivo de de�nição e, consequentemente, modi�cando, de forma simples, a infraestrutura.</p><p>Usamos um arquivo chamado Docker�le, para fazer as declarações do que conterá a imagem</p><p>docker.</p><p>Para testarmos, na prática, como montar uma distribuição através do Docker�le, siga os passos</p><p>para criar um arquivo Docker�le para o Apache:</p><p>Vamos criar um diretório para adicionarmos o conteúdo:</p><p>Entre no diretório criado e crie um outro diretório com o nome apache.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dentro dele vamos criar um arquivo chamado “Docker�le” (o nome é um padrão que deve ser</p><p>respeitado) e colocar o conteúdo. Para entrar no diretório digite:</p><p>Vamos agora criar um arquivo com base no Debian. Digite:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Vamos agora entender o signi�cado de cada linha de comando colocada:</p><p>FROM: Indica a imagem que serviu de base. Caso o propósito fosse servir uma aplicação Java,</p><p>por exemplo, poderíamos criar uma imagem para que, quando fôssemos rodar o container, seria</p><p>a própria aplicação JAVA.</p><p>Nesse caso, o mínimo que precisaríamos ter era um sistema operacional com um JDK instalado.</p><p>No FROM podemos pesquisar uma imagem que tenha as con�gurações que precisamos.</p><p>RUN: é a lista dos comandos que devem ser executados na criação da imagem (a criação de</p><p>uma camada nova no container).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>ENV: É a de�nição das variáveis do ambiente. As variáveis que usamos são variáveis do Apache,</p><p>usadas para que funcione perfeitamente dentro do container, ou seja, essas variáveis diferem em</p><p>cada tipo de aplicação usada.</p><p>LABEL: Adiciona uma metadata à imagem, como descrição, versão, etc.</p><p>VOLUME: De�ne um volume a ser montado no container. No nosso exemplo, é o local dos</p><p>arquivos do nosso site; no debian, os arquivos �cam nesse diretório informado acima.</p><p>EXPOSE: é a porta onde o container se comunica; 80 é a porta do webservice.</p><p>Depois de criado o arquivo, basta construir a imagem, certi�que-se de que você está no mesmo</p><p>diretório onde foi criada a imagem e digite o comando:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O parâmetro -t serve para de�nir o nome da versão do container que estamos criando. O nome</p><p>pode ser qualquer um.</p><p>Para executar o container utilizando a imagem, digite:</p><p>_____</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Re�ita</p><p>O Docker Hub é um repositório público onde várias empresas e desenvolvedores publicam suas</p><p>soluções em containers. Na maioria das vezes em que precisamos de um container especí�co,</p><p>existe uma solução armazenada no repositório que pode ser usada de forma rápida, sem</p><p>nenhuma complicação. Daí vem a pergunta: para quê criar imagens se eu as tenho no Docker</p><p>Hub?</p><p>_____</p><p>Caso você queira usar uma imagem armazenada no repositório Docker Hub, o comando é:</p><p>Se �zermos um teste com uma imagem: “Hello World”, digitaríamos assim:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para abrir a imagem, o comando é:</p><p>A �gura a seguir mostra uma pesquisa para o exemplo citado. Perceba que, no canto inferior</p><p>direito da imagem, aparece o comando para o download.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Print do site Dockerhub. Fonte: captura de tela do Dockerhub elaborada pelo autor.</p><p>Caso queira fazer o upload de uma imagem criada por você para o repositório, é necessário criar</p><p>uma conta, que é gratuita e lhe dá direito a um repositório privado, podendo ter quantos</p><p>repositórios públicos quiser. Caso queira mais repositórios privados, tem a opção de pagar pela</p><p>comodidade. Esteja ciente que qualquer pessoa poderá baixar uma imagem armazenada em um</p><p>repositório público.</p><p>Entre no terminal docker�le e faça o login:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Coloque o user name e a senha e, após estar logado, digite:</p><p>Substitua “login” pelo seu nome de usuário e “nomedaimagem” pelo nome da sua imagem. Caso</p><p>quiséssemos enviar a imagem que criamos em nosso exercício, �caria assim:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Visualize as imagens com o comando:</p><p>E, para enviar o conteúdo para o Docker Hub, digite o comando:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>No nosso exemplo: Docker push wagner/teste:1</p><p>Nesta aula vimos o conceito de containers, a diferença de containers e máquinas virtuais (VM), o</p><p>Docker, os orquestradores Kubernetes, Openshift, Docker Swarm e Docker EE, fomos</p><p>apresentados aos processos básicos para criação de containers Dockers e ao repositório Docker</p><p>Hub. Na próxima aula, detalharemos melhor a infraestrutura e monitoramento de containers em</p><p>ambientes ágeis.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>A arquitetura de microsserviços trará ganhos consideráveis, como a facilidade na escalabilidade</p><p>do sistema; redução de custos, pois cada, aplicação só utiliza os serviços necessários;</p><p>�exibilidade devido ao pouco acoplamento entre os serviços que não “prendem” os</p><p>desenvolvedores a uma tecnologia; facilidade para alterações em produção, etc.</p><p>Para adoção dessa prática, é necessário que se tenha o mínimo de consciência da cultura</p><p>DevOps, o que impacta diretamente com um custo de entrada e preparação da equipe.</p><p>É preciso automatizar processos para lançamentos frequentes, e para isso é necessária a</p><p>integração contínua (CI), que automatizará a criação e integração dos componentes de software</p><p>em um pacote, e também a implementação contínua (CD), que automatiza o envio de aplicativos</p><p>para o desenvolvimento, teste, produção e outros ambientes de computação.</p><p>Nesse cenário, é possível usar containers para empacotamento do ambiente operacional da</p><p>aplicação. Assim, isolando a necessidade computacional para cada aplicação, as ferramentas</p><p>�cam liberadas para outros serviços de aplicativos, sem muita sobrecarga.</p><p>O uso do Docker ou Kubernetes ajuda a de�nir ambientes de aplicativos e, gerenciando bem a</p><p>estrutura, é possível criar microsserviços que podem ser implantados, dimensionados e</p><p>aproveitados de acordo com os requisitos dos usuários.</p><p>Aula 2</p><p>Monitoramento de containers</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Introdução da aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar a importância e os conceitos de monitoramento de containers.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>analisar a coleta de métricas de desempenho;</p><p>discutir sobre o ambiente e a infraestrutura de containers;</p><p>identi�car as ferramentas e exemplos de monitoramento de containers em ambientes</p><p>ágeis.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Em aulas anteriores, você viu a importância dos containers na cultura DevOps e estudou como o</p><p>isolamento e a portabilidade dos containers facilitam a produção e a entrega de softwares. Outro</p><p>entendimento ao qual você já deve estar bem ambientado é o de monitoramento.</p><p>Sabe-se que o monitoramento do ciclo de produção de aplicações e softwares antecipa</p><p>problemas, corrige erros, melhora a segurança, ajuda na tomada de decisões, dentre outras</p><p>características.</p><p>Por ser o container um componente fundamental no desenvolvimento de softwares, sobretudo</p><p>em produções de microsserviços, faz-se necessário que o ambiente e infraestrutura dos</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>containers também seja monitorado com propriedade.</p><p>No entanto, esse tipo de monitoramento é um pouco mais complicado, dado o dinamismo</p><p>característico dos containers constantemente inseridos ou excluídos, de acordo com a carga de</p><p>trabalho e os requisitos da aplicação.</p><p>Esta aula reforçará a importância dos containers, mostrando o seu ecossistema e sugerindo</p><p>soluções para o seu monitoramento. Você entenderá como os containers funcionam em</p><p>ambientes ágeis, a importância das de�nições de métricas e integridade e, dentre as muitas</p><p>opções de monitoramento, as mais usadas para essa realidade.</p><p>Embora as principais linguagens de desenvolvimento ofereçam condições para a fragmentação</p><p>da complexidade de sistemas por meio de módulos, são projetadas para a criação de um único</p><p>executável conhecido como monolítico, ou seja, toda a modulação é executada em uma máquina</p><p>com compartilhamento da CPU, memórias, banco de dados e arquivos.</p><p>Esse tipo de arquitetura, com o tempo, apresenta alguns problemas como: aumento do tamanho,</p><p>pouca �exibilidade para mudanças, problemas com escalabilidade, necessidade de</p><p>reinicialização dos sistemas sempre que houver alguma mudança, dentre outros.</p><p>Para contextualizar sua aprendizagem, imagine que você trabalha para uma empresa e que, para</p><p>resolver esse problema, adotou os containers em seus processos de produção. No entanto,</p><p>existe a necessidade de monitoramento desses ambientes.</p><p>Foi pedido a você que encontre uma solução, dentro das ferramentas open source, que consiga</p><p>monitorar da forma mais completa possível.</p><p>Sugira um combo de ferramentas open source para viabilizar essa ação. Aponte o papel de cada</p><p>ferramenta e o justi�que o porquê da sua solução ser e�caz para o monitoramento de uma</p><p>infraestrutura de containers.</p><p>E então, pronto para conhecer mais um pouco dessa promissora técnica e enriquecer seus</p><p>conhecimentos sobre o mundo DevOps? Vamos lá. Bons estudos!</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>A importância no monitoramento de containers</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Os containers transformaram a forma como as aplicações são desenvolvidas. Os ambientes por</p><p>eles criados dão velocidade ao desenvolvimento e, consequentemente, à entrega das aplicações.</p><p>A evolução tecnológica nos proporciona uma infraestrutura que agrega várias ferramentas com o</p><p>objetivo de criar, implantar, con�gurar, automatizar e gerenciar containers.</p><p>A cultura DevOps, com seu �uxo de trabalho rápido, que aproxima as equipes de</p><p>desenvolvimento e operação, com o seu ciclo de produção cada vez mais próximo do cliente</p><p>�nal, encontrou nos containers uma ótima ferramenta para se adaptar às mudanças que o</p><p>mercado exige.</p><p>Mas, para isso, o desenvolvedor precisa se certi�car que as lógicas de aplicação criadas pelos</p><p>containers possam ser executadas no ambiente de produção e que sejam propícias às correções</p><p>em tempo real para depurar, corrigir e implantar códigos com rapidez.</p><p>“O container é simplesmente uma maneira inovadora de abstrair um ou mais processos do</p><p>restante do sistema. Os containers deixam a carga "mais leve", possibilitando o trabalho em</p><p>pequenos subconjuntos de código sem impactar o ambiente de execução geral. Eles também</p><p>fornecem uma forma padrão de empacotar e isolar dependências, con�gurações e código da</p><p>aplicação em um objeto”. (REDHAT, 2017, p. 5)</p><p>O monitoramento de containers não é uma das tarefas mais fáceis, isso porque, a partir do</p><p>momento em que aumenta a quantidade de containers implantados, aumenta também a</p><p>di�culdade em os monitorar. Quando levamos essa problemática para as nuvens, nuvens</p><p>híbridas, por exemplo, nas quais os containers aparecem tanto em nuvens públicas como</p><p>privadas, o monitoramento �ca ainda mais comprometido.</p><p>Mas o fato é que o monitoramento de containers não deve ser menosprezado, é imprescindível</p><p>que se crie formas de analisar, localizar erros e tomar decisões a partir de eventos gerados pelos</p><p>containers.</p><p>Plataformas como o Docker, por exemplo, que operam por meio de camadas, permitem com</p><p>facilidade na movimentação e dimensionamento dos containers, o que é ótimo para os</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>desenvolvedores, mas um problema para gerenciar o que está acontecendo.</p><p>O monitoramento de containers, portanto, consiste em: identi�car em quais hosts os containers</p><p>estão executando; isolar containers que apresentam problemas para corrigi-los; detalhar e</p><p>controlar o consumo de memória do servidor; quanti�car o número total de containers e os que</p><p>estão ativos; investigar os detalhes de cada container a �m de analisar o seu desempenho;</p><p>acompanhar, distribuir ou restringir a quantidade usada de CPU; apurar problemas de</p><p>comunicação e troca de recursos, analisando o tráfego de rede; rastrear métricas de</p><p>desempenho; identi�car problemas no desempenho, implementar soluções e fazer análises</p><p>periódicas de desempenho que possam ajudar a prever tendências.</p><p>É inegável, com as tendências de microsserviços, a ascensão da cultura DevOps, o crescimento</p><p>das soluções em ferramentas de código-aberto e suas características singulares, que o cenário</p><p>esteja propício ao ambiente de infraestrutura de containers.</p><p>No entanto, nenhuma tecnologia é boa o bastante se não for possível gerenciá-la, de modo que</p><p>se possa evitar problemas. Portanto, encare o monitoramento de containers como uma tarefa</p><p>essencial no seu trabalho como analista Devops.</p><p>Ambiente e infraestrutura</p><p>de containers</p><p>A transformação digital pressionou as empresas a encararem mudanças em sua infraestrutura.</p><p>Passou-se a tratar a infraestrutura como código, o que possibilitou a redução de gastos e</p><p>velocidade na entrega dos produtos.</p><p>Um ambiente gerido de forma correta possibilita a testagem de softwares com mais facilidade e,</p><p>assim, implantações estáveis e que podem ser reaproveitadas. Por conta dessa nova</p><p>infraestrutura, o monitoramento passou a ser mais complexo.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Diante do exposto, é preciso entender as características desses ambientes e como prepará-los</p><p>para um monitoramento e�ciente. Essas mudanças impactaram tanto o hardware como o</p><p>software. Vejamos alguns fatores:</p><p>No hardware as infraestruturas modernas passaram a virtualizar as máquinas físicas, tendo</p><p>reduções consideráveis com gastos na compra de equipamentos. Com a infraestrutura de nuvem</p><p>pública, passou-se a terceirizar a manutenção e o provisionamento de servidores e redes, um</p><p>ganho de tempo incomparável a o que se tinha antes, quando era necessário aguardar semanas</p><p>para um novo servidor ser provisionado para continuar um projeto.</p><p>Hoje, as plataformas de containers permitem o escalonamento, que dentre outras vantagens, dão</p><p>�exibilidade à infraestrutura para que sejam adicionados novos recursos, conforme a</p><p>necessidade dos negócios.</p><p>No software, evidencia-se uma transição de construções monolíticas para o desmembramento</p><p>em camadas, o que impulsionou arquiteturas orientadas por serviços (SOAs), tipo de design que</p><p>permite que seus componentes sejam reutilizáveis através de uma interface de</p><p>compartilhamento em rede; as SOAs, por sua vez, evoluíram para serviços Web, arquiteturas</p><p>orientadas por eventos e para os microsserviços, que dominam as estratégias de implementação</p><p>para aplicações no mercado de desenvolvimento de software atualmente (MAZMANOV, 2020).</p><p>_____</p><p>Assimile</p><p>Outro comportamento que a tecnologia digital trouxe para a forma como tratamos o software é a</p><p>possibilidade de comercializá-lo como um serviço Web. Esses serviços são conhecidos como</p><p>SaaS, ou seja, são aplicações que oferecem uma possibilidade via internet para o consumo de</p><p>um determinado software com pagamentos, geralmente, de mensalidades.</p><p>Com essa abordagem, o usuário usa as funcionalidades de um sistema com �ns especí�cos, não</p><p>precisando se preocupar com instalações, infraestrutura para a execução, atualizações e</p><p>manutenções, etc.</p><p>_____</p><p>Todas essas características tornam um ambiente de implantação atual bem dinâmico e vários</p><p>aspectos precisam ser considerados. Então, é preciso que se tenha uma ideia se a infraestrutura</p><p>é um datacenter local, uma infraestrutura de nuvem pública ou uma combinação híbrida; saber</p><p>se é usada uma orquestração de containers, como o Kubernetes, por exemplo; identi�car se as</p><p>aplicações serão executadas em containers, VMS ou bare metal (servidor de computador físico);</p><p>identi�car os componentes externos, como banco de dados e ter gerenciamento de nossas</p><p>próprias aplicações.</p><p>Esses aspectos reforçam a necessidade do monitoramento, já que cada componente desse gera</p><p>vários dados de logs, métricas, APM, dentre outros.</p><p>Métricas e veri�cações de integridade</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Os endpoints de métricas dos containers não são estáticos. O uso de um serviço Kubernetes não</p><p>forneceria endpoints e�cientes, pois são necessárias estatísticas mais concentradas em</p><p>containers separados, em vez de agrupados.</p><p>O Prometheus é uma ferramenta que se adequa bem a essa realidade. Muito usado em</p><p>monitoramento de microsserviços, inclui componentes para coleta e exibição de métricas,</p><p>bibliotecas de instrumentação, como o Prometheus JMX Exporter, por exemplo, que possibilita</p><p>conexão ao sistema de coleta de métricas nativo do Java, o Java Management Extensions</p><p>(JMX), e convertê-las em um formato que o Prometheus possa entender.</p><p>Outro problema de monitoramento de containers são as veri�cações de integridade. Os</p><p>endpoints de integridade implantados de maneira tradicional costumam ter endereços de rede</p><p>estáticos, quando os containers são programados para execuções dinâmicas nos nós.</p><p>Uma solução poderia ser o Kubernetes, que monitora todos os containers no cluster e responde</p><p>as veri�cações de integridade implantadas, excluindo e reiniciando os pods.</p><p>_____</p><p>Exempli�cando</p><p>“A instrumentação da veri�cação de integridade proporciona diversos níveis de e�cácia. Por</p><p>exemplo, uma aplicação pode expor um controlador isolado que retorna um código de resposta</p><p>HTTP 200 ao ser chamado.</p><p>Essa veri�cação de integridade é útil em muitos casos, mas é capaz de detectar apenas</p><p>determinados tipos de problemas. Se a conexão de uma aplicação com o banco de dados não</p><p>for íntegra, uma veri�cação super�cial no endpoint provavelmente não detectará esse problema”</p><p>(GORDON, 2018, p. 3).</p><p>_____</p><p>Pode-se precisar de uma veri�cação de integridade que detalhe melhor o status de todos os</p><p>componentes e conexões para a aplicação. Nesse caso, uma solução, como o Sping Boot</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Actuator, pode ser usada.</p><p>Esse tipo de veri�cação de integridade mais detalhado é muito recomendado para aplicações em</p><p>containers, isso porque o Sping Boot Actuator é uma biblioteca de veri�cação de integridade que</p><p>sonda as aplicações Spring e aponta o status do ambiente de execução de cada componente</p><p>encontrado. É importante frisar que essa ferramenta é usada apenas em aplicações escritas na</p><p>linguagem Java.</p><p>Ferramentas e exemplos de monitoramento de containers</p><p>Várias abordagens e ferramentas podem ser usadas para monitoramento de containers. É</p><p>necessário que se analise o ambiente da infraestrutura de containers para que se escolha a</p><p>ferramenta ou o conjunto de ferramentas adequado.</p><p>Em uma abordagem geral de monitoramento, o ideal é que se busque uma solução que dê</p><p>suporte a toda a infraestrutura. Quando focamos nos containers, que são implementados de</p><p>forma dinâmica, em movimento constante, IPs instáveis e não con�áveis, é preciso que o</p><p>monitoramento acompanhe essas características, já que é necessário que se detecte</p><p>automaticamente as modi�cações que ocorrem no ambiente.</p><p>O Elastic Stack (ELK Stack) apresenta-se como uma solução para o monitoramento de toda a</p><p>estrutura, com visibilidade de todo o ecossistema e garante que suas ferramentas integradas,</p><p>Metricbeat e o Filebeat (que enviam dados de logs e métricas) têm recursos de descoberta</p><p>automática que controlam essas alterações, com controle de implantação e processos</p><p>adaptáveis a qualquer nova con�guração. (MAZMANOV; DIMITRI, 2020).</p><p>Já para coleta de métricas Docker Swarm (orquestrador de containers em cluster) uma solução</p><p>pode ser a junção de ferramentas, como o cAdvisor, In�uxDB e o Grafana. Essa solução daria</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>uma ideia geral da carga de trabalho de cada container, embora o Docker tenha a solução docker</p><p>stats. Quando há vários hosts em cluster e não há uma de�nição de quais containers estão em</p><p>cada host, por exemplo, é preciso que se tenha uma forma de analisar todas as informações de</p><p>consumo desse cluster.</p><p>Nesse contexto, o cAdvisor (Container Advisor) é um daemon, serviço que roda no background</p><p>de um sistema em execução que coletará os processos agregados e exportará informações</p><p>sobre todos os containers ativos. Existe a possibilidade de integrar com uma API e enviar dados</p><p>para diversos backends, estendendo, assim, o seu uso.</p><p>Nessa abordagem com o In�uxDB é possível fazer com que cada host de seu cluster tenha um</p><p>container do tipo CAdvisor que envia dados para o In�uxDB e, após, subir o serviço Grafana e</p><p>visualizar as informações que foram coletadas. Com o Grafana é possível criar, exibir grá�cos e</p><p>até montar um dashboard unindo todas as informações (DIEDRICH, 2017).</p><p>Outra ferramenta, que também pode ser usada para monitoramento de containers, é o Netdata</p><p>Agent. Ele é totalmente escalonável, pois suas métricas são armazenadas em nós individuais, e é</p><p>capaz de coletar e visualizar métricas de utilização de recursos para cada contêiner naquele nó.</p><p>Ele também</p><p>descobre automaticamente o aplicativo especí�co em execução dentro de cada</p><p>contêiner e aplica imediatamente uma de suas várias integrações para coletar dezenas de</p><p>métricas relevantes por segundo.</p><p>Com ele é possível visualizar o comportamento da CPU, Memória RAM, uso de rede, coletar</p><p>métricas por segundo dos serviços ou aplicativos de cada container e ainda monitorar</p><p>infraestruturas orquestradas como Docker, Docker Swarm e Kubernetes (NETDATA, 2021).</p><p>Outra solução é integrar o Prometheus com o Node-Exporter e o cAdvisor e usar o Grafana para</p><p>visualizar os dados. O Prometheus apresenta um conjunto de ferramentas de monitoramento e</p><p>alerta de sistemas de código aberto. Ele extrai métricas diretamente ou por meio de um gateway,</p><p>armazena localmente os dados coletados e pode usar outras ferramentas incorporadas para</p><p>visualizar esses dados.</p><p>Como o Grafana, um dos pontos fortes do Prometheus é que ele tanto pode fazer o</p><p>monitoramento centrado na máquina, como o faz em arquiteturas dinâmicas, como as</p><p>orientadas a serviços.</p><p>A �gura a seguir ilustra um exemplo de arquitetura do Prometheus.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Diagrama de ilustração da arquitetura do Prometheus. Fonte: Wikimedia.</p><p>O Prometheus precisa de um exportador que coleta informações e as concentram em uma API.</p><p>O Node Exporter é um exportador Prometheus que ajuda a medir recursos do servidor, como</p><p>Memória RAM, espaço em disco e utilização da CPU. A função do cAdivisor é a de monitorar o</p><p>Docker e o container.</p><p>Na proporção que você vai conhecendo as ferramentas, percebe também o poder de integração</p><p>delas. Algumas soluções, como já mencionado, podem suprir toda a sua necessidade, mas, em</p><p>outros casos, será necessário um conjunto de ferramentas. Qualquer que seja a solução</p><p>encontrada, é importante que o monitoramento seja incorporado nas suas boas práticas de</p><p>desenvolvimento.</p><p>O Azure Monitor é uma ferramenta de monitoramento de aplicativos, infraestrutura e redes que</p><p>também apresenta uma solução de monitoramento para containers. Com ele é possível</p><p>identi�car os containers em execução, qual imagem e onde estão executando, exibir</p><p>informações de auditoria, pesquisar logs centralizados, identi�car erros e alto consumo de</p><p>recursos, visualizar o desempenho da CPU, Memória RAM e armazenamento, dentre outros.</p><p>_____</p><p>Re�ita</p><p>Do que depende a escolha da ferramenta de monitoramento de containers? Qual a melhor</p><p>ferramenta? Quais integrações possibilitam a melhor coleta e amostragem de dados? Quais as</p><p>di�culdades em monitorar containers?</p><p>_____</p><p>Os containers já são uma realidade na indústria de desenvolvimento de software. Por serem</p><p>mais enxutos, mais rápidos, �exíveis e por facilitarem a comunicação entre as equipes, tornaram-</p><p>se um dos componentes principais na cultura DevOps.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Os microsserviços, com suas características intrínsecas, encontraram nos containers formas de</p><p>destacar ainda mais as suas especi�cidades. Por serem tão indispensáveis, é preciso que</p><p>saibamos tirar vantagem dessa tecnologia sem que isso comprometa a segurança dos nossos</p><p>sistemas e não se tornem um problema operacional. Por conta disso, o monitoramento de toda</p><p>essa infraestrutura dinâmica precisa ser feito com muito cuidado e pro�ssionalismo.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>A aula sugere algumas soluções, mas o analista pode criar, dentro da realidade das instituições,</p><p>outras alternativas. Outra ideia de stack seria juntar o Prometheus e uma ferramenta de</p><p>monitoramento desenvolvida para sistemas Linux, o Netdata. Acrescentar ao pacote o cAdvisor e</p><p>o Grafana em um ambiente Docker.</p><p>Para isso, é preciso ter instalado o Git e o Docker; você pode optar por um projeto do GitHub que</p><p>contenha essas ferramentas e fazer uma clonagem; é preciso instalar o Netdata no host que está</p><p>rodando o Docker para que seja feita a coleta das informações (o Netdata será integrado às</p><p>demais ferramentas); con�gurar o IP nas con�gurações do Prometheus; fazer o deploy do Docker</p><p>Swarm e do Docker Stack e também do arquivo docker-compose, que tem vários serviços, como</p><p>o grafana, node-exporter, alertmanager, prometheus, cadvisor.</p><p>En�m, como já foi dito, a solução de monitoramento vai depender da sua necessidade e existem</p><p>várias formas de monitoramento de containers e�cazes. O importante é que não se esgote aqui</p><p>o seu conhecimento sobre o assunto, mas busque aprender sempre.</p><p>Aula 3</p><p>Infraestrutura ágil em cloud e escalonamento automático</p><p>Introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar os fundamentos de infraestrutura ágil em Cloud.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>analisar a infraestrutura baseada em PaaS (Platform as Service);</p><p>identi�car os tipos de escalonamento automático;</p><p>aplicar as ferramentas de escalonamento automático.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Atividades do nosso dia a dia, como assistir a �lmes por meio de streamings, pedir um carro para</p><p>se deslocar na cidade, pagar uma conta através de um aplicativo, postar fotos nas redes sociais</p><p>são processos feitos nas nuvens. Mas, além dessas tarefas cotidianas, o emprego das nuvens</p><p>pode facilitar nosso trabalho como desenvolvedores de softwares.</p><p>Cientes da importância dos containers nas infraestruturas ágeis e do monitoramento de suas</p><p>aplicações, para encerrarmos com “chave de ouro” esta unidade de ensino, vamos entender</p><p>como o Cloud Computing apoia os desenvolvedores fazendo uso dos recursos de</p><p>provisionamento e automatizações escalonáveis.</p><p>Para tanto, reforçaremos os conceitos de Cloud Computing enfatizando como o DevOps pode</p><p>caminhar junto nessa abordagem. No entanto, é importante salientar que Cloud Computing não</p><p>substitui o DevOps. Embora tenham características similares, o DevOps está mais ligado a</p><p>pessoas e processos, e a Cloud aos recursos disponíveis para facilitar as práticas.</p><p>Muitos processos usados em DevOps mesclam ferramentas de nuvens públicas e ferramentas</p><p>locais, mas é possível usar toda a infraestrutura das nuvens para implementação de aplicações</p><p>diretamente na rede, fazendo jus de Plataformas PaaS.</p><p>Nesta aula, entenderemos como a infraestrutura Cloud pode facilitar os processos DevOps e de</p><p>metodologias ágeis. Apresentaremos as características e ferramentas das infraestruturas de</p><p>Plataformas como Serviços (PaaS), enfatizando a elasticidade e o escalonamento, que podem</p><p>ser feitos de forma automática e dinâmica, de acordo com a necessidade requisitada pelo cliente</p><p>ou de acordo com demandas pontuais.</p><p>Esses entendimentos farão com que você tenha conhecimento das melhores práticas e</p><p>ferramentas para operar em ambientes Cloud e desenvolver de forma ágil suas aplicações.</p><p>Busque sempre estar atento às informações que surgem no campo do DevOps, pois como a área</p><p>de desenvolvimento de software cresce e se transforma a cada dia, é imprescindível que você</p><p>esteja sempre atualizado.</p><p>Como vimos, o escalonamento automático (autoscaling) é um método usado em computação</p><p>em nuvens que permite aumentar ou diminuir instâncias e recursos computacionais para atender</p><p>a uma determinada demanda que pode variar por diversos motivos.</p><p>Dentre as vantagens do escalonamento automático, temos a redução nos custos em várias</p><p>vertentes, a proteção em falhas, a disponibilidade e a elasticidade, dentre outras. Por conta</p><p>dessas características, uma arquitetura baseada em microsserviços pode ser facilmente</p><p>escalável.</p><p>Vamos simular uma aplicação de microsserviços, na qual dois serviços precisam conversar entre</p><p>si internamente; usamos um API gateway para gerenciar as requisições externas. Caso opte por</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>hospedarmos essa aplicação na plataforma Azure da Microsoft, quais procedimentos</p><p>precisaríamos fazer para gerenciar essa aplicação?</p><p>Espero que você esteja empolgado em aumentar ainda mais os seus conhecimentos,</p><p>conhecendo um pouco mais sobre a computação em nuvens, Cloud Computing. Vamos nessa?</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Fundamentos da infraestrutura ágil em Cloud</p><p>A infraestrutura Cloud Computing, “computação em nuvens”, como é conhecida no Brasil, já é</p><p>uma realidade nos sistemas computacionais. Tem como principal característica evitar a</p><p>dependência de um único recurso de hardware (que pode �car obsoleto), facilitando a</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>prospecção de recursos computacionais que podem ser acessados de forma online através da</p><p>Internet.</p><p>A Computação em Nuvens surge a partir dos estudos sobre virtualização de servidores,</p><p>softwares orientados a serviços e gestões de grandes instalações, como Data Centers. Esse</p><p>modelo e�caz utiliza-se de softwares, acessos, armazenamentos e processos de dados em meio</p><p>a diferentes dispositivos e tecnologias Web (RODRIGUES; GALDINO; NETO, 2019).</p><p>A Computação em Nuvens traz diversos benefícios para as empresas, dentre eles, destacamos: a</p><p>redução de custos, maior produtividade, competitividade, mobilidade, disponibilidade e</p><p>escalabilidade. Essas, por sua vez, são também características das infraestruturas ágeis.</p><p>Gradativamente, as grandes empresas passam a substituir os seus servidores on-premises</p><p>(instalações próprias das empresas) e suas infraestruturas físicas por nuvens públicas e</p><p>privadas. E os softwares de aplicações monolíticas passam a ser baseados em microsserviços,</p><p>por exemplo. Usando a nuvem para facilitar as atualizações diárias ou semanais e,</p><p>consequentemente, melhorar a entrega.</p><p>Os serviços de computação na nuvem são divididos em três classes, que levam em</p><p>consideração o nível de abstração do recurso provido e o modelo de serviço do provedor. As três</p><p>classes de serviço são nomeadas da seguinte forma: Infraestrutura como Serviço (IaaS), camada</p><p>inferior; Plataforma como Serviço (PaaS), camada intermediária; e Software como Serviço</p><p>(SaaS), camada superior (PEDROZA; NOGUEIRA, 2011).</p><p>De acordo com Veras (2015), podemos descrever as classes da seguinte forma:</p><p>Infraestrutura como um serviço - IasS: é um modelo no qual as partes referentes aos servidores,</p><p>processamentos e memórias são oferecidas por um provedor que possibilita ao cliente um</p><p>mecanismo de virtualização que tem controle sobre máquinas virtuais, armazenamento,</p><p>aplicações instaladas e um controle limitado dos recursos de rede.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Assim, o usuário não precisa adquirir hardware e softwares básicos, ele passa a usar uma</p><p>infraestrutura virtualizada para desenvolver suas aplicações pagando como se fosse um</p><p>serviço.</p><p>Plataforma como Serviço (PaaS): É uma plataforma que possibilita o uso de ferramentas de</p><p>desenvolvimento de softwares oferecidos por um provedor de serviços. Utilizando a Internet</p><p>como meio de acesso, os desenvolvedores criam aplicações e armazenam dados de forma</p><p>compartilhada através de uma plataforma.</p><p>Software como Serviço (SaaS): é a classe mais comum. Nesse modelo o usuário usa todas as</p><p>funcionalidades de um sistema de forma remota, sem a necessidade de instalação, ambiente</p><p>para execução, manutenção e upgrades. A aplicação completa é ofertada e acessível ao cliente</p><p>por um determinado preço.</p><p>Além das classes, é importante enfatizar que as nuvens podem ser classi�cadas em: privadas</p><p>quando opera para uma única instituição; comunitária, ou seja, pode ser dividida entre várias</p><p>organizações; pública, quando é de responsabilidade de uma organização que vende os serviços,</p><p>mas é disponível para o público; e híbrida, quando usa mais de um tipo de nuvem.</p><p>_____</p><p>Re�ita</p><p>O PaaS é aconselhável para empresas que precisam desenvolver, testar e implementar</p><p>aplicações de forma rápida, mas em quais situações o uso de SaaS ou IaaS são recomendados?</p><p>Infraestrutura baseada em Plataforma como Serviço (PaaS)</p><p>Para o nosso estudo, precisamos nos aprofundar mais nas PaaS por ser uma estratégia muito</p><p>usada no desenvolvimento ágil de softwares. A economia com as abstrações de SO, o uso</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>middleware (softwares que fornecem serviços e recursos comuns em aplicações) e Data Centers</p><p>trazem agilidade e possibilitam uma modernização nos trabalhos desenvolvidos.</p><p>Resumindo, você usa uma plataforma como serviço (PaaS) quando quer desenvolver e rodar a</p><p>sua aplicação na Internet, no Cloud, sem se preocupar com infraestrutura, servidores, instalações</p><p>de softwares, linguagem, bibliotecas, etc.</p><p>Além da estrutura de desenvolvimento na qual o desenvolvedor pode compilar, desenvolver e</p><p>personalizar aplicações baseadas nas nuvens, a outra vantagem é poder usar os recursos das</p><p>nuvens como escalabilidade, disponibilidade, redução de codi�cação, dentre outros. Outro uso</p><p>muito comum de PaaS é a análise ou business intelligence, ou seja, algumas plataformas</p><p>permitem análise e mineração de dados.</p><p>Dentre as vantagens do PaaS, temos a redução do tempo de codi�cação, já que existem</p><p>componentes pré-codi�cados que podem ser inseridos no projeto; facilita o desenvolvimento em</p><p>diferentes plataformas; permite ao usuário o uso de ferramentas so�sticadas; facilita o trabalho</p><p>remoto, já que tudo é feito na Internet, e gerencia o ciclo de vida do aplicativo, dando suporte a</p><p>todas as fases do desenvolvimento.</p><p>Um exemplo bem conhecido de PaaS é a Heroku, uma plataforma baseada em containers</p><p>gerenciados, com serviços de dados integrados e um poderoso ambiente para implantações e</p><p>execuções de aplicativos modernos. Os desenvolvedores podem implantar códigos inscritos em</p><p>Node, Ruby, Java, PHP, Python, Go, Scala ou Clojure, em um sistema de construção próprio para</p><p>execução.</p><p>Usam ferramentas populares, como Git, GitHub ou sistemas de integração contínua (CI) para</p><p>gerenciamento da aplicação e maior visibilidade do desempenho, e dispõem de complementos</p><p>que são serviços de nuvens de terceiros que aprimoram ainda mais os trabalhos dos</p><p>desenvolvedores, como Heroku Postgres, Heroku Redis e Apache Kafka no Heroku (HEROKU,</p><p>2021).</p><p>Outro exemplo é o serviço PaaS do Google Cloud Platform: o App Engine. Ele tem como principal</p><p>objetivo permitir a publicação de aplicativos com o mínimo de con�guração possível.</p><p>O desenvolvedor escolhe o conjunto de ferramentas necessárias para a aplicação rodar em uma</p><p>linguagem especí�ca de programação que pode ser: Go, PHP, Java, Python, Node.Js, .Net, Ruby,</p><p>dentre outras, e o App Engine cuida do ambiente onde o software rodará, da segurança, de</p><p>manter um sistema operacional e hardware onde o serviço será alocado (APP..., [s. d.]).</p><p>O OpenShift é uma plataforma de aplicações em container da Red Hat que disponibiliza um</p><p>sistema operacional Linux para empresas, um ambiente de execução em container, rede,</p><p>monitoramento, registros e soluções de autenticação e autorização. É possível automatizar o</p><p>ciclo das aplicações com segurança, personalização e portabilidade, otimizar as entregas e</p><p>oferecer suporte, consultoria e treinamento (RED..., 2021).</p><p>Outros exemplos de ofertas corporativas de PaaS são: Amazon Elastic Beanstalk, Plataforma</p><p>Salesforce1, IBM Bluemix, Plataforma de nuvem da Oracle, Websites Windows Azure, Getup,</p><p>dentre outros.</p><p>Elasticidade e Escalabilidade</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Os termos elasticidade e escalabilidade em cloud computing trabalham juntos. Trata-se da</p><p>capacidade de um sistema expandir e contrair a sua infraestrutura de acordo com uma demanda</p><p>especí�ca. Recursos de memória, armazenamento e processamento são alterados para mais ou</p><p>para menos, conforme a necessidade do sistema.</p><p>Essa característica propicia a ilusão de que os recursos computacionais são in�nitos, os</p><p>usuários têm a expectativa de que a nuvem seja capaz de fornecer rapidamente recursos</p><p>em</p><p>qualquer quantidade e a qualquer momento.</p><p>É esperado que os recursos adicionais possam ser providos, possivelmente de forma</p><p>automática, quando ocorre o aumento da demanda e retidos, no caso da diminuição desta</p><p>demanda (BUYYA; GOSCINSKI; BROBERG, 2011).</p><p>_____</p><p>Assimile</p><p>Elasticidade é um termo que muitos acreditam ser sinônimo de escalabilidade, mas não é. A</p><p>diferença, como os nomes sugerem, é que, enquanto a escalabilidade em nuvem refere-se à</p><p>facilidade de crescimento dos recursos disponibilizados, a elasticidade é uma forma de ajustar</p><p>os recursos de acordo com a demanda. Para o nosso estudo, usaremos o termo escalonamento</p><p>automático para nos referirmos à capacidade de elasticidade e escalabilidade dos sistemas</p><p>Cloud Computing.</p><p>_____</p><p>“As funcionalidades computacionais devem ser rápidas e elasticamente providas,</p><p>assim como rapidamente liberadas. O usuário dos recursos deve ter a impressão de</p><p>que ele possui recursos ilimitados, que podem ser adquiridos (comprados) em</p><p>qualquer quantidade e a qualquer momento. Elasticidade tem três principais</p><p>componentes: escalabilidade linear, utilização on-demand e pagamento por unidades</p><p>consumidas de recurso”. (VERAS, 2015, p. 43)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Utilização On-demand diz respeito à instalação de novas instâncias em um curto período de</p><p>tempo que será cobrado por hora do cliente. Para economizar recursos, a ativação e</p><p>desligamento de máquinas é feito de forma otimizada, e o cliente paga de acordo com o tempo</p><p>em que uma máquina estiver operando. Esse monitoramento pode ser feito através de relatórios.</p><p>Outra vantagem é que o escalonamento automático é capaz de concentrar a carga de trabalho</p><p>em um servidor, até que tenha, pelo menos, uma carga de trabalho de nível médio. Se a carga de</p><p>trabalho geral for baixa, o balanceador de carga usará apenas um subconjunto de servidores.</p><p>Há dois tipos de escalonamentos automáticos: vertical e horizontal. O horizontal adiciona ou</p><p>remove instâncias de recursos computacionais associados à aplicação, ou seja, adiciona ou</p><p>remove computadores para uma aplicação de software distribuída; e o vertical aumenta ou</p><p>diminui características dos recursos computacionais, como tempo, núcleo de CPU, memória</p><p>Ram ou largura de banda da rede (JARDIM, 2020).</p><p>O aumento e a diminuição de recursos podem resultar em problemas de over-provisioning</p><p>(sobreprovisionamento) quando um sistema provê mais recursos do que o necessário ou under-</p><p>provisioning (subprovisionamento), quando um sistema provê menos recursos que o necessário.</p><p>Um sistema elástico será mais e�ciente quando apresentar menos possibilidades que elevem a</p><p>under ou over-provisioning.</p><p>Outra característica importante a ressaltar é que os sistemas diferem quanto a sua política de</p><p>ação. Toda a ação é automática, porém algumas de modo reativo e outras de modo proativo.</p><p>No modo reativo, como o nome sugere, as ações acontecem de acordo com reações a limiares</p><p>ou regras estabelecidas, que podem ser a carga de trabalho ou a utilização de recursos,</p><p>adaptando-se às mudanças necessárias. Amazon EC2, Microsoft Azure e Google Cloud adotam</p><p>esse método de escalonamento automático.</p><p>Os limiares do modo reativo também diferem, em estáticos ou dinâmicos, sendo o primeiro mais</p><p>usado. O modo estático compara as métricas e aciona o autoscaling quando o limiar é atingido.</p><p>Por exemplo, se o consumo de uma CPU atingir 80% durante cinco minutos, aumente os</p><p>recursos. O dinâmico opera de acordo com a demanda.</p><p>O modo proativo necessita adotar técnicas de predição que antecipem demandas futuras e</p><p>sirvam para o acionamento do autoscaling com base nessas informações. Uma abordagem</p><p>usada é a de análise de séries temporais para identi�car padrões de repetição, que estima</p><p>recursos necessários para lidar com a carga de trabalho antes que a demanda aconteça.</p><p>A abordagem proativa conta com a ajuda de técnicas, como média móvel (analisa os dados</p><p>obtendo a média dos últimos períodos e projetando o último valor médio no futuro), auto-</p><p>regressão (classi�cação que prevê um número ao invés de uma categoria) e aprendizagem de</p><p>máquina (na qual o sistema analisa uma série de dados e deduz o conhecimento que será usado</p><p>posteriormente).</p><p>Em resumo, o escalonamento automático pode ser reativo do tipo estático ou dinâmico ou</p><p>proativo. Estático compara métricas e é acionado de acordo com limiares, dinâmico conforme</p><p>demanda e o proativo que, baseado em inteligência arti�cial, prevê tráfegos semanais e até</p><p>diários para de�nir o número de instâncias necessárias para cada realidade.</p><p>Outra possibilidade é o dimensionamento automático agendado, que é utilizado quando se sabe</p><p>exatamente quando há a necessidade de escalonamento, pré-de�nindo o momento e o número</p><p>de instâncias proporcionais ao evento.</p><p>_____</p><p>Exempli�cando</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Embora os processos de escalonamento automático sejam uma realidade na maioria das</p><p>grandes empresas, nem sempre é possível evitar problemas de congestionamento de tráfego.</p><p>Um exemplo aconteceu na morte do cantor Michael Jackson, em 2009, quando a procura por seu</p><p>nome derrubou o Google e o Twitter. A procura foi tanta que a ferramenta de buscas reconheceu</p><p>o pico de usuários como um ataque hacker e bloqueou as buscas até conseguir reparar o</p><p>problema.</p><p>Ferramentas de escalonamento automático</p><p>O PaaS da Amazon, o Elastic Compute Cloud (Amazon EC2) usa um o Amazon Auto Scaling para</p><p>oferecer computação escalável, eliminando a necessidade de investir inicialmente em hardware</p><p>e oferecendo uma plataforma para desenvolvimento e implantação de aplicativos com rapidez.</p><p>Através do Amazon Auto Scaling as disponibilidades da aplicação são mantidas e pode-se fazer</p><p>adição e remoção de instâncias automaticamente de acordo com condições prede�nidas.</p><p>Podendo também usar os recursos de escalabilidade dinâmica que respondem às mudanças de</p><p>acordo com a demanda ou escalabilidade preditiva, na qual é possível agendar o número certo</p><p>de instâncias com base na demanda prevista (AWS..., 2021).</p><p>Outro exemplo é o Autoescala do Azure. O dimensionamento automático do Azure ajuda no</p><p>desempenho das aplicações de acordo com a demanda. O escalonamento pode ser de�nido por</p><p>métricas personalizadas, com autoescala agendada, pagando apenas pelas máquinas virtuais</p><p>que estão sendo usadas, além de monitorar as métricas-chave de desempenho e alertá-lo</p><p>(AZURE, 2021).</p><p>O Heroku usa um recurso de containers, o Dyno, para executar e dimensionar aplicativos. Com</p><p>base nos requisitos dos usuários os aplicativos são escalonados para aumentar um número</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>especí�co de Dynos. O uso dos containers facilita o gerenciamento de tamanho, tipo e número</p><p>de dinamômetro.</p><p>O Google Cloud Platform usa o Cloud Monitoring para monitorar métricas dos grupos de</p><p>instâncias do Compute Engine. São métricas personalizadas para escalonar o grupo de</p><p>instâncias de acordo com os requisitos do usuário.</p><p>O Openshift usa um complemento, o cluster-autoscaler, para redimensionar os pools (recurso de</p><p>expansão para um cluster) com base nas necessidades de dimensionamento de suas cargas de</p><p>trabalho programadas. Ele usa Pods pendentes para escalonamento vertical e percebe os nós</p><p>que estão subutilizados para redução de nós de trabalho.</p><p>O orquestrador de containers Kubernetes, por sua vez, usa vários auto escaladores. Para lidar</p><p>com o escalonamento automático dos aplicativos temos o horizontal pod autoescaler (HPA) e</p><p>vertical pod autoscaler (VPA). Ou seja, caso tenha um micro serviço implantado em um Cluster</p><p>Kubernetes e precise escalonar, o HPA e VPA são as melhores opções.</p><p>O HPA faz o escalonamento adicionando pods (grupo de um ou mais containers), mas essa ação</p><p>não interfere na disponibilidade dos pods já em execução. Esse tipo de escalonamento é mais</p><p>e�ciente para trabalhar com grandes clusters.</p><p>O VPA expande-se alocando mais recursos ao número existente de pods. Esse recurso substitui</p><p>os pods atuais, o que pode ocasionar tempo de inatividade. Ainda está em estágio de maturação,</p><p>se comparado ao HPA.</p><p>Caso precise escalonar o</p><p>namespace,</p><p>para segregar processos em ambientes isolados para trabalhar de forma independente</p><p>algumas aplicações especí�cas. Isso é feito através de pacotes chamados de contêineres.</p><p>A ferramenta tem suas próprias aplicações, bibliotecas e itens de con�guração.</p><p>Zabbix ou Nagios: ferramentas de software de monitoramento de código aberto que</p><p>possibilitam o feedback.</p><p>_____</p><p>Exempli�cando</p><p>Um exemplo de ferramenta fácil de usar e de integrar com outras tecnologias é o Git, que conta</p><p>com suporte ao controle de versão, aplicações de integração e gerenciamento de código fonte.</p><p>Com o uso do Github, um serviço web de hospedagem de arquivos, você tem dezenas de</p><p>bibliotecas, frameworks e projetos, que pode acompanhar em suas versões.</p><p>O Git é um exemplo de DVCS, um servidor de repositório central que contém todos os arquivos</p><p>do projeto. A partir do repositório principal, pode-se selecionar em qual versão do repositório</p><p>trabalharemos em um determinado momento — essa operação é conhecida como “check-out”.</p><p>No entanto, os desenvolvedores não fazem check-out de arquivos individuais do repositório. Em</p><p>vez disso, todo o projeto é veri�cado, permitindo que o desenvolvedor trabalhe no conjunto</p><p>completo de arquivos, em vez de apenas em arquivos individuais.</p><p>Como surgiu tudo isso?</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Damon Edwards, cofundador da Rundeck, popular aplicação Java de código aberto, narra, no</p><p>vídeo The History of DevOps, disponível no YouTube, um panorama geral dos eventos que</p><p>destacam os fatores motivadores que originaram a cultura DevOps.</p><p>Segundo Edwards (2012), Patrick Debois, consultor de TI entusiasta pelas técnicas Agile,</p><p>observou, enquanto fazia um trabalho para o governo belga, que havia vários con�itos entre</p><p>desenvolvedores e administradores de sistema.</p><p>Em agosto de 2008, Debois assistiu a uma palestra numa conferência de Toronto sobre</p><p>infraestrutura ágil, ministrada por Andrew Shafer. Após a palestra, Debois e Shafer tiveram uma</p><p>longa conversa, que originou o Grupo de Administração de Sistemas Agile.</p><p>Em junho de 2009, na conferência O'Reilly Velocity 09, John Allspaw e Paul Hammond</p><p>apresentaram um estudo intitulado 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr. Na</p><p>palestra, provaram como o trabalho integrado entre as equipes de desenvolvimento e operações</p><p>mostrou-se e�caz em termos de agilidade e escalabilidade.</p><p>Patrick Debois assistiu à palestra remotamente e, ao lamentar o fato de não poder ter</p><p>comparecido, Allspaw e Hammond sugeriram que ele criasse um próprio evento para discutir os</p><p>processos ágeis.</p><p>Eis que, em outubro de 2009, Debois organizou um evento e o intitulou de DevOps Day (pegando</p><p>as três primeiras letras de “desenvolvimento” e “operações” e acrescentando a palavra “dias”).</p><p>Após a convenção, a discussão foi para o Twitter com a #DevOps. O movimento é conhecido</p><p>como DevOps desde então.</p><p>Debois, no entanto, não defendeu um manifesto DevOps, mas sugeriu que os pro�ssionais se</p><p>baseassem no Manifesto Ágil (uma declaração de valores e princípios, determinados por 17</p><p>pro�ssionais em 2001, com o intuito de sistematizar métodos ágeis no desenvolvimento de</p><p>software). Todavia, enquanto grande parte da energia DevOps parece vir de suas raízes Agile, o</p><p>lado intelectual do movimento está mais enraizado no Lean.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O Lean e o Agile são focados nas pessoas primeiro; depois, nos sistemas, e intensamente em</p><p>treinamento cruzado ou trabalho em equipes multifuncionais. Eles também enfatizam a melhoria</p><p>contínua (kaizen) por meio de abordagens como retrospectivas (CONTRIBUIDOR, 2015).</p><p>Transformação e mindset digital</p><p>Quando falamos de transformação digital, logo associamos às invenções digitais que surgiram e</p><p>evoluíram para facilitar a nossa vida. Muitas vezes, nem paramos para pensar como era antes do</p><p>digital, mas está implícito como a era digital modi�cou a nossa sociedade e nossas interações e</p><p>criou uma cultura voltada para a adequação a essas tecnologias.</p><p>Então, ao apontarmos as transformações digitais, não podemos simplesmente citar a</p><p>infraestrutura, a tecnologia e os aplicativos de TI, é preciso que se fale também de pessoas e do</p><p>impacto que essa transformação tem na vida delas.</p><p>Se a cultura digital mudou os padrões de conduta da sociedade, é natural que se tenha uma outra</p><p>mentalidade que seja capaz de integrar a tecnologia em seu cotidiano e extrair valor. Nos</p><p>processos de desenvolvimento de software, é necessário que se tenha uma mudança de</p><p>mentalidade para que as organizações criem e implementem estratégias focadas nas</p><p>transformações digitais.</p><p>O primeiro impedimento que se apresenta à transformação digital é a resistência em adotar</p><p>práticas tradicionais que eram sucesso em organizações no período pré-internet. Não se pode</p><p>usar as mesmas ferramentas e esperar resultados diferentes. Se antes da era digital havia um</p><p>modelo de produção linear em que cada colaborador era responsável por cumprir bem</p><p>determinada tarefa e passá-la adiante para a continuidade do processo, com a tecnologia esse</p><p>pensamento linear deixa de existir.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O mindset digital precisa conhecer as tecnologias que se consolidaram com o digital e saber</p><p>usá-la, compreendendo suas abordagens comportamentais e projetando possiblidades mais</p><p>centradas em conexões. Dentre as tecnologias digitais que merecem destaque, temos: mídias</p><p>sociais, Big Data, Mobilidade e Computação Responsiva, Cloud e Inteligência Arti�cial.</p><p>Per�l do pro�ssional DevOps</p><p>Num artigo intitulado As 5 chaves para uma mentalidade digital, a revista Forbes reforça que a</p><p>verdadeira liderança digital requer uma mentalidade totalmente nova. Com base em conversas</p><p>com executivos e análise de casos, traça o per�l da mentalidade digital (IESE BUSINESS</p><p>SCHOOL, 2014).</p><p>As cinco chaves para uma mentalidade digital, segundo a Revista Forbes, são:</p><p>1. Fornecer visão e capacitação</p><p>É importante que o líder de�na a visão de como a empresa espera evoluir na transformação</p><p>digital, promovendo um ambiente organizacional, em que os funcionários se sintam seguros para</p><p>experimentar suas ideias e os aprendizados de suas experimentações são sistematicamente</p><p>capturados, analisados e postos em prática.</p><p>2. Descentralizar o poder hierárquico, tornando-se “arquiteto de escolha”</p><p>Descentralizar o poder na tomada de decisões não signi�ca deixar de estar no comando, mas, ao</p><p>invés de se ater a regras rígidas, os líderes devem procurar in�uenciar mais os resultados por</p><p>meio da maneira como elaboram e apresentam as escolhas aos mais adequados para tomar as</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>decisões e realizar as tarefas, ou seja, as escolhas são tomadas a partir da interação com a</p><p>equipe.</p><p>3. Sustentar, mas interromper</p><p>Mesmo com uma abordagem nova, o líder deve sustentar algumas práticas antigas que trazem a</p><p>sensação de estabilidade e ajudam os funcionários a lidar com a incerteza à medida que</p><p>começam a desenvolver novas habilidades e capacidades. As novas práticas devem ser</p><p>protegidas e valorizadas e adicionadas aos poucos, até que se tenha o cenário ideal.</p><p>4. Con�ar nos dados, mas também na intuição</p><p>Para ajudar na tomada de decisão, os dados são importantes, porém uma mentalidade digital</p><p>não exclui o julgamento e a intuição. Em ambientes que mudam rapidamente, os dados não são</p><p>muito con�áveis. Muitas vezes, é preciso con�ar na intuição, ajudando os líderes a formular</p><p>hipóteses e de�nir novas premissas.</p><p>5. Seja cético, mas tenha a mente aberta</p><p>O líder deve incentivar a experimentação. Mesmo quando não descon�ar de uma prática ou de</p><p>uma nova tendência digital que pode não funcionar para a sua organização, permita-se às</p><p>experiências e engaje um exercício de criação ativa de sentidos.</p><p>_____</p><p>Re�ita</p><p>Numa abordagem mindset digital, como um líder deveria lidar com o uso das mídias sociais em</p><p>ambiente de trabalho? Leve em consideração que a empresa tem políticas de segurança e deve</p><p>se pautar na redução de riscos, mas também gerar valor para ela. Como o líder deve conduzir</p><p>essa questão?</p><p>_____</p><p>Analisando a mudança de mindset,</p><p>número de nós de trabalho em um cluster Kubernetes, o autoescalador</p><p>de cluster (CA) é o mais indicado, pois faz o escalonamento identi�cando falhas, mas, se</p><p>precisar dimensionar complementos do Kubernetes, o autoescalador é o Addon Resizer</p><p>(ICHI.PRO, 2020).</p><p>Nesta aula, vimos como o Cloud Computing pode ajudar no desenvolvimento ágil de aplicativos.</p><p>Percebemos que as características dessa abordagem seguem preceitos similares da cultura</p><p>DevOps e que o mindset digital impulsiona a sua prática. Conhecemos as três classes de</p><p>serviços em nuvens: IaaS, PaaS e Iass, concentrando-nos na Plataforma como Serviços (PaaS).</p><p>Vimos como uma infraestrutura PaaS pode contribuir para o desenvolvimento, teste e</p><p>implementação de aplicações e exploramos uma das suas maiores características: a</p><p>elasticidade e a escalabilidade.</p><p>Fomos apresentados às principais plataformas de PaaS do mercado de desenvolvimento de</p><p>softwares e às suas ferramentas de escalonamento automático. Com isso, encerramos a</p><p>unidade, desejando que você faça bom uso deste material em seus estudos.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Para o problema em questão, é necessário compreender que a plataforma com serviço (PaaS)</p><p>Azure fornece uma gama de ferramentas capazes de tratar a aplicação em todo o ciclo de</p><p>desenvolvimento.</p><p>Uma solução é dar deploy dos serviços utilizando containers com o Docker, assim será possível</p><p>separar os serviços e escalonar os containers de forma isolada e individual. Para o</p><p>gerenciamento, existe um recurso de orquestração Kubernetes, o Azure Kubernetes Service</p><p>(AKS), que trabalhará com API gateway e o gerenciamento dos containers da aplicação.</p><p>A partir do momento em que é feito um merge, são rodados testes automatizados que</p><p>monitoram o status da aplicação. As aplicações passam a ser atualizadas de acordo com</p><p>métricas pré-estabelecidas. Após tudo checado e aprovado, é realizado o deploy em vários</p><p>serviços.</p><p>Além do dimensionamento, é feita a análise de cada container e as requisições recebidas (uso de</p><p>memória, CPU), redirecionando as requisições para containers vazios, distribuindo a carga. Caso</p><p>necessário, são feitas replicações dos containers para atender à demanda em momentos de</p><p>aumento de pico.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Videoaula: resumo da unidade</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com o resumo da unidade.</p><p>Referências</p><p>APP Engine. Google Cloud, [s. d.]. Disponível em: https://cloud.google.com/appengine/. Acesso</p><p>em: 15 dez. 2021.</p><p>AWS Auto Scaling: escalabilidade de aplicativos para otimizar desempenho e custos. AWS, 2021.</p><p>Disponível em: https://amzn.to/3guGsSs. Acesso em:15 dez. 2021.</p><p>AZURE. Microsoft, 2021. Disponível em: https://bit.ly/3DgUReJ. Acesso em: 15 dez. 2021.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>BUYYA, R.; BROBERG, J.; GOSCINSKI, A. Cloud Computing – Principles and Paradigms. 1. Ed. New</p><p>Jersey, U.S.: John Wiley & Sons, Inc., 2011. 664p</p><p>DIEDRICH, C. Coleta de métricas Docker Swarm. 2017. Disponível em: https://bit.ly/3jhzwtD.</p><p>Acesso em: 15 dez. 2021.</p><p>EVEO. Saiba tudo sobre o Red Hat OpenShift e a tecnologia de Containers. 2017. Disponível em:</p><p>https://bit.ly/3sMoRu8. Acesso em: 15 dez. 2021.</p><p>FREEMAN, E. DevOps para Leigos. Rio de Janeiro: Alta Books, 2021. 320 p.</p><p>FREITAS, R. Tutorial Docker EE- Aprenda o passo a passo para começar a testar hoje mesmo.</p><p>Vertigo. 2018. Disponível em: https://bit.ly/3gy10cZ. Acesso em: 15 dez. 2021.</p><p>GORDON, D. Cinco estratégias de instrumentação para arquitetar aplicações em containers.</p><p>RedHat.com, 2018. Disponível em: https://red.ht/3jfP2WU. Acesso em: 15 dez. 2021.</p><p>HEROKU. 2021. Disponível em: https://bit.ly/3Di3sOe. Acesso em:15 dez. 2021.</p><p>ICHI.PRO (ed.). Escalonamento automático no Kubernetes: opções, recursos e casos de uso.</p><p>opções, recursos e casos de uso. 2020. Disponível em: https://bit.ly/3gzzH1F. Acesso em: 15</p><p>dez. 2021.</p><p>JARDIM, S. B. Autodimensionamento Proativo para Elasticidade Assertiva de Funções de Redes</p><p>Virtuais em Cadeias de Serviço. 2020. 104 p. Tese (Doutorado) - Programa de Pós-Graduação em</p><p>Sistemas e Computação do Departamento de Informática e Matemática Aplicada da</p><p>Universidade Federal do Rio Grande do Norte. Natal, 2020.</p><p>KOLBE JÚNIOR, A. Computação em nuvens. Curitiba: Contentus, 2020. 98 p.</p><p>MAZMANOV, D. Monitoramento de infraestrutura e microsserviços com o Elastic Observability.</p><p>2020. Disponível em: https://bit.ly/3kiyjBK. Acesso em:15 dez. 2021.</p><p>NETDATA (ed.). Monitoramento de contêineres com Netdata. 2021. Disponível em:</p><p>https://bit.ly/3sLfydU. Acesso em: 15 dez. 2021.</p><p>PEDROZA, P. H. C.; NOGUEIRA, T. Computação em Nuvem. Unicamp. Campinas, 2011. Disponível</p><p>em: https://bit.ly/2Wmn0A8. Acesso em: 15 dez. 2021.</p><p>RED Hat OpenShift. Red Hat, 2021. Disponível em: https://red.ht/2XZ9tzm. Acesso em: 15 dez.</p><p>2021.</p><p>REDHAT. O que é orquestração de containers? C2021. Disponível em: https://red.ht/2Wnso6f.</p><p>Acesso em: 15 dez. 2021.</p><p>RODRIGUES, G. C.; GALDINO, L. R.; NETO, J. M. F. Aplicação da computação em nuvem em</p><p>pequenas e médias empresas. Mogi Guaçu, Revista Prospectus, v. 1, n. 1, p. 87-116, 2019.</p><p>VERAS, M. Computação em Nuvem: Nova Arquitetura de TI. Rio de Janeiro, Brasport, 2015. 167 p.</p><p>VITALINO, J. F. N.; CASTRO, M. A. N. Descomplicando o Docker. Rio de Janeiro: Brasport, 2016.</p><p>152 p.</p><p>Aula 4</p><p>Roteiro de Aula Prática</p><p>Roteiro de Aula Prática</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula práitca!</p><p>,</p><p>Unidade 4</p><p>Testes, segurança e dashboard para infraestrutura ágil</p><p>Aula 1</p><p>Testes aplicando a infraestrutura ágil</p><p>Introdução da unidade</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/manual3.pdf</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/U3.pdf</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Objetivos da Unidade</p><p>Ao �nal desta Unidade, você será capaz de:</p><p>identi�car os testes, segurança e visualização com foco em infraestrutura ágil;</p><p>aplicar testes de infraestrutura ágil;</p><p>utilizar ferramentas de visualização para Dashboards.</p><p>Olá, estudante! Boas-vindas!</p><p>Em todo o processo desse mundo DevOps, você já deve ter percebido que a palavra de ordem é</p><p>velocidade. A ideia é sempre automatizar tudo quanto for possível e melhorar a velocidade das</p><p>entregas, mas a velocidade alta tem um custo.</p><p>Como as implantações são exponenciais, a quantidade de bugs adicionados também, não por</p><p>falta de testes em si, mas por questões estatísticas. Se antes do DevOps você tinha uma</p><p>implantação por semana, e agora você tem 10 por dia, querendo ou não, os bugs virão em maior</p><p>quantidade.</p><p>Dito isso, você pode pensar, agora, que basta testar melhor o código antes de ir para dentro da</p><p>esteira DevOps. De certa forma, está correto, mas não é só isso: devemos encontrar um modo</p><p>“DevOps” para isso.</p><p>Ao invés de contar com testadores manuais, que vão veri�car a e�cácia de tal funcionalidade</p><p>adicionada, os desenvolvedores, unidos ao time de operações, criam testes automatizados, à</p><p>medida que o código vai sendo desenvolvido e adicionado à esteira de CI/CD.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para isso, foram criadas ferramentas, técnicas e modelos que testam de maneira automatizada</p><p>boa parte do código.</p><p>Nesta unidade, vamos conhecê-los melhor e veremos como podem ajudar a encontrar melhor as</p><p>falhas de desenvolvimento durante</p><p>a execução das esteiras.</p><p>Vamos conhecer as técnicas, os tipos de testes e os modelos usados e sua importância dentro</p><p>do cenário DevOps atual.</p><p>Introdução da aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá entender a importância e a necessidade de realizar testes aplicados à</p><p>infraestrutura ágil.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>identi�car os tipos de testes de infraestrutura ágil;</p><p>analisar as ferramentas utilizadas nos testes de infraestrutura ágil;</p><p>discutir sobre a usabilidade dos testes de infraestrutura ágil.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Todo software construído necessita de uma forma de teste para garantir qualidade e para que</p><p>bugs facilmente detectáveis não passem para a produção. Veremos, então, técnicas e</p><p>ferramentas para automatizar e incluir diversos tipos de testes nas suas esteiras de entrega.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Imagine que você trabalha em uma empresa que tem di�culdades para integrar todo o ambiente</p><p>de desenvolvimento ao de qualidade, além de dispor de requisitos mal desenhados, que resultam</p><p>em funcionalidades diferentes daquelas que o usuário requisitou, além de diversas confusões</p><p>entre os analistas de requisitos, os desenvolvedores e os testadores.</p><p>Como melhorar esses problemas com as ferramentas e técnicas estudadas?</p><p>É muito importante para o pro�ssional de DevOps entender como funciona a área de</p><p>desenvolvimento e testes, e como isso pode afetar seu trabalho, lembrando que a cultura DevOps</p><p>é uma cultura de integração. O bom pro�ssional de operações deve entender muito bem sobre</p><p>desenvolvimento e o desenvolvedor deve conhecer muito bem sobre operações, criando um</p><p>ambiente integrado e coeso.</p><p>Tenha certeza que conhecer bem as ferramentas e técnicas de desenvolvimento e testes ágeis</p><p>ajudará você no seu dia a dia como pro�ssional da área.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Conceituando</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Programas são instruções que um programador escreve para que uma máquina execute.</p><p>Independente de qual linguagem seja usada para isso, é inevitável que ocorram falhas nessa</p><p>programação, por um comportamento não previsto pelo programador ao escrever o código ou</p><p>mesmo uma falha desconhecida de comportamento da aplicação.</p><p>Por isso, desde o início da programação de softwares, os desenvolvedores usam algum tipo de</p><p>teste para veri�car o comportamento do seu código.</p><p>Geralmente, esses testes eram feitos de forma manual, por equipes responsáveis por testar</p><p>falhas e simular problemas antes que o programa fosse liberado para a produção.</p><p>Porém, com o advento dos métodos ágeis de desenvolvimento, houve uma mudança na</p><p>abordagem de construção dos testes e de sua aplicação.</p><p>Essas metodologias, como estudamos anteriormente, culminaram também no desenvolvimento</p><p>da cultura DevOps, que tem como premissa uma velocidade maior no desenvolvimento de</p><p>infraestrutura para se aliar às metodologias ágeis de desenvolvimento de software.</p><p>Como uma das bases do DevOps é a automação, não é coerente manter testes apenas manuais,</p><p>atrasando as entregas das versões da aplicação em produção.</p><p>Foi assim que surgiram métodos, ferramentas e técnicas para automatizar os testes e</p><p>possibilitar que sejam integrados em esteiras de entrega de CI/CD.</p><p>Vamos ver como podemos criar testes, quais tipos de testes são usados normalmente e como</p><p>con�gurar ferramentas para automatizar todo esse processo.</p><p>Principais tipo de testes: testes unitários e testes de integração</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Teste unitário</p><p>Este teste é o mais básico que se pode criar em uma aplicação, e diz respeito principalmente à</p><p>funcionalidade que se está desenvolvendo. Pode ser um método ou até uma classe toda, o</p><p>importante aqui é passar valores diferentes para essa unidade e testar se o retorno é o</p><p>esperado.</p><p>É o desenvolvedor quem de�ne o que é uma unidade dentro do sistema, mas o importante é que</p><p>ela não seja muito grande, para evitar a ine�cácia do teste.</p><p>Por ser um teste pequeno, geralmente esse é o tipo mais encontrado nos sistemas. Hoje,</p><p>existem diversas ferramentas para ajudar na sua criação.</p><p>O foco do teste unitário é testar uma função especí�ca (ANICHE, 2014). Mesmo que necessite</p><p>acessar informações de banco de dados, as ferramentas conseguem criar dados falsos para os</p><p>testes, para que um problema de acesso ao dado não os afete.</p><p>Se a classe possui seu teste unitário, ele é conhecido como um código coberto. O índice de</p><p>cobertura de um código é a quantidade de testes existentes pela quantidade de classes</p><p>disponíveis no sistema.</p><p>Teste de integração</p><p>Nos testes de integração, o foco é nas relações das classes em si, as que já existem no sistema</p><p>e as que estão entrando (PRESSMAN; MAXIM, 2016). Por exemplo, se você está desenvolvendo</p><p>uma nova funcionalidade que envia e-mail aos clientes, se determinado evento ocorrer, todas as</p><p>classes envolvidas no seu código devem ser testadas, como cadastro do cliente, recuperação</p><p>desses dados em um banco de dados, o evento que dispara os e-mails, etc. Toda essa relação</p><p>deve funcionar com dados diferentes, simulando diversas situações.</p><p>Os testes de integração costumam ser bem mais demorados que os testes unitários, por isso</p><p>devem ser feitos com cuidado para não tomarem tempo demais.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Testes funcionais, testes de desempenho, testes de interface de usuário e</p><p>testes �m a �m</p><p>Testes funcionais</p><p>Nesses testes o foco é veri�car como o sistema se comporta quando dados inesperados forem</p><p>passados a ele (PRESSMAN; MAXIM, 2016), por exemplo, quando uma função que faz</p><p>multiplicação receber o valor “zero”, que é impossível de se calcular, ou quando um campo de e-</p><p>mail receber um endereço inválido.</p><p>A ideia é testar se aquela funcionalidade está preparada para tratar valores falsos ou incorretos e</p><p>saber qual será o seu comportamento, se vai falhar ou, projetado para tratar esses erros, qual</p><p>mensagem passará ao usuário caso ocorram.</p><p>Testes de desempenho</p><p>Chamado também de teste de stress e carga, serve para testar cargas altíssimas no sistema e</p><p>observar seu comportamento. Geralmente, é feito em sistemas web, para veri�car até onde o</p><p>sistema consegue receber e tratar requisições de maneira correta até que falhe.</p><p>Ferramentas testam o acesso simultâneo e determinam quantos acessos, sem falhar, aquele</p><p>sistema suporta. Depois, de posse desses dados, os analistas de infraestrutura podem</p><p>con�gurar corretamente um ambiente de produção com base nos acessos diários que recebem.</p><p>Testes de interface de usuário</p><p>Testes de Interface de Usuário (UI) são usados para testar a interface da aplicação que o usuário</p><p>tem acesso, simulando um acesso real, clicando em telas, preenchendo campos e veri�cando o</p><p>retorno da aplicação. É óbvio que, dentro do conceito DevOps, também existem ferramentas para</p><p>simular o acesso às telas, como se fosse um usuário.</p><p>Nesses testes, o foco é veri�car se alguma funcionalidade adicionada à interface está</p><p>funcionando conforme o esperado e se está trazendo os dados que foi programada para trazer.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Testes �m a �m</p><p>São também conhecidos como testes de sistema, ou end-to-end, que servem para testar o</p><p>sistema como um todo (PRESSMAN; MAXIM, 2016). Esse teste é muito custoso em tempo, e</p><p>geralmente é feito em mudanças críticas que alteram a versão da aplicação e que mudam o</p><p>funcionamento do sistema como um todo.</p><p>Time de qualidade do software</p><p>Importante comentar que, dentro das empresas, normalmente se tem um time de</p><p>desenvolvedores responsável por realizar essa bateria de testes, ou veri�car se foram feitos</p><p>corretamente pelos outros desenvolvedores, para garantir que nenhum Bug facilmente detectável</p><p>passe despercebido e acabe sendo alertado pelo cliente, o que é péssimo para a imagem da</p><p>empresa, que mostra certo descuido no desenvolvimento.</p><p>Esse time é o QA, ou Quality Assurance, ou Qualidade do Software.</p><p>_____</p><p>Assimile</p><p>O time de Qualidade do código, ou QA (Quality Assurance) é um time de desenvolvedores</p><p>focados em entregar qualidade para o código, geralmente utilizando ferramentas que testam se</p><p>os requisitos foram atendidos ou não.</p><p>Também são responsáveis por garantir que o código não vai aceitar dados estranhos, e para isso</p><p>também usam de testes que simulam dados, que não deveriam jamais serem aceitos pelo</p><p>sistema, para veri�car seu comportamento.</p><p>Muitas vezes, sistemas são feitos para uma determinada função, mas caso aceitem dados</p><p>estranhos, podem causar um comportamento completamente errado e até travamentos, como</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>no caso de um sistema que faz a multiplicação de números aceitar receber o número zero, ou</p><p>aceitar letras ao invés de números, etc.</p><p>Desenvolvimento orientado a teste (TDD)</p><p>Dentro do desenvolvimento ágil, muita coisa mudou do método tradicional, e os testes também</p><p>não fugiram à regra. Hoje, técnicas avançadas de desenvolvimento voltadas a testes são usadas</p><p>para melhorar e até prever falhas em softwares.</p><p>As mais conhecidas e usadas são as TDD, do acrônimo, em inglês, Test Driven Development, ou</p><p>desenvolvimento dirigido a testes, e a BDD (Behavior Driven Development) ou desenvolvimento</p><p>dirigido a comportamento.</p><p>Essas técnicas de desenvolvimento são amplamente utilizadas no mercado e ambas têm um</p><p>foco diferente ao começar o desenvolvimento.</p><p>Podemos dizer que o TDD foi a primeira técnica de desenvolvimento focada exclusivamente em</p><p>testes, mas a ideia central aqui não é criar testes e, sim, como o próprio nome diz, orientar todo o</p><p>desenvolvimento de softwares por testes (ANICHE, 2014). Isso signi�ca que o processo de</p><p>criação do código passa a ser criar testes primeiro e, depois, criar o código em si. Isso pode</p><p>parecer impossível, mas faz sentido quando vemos casos reais de teste.</p><p>A técnica foi proposta por Beck (2010), no seu livro Tdd - Desenvolvimento Guiado Por Testes, e</p><p>trazia uma forma diferente de compreender como se desenvolve um software.</p><p>Antes das técnicas ágeis de desenvolvimento, um analista de negócio entenderia com o cliente o</p><p>que ele precisava, e transformaria isso em requisitos para a equipe de desenvolvimento, que</p><p>trabalharia para codi�car essa necessidade. Porém, esse método geralmente acabava</p><p>desenvolvendo um código que não era exatamente aquilo que o cliente tinha pedido e, em um</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>tempo relativamente grande para entrega. Imagine as diversas frustrações: quando você</p><p>precisava de uma funcionalidade, esperava meses e, quando concluída, não era nada do que</p><p>havia pedido.</p><p>Com o advento das técnicas ágeis, isso mudou muito e pequenas funcionalidades são</p><p>desenvolvidas e lançadas rapidamente, permitindo que o software evolua muito mais rápido e as</p><p>falhas sejam corrigidas dinamicamente. Então, o processo de criação de requisitos mudou</p><p>também para pequenas tarefas, e elas, por sua vez, vão se juntando para criar a funcionalidade</p><p>esperada.</p><p>Agora, imagine se essas tarefas pudessem ser criadas e, ao mesmo tempo, testadas.</p><p>Essa é a ideia por trás do TDD, começar o desenvolvimento pelos casos de testes (BECK, 2010),</p><p>implementando, a partir deles, os métodos, classes e objetos e, assim, ir avançando para chegar</p><p>ao nível de atendimento de todas as funcionalidades.</p><p>Mas, como podemos escrever testes antes de termos um código? Parece complicado, mas, na</p><p>verdade, é bem simples, focando os esforços nos requisitos, ou seja, no que o sistema tem que</p><p>fazer, antes de desenvolver o código propriamente dito.</p><p>Os passos do TDD são:</p><p>crie um teste que valide o requisito.</p><p>crie o código que passe no teste.</p><p>refatore o código, atualizando-o.</p><p>É importante mencionar que o TDD é uma técnica de desenvolvimento de software, portanto não</p><p>é obrigatória nem um pré-requisito para o DevOps em uma empresa.</p><p>_____</p><p>Re�ita</p><p>Você acha que todo pro�ssional que trabalha com DevOps deveria conhecer sobre testes, ou</p><p>deveria ser um conceito exclusivamente de desenvolvedores? Ainda nesse quesito, você acredita</p><p>que conhecer sobre técnicas e ferramentas de testes ajudará em quê na sua carreira?</p><p>Desenvolvimento orientado a comportamento (BDD)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O BDD é uma evolução do TDD, levando em conta uma série de problemas enfrentados pelos</p><p>desenvolvedores, proposto primeiramente por North (2006). O autor relata os problemas reais</p><p>enfrentados ao tentar usar a técnica do TDD.</p><p>Um dos grandes problemas enfrentados pelos desenvolvedores e o time de qualidade é que nem</p><p>sempre eles têm uma interação boa o su�ciente dentro dos projetos em TDD, pois os testes são</p><p>criados com base nos requisitos e são enviados para o time de desenvolvimento para criar o</p><p>código. E isso acabava gerando lacunas entre o que é testado e o que é desenvolvido.</p><p>Para resolver esse problema, North (2006) propõe uma melhor interação entre os requisitos e os</p><p>testes, e também uma forma padronizada de escrever os cenários de testes, com uma</p><p>linguagem especí�ca.</p><p>Essa linguagem e esse padrão possibilitaram um avanço para as ferramentas que automatizam</p><p>esse processo, já que, com uma forma única de escrever os cenários, podemos usar como</p><p>entrada para as ferramentas de criação de teste.</p><p>Além disso, essa linguagem sendo adotada dentro de todo o escopo do desenvolvimento, desde</p><p>o levantamento de requisitos, seu desenvolvimento, até seu controle de qualidade, elimina</p><p>algumas falhas na comunicação entre as equipes, como se fosse a união do DevOps com o QA</p><p>(Time de Qualidade). Assim, o analista de requisitos, os desenvolvedores e os testadores</p><p>conseguem falar a mesma língua quando as pessoas de tecnologia se dirigem às de negócio</p><p>(NORTH, 2006).</p><p>Foi proposta um jeito de descrever as funcionalidades da seguinte forma:</p><p>Funcionalidade: descrever o que a funcionalidade deve fazer.</p><p>Como: quem executa essa funcionalidade.</p><p>Eu quero: o que essa pessoa espera da funcionalidade.</p><p>De modo que: a descrição do resultado que se espera alcançar com a funcionalidade.</p><p>E um modelo de criação de cenários, chamado “given-when-then”, ou dado-quando-então, em</p><p>português. Dessa forma:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dado: contexto inicial X (“givens”).</p><p>E: mais itens do contexto.</p><p>Quando: Y ocorre.</p><p>Então: garanta Z resultado.</p><p>Vamos dar um exemplo para que �que mais claro:</p><p>Funcionalidade: abertura de conta corrente.</p><p>Como: gerente de banco.</p><p>Eu quero: cadastrar as informações do cliente.</p><p>Para: abrir uma conta bancária para ele.</p><p>Cenário 1 Cliente com dados corretos:</p><p>Dado que: o cliente deseja abrir uma conta.</p><p>E informou CPF correto.</p><p>E informou RG correto.</p><p>E informou endereço completo correto.</p><p>Quando: entrar com essas informações no cadastro.</p><p>Então: a conta deve ser criada com os dados dele.</p><p>Cenário 2 Cliente já se cadastrado no sistema:</p><p>Dado que: o cliente deseja abrir uma conta.</p><p>E Informou um CPF correto, mas existente no sistema.</p><p>Quando: entrar com essas informações no cadastro.</p><p>Então: não será cadastrado o cliente no sistema e o sistema deve avisar o cliente.</p><p>Depois que os cenários foram desenhados, o BDD funciona exatamente como no TDD, ou seja, a</p><p>partir dos cenários, desenham-se os testes que vão cumprir os cenários e, com os testes</p><p>funcionando, complementam-se as classes que vão cumprir os requisitos.</p><p>Ferramentas de automação de testes</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Como vimos, temos um padrão de escrever os requisitos e também os cenários, usando-os</p><p>como entrada. Ferramentas de automação foram desenvolvidas para auxiliar a criação dos</p><p>testes e das classes por eles executadas; vamos conhecer algumas delas.</p><p>Cucumber - é uma ferramenta de código aberto, criada para automatizar e auxiliar no BDD,</p><p>usando o conceito de escrita de funcionalidade e cenários, para criar testes e os esqueletos</p><p>das classes que serão criadas pelos desenvolvedores. Uma vantagem com o cucumber é a</p><p>possibilidade de escrever os cenários em diversos idiomas, até o Português Brasil.</p><p>Exemplo de um código escrito em PT-BR no cucumber:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Cenários do Cucumber. Fonte: elaborada pelo autor.</p><p>Ao descrever a funcionalidade, perceba que o cucumber já reconhece as palavras-chave</p><p>especiais por ele usadas para montar os testes.</p><p>Agora que a estrutura do teste foi montada, você deve criar a classe que irá executar a tarefa do</p><p>teste; ao rodar o cucumber init, ele traz um resumo de como devem ser implementados as</p><p>classes e métodos:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Classes Cucumber. Fonte: elaborada pelo autor.</p><p>JUnit – PyUnit – Jasmine - frameworkings criados para auxiliar na escrita e automação de</p><p>testes, JUnit para Java, PyUnit para Python e Jasmine para Javascript. Todos esses</p><p>frameworks trabalham no modelo BDD e auxiliam o desenvolvimento a partir da criação</p><p>dos testes, porém focados nas linguagens especí�cas.</p><p>Tricentis Tosca - ferramenta de testes de software de ponta a ponta. Seu diferencial é</p><p>possuir uma interface web para con�guração e programação automatizada dos testes.</p><p>Apache Jmeter - Neotys Neoload - ferramentas largamente usadas para realizar testes de</p><p>carga ou stress em aplicações web, possuem uma interface que permite con�gurar</p><p>periodicidade de testes, tamanho de cargas enviadas por determinado tempo e trazem</p><p>relatórios de carga. A Neoload é usada para testar APIs. Serve como teste de carga e stress</p><p>também, porém é especí�ca para testes usando Restful.</p><p>Selenium – katalon - ferramentas de testes de interface de usuário, usadas para</p><p>automatizar acessos pela interface, simulando usuários reais. Usadas principalmente para</p><p>veri�car se funcionalidades da interface estão retornando os dados esperados. Elas podem</p><p>acessar sistemas Web e clicar em diversos pontos da tela, simulando exatamente como</p><p>um usuário faria.</p><p>Além disso, também são usadas para fazer testes de stress e carga na interface do usuário.</p><p>Sonarqube - por �m, temos uma ferramenta de qualidade muito usada no mercado, capaz</p><p>de medir a quantidade de cobertura de um código, ou seja, a quantidade de testes</p><p>existentes pela quantidade de código existente. Isso é importante, pois a empresa pode</p><p>de�nir uma política de cobertura, por exemplo, acima de 80% para que o código prossiga</p><p>para outras etapas da esteira.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O Sonarqube consegue fazer isso, barrando o código fora de um percentual de cobertura</p><p>con�gurado, além de também possuir uma forma de detectar bugs, brechas conhecidas de</p><p>segurança, código duplicado, padrões incorretos e vulnerabilidades de segurança conhecidas,</p><p>como senhas em texto claro dentro do código, ou pacotes com código malicioso.</p><p>Ela é realmente um canivete suíço para as equipes de qualidade, testes e operações, possuindo</p><p>diversas ferramentas disponíveis para análise do código. Também possui uma interface grá�ca</p><p>na qual é possível ver os relatórios de cobertura, brechas de segurança, etc.</p><p>Sonarqube teste C. Fonte: elaborada pelo autor.</p><p>Já no teste da �gura, temos um código que detectou 2 bugs, 37 code-smells, apenas 13.6% de</p><p>cobertura de testes e mais de 26% de código duplicado, o que indica uma necessidade de</p><p>refatoração, melhorando a escrita do código para evitar duplicações.</p><p>_____</p><p>Exempli�cando</p><p>O levantamento de requisitos usando o BDD deve seguir uma estrutura de descrição de uma</p><p>funcionalidade; detalhamento do comportamento dessa funcionalidade através de cenários;</p><p>detalhamento de todos os cenários possíveis para aquela funcionalidade; mapeamento dos</p><p>cenários em classes de testes automatizados; implementação do código que resolve os testes</p><p>com sucesso; refatoração do código, tornando-o melhor.</p><p>_____</p><p>Vimos como os testes são importantes dentro do conceito do mundo DevOps e como ele se une</p><p>às automações e a todo o processo de desenvolvimento de software.</p><p>Também vimos como podemos utilizar ferramentas para criar e automatizar a criação e</p><p>execução desses testes, integrando com qualquer esteira de entrega de software.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Todos esses conceitos são importantes para que, além de entregarmos cada vez mais rápido,</p><p>possamos também entregar mais softwares de qualidade ao nosso cliente.</p><p>Saiba que, quanto mais dominar esse assunto, mais terá possibilidades de ser um pro�ssional</p><p>DevOps completo, integrando infraestrutura e testes de código em suas esteiras de entrega.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para resolver os casos apresentados, o ideal é começar a alterar a forma de desenvolver</p><p>softwares na empresa, utilizando uma técnica com foco nos testes como a BDD, integrando o</p><p>time de levantamento de requisitos com o time de desenvolvimento e de qualidade, todos</p><p>trabalhando com as mesmas técnicas e ferramentas.</p><p>Pode-se usar, por exemplo, um cucumber para levantamento dos requisitos e cenários com o</p><p>cliente, e a criação dos testes para o começo do desenvolvimento do código.</p><p>Ferramentas especí�cas da linguagem escolhida, como o JUnit para criação de testes unitários e</p><p>integrados, vão, depois, ser usadas para a criação das classes e objetos.</p><p>Deve-se utilizar testes de interface com uma ferramenta como o Selenium, para veri�car se as</p><p>alterações da interface estão corretas.</p><p>Deve-se con�gurar testes de stress na infraestrutura para testar se a aplicação vai suportar alta</p><p>carga de acessos e utilizar uma ferramenta, como o Sonarqube, para rastrear falhas no código,</p><p>brechas de segurança e veri�car a cobertura do código.</p><p>Por �m, deve-se con�gurar tudo isso para rodar dentro de uma ferramenta de CI, integrando tudo</p><p>de maneira prática e rápida dentro de uma esteira, para que, em caso de falhas nos testes, a</p><p>pipeline con�gurada não prossiga para o próximo estágio, evitando que código mal escrito acabe</p><p>sendo enviado para a produção.</p><p>Aula 2</p><p>Segurança e centralização de logs em ambientes de infraestrutura ágil</p><p>Introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar o conceito de segurança e centralização de logs em ambientes de</p><p>infraestrutura ágil.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>discutir a importância da segurança na infraestrutura ágil;</p><p>analisar o conceito de gerenciamento e centralização de logs;</p><p>identi�car os diferentes tipos de ataques hackers.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Em estudos anteriores, falamos de diversos conceitos relacionados ao DevOps, e o principal</p><p>deles está ligado à forma como entregamos softwares aos clientes. Focando em agilidade e</p><p>integração entre os que escrevem o seu código e os que mantêm sua infraestrutura.</p><p>Um assunto que se torna crítico dentro de qualquer ambiente de desenvolvimento é a segurança.</p><p>Nunca houve tantos ataques hackers como agora, e nunca se ouviu falar tanto em vazamento de</p><p>dados e falhas em sistemas críticos. Muitos negócios simplesmente faliram depois desses</p><p>ataques, ou �caram perto disso; outros tiveram perdas consideráveis de imagem.</p><p>Portanto, segurança não é mais um assunto de “SE”, mas “ONDE” aplicar. E isso tem tudo a ver</p><p>com o DevOps, inclusive por conta da agilidade pregada. O processo de segurança, tem que ser</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>adicionado em toda a entrega da aplicação, ou fatalmente haverá problemas após a sua</p><p>publicação em produção, podendo ser extremamente fatal à empresa e sua imagem.</p><p>Nesta aula, vamos ver os tipos de ataques comuns e algumas das ferramentas usadas pelo</p><p>processo de DevOps para mitigá-los. Veremos também, onde devem estar suas preocupações</p><p>quando o assunto for segurança.</p><p>Você trabalha para uma empresa que desenvolve código para aplicações web, e foi contratado</p><p>para averiguar toda a estrutura de pipelines DevOps da empresa. Ao veri�car, percebe que, em</p><p>nenhuma parte do código, existe segurança habilitada. Como você lidaria com esse problema?</p><p>Descreva um plano</p><p>de ação para melhorar a segurança dos pipelines de entrega.</p><p>Muitos pro�ssionais são descuidados no quesito segurança, ou por achar que é um exagero, ou</p><p>por achar que apenas pro�ssionais especí�cos devem cuidar da segurança, o que é um erro, pois</p><p>leva as empresas a situações de risco desnecessárias, por negligência ou imperícia.</p><p>Você, como pro�ssional DevOps, deve ter em mente que a segurança precisa permear todo o</p><p>ciclo de desenvolvimento do software, tornando o ambiente e a aplicação menos suscetível a</p><p>ataques e, você, um pro�ssional mais preparado para o mercado.</p><p>Leve a sério a segurança, e você já sairá à frente de muitos pro�ssionais, abrindo portas para</p><p>áreas muito mais abrangentes.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Ataques Hackers</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Ataques Hackers têm se intensi�cado e inovado, e muitos tipos de ataques têm se tornado</p><p>padrões. Estar preparado para eles é um dos itens mais importantes atualmente.</p><p>Vamos tratar de alguns dos tipos desses ataques e ver como negligenciar essa área pode custar</p><p>muito caro.</p><p>Os anos de 2020 e 2021 foram anos marcados por dois fenômenos: o primeiro, uma pandemia</p><p>mundial, causada por um vírus que fez com que o mundo inteiro parasse sua economia, e</p><p>milhões de vidas fossem perdidas; o segundo, que, de certa forma, foi causado pelo primeiro, foi</p><p>a pandemia de ataques cibernéticos no mundo, de acordo com pesquisa Canalys (ARBULU,</p><p>2020). Durante a pandemia da Covid-19, o número de ataques foi maior que os últimos 15 anos</p><p>somados.</p><p>Alguns desses ataques causaram enormes prejuízos, alguns até causaram problemas</p><p>diplomáticos entre países.</p><p>Principais tipos de ataques</p><p>DDoS - do acrônimo inglês (Distributed Deny of Service) ou, em português, ataque de</p><p>negação de serviço. É basicamente sobrecarregar o sistema com tantas requisições que</p><p>ele não consiga mais responder a requisições legítimas dos usuários, fazendo com que o</p><p>sistema �que fora do ar (CRUZ et al., 2020).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Scanner de portas - esse ataque basicamente procura por portas conhecidas, que</p><p>normalmente são usadas por servidores, para, a partir delas, procurar vulnerabilidades e</p><p>explorá-las (DOLÁCIO, 2021). Portas preferenciais desse tipo de ataque são a 80/443,</p><p>portas usadas para servir páginas na internet e porta 22, usadas por serviço de SSH, que</p><p>provê uma forma de conexão remota a administradores dos servidores.</p><p>Ransomware ou Sequestro de dados - um dos ataques mais difundidos ultimamente, que</p><p>se trata de roubar e criptografar os dados da vítima, exigindo um pagamento para que seja</p><p>descriptografado (MORAIS, 2021). Grandes empresas, cada vez mais, têm sido vítimas</p><p>desse tipo de golpe cibernético.</p><p>Ataques de Força Bruta - esse ataque é semelhante ao ato de tentar forçar uma porta</p><p>trancada até que abra. Usando ferramentas especí�cas para testar diversas combinações</p><p>de usuário e senha, o atacante força até acertar a combinação.</p><p>Apesar de ser um ataque bem antigo e conhecido, muitas empresas ainda são prejudicadas por</p><p>não adotarem uma política de troca e complexidade de senhas. Um funcionário pode colocar</p><p>uma senha fraca, comprometendo toda a segurança da empresa.</p><p>Phishing - esse ataque é geralmente feito por e-mail e funciona tentando capturar dados</p><p>sigilosos dos usuários, utilizando “iscas” para que cliquem em links suspeitos sem se dar</p><p>conta, e passem informações ao atacante.</p><p>Clonagem de Aplicativo de Mensagens - outro ataque que tem se tornado corriqueiro é a</p><p>clonagem de aplicativos de mensagens. Atacantes entram em contato inventando uma</p><p>história para que o usuário passe o código de recuperação do aplicativo; a vítima, sem se</p><p>dar conta do golpe, passa o código e, a partir desse momento, o criminoso tem acesso às</p><p>mensagens do usuário e aos contatos da agenda, e começa a passar mensagens falsas</p><p>aos contatos, pedindo dinheiro emprestado ou, nos casos mais so�sticados, procurando</p><p>dados relevantes, como senhas e usuários de sistemas enviados pelo aplicativo.</p><p>Cryptojacking - outro ataque que tem causado muita dor de cabeça aos administradores de</p><p>sistemas é a mineração de criptomoedas em servidores sem consentimento. O ataque</p><p>funciona invadindo um computador ou servidor e instalando um software malicioso que</p><p>�ca utilizando o poder de computação (CPU) da máquina para minerar criptomoedas em</p><p>nome do atacante, degradando a performance e causando problemas para a aplicação</p><p>normal de resposta do servidor, já que está competindo com a aplicação maliciosa.</p><p>Keylogger e Screenlogger - outro bem conhecido já, é um programa malicioso que grava</p><p>tudo o que é digitado pelo usuário, fazendo com que o atacante tenha acesso às senhas e</p><p>usuários de acesso que a pessoa digita, o Keylogger. E tem a variante dele, que grava tudo</p><p>que o usuário vê na tela, o Screenlogger.</p><p>Cross-site Scripting (XSS) - forma de injetar códigos em páginas Web no servidor, utilizando</p><p>o navegador. Executando sequestros de cookies de sessão, keyloggers, redirecionamento</p><p>de páginas, etc.</p><p>Existem centenas de tipos e ataques conhecidos, além da constante criação de novos, por isso é</p><p>importante estar sempre atualizado e manter a segurança em todo o ciclo do desenvolvimento</p><p>de software.</p><p>_____</p><p>Assimile</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Defacement é uma técnica de alteração de estruturas de uma página Web, muito utilizadas por</p><p>hackers que conseguem invadir a parte administrativa da página, possibilitando que se coloque</p><p>informações que o site não possuía, esse tipo de ataque é vulgarmente conhecido como</p><p>pichação de sites, porque é semelhante ao ato de vandalizar um site, em lugar de um muro.</p><p>Geralmente, esse ataque tem cunho político ou ativista, com o intuito de ridicularizar a segurança</p><p>do site, ou deixar uma mensagem.</p><p>Ferramentas DevOps de segurança</p><p>Agora que vimos alguns dos principais ataques, vamos pensar como eles afetam esse ciclo de</p><p>desenvolvimento usando DevOps e quais ferramentas existem para nos ajudar a mitigar os</p><p>problemas de segurança.</p><p>Um problema comum que ocorre no desenvolvimento de software é o desenvolvedor só se</p><p>preocupar com a funcionalidade, desprezando o quesito segurança que, na mente de muitos</p><p>desenvolvedores, não é uma preocupação dele, mas de uma equipe especí�ca para isso.</p><p>Ledo engano, pois, a cada linha de comando inserida ao desenvolver um software, temos que</p><p>pensar como aquela funcionalidade pode estar criando uma brecha de segurança que pode</p><p>inviabilizar todo o projeto.</p><p>Por exemplo, falhas ao desenvolver uma página de login podem abrir brechas de XSS, permitindo</p><p>a um atacante executar código malicioso dentro de um site, ou até fazer login dentro do sistema</p><p>sem o acesso permitido.</p><p>Por tudo isso, hoje em dia, costuma-se utilizar o termo DevSecOps, que seria entender que a</p><p>segurança deve permear todo o ciclo de DevOps, em todas as suas etapas.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dentro do DevSecOps, as ferramentas usadas para segurança são chamadas Application</p><p>Security Testing (AST), ou Testes de segurança de aplicativos. Essas, por sua vez, são divididas</p><p>em diversas categorias, que dependem de onde estão sendo utilizadas e para qual �nalidade.</p><p>Pirâmide das Ferramentas de AST. Fonte: elaborada pelo autor.</p><p>Teste estático de segurança de aplicações (SAST)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Podemos dizer que esse tipo de aplicação testa a segurança conhecendo as informações sobre</p><p>o sistema, são tipos de testes chamados White Hat (Chapéu branco) ou Caixa Branca, que</p><p>testam a segurança internamente ao sistema, montando uma arquitetura a ser testada, e tem</p><p>acesso ao código fonte criado pelo desenvolvedor.</p><p>Como esses testes são especí�cos por linguagens de programação, cada uma delas vai possuir</p><p>uma ferramenta especí�ca. Citamos algumas:</p><p>.Net Security Guard, usada para .Net, C# e VB.Net.</p><p>Agnitio, usada para ASP, ASP.NET, C\#,</p><p>Java, Javascript, Perl, PHP, Python, Ruby, VB.NET, XML.</p><p>DevBug, usada para PHP.</p><p>GolangCI-Lint, usada para Golang.</p><p>Google CodeSearchDiggity, usada principalmente para identi�car possíveis brechas de XSS no</p><p>código.</p><p>Horusec, usada em Python(3.x), Ruby, Javascript, GoLang, .NetCore(3.x), Java, Kotlin, Terraform.</p><p>ParaSoft, usada em C, C++, Java, .NET.</p><p>Snyk, ferramenta que busca por problemas de segurança desde o código até a entrega.</p><p>Jfrog: Outra ferramenta que analisa todo o ciclo do pipeline.</p><p>Veracode, usada em Android, ASP.NET, C\#, C, C++, Classic ASP, COBOL, ColdFusion/Java, Go,</p><p>Groovy, iOS, Java, JavaScript, Perl, PhoneGap/Cordova, PHP, Python, React Native, RPG, Ruby on</p><p>Rails, Scala, Titanium, TypeScript, VB.NET, Visual Basic 6, Xamarin.</p><p>Teste de segurança de aplicativo dinâmico (DAST)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Já o teste dinâmico funciona com o chamado teste de caixa preta (Black box) ou Chapéu preto</p><p>(Black hat), já que não se tem o conhecimento prévio do sistema ou do código fonte. Elas</p><p>detectam vulnerabilidades de segurança de uma aplicação em execução, para veri�car respostas</p><p>de interfaces, solicitações, scripts, etc., procurando a possível injeção de dados, roubo de</p><p>sessões e autenticação.</p><p>Como ferramentas dessa classe, podemos citar:</p><p>Netsparker - um scanner de vulnerabilidade, apontando falhas em um dashboard interativo:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dashboard Netsparker. Fonte: elaborada pelo autor.</p><p>Acunetix Vulnerability Scanner - outro scanner bem utilizado que possui também um</p><p>dashboard interativo e pode ser incluído em pipelines de entrega.</p><p>Veracode Dynamic Analysis - ferramenta usada para web applications e também bem</p><p>integrada com pipelines Devops.</p><p>Rapid7 InsightAppSec - uma plataforma completa que tem uma junção de ferramentas; ela</p><p>procura mais de 95 vulnerabilidades diferentes que incluem cross-site scripting (XSS),</p><p>cross-site request forgery (XSRF) e injeção de SQL.</p><p>GitLab- ferramenta, na verdade, uma suíte de várias ferramentas, que possui desde um</p><p>sistema de controle de código, de criação de pipeline e também possui suporte para</p><p>scanners de vulnerabilidade SAST e DAST dentro dos pipelines de entrega e suportando</p><p>diversas linguagens de programação.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Relatório SAST em um pipeline. Fonte: elaborada pelo autor.</p><p>_____</p><p>Exempli�cando</p><p>Ao analisar um código com o Gitlab, recebemos a informação no relatório no �m do pipeline que</p><p>“Senhas de sessão não devem ser incluídas no arquivo de controle”. Você pode criar um controle</p><p>que não permita que a pipeline prossiga com essa con�guração, e isso fará com que o pipeline</p><p>falhe até que se corrija a falha que, no caso, é retirar a senha do arquivo de con�guração.</p><p>Análise de composição de software (SCA)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Todo software desenvolvido, atualmente, utiliza bibliotecas que não são por padrão criadas pelo</p><p>desenvolvedor. Usar itens que já foram criados auxilia na produtividade, já que não é necessário</p><p>�car quebrando a cabeça para inventar aquilo que já existe. Sabendo disso, entendemos também</p><p>que essas bibliotecas importadas para o código podem conter vulnerabilidades.</p><p>Para veri�car isso existem ferramentas do tipo SCA, que buscam dentro do código bibliotecas</p><p>importadas que possuem vulnerabilidades conhecidas e também veri�cam se estão em</p><p>conformidade com as licenças utilizadas na empresa.</p><p>Podemos citar algumas delas:</p><p>Whitesource - ferramenta muito utilizada para detectar vulnerabilidades em bibliotecas</p><p>open source, e se integra com facilidade em pipelines de entrega.</p><p>FOSSA - ferramenta de compliance de licenças e de detecção de vulnerabilidades em</p><p>bibliotecas.</p><p>Sonatype - um produto da Nexus, que tem um catálogo gigante de bibliotecas das mais</p><p>diversas linguagens de programação para detectar vulnerabilidades em bibliotecas</p><p>públicas.</p><p>BlackDuck - software de auditoria opensource e de busca de vulnerabilidades.</p><p>Na parte de infraestrutura, podemos citar algumas ferramentas que analisam vulnerabilidades</p><p>em imagens docker, por exemplo, como: Clair, Anchore e Dockscan.</p><p>Ou análise de código em terraform, como: Tfsec, DeepSource.</p><p>Varredura de segurança de banco de dados</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Essas ferramentas fazem uma varredura em banco de dados para veri�car falhas que podem</p><p>afetar a sua segurança, como versões desatualizadas, patches não aplicados, senhas fracas,</p><p>erros de con�guração, problemas com ACL (listas de controle de acesso), e muito mais.</p><p>Podemos citar:</p><p>Scuba - usado em diversos sistemas de banco de dados, analisa mais de 2.000 problemas</p><p>conhecidos de con�guração incorreta e vulnerabilidades.</p><p>MSSQL DataMask - usado para veri�car vulnerabilidades em Microsoft SQL servers.</p><p>BSQL Hacker - uma ferramenta para testar injeções de SQL e suas variações, ótima para</p><p>testar falhas de con�guração de acesso a banco de dados.</p><p>Oracle auditing tools - ferramenta usada nos bancos Oracle para veri�car ataques de senha</p><p>e usuário fracos, testes de con�gurações e vulnerabilidades.</p><p>MOBILE APPLICATION SECURITY TESTING (MAST)</p><p>Nessa categoria, encontram-se as ferramentas usadas para testar aplicações mobile, como, por</p><p>exemplo: Appknox, Synopsys, AppScan.</p><p>APPLICATION SECURITY TESTING AS A SERVICE (STAAS)</p><p>São consideradas ferramentas de testes de segurança “as a service”, como serviço, em</p><p>português, aquelas que disponibilizam ao cliente uma plataforma Web para testar a segurança</p><p>da aplicação, sem a necessidade de instalação dentro da infraestrutura da empresa.</p><p>Exemplos: Sonarqube, Spiratest.</p><p>INTERACTIVE APPLICATION SECURITY TESTING (IAST)</p><p>Na verdade, as ferramentas IAST são uma combinação entre os testes SAST e DAST, e muitas</p><p>ferramentas já mencionadas aqui possuem essa capacidade embutida de fazer ambos os testes,</p><p>portanto ferramentas IAST.</p><p>SECURITY INFORMATION AND EVENT MANAGEMENT (SIEM)</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Nesse quesito, temos ferramentas que procuram fazer correlações de logs de aplicações com</p><p>eventos de segurança; essas ferramentas são mais usadas para infraestrutura e monitoramento.</p><p>Podemos citar algumas: Solarwinds, Elastic SIEM, MacAfee Enterprise Security Manager,</p><p>Logpoint, Splunk.</p><p>PENETRATION TESTS</p><p>Testes de intrusão servem para medir e detectar vulnerabilidades quando a aplicação já está</p><p>funcionando, e pode ser importado no monitoramento, como um item adicional. Geralmente</p><p>esses testes são feitos determinando um período, quinzenalmente ou mensalmente, dependendo</p><p>de quanto se necessita testar a aplicação.</p><p>Algumas ferramentas desta categoria já foram citadas, pois também são capazes de fazer pen</p><p>tests, como: Netsparker, Acunetix, Core impact, Hackerone, Intruder.</p><p>WEB APPLICATION FIREWALL</p><p>São ferramentas que analisam tráfego de rede para determinar se permite ou bloqueia alguma</p><p>conexão.</p><p>Exemplos: Cloudfare, imperva, wallarm.</p><p>Alguns ataques e consequências</p><p>Hackers iranianos atacam o site do programa de bibliotecas do governo dos EUA - em 6 de</p><p>Janeiro de 2020, hackers iranianos atacaram o site do programa Bibliotecas de Depósitos</p><p>Federais dos Estados Unidos, causando um defacement, chamado também de “pichação”,</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>quando o atacante altera dados do site. No ataque em questão, foram alteradas páginas e</p><p>colocadas mensagens de apoio ao General Soleimani, morto em 3 de janeiro daquele ano</p><p>em um ataque dos EUA (BBC, 2020).</p><p>DDoS contra a Amazon - um ataque DDoS massivo contra a Amazon foi interceptado, e a</p><p>empresa fez um relatório do tamanho do ataque: foram 2,3 terabits por segundo (Tbps), e a</p><p>taxa de encaminhamento de pacotes de 293,1 Mbps. O ataque foi considerado o maior</p><p>ataque DDoS da história (JON PORTER, 2020).</p><p>Ataque a GoDaddy - o site GoDaddy é uma das maiores empresas de hospedagem do</p><p>mundo. Ocorreu um incidente de violação de dados, permitindo a um atacante invadir</p><p>credenciais expostas dos usuários do site. O grande problema foi a demora da GoDaddy</p><p>em descobrir a falha. O incidente ocorreu em 19 de outubro de 2019, mas só foi corrigida</p><p>no dia 23 de abril de 2020. Essa demora levou os cibercriminosos a vender</p><p>as credenciais</p><p>na Deepweb e lucrar durante o tempo que a violação �cou exposta (DAVEY WINDER, 2020).</p><p>Ransomware na W&T Offshore - a gigante do petróleo e gás teve um sequestro de 800GB</p><p>de dados con�denciais, como extratos de reconcialiação bancária, modelos de análise de</p><p>risco e relatórios de dívidas. Apesar de ocorrer uma negociação com os criminosos, foram</p><p>liberados 10GB desses dados na Deepweb (CYBLEINC, 2020).</p><p>Ransomware no banco BCR - um dos maiores ataques de Ransoware da história, hackers</p><p>sequestraram cerca de 11 milhões de dados de cartão de crédito do Banco da Costa Rica</p><p>(BCR), um banco estatal, mas que possui cerca de 140 mil clientes Americanos também.</p><p>Após o banco negar o vazamento, hackers compartilharam 240 números de cartão, com</p><p>datas de validade e CVV (código de veri�cação), para provar que estavam falando sério. O</p><p>ataque causou um prejuízo bilionário ao banco (ABRAMS, 2020).</p><p>Universidade paga $ 1,14 milhão - a Universidade São Francisco, da Califórnia, teve que</p><p>pagar mais de 1 milhão de dólares para criminosos enviarem uma chave de descriptogra�a,</p><p>depois que tiveram criptografados seus servidores que estavam trabalhando na pesquisa</p><p>da cura da COVID-19 (UCSF, 2020).</p><p>Ataques à infraestrutura de países - alguns ataques cibernéticos geraram não só prejuízos,</p><p>mas problemas na infraestrutura crítica, como nos ataques a seguir:</p><p>Ataque fecha oleoduto nos EUA - um ataque hacker parou um dos maiores oleodutos dos</p><p>EUA, que fornecem combustíveis para praticamente o país inteiro. Esse ataque levou a</p><p>atrasos e mudanças de vôos, gerou pânico de desabastecimento em pessoas, que saíram</p><p>para tentar comprar o restante de combustíveis nos postos. Isso levou à falta de</p><p>combustíveis em mais de 5 estados americanos, e fez disparar o preço ao maior, desde</p><p>2014 (STRACQUALURSI et al., 2020).</p><p>Tentativa de envenenamento da água na Flórida - um hacker invadiu o sistema de</p><p>abastecimento de água da Flórida e aumentou o nível de hidróxido de sódio e soda</p><p>cáustica para 100 vezes o nível normal. O operador percebeu a alteração e voltou aos níveis</p><p>normais, antes de causar algum problema maior, mas �cou clara a vulnerabilidade do</p><p>sistema (MARQUARDT; LEVENSON, 2021).</p><p>Os exemplos são inúmeros, mas já percebemos que o quesito segurança da informação não é</p><p>apenas um “adendo” ao desenvolvimento de software, mas é obrigatório.</p><p>Pro�ssionais dessa área serão cada vez mais requisitados para governos e empresas privadas.</p><p>Ter um pipeline DevOps con�gurado para levar a segurança a sério é uma obrigação de todos os</p><p>pro�ssionais de tecnologia nesse mundo extremamente conectado.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>_____</p><p>Re�ita</p><p>Pense em como um ataque dos quais você leu pode afetar a sua empresa ou sua cidade, estado</p><p>e país. Será que um código ao qual você não deu tanta atenção à segurança pode fazer com que</p><p>a empresa que trabalha venha a falir? Ou sua cidade �car sem abastecimento de água e</p><p>combustível? Qual impacto os ataques hackers terão no mundo daqui para frente?</p><p>_____</p><p>Vimos alguns tipos de ataques comuns na atualidade, e como devemos con�gurar nossas</p><p>pipelines para analisar nossa aplicação, desde as primeiras linhas de código até a entrega �nal</p><p>no servidor.</p><p>Para ser um pro�ssional completo, pense, questione: o que você está incluindo é seguro? Está</p><p>abrindo alguma brecha de segurança? Contém vulnerabilidades conhecidas? A versão está</p><p>atualizada com os patches de segurança? Como tornar meu código mais seguro à medida que o</p><p>desenvolvo. Esse tem que ser um trabalho em conjunto, entre desenvolvedores e pro�ssionais de</p><p>operações.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Em primeiro lugar, você deve começar a estruturar a base de segurança do código,</p><p>implementando alguma ferramenta de SAST para análise do código, escolhendo sempre aquela</p><p>que suporta a linguagem utilizada no código.</p><p>Depois, você deve implementar ferramentas de DAST para analisar vulnerabilidades da aplicação</p><p>já construída, e também uma de SCA, para procurar bibliotecas utilizadas de terceiros com</p><p>brechas de segurança.</p><p>Em meio a tudo isso, deve-se também instaurar um processo interno de refatoração do código</p><p>em caso de alguma dessas ferramentas detectar um problema de segurança, não permitindo que</p><p>o pipeline prossiga aos passos posteriores, sem antes resolvê-lo.</p><p>Aula 3</p><p>Dashboards para negócios em infraestrutura ágil</p><p>Introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar os dashboards em negócios.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>identi�car os itens necessários para a criação de um dashboard;</p><p>analisar as mudanças e manutenção de dashboards;</p><p>discutir sobre o mapeamento de métricas de infraestrutura</p><p>Situação-problema</p><p>Olá, estudante!</p><p>Uma das grandes tarefas dentro do DevOps é, sem dúvida alguma, medir todo o processo e</p><p>conseguir prever possíveis problemas antes que eles ocorram.</p><p>Para isso, precisamos, desde o começo do processo de DevOps, ter em mente métricas que vão</p><p>servir de base para a criação dos dashboards.</p><p>Se não temos como medir algo, jamais podemos saber se estamos atendendo satisfatoriamente</p><p>o objetivo.</p><p>Portanto, as métricas são o coração de todo o sistema de visualização ou observabilidade.</p><p>Vamos veri�car os tipos de métricas que podemos usar, os dados que podemos extrair, como</p><p>re�ná-los e torná-los mais precisos, e como tudo isso vai ajudar a veri�car a saúde do sistema,</p><p>acompanhar o andamento dos negócios e prever problemas, corrigindo-os antes que afetem o</p><p>todo de maneira negativa.</p><p>É importante ter métricas claras e objetivas, para que a tomada de decisão não seja prejudicada</p><p>e seja possível saber exatamente onde estão os gargalos para melhorar os processos e atingir a</p><p>maturidade, entregando a melhor aplicação possível para o cliente.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dentro desse assunto, veremos também algumas ferramentas que auxiliarão nesse processo,</p><p>ferramentas criadas especi�camente para re�nar métricas e transformá-las em informações,</p><p>montando dashboards que terão relevância para o negócio como um todo.</p><p>Bons pro�ssionais de DevOps já se antecipam sobre quais métricas vão utilizar ao construir</p><p>pipelines de entrega, para que, ao montar os dashboards, tenham as informações que esperam</p><p>da sua infra e da sua aplicação.</p><p>Conhecer esse assunto fará de você um pro�ssional capacitado a auxiliar todo o time e a</p><p>empresa em que for trabalhar, entregando valor e antecipando problemas.</p><p>Digamos que você tenha um sistema de avaliação online, no qual estudantes fazem testes e</p><p>recebem as notas que de�nem a aprovação ou não, no sistema. As escolas e faculdades pagam</p><p>a plataforma para cadastrar as avaliações e receber as notas dos estudantes em tempo real.</p><p>Pensando em como essa aplicação funciona, quais métricas de negócio você acha importante</p><p>constar em um dashboard, que permitam veri�car detalhes do funcionamento e que permitam</p><p>saber a saúde do negócio como um todo?</p><p>Por isso, encorajamos a você entender do que o assunto trata, e se aprofundar nesse</p><p>conhecimento, sabendo que, ao dominá-lo, sairá na frente de muitos outros pro�ssionais, e</p><p>ganhará, com isso, destaque e relevância.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução.</p><p>Dashboards: conceitos</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Quando falamos sobre dashboards ou painéis, em português, o que de fato queremos dizer com</p><p>isso? Estamos falando de visualizações de informações em formato grá�co, que serão usadas</p><p>como parâmetros e/ou na tomada de decisão de uma</p><p>empresa.</p><p>Mas, não se deixe enganar pensando que essa ideia é simples e óbvia, como veremos mais</p><p>adiante, pois podem existir diversos parâmetros, diversas métricas, diversos tipos de</p><p>dashboards, o que torna o seu desenvolvimento um processo longo, intenso e carente de</p><p>atualizações constantes por parte de todo o time.</p><p>Algo que também deve ser levado em conta é o interessado no dashboard. Dependendo da</p><p>pessoa ou pessoas interessadas nele, as métricas serão totalmente diferentes, os dados</p><p>mostrados também, pois cada setor prioriza um conjunto determinado de informações em</p><p>detrimento de outros.</p><p>Grande parte de todo esse processo pode ser automatizado, seguindo todo o conceito DevOps,</p><p>por isso veremos algumas ferramentas que nos auxiliarão dentro de todo esse processo, para</p><p>que possamos ter uma visão bem elaborada e atualizada automaticamente.</p><p>Além disso, toda TI deve seguir um processo de levantamento de métricas que seja alinhado às</p><p>expectativas do negócio, seguindo os princípios do BDIM (MARQUES, 2006).</p><p>Métricas</p><p>“Aquilo que não se pode medir, não se pode melhorar”. A frase, atribuída ao físico britânico,</p><p>William Thomson (1824-1907), é usada em diversos trabalhos e estudos para enfatizar a</p><p>importância em medir os sistemas, a �m de saber se e quando devemos aplicar melhorias e</p><p>correções. Um exemplo muito utilizado é o velocímetro de um carro.</p><p>Quando calibrado de maneira correta, ele consegue determinar a velocidade de deslocamento de</p><p>um determinado veículo, permitindo que o seu condutor a corrija sempre que a velocidade</p><p>permitida da via não for equivalente à mostrada em seu painel. Portanto, nesse exemplo,</p><p>podemos entender que a métrica mais importante mostrada no painel do veículo é sua</p><p>velocidade.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Um velocímetro mal calibrado, que mostra uma velocidade inferior ou superior, pode causar</p><p>problemas ao condutor, como multas e/ou acidentes, por isso uma boa métrica, calibrada e feita</p><p>para uso efetivo, é importante para a tomada de decisões.</p><p>Vamos estudar como retirar dados importantes do �uxo de entrega de software, para retirá-los e</p><p>calibrá-los de maneira correta.</p><p>Métricas são dados medidos de um determinado sistema, em um determinado tempo. Esses</p><p>dados podem ser tão variados quanto os sistemas, portanto devemos entendê-los e mapeá-los</p><p>adequadamente.</p><p>Exemplos de métricas podem ser: quanto tempo um determinado software leva da fase de</p><p>desenvolvimento até a fase de conclusão, quantos desenvolvedores são necessários, quanto de</p><p>carga determinado sistema aguenta, quantos usuários simultâneos ele pode atender, quanto de</p><p>memória e CPU está sendo gasto, quanto de dinheiro é gasto no projeto, etc.</p><p>Se você se atentou com calma a essas métricas, percebeu que elas mudam para cada tipo de</p><p>pessoa ou pessoas na cadeia de desenvolvimento. Métricas importantes para o time de</p><p>desenvolvimento, no exemplo acima, levariam em conta o tempo gasto para desenvolver um</p><p>projeto e a quantidade de desenvolvedores envolvidos.</p><p>Já em uma área operacional, o foco seria na quantidade de CPU e memória que um servidor está</p><p>consumindo. E, para uma área gerencial, seria o valor gasto para entrega do projeto, ou gasto</p><p>para que um sistema esteja funcional.</p><p>Como o foco, aqui, são os dashboards de infraestrutura, vamos aprender mais a respeito.</p><p>Mapeamento de métricas de infraestrutura</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Quando falamos de infraestrutura voltada para o DevOps, podemos pensar imediatamente em</p><p>ambiente de “nuvem” ou cloud computing, que abstrai boa parte da infra tradicional e propicia</p><p>acesso a recursos computacionais, como serviço. Porém, nem só de cloud viverá um time</p><p>DevOps. Podemos ter ambientes híbridos, com servidores físicos também. O importante é</p><p>mapear as métricas que devem ser medidas em ambos os casos e torná-las parte de todo o</p><p>processo de desenvolvimento de software.</p><p>Vamos usar um exemplo para entendermos todo o processo.</p><p>Se vamos começar a desenvolver um sistema Web, algo bem comum hoje em dia, devemos</p><p>mapear toda a arquitetura da aplicação para retirar dela o que é importante medir em termos de</p><p>qualidade e disponibilidade.</p><p>No exemplo da próxima �gura, temos um sistema web con�gurado dentro de um ambiente de</p><p>cloud, que recebe requisições dos usuários pelo load balancer que, por sua vez, encaminha as</p><p>solicitações para dentro de um cluster kubernetes, que é responsável por encaminhar os acessos</p><p>da aplicação para o frontend, que fala com o backend que faz o processamento e usa dados</p><p>consultados da base de dados.</p><p>O que deveríamos considerar como métrica, pensando em infraestrutura?</p><p>Poderíamos considerar alguns, como, por exemplo, a quantidade de requisições por segundo do</p><p>HTTP, a taxa de limite de conexão em inglês “Rate Limit”, saber toda vez que o usuário receber</p><p>um código HTTP diferente de 200, que é o sucesso e, geralmente, o mais importante em</p><p>monitorar, que é o grupo de erros 400/500.</p><p>Pensando, agora, na infra interna, precisamos medir também alguns itens da infra que suporta a</p><p>aplicação, como o kubernetes, por exemplo. Precisamos coletar métricas, como uso de CPU e</p><p>memória dos nodes do cluster, os pods onde rodam a aplicação, a comunicação entre o cluster e</p><p>a base de dados, etc. Outras métricas, poderiam ser da base de dados, como quantidade de</p><p>acessos por segundo, quantidade de conexões disponíveis, velocidade de queries, queries mais</p><p>usadas, etc.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Arquitetura da aplicação. Fonte: elaborada pelo autor.</p><p>Em uma pequena aplicação, vimos a quantidade de métricas que podemos considerar, e ainda</p><p>poderíamos ter muitas mais, mas o importante aqui é fazer um mapeamento do que se deve</p><p>acompanhar e monitorar no comportamento, sempre para melhorar os serviços, retirando</p><p>métricas que são pouco utilizadas, e incluindo outras necessárias.</p><p>_____</p><p>Assimile</p><p>Os códigos de resposta do HTTP incluem uma série de respostas padrão, que são agrupadas da</p><p>seguinte forma:</p><p>Entre 100 e 199 são respostas de informação.</p><p>Entre 200 e 299 são respostas de sucesso.</p><p>Entre 300 e 399 são redirecionamentos.</p><p>Entre 400 e 499 são mensagens de erros de cliente.</p><p>Erros 500 e 599 são mensagens de erros de servidor.</p><p>(RFC 2616).</p><p>Dashboards de visões de negócios</p><p>De acordo com a nova visão da TI orientada por negócios (sigla, em inglês, BDIM) (MOURA,</p><p>2008), tem-se a ideia de centralizar as métricas de negócio com as de TI na tomada de decisões</p><p>da empresa.</p><p>Pensando da parte do negócio, qual seriam as métricas importantes? Poderíamos usar como</p><p>exemplo uma plataforma de e-commerce: digamos que ela venda itens de vestuário feminino,</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>masculino e infantil. Seria interessante saber qual produto vende mais, qual o público principal</p><p>da plataforma, o sexo predominante, qual produto não está saindo.</p><p>Todas essas métricas podem ser usadas para ajudar na tomada de decisões da empresa, como</p><p>direcionar ações de marketing para um público predominante, ou fazer promoções de produtos</p><p>que não vendem tanto, etc. Um exemplo pode ser visto na próxima �gura.</p><p>Todas essas informações podem ser extraídas basicamente de relatórios analíticos de banco de</p><p>dados, que devem ser pensados desde o começo da construção das pipelines de entrega da</p><p>aplicação e da modelagem de dados.</p><p>Dashboard de Negócios. Fonte: elaborada pelo autor.</p><p>_____</p><p>Re�ita</p><p>Quais métricas você acha importante colocar em um Dashboard de negócios? Se você fosse o</p><p>administrador de um e-commerce, quais dados estariam destacados?</p><p>Ferramentas para criação de dashboards</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Obviamente que nesse mundo de Devops precisamos pensar em ferramentas construídas para</p><p>mostrar nossos dashboards de maneira mais simples e também trazer dados em tempo real.</p><p>Dependendo da fase da aplicação e da forma que queremos mostrar essas métricas, precisamos</p><p>de ferramentas diferentes.</p><p>Ao extrair dados de bases, temos, hoje em dia, as ferramentas de ETL (sigla para Extract</p><p>Transform and Load - Extrair, transformar e Carregar), que retira dados de um banco de dados,</p><p>faz as transformações necessárias e as carrega</p><p>em outro local, podendo ser utilizadas para</p><p>enviar para ferramentas de Dashboard. Essas transformações podem ser agregações, uniões de</p><p>tabelas, sumarizações, etc.</p><p>Pandas – uma das ferramentas mais populares quando se trata de ETL com a linguagem</p><p>Python (https://pandas.pydata.org).</p><p>Air�ow – trata-se de uma das mais completas quando se trata de ETL. Ela tem diversos</p><p>tipos de extratores, incluindo AWS, Spark, Cassandra, Mysql, MongoDB, Elasticsearch,</p><p>Microsoft SQL Server, etc. A ideia é criar pipelines de ETL que podem ser integradas em</p><p>processos de CI/CD (https://air�ow.apache.org).</p><p>Xplenty – o grande diferencial é ser baseada em Cloud Computing, podendo ser utilizada</p><p>como um serviço, além de possuir uma ferramenta para montar os pipelines de ETL de</p><p>maneira grá�ca (https://www.xplenty.com).</p><p>_____</p><p>Exempli�cando</p><p>Imagine que temos uma base de dados, que contém dados das vendas, como os produtos</p><p>vendidos, os vendedores, o valor, as datas, etc. Você precisa agrupar essas informações em um</p><p>relatório sumarizado, que vai ser atualizado em tempo real, para que o negócio consiga</p><p>https://pandas.pydata.org/</p><p>https://airflow.apache.org/</p><p>https://www.xplenty.com/</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>acompanhar. Você pode con�gurar uma ferramenta de ETL que vai retirar esses dados, sumarizá-</p><p>los e enviá-los para um dashboard.</p><p>Ferramentas de dashboard de infraestruturas</p><p>Já vimos algumas ferramentas usadas para criar ETLs de dados, e agora vamos ver exemplos de</p><p>criação de dashboards para infraestrutura, que têm como objetivo mostrar detalhes da saúde do</p><p>nosso ambiente.</p><p>Obviamente que, assim como no caso do ETL, temos diversas métricas que podemos usar</p><p>dentro de uma con�guração de dashboard de infraestrutura, mas temos alguns padrões que são</p><p>largamente utilizados no mercado.</p><p>Vamos aqui continuar usando o exemplo da próxima �gura como base de métricas importantes</p><p>a serem coletadas e dashboards que podemos montar com elas.</p><p>Existe uma ferramenta chamada Grafana, que é amplamente utilizada para montar grá�cos de</p><p>infraestrutura. Além disso, podemos utilizar conectores especí�cos, chamados exportadores,</p><p>para retirar as métricas de cada item utilizado na infra.</p><p>Por exemplo, como estamos utilizando uma aplicação Web, podemos utilizar um exportador que</p><p>retira métricas http, e consegue nos dizer quando uma aplicação está respondendo corretamente</p><p>ou não.</p><p>https://grafana.com/</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dashboard HTTP. Fonte: elaborada pelo autor.</p><p>Como podemos ver na �gura, temos um grá�co que, em princípio, traz a informação do status da</p><p>resposta da aplicação que está UP e, logo abaixo, o status code do http, dizendo que é 200, um</p><p>código de sucesso. Também temos a versão usada no http que utiliza SSL para comunicação</p><p>segura, conhecida como HTTPS.</p><p>Outro grá�co que poderíamos utilizar dentro dessa infraestrutura é o de saúde do cluster</p><p>kubernetes, que vai trazer o consumo de CPU dos nodes e também nos Pods utilizados pela</p><p>aplicação.</p><p>Isso nos permite saber com antecedência caso ocorra algum problema, como falta de memória,</p><p>CPU e disco. Também ajuda a saber quem está consumindo mais recursos da infra, para que</p><p>consigamos redimensionar melhor as aplicações.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dashboard de Infraestrutura Kubernetes. Fonte: elaborada pelo autor.</p><p>Como podemos ver, temos informações do uso de CPU e memória em tempo real, gastos pelo</p><p>cluster, além de sabermos informações do objeto dentro do cluster e se existe algum deles</p><p>inoperante.</p><p>Por �m, podemos ter um dashboard para retirar informações do banco de dados, como queries</p><p>lentas, uso de CPU e memória do banco de dados, número de conexões ativas, etc.</p><p>Na �gura a seguir, podemos ver o uso de CPU e memória do banco de dados.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Dashboard de Infra de banco de dados. Fonte elaborada pelo autor.</p><p>Na próxima �gura, podemos ver o número de conexões ativas, as falhas de conexão, o disco</p><p>utilizado e o seu limite.</p><p>Dashboard de Infra de banco de dados. Fonte elaborada pelo autor.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Como vimos nos exemplos citados, podemos ter vários tipos de métricas e formas de expô-las.</p><p>Esse tema, assim como os outros, é muito rico em assunto, e estudá-lo ajudará você a construir</p><p>dashboards cada vez mais completos e práticos no dia a dia.</p><p>Cada dia mais, a abordagem dos negócios muda, e conhecer essas ferramentas a fundo vai lhe</p><p>dar uma visão muito melhor de como melhorar e progredir em um mercado cada vez mais</p><p>competitivo.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Como temos um sistema de avaliação, e queremos saber dados de negócio, as métricas que</p><p>podemos pensar, nesse caso, podem ser o sexo dos alunos participantes, os cursos que mais</p><p>fazem avaliações, o cliente que mais consome horas no sistema, o tempo de resposta das</p><p>avaliações, a taxa de acerto por determinado período.</p><p>Todos esses dados podem ser utilizados para medir a capacidade da plataforma responder</p><p>adequadamente aos alunos e também podem se tornar produtos, oferecidos às escolas e</p><p>faculdades, sobre como melhorar o curso ou a taxa de acertos, etc.</p><p>Videoaula: resumo da unidade</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com o resumo da unidade.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Referências</p><p>ABRAMS, L. Hackers say they stole millions of credit cards from Banco BCR. 2020. Disponível</p><p>em: https://bit.ly/3Bt2vRN. Acesso em: 16 dez. 2021.</p><p>ANICHE, M. Test-Driven Development: teste e design no mundo real. São Paulo: Casa do Código,</p><p>2014. 194 p.</p><p>ARBULU, R. Prejuízo global do cibercrime passa de US$ 1 trilhão, diz McAfee. 2020. Disponível</p><p>em: https://bit.ly/3Dj3Goo. Acesso em:16 dez. 2021.</p><p>BBC (org.). Soleimani: us federal site hacked with pro-iranian message. US federal site hacked</p><p>with pro-Iranian message. 2020. Disponível em: https://bbc.in/2XTA2pr. Acesso em: 16 dez.</p><p>2021.</p><p>BECK, K. TDD: desenvolvimento guiado por testes. [S. L.]: Bookman, 2010. 240 p.</p><p>CEVERINO, A.; NASCIMENTO, F. P. Utilização da técnica de desenvolvimento orientado por</p><p>comportamento (BDD) no levantamento de requisitos. Revista Interdisciplinar Cientí�ca Aplicada,</p><p>Blumenau, v. 10, n. 3, p. 40-51, TRIII, 2016.</p><p>CRUZ, D. V. M. et al. Análise de Consumo Energético e Identi�cação de Ataques de Negação de</p><p>Serviço em Computação em Névoa. Anais [...].: Workshop em clouds e aplicações (WCGA), Rio de</p><p>Janeiro, v. 18 , 2020. Porto Alegre: Sociedade Brasileira de Computação, 2020. p. 80-93. DOI:</p><p>https://bit.ly/3mAS0r6. Acesso em: 16 dez. 2021.</p><p>CYBLEINC (org.). Net�lim Ransomware Operators Strike W&T Offshore, a Leading Independent Oil</p><p>and Natural Gas Producer. 2020. Disponível em: https://bit.ly/3BcJBhI. Acesso em: 19 jun. 2021.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>DAVEY WINDER. GoDaddy Con�rms Data Breach: what customers need to know. What</p><p>Customers Need To Know. 2020. Disponível em: https://bit.ly/3kuLiAa. Acesso em: 16 dez. 2021.</p><p>DOLÁCIO, G. B. Mitigação de ataques em redes de�nidas por software utilizando o sistema de</p><p>detecção de intrusão baseado em rede Snort. 2021. 62 f. TCC (Graduação) - Curso de</p><p>Tecnologias da Informação e Comunicação, Centro de Ciências, Tecnologia e Saúde,</p><p>Universidade Federal de Santa Catarina, Araranguá, 2021.</p><p>GOMES, M. G. F. M. et al. A Guerra Cibernética: exploração, ataque e proteção cibernética no</p><p>contexto dos sistemas de Comando e Controle (C2). Revista Militar de Ciência e Tecnologia, Rio</p><p>de Janeiro, v. 33, n. 2, p. 11-18, 2016.</p><p>JON PORTER. Amazon says it mitigated the largest DDoS attack ever recorded. 2020. Disponível</p><p>em: https://bit.ly/3jgKTCf. Acesso em:</p><p>16 dez. 2021.</p><p>KIMBALL, R., Ph.D. The Data Warehouse ETL Toolkit: practical techniques for extracting, cleaning,</p><p>conforming, and delivering data. [S. L.]: Wiley, 2004. 491 p.</p><p>MARQUARDT, A.; LEVENSON, E. Florida water treatment facility hack used a dormant remote</p><p>access software, sheriff says. 2021. Disponível em: https://cnn.it/38duxnF. Acesso em: 16 dez.</p><p>2021.</p><p>MARQUES, F. T. Projeto de infraestrutura de TI pela perspectiva de negócio. 2006. 154 f.</p><p>Dissertação (Mestrado) - Curso de Coordenação de Pós-Graduação em Ciência da Computação,</p><p>Centro de Engenharia Elétrica e Informática, Universidade Federal de Campina Grande, Campina</p><p>Grande, 2006. Cap. 1</p><p>MORAIS, C. H. J. P. de. RANSOMWARE: segurança da informação e prevenção. 2021. 44 f. TCC</p><p>(Graduação) - Curso de Engenharia de Computação, Escola de Ciências Exatas e da Computação,</p><p>Pontifícia Universidade Católica de Goiás, Goiânia, 2021.</p><p>MOURA, A. et al. Business-driven its management-uppingt he ante of it: exploring the linkage</p><p>between it and business to improve both it and business results. Communications Magazine,</p><p>IEEE, v. 46, n. 10, p. 148–153, 2008</p><p>NORTH, D. Introducing BDD. 2006. Disponível em: https://bit.ly/2WsGxPz. Acesso em: 16 dez.</p><p>2021.</p><p>PRESSMAN, R. S.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 8. ed. Rio</p><p>de Janeiro: Amgh, 2016. 968 p.</p><p>RFC 2616. Hypertext Transfer Protocol -- HTTP/1.1: Status Code De�nitions. 1999. Disponível em:</p><p>https://bit.ly/3DkueG0. Acesso em: 16 dez. 2021.</p><p>SALITURO, E. Learn Grafana 7.0: a beginner's guide to getting well versed in analytics, interactive</p><p>dashboards, and monitoring. [S. L.]: Packt Publishing, 2020. 443 p.</p><p>STRACQUALURSI, V. et al. Cyberattack forces major US fuel pipeline to shut down. 2020.</p><p>Disponível em: https://cnn.it/3kxDrCi. Acesso em: 16 dez. 2021.</p><p>UCSF. UNIVERSITY OF CALIFORNIA SAN FRANCISCO. Update on IT Security Incident at UCSF.</p><p>Disponível em: https://bit.ly/3gzNLIE. Acesso em:16 dez. 2021.</p><p>Aula 4</p><p>Roteiro de Aula Prática</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Roteiro de Aula Prática</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Clique aqui para acessar o manual de instalação!</p><p>Clique aqui para acessar o roteiro de aula práitca!</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/manual4.pdf</p><p>https://cm-kls-content.s3.amazonaws.com/DESEN_WEBAULA/WHITE%20LABEL/rap/inf_agi/U4.pdf</p><p>as características da liderança com pensamento digital e</p><p>entendendo o que propõe a cultura DevOps, podemos traçar o per�l do pro�ssional de DevOps no</p><p>mercado de trabalho.</p><p>Na área de desenvolvimento, é exigida proatividade do pro�ssional. Para trabalhar as práticas</p><p>DevOps, precisa ser generalista, sabendo atuar tanto no time de desenvolvimento como no de</p><p>operações e infraestrutura. Uma outra característica recomendável é que tenha conhecimento de</p><p>negócios, sabendo dialogar com o cliente, conhecer as melhores práticas e metodologias e a</p><p>gestão de projetos (GAEA, 2020).</p><p>Um pro�ssional DevOps deve ter a mentalidade plural, colaborativa e cooperativa; prezar</p><p>continuamente pelo crescimento; ter a compreensão da abordagem ágil; entender que os</p><p>consumidores são também produtores; possuir a natureza exploratória e curiosidade nata;</p><p>abraçar a diversidade e ir além do óbvio, envolvendo-se em diálogos e abraçando ideias, mesmo</p><p>que radicalmente diferentes de seus valores e padrões.</p><p>Como vimos, não dá para ignorarmos a força da cultura DevOps, seus benefícios falam por si. A</p><p>velocidade, a adaptabilidade e a entrega contínua potencializam a ideia central de “mais por</p><p>menos” e lançam no mercado de desenvolvimento de software uma vertente da infraestrutura</p><p>ágil que trata os processos de forma colaborativa em setores antes vistos como independentes</p><p>(desenvolvimento e operação).</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Um movimento que começou com os estudos de Patrick Debois e se sustenta na transformação</p><p>digital e na mudança de pensamento, provocando uma reformulação em toda a indústria de</p><p>software e, consequentemente, exigindo uma adequação no per�l dos pro�ssionais da área de</p><p>TI.</p><p>Videoaula: resolução da Situação-Problema</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Agora é hora de pensar numa apresentação impactante, que convencerá os seniores da sua</p><p>empresa a adotarem as práticas e ferramentas DevOps, para isso:</p><p>crie uma apresentação de slides dinâmica, com pouco texto; se possível, evite marcadores</p><p>e listas; para cada slide, uma ideia, apenas duas fontes e, no máximo, três cores principais;</p><p>fontes maiores que 28pt; use grá�cos e imagens e jamais leia o que está escrito.</p><p>contextualize as transformações digitais e o mindset digital. Seu objetivo é entrar na</p><p>cabeça daqueles que você precisa convencer. Deixe claro que você entende das</p><p>preocupações da empresa e que a DevOps trará os benefícios necessários para a solução.</p><p>enfatize os ganhos e não esqueça de mencionar que nada disso será possível sem o apoio</p><p>de todos, pois a cultura DevOps exige interação e cooperação mútua. Faça uma projeção</p><p>de custos e prove que, mesmo que se tenha a necessidade de investimento, o retorno é</p><p>quanti�cável. Apresente os riscos e a sustentabilidade e foque no ponto principal, a</p><p>agilidade. Deixe claro que não é uma questão de se vão adotar, mas quando o farão.</p><p>apresente um estudo de caso real. Pesquise as grandes empresas que mudaram suas</p><p>práticas incorporando a cultura DevOps, pegue números estatísticos que comprovem o</p><p>valor agregado com as transformações. Você pode citar Walmart, Adobe, Net�ix, Sony,</p><p>Amazon, Tim, entre outras.</p><p>Com todos os “holofotes” apontados para você, agradeça a oportunidade que teve e sugira uma</p><p>roda de perguntas, a qual possibilitará um debate franco e esclarecedor sobre os pontos</p><p>apresentados.</p><p>Aula 2</p><p>Padronização da infraestrutura ágil</p><p>Introdução da aula</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar sobre a gestão de con�guração na padronização da infraestrutura</p><p>ágil.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>analisar os conceitos de provisionamento automatizado de VMs (Máquinas Virtuais);</p><p>discutir sobre infraestrutura versionada e as ferramentas no desenvolvimento ágil;</p><p>identi�car os pilares e ferramentas da infraestrutura ágil.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>O crescimento da indústria de software e a tecnologia do mundo digital exigiram dos</p><p>engenheiros e desenvolvedores uma abordagem mais objetiva na construção de aplicações</p><p>computacionais. O manifesto ágil de 2001 (BECK et al., 2002) implantou vários princípios que</p><p>foram incorporados pelos pesquisadores e desenvolvedores, mudando consideravelmente a</p><p>mentalidade das gestões de TI de alguns anos atrás. O foco na experiência do usuário exigiu</p><p>uma maior agilidade e objetividade nos processos.</p><p>A automação, a incorporação da infraestrutura de testes, o controle de versões, o pipeline de</p><p>entrega e o monitoramento são técnicas que principiam a infraestrutura ágil e trabalham em</p><p>conjunto para garantir transparência, agilidade, cooperação e excelência da prática no</p><p>desenvolvimento de softwares.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Os conceitos de provisionamento automatizado de VMs (máquinas virtuais) são recursos</p><p>populares no mercado, pois ajudam na redução dos custos, permitindo que se gaste menos</p><p>recursos físicos e se priorize mais a aplicação dos serviços, com segurança, �exibilidade e</p><p>visibilidade.</p><p>Você será apresentado a conceitos, como de gestão de con�gurações, gerenciamento de</p><p>repositório e controle de versões, e entenderá como a infraestrutura versionada contribui,</p><p>garantindo o controle de qualidade, que resultará no objetivo principal: a boa experiência do</p><p>cliente.</p><p>Você é um gestor de TI que trabalhou a vida inteira com um modelo tradicional de gestão, mas</p><p>tem consciência de que precisa migrar para uma infraestrutura de desenvolvimento ágil. O que</p><p>lhe convenceu a adotar essas práticas em sua empresa foi justamente o foco na experiência do</p><p>usuário e as possiblidades de �exibilidade a mudanças sugeridas pelos métodos ágeis.</p><p>É preciso que se tenha adaptabilidade para quando o cliente mudar os requisitos do seu pedido;</p><p>que o trabalho possa ser feito por uma equipe colaborativa; que a entrega seja satisfatória às</p><p>necessidades do cliente; que o produto não tenha funções desnecessárias; tudo seja feito com</p><p>agilidade, qualidade e sem desperdício. Logo, não há dúvidas de que a transição deverá ser feita.</p><p>Seu desa�o será pontuar as etapas dessa transição. Quais ferramentas serão incorporadas para</p><p>que se tenha uma infraestrutura ágil de excelência? Quais processos precisam ser considerados?</p><p>Quais serão os benefícios após a implantação do método?</p><p>Re�ita sobre essa prática e elabore um relatório sugerindo um passo a passo do que é preciso</p><p>para a mudança do método cascata (waterfall) para um processo de desenvolvimento ágil.</p><p>Esta aula é um convite para nos aprofundarmos nos preceitos ágeis, que foram base para a</p><p>cultura DevOps, a qual tem como característica as entregas rápidas, a �exibilidade no software, a</p><p>colaboração e a interação das equipes e do cliente, o gerenciamento de riscos e o controle de</p><p>qualidade.</p><p>Para tornar-se um bom pro�ssional, você precisa saber o signi�cado e como se aplica cada uma</p><p>dessas técnicas, ferramentas e princípios norteadores.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução da aula.</p><p>Pilares e ferramentas da infraestrutura ágil</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Segundo Martin (2020), em 2001, um grupo de especialistas em desenvolvimento de software se</p><p>reuniu em Snowbird, Utah, com o objetivo de criar um manifesto que introduzisse na indústria de</p><p>software uma proposta de desenvolvimento mais efetiva e leve. Dessa reunião surgiu o</p><p>Manifesto Ágil, um dos movimentos mais duradouros e in�uentes no campo de software.</p><p>A infraestrutura de TI, com seus componentes indispensáveis para execução e gerenciamento,</p><p>que incluem armazenamento de dados, sistemas</p><p>operacionais, rede, software, hardware e todos</p><p>os seus serviços, viu, na abordagem ágil, os conceitos e as ferramentas que evoluíram para uma</p><p>consolidação do que chamamos de infraestrutura ágil.</p><p>Um dos pilares dessa mudança é a automação. “Os humanos não são máquinas. Pedir para que</p><p>nós, seres humanos, façamos o que as máquinas conseguem fazer é caro, ine�ciente e imoral”</p><p>(MARTIN, 2020, p. 72), portanto é preciso automatizar processos que exijam o mínimo possível</p><p>de mão de obra humana. Geralmente, tarefas, como provisionamento, con�guração, implantação</p><p>e desativação, podem ser automatizadas.</p><p>A automatização consiste em utilizar ferramentas que tornam processos manuais em processos</p><p>automáticos, que vão desde a instalação de um sistema operacional até a con�guração e</p><p>instalação de serviços. Com essa prática, segue-se a premissa da infraestrutura versionada, ou</p><p>seja, a criação de versões do código da infraestrutura, com o intuito de se obter a redução nos</p><p>erros de execução e garantia de padronização.</p><p>Duas ferramentas que podem ser usadas para automatização são:</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Puppet: é uma ferramenta de gerenciamento de con�gurações, projetada em Ruby, que</p><p>mantém os servidores padronizados, executa instalações (deploy) de forma automatizada,</p><p>executa tarefas em larga escala e mantém a infraestrutura atualizada e segura. Trabalha</p><p>com o modelo master/cliente, no qual o Puppet master é o servidor central, e os nodes são</p><p>os clientes conectados ao master. Toda con�guração é de�nida no master, compilada e</p><p>aplicada nos clientes, conectados ao Puppet (TURNBULL, 2007).</p><p>Ansible: ao contrário da Puppet, que foi projetada em Python, inclui centenas de módulos</p><p>para oferecer suporte a uma ampla gama de integrações, incluindo Amazon Web Services</p><p>(AWS), e recentemente começou a oferecer suporte ao Windows.</p><p>Um outro pilar da infraestrutura ágil é a infraestrutura de testes. A qualidade de um software é</p><p>determinada pelo seu desempenho, manufatura, con�abilidade, manutenibilidade, ergonomia,</p><p>segurança, custo, tempo de lançamento, apoio linguístico, entre outros.</p><p>Para que se constate essa qualidade, é imprescindível que se estabeleçam testes adequados em</p><p>um plano integrado de testes que perpasse todas as fases do ciclo de vida do software, ou seja,</p><p>desde o projeto até o descarte do produto (BACK; LEAL,1991).</p><p>Essa é uma consequência da automatização, sendo assim, existe a possibilidade de automatizar</p><p>testes que serão feitos após cada versão, e os problemas podem ser identi�cados antes mesmo</p><p>de entrar na fase da produção.</p><p>Uma ferramenta muito usada para esse �m é o Jenkins, um servidor de automação desenvolvido</p><p>em JAVA. Com ele é possível automatizar vários processos, como deploy (entrega da aplicação)</p><p>em um servidor. É possível rodar um conjunto de testes, rodar scripts em um banco de dados,</p><p>atualizar uma aplicação web e, inclusive, programar uma execução para outros servidores</p><p>(BOAGLIO, 2016).</p><p>A infraestrutura versionada garante que tenhamos sempre o código atual, mas é preciso que se</p><p>tenha um ambiente automatizado para controle dessas versões. O controle de versão é</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>responsável por registrar as mudanças feitas nos códigos, de modo que você possa recuperar</p><p>versões especí�cas quando precisar.</p><p>Hoje em dia, usamos o GIT (sistema de controle de versão distribuído), o qual registra as</p><p>mudanças que ocorrem no código-fonte de um projeto, permitindo que os arquivos possam ser</p><p>alterados de forma simultânea por inúmeras pessoas sem que se tenha a preocupação dessas</p><p>alterações serem sobrescritas umas pelas outras. E se houver algum problema, pode-se</p><p>restaurar a versão anterior.</p><p>O GIT permite que se faça commit (envio de código alterado) em um módulo a qualquer</p><p>momento. Os con�itos entre esses commits são resolvidos como e quando os programadores</p><p>bem querem.</p><p>Os minúsculos módulos desacoplados e a frequência de consolidação rápida resultam em ciclos</p><p>de tempo tão pequenos quanto minutos. Some isso à capacidade de criar um conjunto de testes</p><p>abrangente e de execução rápida que testa quase tudo, e você tem os ingredientes da entrega</p><p>contínua (MARTIN, 2020).</p><p>Muitas vezes, deparamo-nos com um projeto que requer recursos que não fazem parte da nossa</p><p>infraestrutura e serão usados de forma pontual, ou seja, de acordo com a necessidade. Uma das</p><p>características da infraestrutura ágil é que, com o auxílio da virtualização e da computação em</p><p>nuvens, é possível con�gurar ambientes temporários, ou seja, ambientes que não sejam de</p><p>produção devem durar o mínimo possível.</p><p>Esses ambientes servirão apenas para a execução de um conjunto de testes automatizados</p><p>antes de uma nova implementação e serão descartados assim que os testes forem validados e</p><p>de�nido o deploy da produção.</p><p>As ferramentas que melhor se ajustam para essa característica são os containers. Docker é uma</p><p>plataforma que automatiza a implantação de aplicações dentro de ambientes isolados,</p><p>containers. É uma solução que embarca, integra e executa aplicações rapidamente,</p><p>proporcionando ambientes isolados dentro do mesmo servidor, mas acessíveis externamente</p><p>(GOMES; SOUZA, 2015).</p><p>Como o nome sugere, a entrega contínua tem a característica de possibilitar a execução e</p><p>entrega de tipos diversos de tarefas em �uxo. Pipeline de entrega é o nome desse processo.</p><p>Pode ser feito com um servidor de automação, como o Jenkins.</p><p>Pode-se criar tanto automações de dependência, nas quais, havendo erros nos testes, nada é</p><p>alterado na produção, como um conjunto de processos que precisam ser validados para que uma</p><p>con�guração entre em produção. Assim, garante-se uma segurança de que só entre no processo</p><p>de produção uma nova implementação que esteja testada.</p><p>Um ambiente de trabalho só se torna conhecido quando fazemos o monitoramento dele. A</p><p>primeira preocupação de uma infraestrutura ágil deve ser de�nir uma ferramenta de</p><p>monitoramento que acompanhe o crescimento do ambiente, garantindo que tudo esteja sendo</p><p>monitorado.</p><p>Os sistemas de monitoramento auditam constantemente ativos de TI, com o objetivo de veri�car</p><p>o seu status e checar sua performance. Assim, a empresa pode ser reativa, proativa ou fazer um</p><p>papel preditivo quanto aos possíveis problemas que possam vir a existir. O monitoramento</p><p>também auxilia na experiência do usuário, pois faz simulações de acessos. Uma ferramenta</p><p>Open Source que realiza esse trabalho é o Zabbix.</p><p>Essas técnicas são também pilares da infraestrutura ágil, pois, a partir delas, se constitui toda a</p><p>infraestrutura automatizada e o provisionamento do código. Cabe o aprofundamento nos</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>conceitos de provisionamento e a virtualização para melhor embasamento e o entendimento de</p><p>como eles funcionam na prática.</p><p>Provisionamento automatizado de Máquinas Virtuais (VMS)</p><p>Uma das características primordiais das infraestruturas de TI é a obrigatoriedade de estarem</p><p>sempre estáveis e disponíveis. Para tanto, a primeira importante função das estratégias de</p><p>virtualização é garantir o desempenho e a segurança dessas infraestruturas.</p><p>A virtualização não é mais apenas um instrumento para criação de máquinas virtuais, passou a</p><p>ser uma ferramenta dentro da gestão ágil que potencializa soluções com migração de �uxo de</p><p>trabalhos ativos, monitoramento, distribuição de carga de trabalho, garantia de disponibilidade,</p><p>aprimoramento do uso do hardware e demais funções.</p><p>A infraestrutura de TI abrange servidores físicos e virtuais, que trabalham concomitantemente</p><p>executando serviços. Nesse contexto, as aplicações virtuais minimizam a complexidade dos</p><p>processos de provisionamento de serviços e garantem mais agilidade na produção, pois, com a</p><p>chegada de tecnologia de virtualização com custo acessível e ferramentas, como Puppet, o</p><p>provisionamento com máquinas virtuais pode ser automatizado (HUMBLE; FARLEY, 2014).</p><p>O provisionamento abrange a criação e con�guração de máquinas virtuais que simulam o</p><p>hardware. Selecionam-se as con�gurações de hardware virtual, ou como a máquina virtual usará</p><p>o hardware real, e as con�gurações</p><p>do sistema operacional.</p><p>Para agilizar ainda mais essa tarefa, pode-se usar templates que já apresentam essas</p><p>con�gurações (hardware e sistema operacional) da nova máquina virtual. Quando o sistema</p><p>precisar de uma máquina semelhante a alguma que já exista, o sistema entregará uma nova</p><p>máquina virtual mais rapidamente e pronta para ser usada.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>_____</p><p>Exempli�cando</p><p>Exempli�cando o uso da virtualização:</p><p>Suponhamos que você use três servidores em sua infraestrutura de TI: o primeiro para</p><p>gerenciamento de e-mails; o segundo para os serviços web; o terceiro para guardar processos de</p><p>aplicações antigos (aplicações legadas). Todos os servidores são importantes, mas isso está lhe</p><p>custando muito.</p><p>A ideia da virtualização é que você possa virtualizar, por exemplo, o servidor de aplicações</p><p>antigas, pois, embora trate de aplicações antigas em linguagens de programação obsoletas,</p><p>ainda é preciso que se guarde.</p><p>A solução que a virtualização apresenta é que se possa trocar esses servidores físicos por</p><p>processos virtualizados, para que se tenha economia com a infraestrutura física.</p><p>Ou seja, você poderia dividir o servidor de gerenciamento de e-mail, a �m de que ele opere com</p><p>30% da capacidade, 30% para web e, ainda, 30% para as aplicações legadas. Você teria aí dois</p><p>servidores desocupados para serem usados em outras aplicações ou até serem desativados.</p><p>_____</p><p>Além do suporte à gerência de con�guração para desenvolvimento de softwares, a virtualização</p><p>pode ser usada, também, para simular sistemas computacionais históricos em hardware</p><p>moderno, como mecanismo de garantia de recuperação de desastres, para teste de programas,</p><p>incompatibilidade de sistemas operacionais, entre outras funções.</p><p>Nosso foco é analisarmos a virtualização como suporte à gestão ágil de desenvolvimento de</p><p>softwares, possibilitando uma sistematização controlada e con�ável, a �m de que se possa</p><p>trabalhar repetições que serão aproveitadas nas implantações, agilizando as entregas.</p><p>Humble e Farley (2014) classi�cam em quatro os benefícios do uso de virtualização. São eles:</p><p>Resposta rápida para mudanças de requisitos: se após a análise de requisitos você</p><p>constatou que precisará de um novo ambiente de testes, por exemplo, em minutos você</p><p>pode con�gurar uma nova máquina, sem custo, em um servidor que já exista. É claro que</p><p>não poderá con�gurar in�nitas máquinas virtuais (VMs), mas qualquer economia na</p><p>compra de hardware é válida.</p><p>Consolidação: em empresas imaturas, geralmente, os itens de con�guração (IC) e de testes</p><p>em máquinas físicas são separados. Com a virtualização, pode-se oferecer um serviço para</p><p>os times de desenvolvimento trabalharem juntos em uma infraestrutura consolidada.</p><p>Padronização: muitos componentes e subsistemas usam con�gurações diferentes de</p><p>hardware. Com a virtualização, é possível criar um padrão de hardware para ambientes</p><p>físicos que rodarão ambientes distintos e plataformas virtuais heterogêneas.</p><p>Facilidade de manutenção de baselines: mantendo uma biblioteca de imagens de</p><p>baselines, sistemas operacionais e plataformas de aplicação podem ser implantados</p><p>combinando vários computadores facilmente.</p><p>Um outro benefício é permitir o controle programático de características do sistema, como</p><p>conectividade de rede. Você pode, por exemplo, testar o comportamento de um cluster</p><p>desconectando um ou mais nodos (nós de rede) e observar o efeito no sistema. Melhora</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>também a capacidade de rodar testes longos, já que é possível, ao invés de rodar em uma única</p><p>máquina, fazer de forma paralela.</p><p>O provisionamento de ambiente de maneira incremental é feito através de um processo</p><p>automatizado, em vez de começar do zero, você pode usar uma baseline conhecida, instalar um</p><p>agente de automação de data centers, de modo que as máquinas virtuais tenham características</p><p>próprias para que possam ser implementadas em sistemas distintos (HUMBLE; FARLEY, 2014).</p><p>_____</p><p>Assimile</p><p>O conceito de baselines, nesse caso, refere-se a criar ambientes virtuais (servidores virtuais),</p><p>salvá-los como imagens e con�guração e fazer quantas cópias quiser. Quando for necessário,</p><p>você pode reverter qualquer ambiente ao seu estado anterior, já que eles serão cópias �éis do</p><p>original.</p><p>_____</p><p>Todos esses processos inteligentes, automatizados e estruturados precisam ser bem geridos,</p><p>para que os pilares da infraestrutura ágil sejam respeitados. Para tanto, vamos entender o que é</p><p>gestão de con�guração e como uma infraestrutura versionada ajuda na entrega contínua de</p><p>softwares.</p><p>Gestão de con�guração e infraestrutura versionada</p><p>A gestão de con�guração permite a reprodução de ambientes, versões de sistemas operacionais,</p><p>con�gurações de rede, aplicações instaladas e suas con�gurações; permite veri�car as</p><p>mudanças que acontecem em um dado ambiente e descobrir quem a fez, quando e por quê;</p><p>contentar os requisitos de acordo com as regulamentações impostas; disponibilizar as</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>informações para qualquer membro da equipe e, assim, proporcionar uma entrega e�ciente e</p><p>melhor feedback.</p><p>Uma infraestrutura versionada possibilita e facilita a recuperação de um ambiente com ganhos</p><p>de consistência e disponibilidade. Em caso de erro, recupera a infraestrutura, pois mantém um</p><p>histórico das modi�cações feitas, as quais podem ser auditáveis e reversíveis.</p><p>Embora os termos, muitas vezes, possam ser usados como sinônimos, a gerência de</p><p>con�guração é bem mais ampla, pois se refere a todos os processos do projeto, as relações</p><p>entre si, armazenamentos, recuperações, modi�cações e identi�cações; já o controle de versões</p><p>é uma ferramenta tida como indispensável da gestão de con�guração.</p><p>Para manter uma infraestrutura versionada, é preciso que se tenha um sistema de controle de</p><p>versões, que é um mecanismo que armazena múltiplas versões de arquivos, sendo que, quando</p><p>algum deles for modi�cado, ainda pode-se ter acesso às versões anteriores. Essa característica</p><p>é fundamental, porque, na prática, é o que garante que várias pessoas possam trabalhar de</p><p>maneira contínua e colaborativa para a entrega de um software.</p><p>Controle de versão não se refere apenas ao código. Embora os desenvolvedores devam usá-lo</p><p>em códigos, qualquer componente da criação da aplicação deve estar no controle de versão, ou</p><p>seja, testes, scripts de bancos de dados, arquivos de compilação e implantação, documentação,</p><p>bibliotecas e arquivos de con�guração para sua aplicação, para seu compilador e todas as</p><p>ferramentas relacionadas, e assim por diante – de modo que um novo membro da equipe possa</p><p>começar do zero (HUMBLE; FARLEY, 2014).</p><p>Toda vez que uma versão é modi�cada, ela se torna pública para os outros integrantes do time</p><p>de desenvolvimento e, se você estiver usando integração contínua, essa versão pode ser</p><p>visualizada, testada e até mesmo ser produzida.</p><p>Antes de fazer o check-in, é importante garantir que o código esteja pronto para o nível de</p><p>visibilidade a que se propõe, muitos desenvolvedores demoram fazer o versionamento, o que</p><p>pode atrapalhar a produção.</p><p>Para resolver esse problema, algumas equipes apostam em um branch (apartar código do</p><p>principal) separado somente para novas funcionalidades. Quando se vê que a mudança é</p><p>satisfatória, lança-se para o branch principal.</p><p>_____</p><p>Re�ita</p><p>Esse tipo de abordagem de criar branches separados é uma boa prática dentro de uma</p><p>infraestrutura ágil? Suponhamos que vários desenvolvedores criassem branches separados, isso</p><p>poderia ocasionar algum problema na produção? Podemos presumir que essa prática pode ser</p><p>considerada de infraestrutura ágil, sendo que limitaria o princípio de entrega contínua?</p><p>_____</p><p>Como vimos, a gestão de con�guração de software engloba todos os processos do projeto,</p><p>centrando sua atenção no gerenciamento de repositórios, no controle das versões, na</p><p>modelagem dos produtos e na gestão de outros objetos mais complexos, ajudando também os</p><p>desenvolvedores em suas atividades rotineiras e fornecendo suporte e controle ao processo de</p><p>desenvolvimento.</p><p>Segundo Oliveira (2007),</p><p>dentre as práticas especí�cas de gestão de con�guração, temos:</p><p>1. identi�car itens de con�guração: serve para planejar as baselines do projeto. Elas</p><p>representam o conjunto de itens de con�guração que foram validados e servirão de base</p><p>para as etapas seguintes do desenvolvimento. Estes itens representam um artefato do</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>projeto, que deve ter características de�nidas, e serão controlados formalmente a partir do</p><p>momento em que entram na baseline.</p><p>2. estabelecer o sistema de con�guração: a gerência prepara e ajusta a infraestrutura,</p><p>de�nindo os repositórios (que devem viabilizar a �exibilidade requerida) e os sistemas de</p><p>mudanças (que têm a visibilidade como ponto principal).</p><p>3. criar e liberar baselines: passa pelas etapas de baseline de planejamento, quando são</p><p>analisados o projeto e de�nidas a gerência de con�guração e a garantia da qualidade;</p><p>baseline de requisitos, que contempla os requisitos funcionais, casos de uso e demais</p><p>documentos; baseline de código, que contempla o código-fonte que atenderá aos</p><p>requisitos.</p><p>4. rastrear solicitações de mudanças ou Change Request (CR): demanda alterações do</p><p>projeto e compreende ações especí�cas, como: registro de CR, análise da solicitação</p><p>registrada, alteração nos artefatos necessários, veri�cação das alterações e fechamento do</p><p>registro da solicitação.</p><p>5. controlar itens de con�guração: a etapa de controle dos itens de con�guração deve ser</p><p>capaz de rastrear as alterações feitas nos itens de con�guração durante uma solicitação de</p><p>mudança. Essa atividade envolve o registro do histórico de alterações dos itens.</p><p>�. estabelecer registros da gerência de con�guração: registros de gerência de con�guração</p><p>são documentos que precisam ser levantados, a �m de acessar as características dos itens</p><p>de con�guração e identi�car o controle de acesso aos itens, o conteúdo das baselines, as</p><p>diferenças entre as baselines e o histórico de mudanças de cada item.</p><p>7. realizar auditorias de con�guração: é necessário que se façam auditorias de con�guração</p><p>periódicas, como forma de garantir a execução correta das atividades de gerência de</p><p>con�guração.</p><p>A infraestrutura ágil baseia-se no manifesto ágil para sugerir mais objetividade, agilidade,</p><p>feedback imediato, comunicação direta, simplicidade e vários outros conceitos que estão</p><p>implícitos em seus processos de automatização, provisionamento e entrega contínua.</p><p>Entender os recursos que a infraestrutura ágil empresta para a indústria de desenvolvimento de</p><p>software é, também, ter ciência de que uma nova cultura surge desses preceitos.</p><p>A aula apresentou os pilares e as ferramentas da infraestrutura ágil, enfatizou a importância dos</p><p>provisionamentos automatizados de máquinas virtuais, conceituou e mostrou a diferença de</p><p>gestão de con�guração e gestão de versões.</p><p>Videoaula: resolução da situação-problema</p><p>Este conteúdo é um vídeo!</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula com a resolução da situação-problema.</p><p>Conclusão</p><p>Você deve sugerir a adoção de algumas práticas e ferramentas que garantam que os princípios</p><p>da infraestrutura ágil sejam colocados em prática. Para tanto, deve enfatizar a necessidade de</p><p>provisionamento de máquinas virtuais, a automação, a infraestrutura de testes, o controle de</p><p>versão, o pipeline de entrega e constante monitoramento.</p><p>O passo que se deve tomar é escolher uma ferramenta de gerenciamento de con�guração e</p><p>automação. A sugestão é Puppet ou Ansible; incorporar uma prática de infraestrutura de testes,</p><p>podendo usar o Jenkins como ferramenta; um sistema de controle de versões, que pode ser o</p><p>GIT; processos de virtualização em containers podem ser feitos pelo Docker, e o Jenkins, que dá</p><p>suporte aos testes, pode ser, também, um servidor de integração contínua.</p><p>Pense bem se existe a necessidade de adquirir todas essas ferramentas, leve em consideração</p><p>os processos que serão desenvolvidos e avalie os benefícios após o emprego da metodologia</p><p>ágil.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Aula 3</p><p>Monitoramento de SO (Sistemas Operacionais) e Servidores</p><p>Introdução da aula</p><p>Qual é o foco da aula?</p><p>Nesta aula, você irá estudar as métricas de monitoramento de SO e servidores.</p><p>Objetivos gerais de aprendizagem</p><p>Ao �nal desta aula, você será capaz de:</p><p>analisar os fundamentos de monitoramento em diferentes SO e servidores;</p><p>identi�car como otimizar os SO e servidores utilizando monitoramento;</p><p>discutir sobre as ferramentas e técnicas de con�gurações para monitoramento de SO e</p><p>servidores.</p><p>Situação-problema</p><p>Olá, estudante!</p><p>O provérbio popular “É melhor prevenir que remediar” é o norteador do conteúdo desta seção. A</p><p>necessidade de saber o que acontece nos processos de sua empresa possibilita mudanças</p><p>estratégicas em várias vertentes dos negócios.</p><p>Como os computadores e o compartilhamento de seus recursos através de redes são</p><p>imprescindíveis para o funcionamento de uma empresa moderna, o monitoramento desses</p><p>componentes é fator determinante para o melhoramento desses processos.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Com as mudanças tecnológicas aumentaram as possibilidades de expansão e, porventura,</p><p>ganhos, mas também trouxeram alguns problemas. Para que se consiga tirar bom proveito das</p><p>novas tecnologias, é imprescindível que se busque formas de automatizar processos e antecipar</p><p>possíveis problemas.</p><p>O monitoramento dos sistemas operacionais (SO) e servidores auxilia na tomada de decisões e</p><p>impacta positivamente, podendo ser um diferencial para os negócios de qualquer empresa,</p><p>porque vai além da análise da infraestrutura.</p><p>Para contextualizar sua aprendizagem, imagine que você é gestor de tecnologia em uma</p><p>empresa que se fundamenta em práticas da cultura DevOps. Você sabe que a abordagem</p><p>tradicional da monitoração é voltada para a análise da infraestrutura, com foco na</p><p>disponibilidade dos componentes da rede.</p><p>Também, tem consciência de que, com as práticas de cloud computing, é possível que se amplie</p><p>essa abordagem para tirar proveito com monitoramentos de aplicações.</p><p>Seu chefe lhe deu aval para que se invista nas melhores tecnologias, mas, como você o conhece</p><p>bem, sabe que precisará buscar formas econômicas, porém que causem um impacto nos</p><p>negócios, para chamar a sua atenção.</p><p>Seu objetivo é de�nir as métricas de monitoramento da sua empresa, escolher a ferramenta que</p><p>usará e criar um relatório que aponte em quais pontos essa escolha resultará na melhora tanto</p><p>da segurança das informações de sua rede como na aplicação do serviço como um todo.</p><p>Convidamos você a repensar as infraestruturas de TI e conhecer as métricas, práticas e</p><p>ferramentas de monitoramento dos sistemas operacionais (SO) e servidores, enfatizando a</p><p>otimização de um ambiente monitorizado, que possa aproveitar as tecnologias vigentes em sua</p><p>totalidade. Lembre-se: “É melhor prevenir que remediar”.</p><p>Videoaula: introdução da aula</p><p>Este conteúdo é um vídeo!</p><p>Para assistir este conteúdo é necessário que você acesse o AVA pelo</p><p>computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo</p><p>para assistir mesmo sem conexão à internet.</p><p>Assista à videoaula de introdução da aula.</p><p>A importância do monitoramento nos Sistemas Operacionais e Servidores</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>O monitoramento dos sistemas operacionais e servidores procura se anteceder aos problemas e</p><p>apontar soluções para a garantia da disponibilidade e agilidade nos processos computacionais.</p><p>Garante um monitoramento e�ciente, evita-se perda na produtividade e problemas de segurança</p><p>e é possível identi�car sistemas ociosos ou equipamentos desatualizados que estejam trazendo</p><p>prejuízos operacionais.</p><p>Com a popularidade dos sistemas distribuídos, o uso dos dispositivos móveis para</p><p>procedimentos cada vez mais complexos, dos armazenamentos e das operações cloud</p><p>computing, das técnicas de virtualização, a internet das coisas (IoT) e o crescente</p><p>número de</p><p>trabalhos remotos, aumenta-se a preocupação com segurança, embora possibilite mais</p><p>produtividade e e�ciência, desde que se adotem práticas condizentes com essa evolução, como</p><p>é o caso dos monitoramentos contínuos.</p><p>Isso ocorre porque, através do monitoramento, é possível planejar de forma mais assertiva as</p><p>manutenções e atualizações e alocar recursos com maior propriedade. Processos que focam na</p><p>produtividade não podem perder tempo com falhas e interrupções. O monitoramento não evita</p><p>que existam problemas, mas minimiza consideravelmente o tempo de resolução deles.</p><p>Para melhor compreendermos o monitoramento dos sistemas operacionais (SO) e servidores,</p><p>vamos, primeiro, entender quais são os seus papéis numa infraestrutura de TI. O conceito de</p><p>sistema operacional (SO) já é bastante difundido. Trata-se de um software ou conjunto de</p><p>softwares que tem como função servir de interface entre um sistema microprocessado e o</p><p>usuário (DENARDIN; BARRIQUELLO, 2019).</p><p>Os sistemas operacionais gerenciam tarefas, memória e recursos e podem prover sistemas de</p><p>arquivos (FAT, NTFS, EXT3, ReiserFS, etc.). Também é função de um SO implementar protocolos</p><p>de comunicação, como TCP/IP e Universal Serial Bus (USB). No entanto, as aplicações em um</p><p>sistema operacional para um computador pessoal diferem das de um aparelho celular ou de um</p><p>SO de tempo real (RTOS), por exemplo.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Faz-se necessário, portanto, conhecer os tipos de sistemas operacionais antes de partirmos para</p><p>os fundamentos de monitoramento.</p><p>Nesta aula, para facilitar a contextualização, trazemos, segundo o recorte de Tanenbaum (2003,</p><p>p. 20-24), uma descrição genérica de nove deles.</p><p>Sistemas operacionais de computadores de grande porte: so�sticados servidores web,</p><p>servidores para sites de comércio eletrônico em grande escala e servidores para transação</p><p>entre empresas (business-to-business) precisam de um sistema operacional que processe</p><p>simultaneamente Jobs e de uma quantidade enorme de E/S (Entrada/Saída). Oferecem,</p><p>geralmente, três tipos de serviços:</p><p>Sistemas operacionais de servidores: são executados em servidores, de médio ou grande</p><p>porte, e têm como característica principal servirem múltiplos usuários, compartilhando</p><p>recursos em uma rede.</p><p>Sistemas operacionais de multiprocessadores: para obtenção de potência computacional,</p><p>são conectadas várias CPUs em um único sistema. Esses sistemas são denominados</p><p>computadores paralelos, multicomputadores ou multiprocessadores.</p><p>Sistemas operacionais de computadores pessoais: oferece uma interface entre o</p><p>computador e um único usuário.</p><p>Sistemas operacionais de computadores portáteis: são desenvolvidos para operar em</p><p>computadores portáteis ou assistente pessoal digital (PDA), computadores bem pequenos</p><p>que cabem no bolso. Esses computadores, hoje, se assemelham muito aos smartphones,</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>com capacidade de manipular telefonia, fotogra�a digital e outras funções. Os sistemas</p><p>operacionais portáteis mais populares são Symbian OS e Palm OS.</p><p>Sistemas operacionais embarcados: são executados em dispositivos que não são</p><p>considerados computadores, como TVs, forno micro-ondas, celulares, carros, etc.</p><p>Sistemas operacionais de nós sensores (sensor node): usando comunicação sem �o e</p><p>computadores pequenos, redes de nós sensores estão sendo empregadas para proteger</p><p>perímetros de prédios, guardar fronteiras nacionais, medir temperatura e muito mais. Cada</p><p>nó sensor é um computador próprio com sistema operacional próprio. O TinyOS é um</p><p>exemplo.</p><p>Sistemas operacionais de tempo real: sua característica fundamental é terem o tempo</p><p>como parâmetro para a realização de tarefas. Se elas não ocorrem no tempo certo, existe</p><p>um sistema de tempo real crítico, mas existe a variação de tempo real não crítico, que um</p><p>prazo no tempo é aceitável. VxWorks e QNX são exemplos de sistemas operacionais de</p><p>tempo real.</p><p>Sistemas operacionais de cartões inteligentes: alguns realizam apenas uma função, como</p><p>pagamentos eletrônicos e outros múltiplas funções em um mesmo cartão inteligente.</p><p>Embora existam vários tipos de sistemas operacionais, nosso foco são aqueles que operam com</p><p>servidores, ou seja, os sistemas operacionais que operam em rede. Nesse contexto, o servidor de</p><p>rede se apresenta como um computador mais robusto, que tem a função de responder às</p><p>solicitações de outros computadores da rede (clientes), compartilhando produtos e serviços,</p><p>caracterizando o modelo de arquitetura conhecido como Cliente/Servidor.</p><p>A vantagem dessa abordagem é que qualquer alteração feita no servidor alimenta todos os</p><p>clientes conectados (GONÇALVES, 2017).</p><p>Com o crescimento dos sistemas operacionais para redes, passou-se a adotar o conceito de</p><p>servidores dedicados, que tornam os servidores independentes entre si. Isso aumenta os custos</p><p>de hardware, mas garante que os recursos do servidor estejam disponíveis (disponibilidade)</p><p>mesmo se algum servidor apresentar falhas.</p><p>Os problemas de custo, por sua vez, podem ser minimizados com o uso de virtualização, quando</p><p>dois ou mais sistemas operacionais podem ser locados em um único servidor físico (hardware),</p><p>simultaneamente e independentes.</p><p>Assim como os sistemas operacionais, existem vários tipos de servidores: servidores de</p><p>aplicação, servidor de nuvem, servidor de banco de dados, servidor de arquivos, servidor de e-</p><p>mail, servidor de impressão, servidor Proxy, servidor Web, en�m, junto aos sistemas operacionais,</p><p>os servidores atuam com o objetivo de atender às solicitações dos clientes e facilitar o</p><p>compartilhamento de informações e recursos.</p><p>_____</p><p>Re�ita</p><p>A máxima popular “É melhor prevenir que remediar” aponta para o entendimento da necessidade</p><p>da monitoração de redes de computadores. Como a indisponibilidade de um serviço pode afetar</p><p>os negócios de uma empresa? O que acontece quando um sistema, que deveria estar on-line 24h</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>por dia, apresenta uma falha em um horário que não tem um pro�ssional para solucionar o</p><p>problema? Além da segurança, quais são as outras vantagens que uma monitoração pode trazer?</p><p>Por que monitorar sistemas operacionais e servidores</p><p>As novas características provenientes da evolução das redes de computadores e dos sistemas</p><p>fomentaram um crescimento exponencial da indústria de desenvolvimento de softwares, no</p><p>entanto apresentaram novos problemas, que precisam ser minimizados com um maior controle</p><p>das operações de seus sistemas operacionais e servidores.</p><p>O monitoramento dos sistemas operacionais e servidores procura se anteceder aos problemas e</p><p>apontar soluções para a garantia da disponibilidade e agilidade nos processos computacionais.</p><p>Garantindo um monitoramento e�ciente, evita-se perda na produtividade, minimizam-se</p><p>problemas de segurança e é possível identi�car sistemas ociosos ou equipamentos</p><p>desatualizados que estejam trazendo prejuízos operacionais.</p><p>Para tanto, existem métricas, técnicas e ferramentas exclusivas para monitorar as aplicações e</p><p>os servidores onde estas aplicações rodam. O objetivo desses softwares é garantir a</p><p>estabilidade dos sistemas e fornecer informações com antecedência necessária para que se</p><p>evite a indisponibilidade de processos.</p><p>Métricas de monitoramento</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Não existe um consenso sobre todas as práticas que devem ser seguidas para a implantação de</p><p>um monitoramento, no entanto as interpretações mais comuns apontam para algumas métricas,</p><p>que detalharemos aqui. Os monitoramentos buscam coletar, processar, agregar e exibir dados</p><p>que são coletados de forma quantitativa e em tempo real (BEYER et al., 2016).</p><p>Beyer et al. (2016) dividem o monitoramento para sistemas de alto nível em: monitoramento de</p><p>caixa preta e monitoramento de caixa branca. O monitoramento de caixa preta faz a testagem do</p><p>comportamento externo do sistema, assim como o usuário vê. É um método baseado em</p><p>amostragem, em que se monitora o mesmo sistema que é responsável pelas solicitações dos</p><p>clientes.</p><p>Esse monitoramento representa problemas ativos, não previstos, é feito</p><p>de forma programável e</p><p>contém um mecanismo de validação. Cada vez que uma sondagem é feita, são armazenados os</p><p>resultados (aprovado ou com falhas) em relatórios e alertas. Assim, é possível que se faça o</p><p>diagnóstico de um problema.</p><p>O monitoramento caixa branca é capaz de inspecionar todos os processos internos do sistema,</p><p>como logs (processos de registros de eventos) ou endpoints HTTP (ponto de extremidade</p><p>conectado diretamente à rede principal), com instrumentação. Esse monitoramento, portanto,</p><p>permite a detecção de problemas iminentes, falhas mascaradas por novas tentativas, e assim</p><p>por diante.</p><p>As métricas são as medidas que devem ser feitas no sistema. Quase sempre são numéricas</p><p>(contadores), que registram valores quantitativos e realizam cálculos para gerarem estatísticas,</p><p>mas, em alguns casos, são métricas de string. Para monitorar um sistema, é criado e adicionado</p><p>um código que expõe o estado interno dele.</p><p>As métricas de monitoramento variam de acordo com a necessidade particular de cada</p><p>organização. No geral, mede-se:</p><p>latência: tempo de execução, espera e resposta de atendimento de uma solicitação.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>tráfego: medida da carga de trabalho, da demanda que se exige do sistema. Qual é a média</p><p>de solicitações, tempo e demanda da CPU.</p><p>erros: mensura as taxas de solicitações com falhas, sejam parciais ou completas.</p><p>saturação: controle dos recursos que precisam ser mais restritos (controle de memória ou</p><p>restrição de E/S, por exemplo), medição de carga de trabalho em níveis mais altos (o</p><p>sistema suporta um tráfego maior?) ou, ainda, identi�car a capacidade de armazenamento</p><p>de um disco.</p><p>disponibilidade de servidores: quanti�car quantos servidores estão ativos ou inativos em</p><p>uma rede.</p><p>métricas de segurança: de�nição dos computadores que estão com softwares antivírus</p><p>instalados, patches de segurança ativos, checar as intrusões, autenticações e autorizações,</p><p>entre outras.</p><p>Geralmente, quando se constrói um sistema de monitoramento do zero, atribui-se a média de</p><p>latência e o uso médio da CPU, da memória, da capacidade do banco de dados, etc. São fatores</p><p>que devem ser prioridades no planejamento das métricas.</p><p>Com o emprego das métricas, será possível uma otimização que possibilitará que se faça um</p><p>monitoramento contínuo em vários aspectos. É preciso que sejam feitas con�gurações, para que</p><p>o monitoramento seja e�ciente. Essas con�gurações incluem:</p><p>fazer alterações no monitoramento da con�guração (quantas solicitações de pull request</p><p>ou alterações por semana são feitas no repositório que contém a con�guração de</p><p>monitoramento?);</p><p>ter controle dos falsos positivos (alertas que foram dados, mas que não ajudaram a prever</p><p>falhas e precisam ser excluídos) e dos falsos negativos (falhas que aconteceram, mas que</p><p>não foram alertadas);</p><p>criar, con�rmar e silenciar alertas;</p><p>con�gurar a usabilidade dos alertas, runbooks e painéis, para que seja compreensível por</p><p>todos da equipe (GOOGLE CLOUD, 2021).</p><p>Ferramentas de con�gurações para monitoramento de SO e servidores</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Existem várias ferramentas de monitoramento no mercado. Essas ferramentas são responsáveis</p><p>por analisar a funcionalidade de um sistema, gerar relatórios, apresentar alertas, ou seja,</p><p>identi�car problemas.</p><p>Algumas têm, também, o caráter de monitoramento técnico, que se preocupa com a integridade</p><p>do hardware ou dos sistemas. Algumas das ferramentas mais populares são: Remote network</p><p>monitoring MIB (Rmon), OpenNMS, Cacti, Nagios, Tripwire e Zabbix.</p><p>_____</p><p>Exempli�cando</p><p>A Tripwire fornece vários produtos para monitoração, de acordo com a necessidade de cada</p><p>empresa. Na prática, os produtos são capazes de simpli�car o monitoramento de eventos,</p><p>mandando alertas somente do que realmente importa; detectam e respondem anomalias e</p><p>atividades suspeitas; têm um pacote de segurança para ameaças internas; auditoria de usuários;</p><p>autenticação; detecção de DoS; detecção de violação e de intrusão; �ltram os dados relevantes;</p><p>apresentam uma visibilidade completa dos ativos da rede; gerenciam as alterações e os logs de</p><p>eventos; detectam os desvios na linha de base segura; entre outras vantagens (TRIPWIRE, 2021).</p><p>_____</p><p>Dentre as citadas, a Zabbix é uma das soluções mais populares para monitoramento em</p><p>sistemas distribuídos. Ela é uma ferramenta Open Source, que é responsável por monitorar os</p><p>dispositivos da rede e a integridade dos servidores, sistemas e aplicações. Zabbix usa um único</p><p>servidor para monitorar de forma distribuída milhares de itens, coletando as métricas e o</p><p>processamento de itens de vários servidores subordinados e armazenando as informações em</p><p>servidor central.</p><p>Seu relatório e os grá�cos de amostragem são bastante intuitivos, e toda a con�guração de</p><p>monitoramento é feita através de uma interface web, também intuitiva, na qual é possível</p><p>con�gurar alertas e ações com base nas métricas que forem de�nidas.</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>Ainda, é possível incorporar o uso do software Grafana, que sugere um painel, em que se pode</p><p>visualizar as informações mais importantes coletadas (dashboard), de maneira ainda mais</p><p>detalhada (LIMA, 2020).</p><p>Nos dias atuais, existem muitas ferramentas de monitoração disponíveis. Com a cultura DevOps,</p><p>a utilização de uma ferramenta como o Zabbix e outras aqui citadas pode parecer desnecessária,</p><p>no entanto o Zabbix traz, em sua proposta, uma ferramenta centralizada. Ao invés de trabalhar</p><p>com várias ferramentas, o ideal é integrar todas elas e fazer com que todos os alertas sejam</p><p>disparados por uma única.</p><p>_____</p><p>Assimile</p><p>Uma das práticas mais comuns no universo DevOps é unir ferramentas de observalidade e</p><p>monitoramento com ferramentas de coleta de dados. Uma das interações mais perfeitas é a</p><p>junção de Prometheus e Grafana.</p><p>Com essa união, é possível expor as métricas e os dados sobre os elementos internos que</p><p>precisam ser observados no servidor ou serviço e fazer o agrupamento desses dados, para que</p><p>tenhamos uma visão fragmentada de períodos e melhor entendimento do funcionamento do</p><p>sistema ao longo do tempo.</p><p>Com os dados coletados, é possível fazer uma análise que resultará numa tomada de decisão</p><p>mais</p><p>Monitoramentos com foco nas práticas contemporâneas</p><p>Devido à evolução das arquiteturas de software, é necessário pensar um monitoramento focado</p><p>nos novos sistemas, que são heterogêneos, dinâmicos e com gestão complexa. Para tanto, é</p><p>Disciplina</p><p>Infraestrutura Ágil</p><p>preciso que se re�ita sobre práticas de monitoramento assertivas a esse cenário.</p><p>A cloud computing é uma realidade. Serviços e aplicações são executados numa rede</p><p>distribuída, usando recursos virtuais assistidos por protocolos da internet. A edge computing, por</p><p>sua vez, incorpora conceitos da internet das coisas (IoT) para sugerir a disponibilidade de</p><p>serviços computacionais mais perto dos dispositivos terminais. Essas tecnologias são o estado</p><p>de arte das redes distribuídas hoje, portanto é pensando nelas que devemos concentrar nossas</p><p>atenções sobre a escolha das ferramentas de monitoramento (CORREIA, 2019).</p><p>Prometheus: é uma ferramenta de monitoramento que, como as demais, agrega métricas,</p><p>avalia expressões, mostra os resultados e gerencia alertas. Sua vantagem sobre as outras</p><p>é que se trata de um sistema adaptável tanto para monitoração de arquiteturas</p><p>centralizadas como para arquiteturas orientadas a serviços altamente dinâmicos.</p><p>Graphite: monitora tanto infraestruturas simples como em nuvens, assim como o</p><p>desempenho de sites, aplicativos, serviços de negócios e servidores em rede. Com seu uso,</p><p>tornou-se fácil armazenar, recuperar, compartilhar e visualizar dados de séries temporais.</p><p>Comparado ao Prometheus, o Graphite é uma ferramenta com tarefas mais simples. Não coleta</p><p>dados, seu modelo de dados é menos detalhado, os dados armazenados não podem ser</p><p>con�gurados com o tempo que persistirão no disco e não suporta gerenciamento de alertas</p><p>(BERMAN, 2020).</p><p>In�uxDB: executa análises para obter detecções e resoluções mais rápidas; con�gura</p><p>alertas ou detecções de anomalias; faz ingestão</p>