O que um plantão? Plantão é quando um engenheiro fica disponível para responder imediatamente ao mau funcionamento do serviço, a qualquer hora, em qualquer dia do ano. Geralmente isso envolve algum tipo de sistema de alerta automático, combinado com uma forma de notificar o engenheiro.

Para o escopo deste artigo, definimos um Alerta como um processo configurado automaticamente que é acionado quando um determinado limite, como taxa de erro ou memória disponível, é atingido.

Uma Notificação geralmente é acionada pelo alerta e chega ao engenheiro por meio de uma notificação de aplicativo móvel ou chamada telefônica.

Espera-se que o engenheiro de plantão seja capaz de responder; ou seja, possua as ferramentas necessárias em mãos, como acesso à internet e notebook, e que seja qualificado. Existem outros modelos para isso. Muitas empresas possuem uma equipe de pessoas, geralmente chamadas de SREs, que ficam de plantão para todos os sistemas.

Como definir a qualidade de um plantão?

Duas métricas principais podem medir a qualidade de um rodízio de plantão. Tempo Médio para Reconhecimento (MTTA) e Tempo Médio para Resolução (MTTR).

O primeiro mede a rapidez com que um engenheiro confirma uma notificação, e revela se determinado plantão está saudável ou não. O outro mede a rapidez com que uma notificação confirmada é resolvida; revelando a qualidade das ferramentas e da documentação. 

Com isso em mente, é natural imaginar que o grupo mais bem preparado para ficar de plantão em um conjunto de serviços é o mesmo grupo que criou e faz manutenção desses serviços.

Porém, na maioria das vezes, as equipes são formadas por duas a oito pessoas, então elas precisariam ficar de plantão muitos dias por mês, o que leva ao próximo ponto.

Confira nossas oportunidades de trabalho 

Ficar de plantão não é uma atividade agradável

Imagine o caso improvável de sua empresa produzir software que nunca dá problema. Mesmo assim, não é divertido ficar preso em casa, ter que levar o telefone do trabalho para o banheiro, não poder tomar um vinho e saber que, a qualquer momento, você pode ser acordado por alguma notificação.

Já fui acordado algumas vezes no meio da noite, cheio de adrenalina, já pegando o notebook. Voltar a dormir depois é um desafio.

Dessa forma, o ideal seria fazer os engenheiros ficarem de plantão o menor número possível de vezes por mês.

Mas como aliar isso à qualidade?

Fazendo compensações

Para reduzir o tempo de plantão, você precisa ter mais pessoas no rodízio. Sem aumentar as equipes, a única maneira possível é ter várias equipes de plantão para todos os sistemas, o que significa que as pessoas que estão de plantão não são necessariamente responsáveis pela manutenção de todos os sistemas.

Essa situação pode causar ansiedade: como posso ficar de plantão para um sistema que não conheço? Aqui estão os pré-requisitos para tornar isso possível:

Monitoramento e ferramentas

Sem um monitoramento adequado, é impossível atingir esse objetivo. Você precisa ter painéis e ferramentas de solução de problemas compreensíveis.

Documentação

Nenhum alerta deve ser criado sem um manual de instruções detalhado.

Os manuais devem ser criados e testados por engenheiros de fora da equipe. Quando alguém escreve um manual de instruções, a pessoa acaba fazendo suposições sobre o conhecimento do engenheiro que o lerá. “Conecte-se ao servidor de produção” pode não significar nada para outra pessoa.

Lembre-se de que a pessoa que lê o manual está sob alto estresse. Ela está preocupada e agitada. A última coisa que precisa é descobrir que os links do manual não levam a lugar nenhum.

Um manual de instruções começa com um link para o painel relevante que mostra os dados que acionaram o alerta.

Em seguida, ele lista instruções, com IPs, comandos bash etc. para solucionar problemas e restaurar o serviço.

Nenhum alerta instável

Quando uma equipe está de plantão para seus próprios sistemas, ela sabe que alguns alertas são um pouco instáveis. “Este alerta sempre dispara nas noites de sexta-feira e desaparece automaticamente em três minutos” ou “Este alerta dispara sempre que há uma implantação”. Eles confirmam a notificação e voltam felizes ao que estavam fazendo.

Esse tipo de coisa não pode acontecer de maneira nenhuma quando você compartilha responsabilidades de plantão. O outro engenheiro não sabe das situações. Ele vai acordar e abrir o notebook só para descobrir que o alerta já foi resolvido: uma péssima maneira de fazer amigos.

Configurando o rodízio

Conheça nossas oportunidades

Dias da semana

Existem muitas configurações possíveis, sendo os rodízios semanais ou diários muito populares. Depois de muitas iterações e análises, concluímos, sem surpresa, que as pessoas se preocupam muito mais com os fins de semana do que com os dias da semana.

De acordo com isso, nossa configuração recomendada é de cinco turnos por semana, o que resulta na seguinte quantidade de horas de plantão fora das 8 horas padrão no escritório:

  • Segunda e terça-feira: 32h
  • Quarta e quinta-feira: 32h
  • Sexta-feira: 16h
  • Sábado: 24h
  • Domingo: 24h

Os turnos geralmente começam no horário em que a maioria dos engenheiros está no escritório, digamos às 10h, e terminam às 10h do dia seguinte (ou às 2h, dependendo do turno).

Isso significa que são necessárias cinco pessoas diferentes para preencher todos os turnos durante uma semana de plantão.

Duas camadas: a primária e a de best-effort

A maioria das ferramentas fornece uma maneira de fazer um rodízio de plantão em várias camadas.

Nossa configuração recomendada é a seguinte:

  1. Rodízio primário com todas as pessoas.
  2. Obrigatório.
  3. Apenas uma pessoa de cada vez.
  4. Rodízio secundário com todos os engenheiros da equipe especialista no alerta.
  5. Best-effort: segunda camada de rodízio; não se espera que as pessoas aqui estejam disponíveis e prontas para responder imediatamente.
  6. Se uma notificação chegar a essa camada, todos nela serão notificados ao mesmo tempo.

Com essa configuração, digamos que o engenheiro principal seja notificado, siga o manual de instruções, mas não consiga restaurar o serviço. Quando ele escalar a notificação, todos os membros do rodízio secundário serão avisados.

O fato de o rodízio secundário funcionar como best-effort pode deixar as pessoas nervosas. E se ninguém puder responder?

Certamente temos essa preocupação; no entanto, após experimentação real com dezenas e dezenas de notificações, nem uma vez tivemos problemas de falta de resposta da camada secundária.

Implementando

Supondo que sua empresa já tenha rodízios de plantão, geralmente um por equipe, minha recomendação é começar aos poucos.

Primeiro, escolha duas equipes para fundir e converse sobre o assunto. Se as equipes tiverem algum contexto semelhante, pode ser um pouco mais fácil.

Em seguida, obtenha algumas estatísticas de alertas: quantos alertas por mês, quantos fora do horário de trabalho. Se puder, descubra quantos foram resolvidos automaticamente.

Com esses dados em mãos, peça às duas equipes para limpar os alertas: remova alguns, ajuste outros. Sem dúvida alguma, escreva manuais de instrução para todos eles.

Além disso, este pode ser o momento certo para ler ou reler o excelente livro de Rob Ewaschuk, Philosophy on Alerting no Google. Descobrimos que a maioria das equipes possui, no máximo, quatro ou cinco alertas críticos para acordar as pessoas no meio da noite, e muitas vezes é menos que isso.

Em geral, os alertas críticos devem apontar para sintomas que afetam os usuários, e não apenas para taxas de erro elevadas ou atrasos em um determinado serviço.

Com os alertas limpos, é hora de configurar o rodízio.

Durante as primeiras duas semanas, para deixar as pessoas um pouco mais confiantes, você ainda pode manter o rodízio obrigatório por equipe, mas primeiro encaminhe os alertas para o rodízio mesclado. 

À medida que as equipes ficam mais confortáveis (e mais felizes) com a nova configuração, você pode adicionar lentamente outras equipes ao rodízio, até estender a todos os engenheiros da empresa, ou a uma quantidade boa o suficiente. Se você tiver vinte pessoas no rodízio, uma pessoa ficará de plantão apenas um turno por mês.

É altamente recomendável que você agende uma retrospectiva mensal com todos os engenheiros do rodízio mesclado, na qual você também pode compartilhar estatísticas de alertas.

Também é importante ter um canal para todos os engenheiros do rodízio discutirem os alertas atuais, se ajudarem na busca a manuais de instrução perdidos, ficarem furiosos com o alerta esquisito que os acordou na noite anterior e negociar trocas de turno.

Integração de novos engenheiros no rodízio

Esta é a forma recomendada de reduzir a ansiedade de uma nova pessoa ingressando no rodízio:

  1. Lembre-os de que o objetivo da pessoa de plantão é restaurar o serviço. Não é corrigir bugs subjacentes, entender toda a arquitetura etc. Basta seguir o manual de instruções, e se não conseguir restaurar o serviço, escalar a notificação.
  2. Explique que eles não precisam ficar online, verificando mensagens e e-mails. Espera-se apenas que eles respondam a um alerta acionado automaticamente.
  3. Pegue um alerta antigo que aconteceu alguns dias antes, faça com que sigam as instruções do manual e mostre os painéis no momento do evento.
  4. E por fim, adicione-os ao canal e ao rodízio.

Problemas comuns

1. Alertas durante o horário de trabalho

Apesar de ser possível silenciar alertas no Alert Manager do Prometheus, é mais comum que as pessoas se esqueçam de fazer isso preventivamente.

Resolver isso é surpreendentemente complicado. Embora as ferramentas tenham configurações para a hora do dia, elas não possuem suporte para calendário de feriados locais.

A menos que você queira se lembrar de atualizar a configuração manualmente para eles, seus alertas podem acabar indo apenas para camada de best-effort.

2. Alertas instáveis

Essa é a pior coisa do plantão compartilhado. As pessoas ficam chateadas quando isso acontece, com muita razão. É fundamental que o líder de cada equipe reserve um tempo para ajustar os alertas instáveis o mais rápido possível, imediatamente ou no dia seguinte.

3. Muitos alertas para uma determinada equipe

Se uma equipe causar muitos alertas em comparação às outras, as outras pessoas vão se chatear. É possível definir “cotas máximas” por equipe, por mês, e caso sejam ultrapassadas, a equipe volta a fazer plantão local.

Não precisamos implementar tal política, mas já contemplamos essa possibilidade. Gerenciar o moral do plantão compartilhado é essencial.

4. Adicionando e removendo pessoas do rodízio

O OpsGenie não faz um trabalho incrível em manter a programação existente ao adicionar ou remover pessoas do rodízio. Parece ser um problema difícil de resolver, dada a natureza infinita dos horários de plantão.

Lembre-se de anunciar essas mudanças no canal de rodízio, para que as pessoas possam verificar se alguma coisa mudou.

5. Uma determinada equipe tem muito conhecimento específico

Às vezes, as equipes são muito discrepantes tecnologicamente, tornando quase impossível escrever manuais de instrução.

Ao tentar implementar esse rodízio, algumas equipes vão falar que esse é o caso. Analise cada situação com cuidado e trabalhe com a equipe para entender se é o momento de fazer mudanças fundamentais ou não.

Caso contrário, a equipe deverá continuar com seu rodízio.

Ferramentas

Aqui no Nubank, usamos Prometheus’ Alert Manager para alertas e OpsGenie para notificações.

Todos os nossos sistemas já são monitorados através do Prometheus, portanto, usar o Alert Manager foi a escolha óbvia.

Conclusão

Com o tempo, à medida que os rodízios evoluem, observamos alguns efeitos colaterais benéficos além do bem-estar pessoal e da qualidade do plantão:

  • Alertas melhores
  • Painéis melhores
  • Manuais de instrução melhores
  • Tecnologia mais homogênea em toda a empresa

E, o mais importante, sistemas melhores que alertam menos e se autorreparam em mais casos.

Confira nossas oportunidades de trabalho 

Conheça nossas oportunidades