Introdução
Alertas e notificações são partes críticas do seu fluxo de trabalho de implantação. Ao trabalhar com um cluster Kubernetes, muitas vezes você precisa ser notificado imediatamente sobre qualquer problema crítico em seu cluster.
O Alertmanager faz parte do kube-prom-stack
instalado em seu cluster no Conjunto Prometheus. Ele permite que você receba alertas de várias fontes como o Prometheus. Regras são criadas no lado do Prometheus, que por sua vez podem disparar alertas. É responsabilidade do Alertmanager interceptar esses alertas, agrupá-los (agregação), aplicar outras transformações e, finalmente, enviá-los para os receptores configurados. Mensagens de notificação podem ser formatadas para incluir detalhes adicionais, se desejado. Você pode usar o Slack, Gmail, etc. para enviar notificações em tempo real.
Nesta seção, você aprenderá como inspecionar os alertas existentes, criar novos e, em seguida, configurar o Alertmanager para enviar notificações via Slack usando o mesmo arquivo de manifesto usado para configurar o Prometheus.
Sumário
- Pré-requisitos
- Passo 1 – Verificar Alertas Incluídos
- Passo 2 – Criar um Novo Alerta
- Passo 3 – Configurar o Alertmanager para Enviar Notificações para o Slack
- Passo 4 – Depurar um Alerta Disparado
- Conclusão
Pré-requisitos
Para completar este tutorial, você precisará de:
- Conjunto de monitoramento Prometheus instalado em seu cluster conforme explicado em Conjunto Prometheus.
- Conjunto Loki instalado em seu cluster conforme explicado em Conjunto Loki.
- Aplicativo de Exemplo Emojivoto implantado no cluster. Siga os passos do repositório principal. Você estará criando alertas para este aplicativo.
- Permissões administrativas sobre um espaço de trabalho do Slack. Mais tarde, você estará criando um aplicativo com um webhook de entrada que será usado para enviar notificações do Alertmanager.
Passo 1 – Verificar Alertas Incluídos
kube-prom-stack
já possui mais de cem regras ativadas. Para acessar o console do Prometheus, primeiro faça um encaminhamento de porta para sua máquina local.
Abra um navegador da web em localhost:9091 e acesse o item de menu Alertas. Você deverá ver alguns Alertas predefinidos e deve se parecer com o seguinte:
Clique em qualquer um dos alertas para expandi-lo. Você pode ver informações sobre a expressão que ele consulta, as etiquetas que foram configuradas e anotações, que são muito importantes do ponto de vista de modelagem. O Prometheus suporta modelagem nas anotações e etiquetas dos alertas. Para mais informações, consulte a documentação oficial.
Passo 2 – Criando um Novo Alerta
Para criar um novo alerta, você precisa adicionar uma nova definição na seção additionalPrometheusRule
do arquivo de valores do Helm kube-prom-stack
.
Você irá criar um alerta de exemplo que será acionado se o namespace emojivoto
não tiver um número esperado de instâncias. O número esperado de pods para a aplicação emojivoto
é 4.
Primeiro, abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values.yaml
fornecido no repositório Starter Kit, usando um editor de texto de sua escolha (preferencialmente com suporte a lint YAML). Em seguida, descomente o bloco additionalPrometheusRules
.
Por fim, aplique as configurações usando o helm
:
Para verificar se o alerta foi criado com sucesso, navegue até o Console do Prometheus, clique no item de menu Alertas e identifique o alerta EmojivotioInstanceDown
. Deve estar visível no final da lista.
Passo 3 – Configurar o Alertmanager para Enviar Notificações para o Slack
Para concluir esta seção, você precisa ter direitos administrativos sobre um espaço de trabalho do Slack. Isso permitirá que você crie o webhook de entrada necessário nos próximos passos. Você também precisará criar um canal onde deseja receber notificações do Alertmanager.
Você configurará o Alertmanager para percorrer todos os alertas recebidos imprimindo seus respectivos resumos e descrições em novas linhas.
- Abra um navegador da web e acesse
https://api.slack.com/apps
. Clique no botão Criar novo aplicativo. - Na janela Criar um aplicativo, selecione a opção Do zero. Em seguida, dê um nome para o seu aplicativo e selecione o espaço de trabalho apropriado.
- Na página Informações básicas, clique na opção Webhooks de entrada, ative-a e clique no botão Adicionar novo webhook ao espaço de trabalho na parte inferior.
- Na próxima página, use a lista suspensa Procurar um canal… para selecionar o canal desejado onde deseja enviar notificações. Quando estiver pronto, clique no botão Permitir.
- Copie o valor da URL do webhook exibido na página. Você precisará dele na próxima seção.
Em seguida, você informará ao Alertmanager como enviar notificações para o Slack. Abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
fornecido no repositório do Starter Kit usando um editor de texto de sua escolha. Descomente todo o bloco alertmanager.config
. Certifique-se de atualizar os valores slack_api_url
e channel
substituindo os espaços reservados <>
de acordo.
No configuração acima,
slack_api_url
: URL do webhook de entrada do Slack criada na etapa 4receivers.[].slack_configs
: define o canal do Slack usado para enviar notificações, título da notificação e a mensagem real. Também é possível formatar a mensagem de notificação (ou corpo) com base em seus requisitos.título
etexto
: itera sobre os alertas disparados e imprime o resumo e a descrição usando o sistema de modelagem do Prometheus.send_resolved
: booleano indicando se o Alertmanager deve enviar uma notificação quando um alerta não estiver mais disparando.
Os parâmetros matcher
e continue
ainda estão comentados, pois você os descomentará mais tarde no guia. Por enquanto, eles devem permanecer comentados.
Finalmente, faça o upgrade do kube-prometheus-stack
, usando helm
:
Neste ponto, você deverá receber notificações do Slack para todos os alertas disparados.
Em seguida, você vai testar se o alerta EmojivotoInstanceDown
adicionado anteriormente funciona e envia uma notificação para o Slack diminuindo o número de réplicas para a implantação /emoji
do namespace emojivoto
.
Do seu terminal, execute o seguinte comando para reduzir o número de réplicas para a implantação /emoji
para 0:
Abra um navegador da web em localhost:9091 e acesse o item de menu Alertas. Procure pelo alerta EmojivotoInstanceDown criado anteriormente. O status do alerta deve indicar Disparando após cerca de um minuto de redução da implantação.
A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto
is lower than the expected 4.” alert in the Slack message as configured in the annotations.description
config of the additionalPrometheusRulesMap
block.
Atualmente, todos os disparos de alerta serão enviados para o canal do Slack. Isso pode causar fadiga de notificação. Para analisar qual notificação é enviada, você pode restringir o Alertmanager a enviar notificações apenas para alertas que correspondam a determinado padrão. Isso é feito usando o parâmetro matcher
.
Abra o arquivo 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml
fornecido no repositório do Starter Kit usando um editor de texto de sua escolha. Remova os comentários de todo o bloco alertmanager.config
. Certifique-se de descomentar os parâmetros matcher
e continue
:
Por fim, atualize o kube-prometheus-stack
usando o helm
:
Agora, você deverá receber apenas alertas do nome de alerta correspondente EmojivotoInstanceDown
. Como o continue
está definido como falso, o Alertmanager enviará notificações apenas deste alerta e parará de enviá-las para outros.
Clicar no nome da notificação no Slack abrirá um navegador da web para uma página da web inacessível com o DNS interno do Kubernetes do pod Alertmanager. Isso é esperado. Alguns links úteis para você verificar: Para mais informações, você pode conferir Serviço de DNS do pod, Parâmetros de configuração para o AlertManager, e alguns Exemplos de notificação.
Passo 4 – Depurar um Alerta Acionado
Quando um alerta é acionado e envia uma notificação no Slack, é importante que você possa depurar o problema facilmente e encontrar a causa raiz prontamente.
Para fazer isso, você pode fazer uso do Grafana, que já foi instalado nos tutoriais do Conjunto Prometheus e Conjunto Loki.
Crie um encaminhamento de porta para o Grafana na porta 3000
:
Abra um navegador da web em localhost:3000 e faça login usando as credenciais padrão admin/prom-operator
.
Navegue até a seção de Alertas. No filtro de Estado, clique na opção Disparando. Identifique o alerta emojivoto-instance-down
definido na seção de Criando um Novo Alerta e expanda-o. Você deverá ver o seguinte:
Clique no botão Ver gráfico. Na próxima página, você pode observar a contagem do número de pods no namespace emojivoto
exibida como uma métrica. Observe que o Grafana filtra os resultados usando um intervalo de tempo de Última 1 hora por padrão. Ajuste isso para o intervalo de tempo quando o Alerta é disparado. Você pode ajustar o intervalo de tempo usando a opção De Para para um resultado mais granular ou usando um Intervalo Rápido como Últimos 30 minutos
.
Na guia de Exploração, selecione a fonte de dados Loki. No navegador de Log, insira o seguinte: {namespace="emojivoto"}
e clique no botão Executar consulta do lado superior direito da página. Você deverá ver o seguinte:
Certifique-se de ajustar o intervalo de tempo conforme necessário.
A partir desta página, você pode filtrar ainda mais os resultados de log. Por exemplo, para filtrar os logs para o contêiner web-svc
do namespace emojivoto
, você pode inserir a seguinte consulta: {namespace="emojivoto", container="web-svc"}
Mais explicações sobre o uso do LogQL
podem ser encontradas em Passo 3 – Usando LogQL.
Você também pode utilizar os Eventos do Kubernetes Exportados instalados anteriormente e filtrar eventos relacionados ao namespace emojivoto
.
Insira a seguinte consulta no navegador de logs: {app="event-exporter"} |= "emojivoto"
. Isso retornará os eventos do Kubernetes relacionados ao namespace emojivoto
.
Conclusão
Neste tutorial, você aprendeu como inspecionar alertas existentes, criar novos e configurar o AlertManager
para enviar notificações ao Slack.
Saiba Mais
- Configurar um Conjunto de Monitoramento do Kubernetes com Prometheus, Grafana e Alertmanager na DigitalOcean
- Criar Alertas usando a DigitalOcean Uptime
O próximo passo é configurar o Backup e Restauração usando o Velero ou o TrilioVault no seu cluster DOKS.