Serviço gerenciado do Azure Monitor para grupos de regras do Prometheus

As regras no Prometheus atuam nos dados conforme são coletados. Eles são configurados como parte de um grupo de regras do Prometheus, que é aplicado às métricas do Prometheus no workspace do Azure Monitor.

Tipos de regras

Há dois tipos de regras do Prometheus, conforme descrito na tabela a seguir.

Tipo Descrição
Alerta As regras de alertas permitem criar um alerta do Azure Monitor com base nos resultados de uma consulta do Prom QL (Prometheus Query Language). Os alertas disparados pelas regras de alerta do Prometheus Gerenciado pelo Azure são processados e disparam notificações de maneira semelhante a outros alertas do Azure Monitor.
Gravação As regras de gravação permitem pré-computar expressões frequentemente necessárias ou computacionalmente extensas e armazenar seus resultados como um novo conjunto de séries temporais. As séries temporais criadas pelas regras de gravação são ingeridas de volta ao workspace do Azure Monitor como novas métricas do Prometheus.

Criar regras do Prometheus

Grupos de regras, regras de gravação e regras de alerta do Prometheus Gerenciado pelo Azure podem ser criados e configurados usando o tipo de recurso do Azure Microsoft.AlertsManagement/prometheusRuleGroups, onde as regras de alerta e as regras de gravação são definidas como parte das propriedades do grupo de regras. Os grupos de regras do Prometheus são definidos com um escopo de um workspace específico do Azure Monitor. Os grupos de regras do Prometheus podem ser criados usando modelos do ARM (Azure Resource Manager), API, CLI do Azure ou PowerShell.

Os grupos de regras do Prometheus Gerenciado pelo Azure seguem a estrutura e a terminologia dos grupos de regras de código aberto do Prometheus. Nomes de regra, expressão, cláusula "for", rótulos, anotações têm suporte na versão do Azure. As seguintes principais diferenças entre os grupos de regras de OSS e o Prometheus Gerenciado pelo Azure devem ser observadas:

  • Os grupos de regras do Prometheus Gerenciado pelo Azure são gerenciados como recursos do Azure e incluem informações necessárias para o gerenciamento de recursos, como a assinatura e o grupo de recursos onde o grupo de regras do Azure deve residir.
  • As regras de alerta do Prometheus Gerenciado pelo Azure incluem propriedades dedicadas que permitem que os alertas sejam processados como outros alertas do Azure Monitor. Por exemplo, a severidade do alerta, a associação do grupo de ações e a configuração de resolução automática de alerta têm suporte como parte das regras de alerta do Prometheus Gerenciado pelo Azure.

Observação

Para os clusters Kubernetes do AKS ou do ARC, você pode usar algumas das regras de alertas recomendadas. Confira as regras de alerta predefinidas aqui.

Limitando as regras a um cluster específico

Opcionalmente, você pode limitar as regras em um grupo de regras para consultar dados originários de um único cluster específico, adicionando um escopo de cluster ao seu grupo de regras e/ou usando a propriedade clusterName do grupo de regras. Se seu espaço de trabalho do Azure Monitor contiver uma grande quantidade de dados de vários clusters, você deve limitar as regras a um único cluster. Nesse caso, há uma preocupação de que a execução de um único conjunto de regras em todos os dados possa causar problemas de desempenho ou limitação. Ao usar o escopo de cluster, você pode criar vários grupos de regras, cada um configurado com as mesmas regras, com cada grupo cobrindo um cluster diferente.

Para limitar seu grupo de regras a um escopo de cluster usando um modelo do ARM, adicione a ID de Recurso do Azure do seu cluster à listascopes[] do grupo de regras. A lista de escopos ainda deve incluir a ID do recurso do workspace do Azure Monitor. Os seguintes tipos de recursos de cluster têm suporte como um escopo de cluster:

  • Cluster do Serviço de Kubernetes do Azure (AKS) (Microsoft.ContainerService/managedClusters)
  • Clusters de Kubernetes habilitados para Azure Arc (Microsoft.kubernetes/connectedClusters)
  • Dispositivos conectados do Azure (Microsoft.ResourceConnector/appliances)

Além da ID do cluster, você pode configurar a propriedade clusterName do seu grupo de regras. A propriedade "clusterName" deve corresponder ao rótulo cluster que é adicionado às suas métricas quando extraído de um cluster específico. Por padrão, esse rótulo é definido para a última parte (nome do recurso) da sua ID do cluster. Se você tiver alterado esse rótulo usando a configuração de "cluster_alias" em seu configmap de extração de cluster, você deve incluir o valor atualizado na propriedade "clusterName" do grupo de regras. Se sua extração usa o valor de rótulo padrão "cluster", a propriedade "clusterName" é opcional.

Aqui está um exemplo de como um grupo de regras é configurado para limitar consulta para um cluster específico:

{
    "name": "sampleRuleGroup",
    "type": "Microsoft.AlertsManagement/prometheusRuleGroups",
    "apiVersion": "2023-03-01",
    "location": "northcentralus",
    "properties": {
         "description": "Sample Prometheus Rule Group limited to a specific cluster",
         "scopes": [
             "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.monitor/accounts/<azure-monitor-workspace-name>",
             "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.containerservice/managedclusters/<myClusterName>"
         ],
         "clusterName": "<myCLusterName>",
         "rules": [
             {
                ...
             }
         ]
    }
}        

Se ambos os escopos de ID de cluster e clusterName não forem especificados para um grupo de regras, as regras no grupo consultarão os dados de todos os clusters no espaço de trabalho de todos os clusters.

Você também pode limitar seu grupo de regras a um escopo de cluster usando o Portal da interface do usuário.

Criar ou editar o grupo de regras do Prometheus no portal do Azure (versão prévia)

Para criar uma novo grupo de regras na página inicial do portal:

  1. No portal, selecione Monitor>Alertas.
  2. Selecione Grupos de Regras do PrometheusCaptura de tela que mostra como alcançar grupos de regras do Prometheus na tela de alertas do Azure Monitor.
  3. Selecione + Criar para abrir o assistente de criação de grupo de regras Captura de tela que mostra as etapas para criar um novo grupo de regras do Prometheus.

Para editar um novo grupo de regras na página inicial do portal:

  1. No portal, selecione Monitor>Alertas.
  2. Selecione Grupos de Regras do Prometheus para ver a lista de grupos de regras existentes em sua assinatura
  3. Selecione o grupo de regras desejado para entrar no modo de edição.

Configure o escopo do grupo de regras

Na guia Escopo do grupo de regras:

  1. Selecione o workspace do Azure Monitor a partir de uma lista de workspaces disponíveis em suas assinaturas. As regras neste grupo consultam dados a partir desse workspace.
  2. Para limitar seu grupo de regras a um escopo de cluster, selecione a opção Cluster específico:
    • Selecione o Cluster a partir da lista de clusters que já estão conectados ao workspace do Azure Monitor selecionado.
    • O valor Nome do cluster padrão é inserido para você. Você deve alterar esse valor somente se você alterou o valor do seu rótulo do cluster usando cluster_alias.
  3. Selecione Avançar para configurar os detalhes do grupo de regras

Captura de tela que mostra a configuração do escopo do grupo de regras do Prometheus.

Configure os detalhes do grupo de regras

Na guia Detalhes do grupo de regras:

  1. Selecione a Assinatura e o Grupo de recursos onde o grupo de regras deve ser armazenado.
  2. Insira o grupo de regras Nome e Descrição. O nome do grupo de regras não pode ser alterado após a criação do grupo de regras.
  3. Selecione o período Avaliar a cada para o grupo de regras. 1 minuto é o padrão.
  4. Selecione se o grupo de regras é para ser habilitado quando criado.
  5. Selecione Avançar para configurar as regras no grupo.

Captura de tela que mostra a configuração dos detalhes do grupo de regras do Prometheus.

Configurar as regras no grupo

  • Na guia Regras do grupo de regras, você pode ver a lista de regras de gravação e regras de alerta no grupo.

  • Você pode adicionar regras até o limite de 20 regras em um único grupo.

  • As regras são avaliadas na ordem em que aparecem no grupo. Você pode alterar a ordem das regras usando as opções mover para cima e mover para baixo.

  • Para adicionar uma nova regra de gravação:

  1. Selecione + Adicionar regra de gravação para abrir o painel Criar uma regra de gravação.
  2. Insira o Nome da regra. Esse nome é o nome da métrica criada pela regra.
  3. Insira a Expressão PromQL para a regra.
  4. Selecione se a regra é para ser habilitada quando criada.
  5. Você pode inserir pares de chave/valor opcionais de Rótulos para a regra. Esses rótulos são adicionados à métrica criada pela regra.
  6. Selecione Criar para adicionar a nova regra à lista de regras.

Captura de tela que mostra a configuração da regra de gravação do grupo de regras do Prometheus.

  • Para adicionar uma nova regra de alerta:
  1. Selecione + Adicionar regra de alerta para abrir o painel "Criar uma regra de alerta".
  2. Selecione a Severidade de alertas disparados por essa regra.
  3. Insira o Nome da regra. Esse nome é o nome dos alertas disparados pela regra.
  4. Insira a Expressão PromQL para a regra.
  5. Selecione o valor For para o período entre a expressão de alerta se tornar true pela primeira vez e até que o alerta seja disparado.
  6. Você pode inserir pares de chave/valor opcionais de Anotações para a regra. Essas anotações são adicionados aos alertas disparados pela regra.
  7. Você pode inserir pares de chave/valor opcionais de Rótulos para a regra. Esses rótulos são adicionados aos alertas disparados pela regra.
  8. Selecione os grupos de ações que a regra dispara.
  9. Selecione Resolver automaticamente o alerta para resolver automaticamente os alertas se a condição da regra não for mais verdadeira durante o período de Tempo para resolução automática.
  10. Selecione se a regra é para ser habilitada quando criada.
  11. Selecione Criar para adicionar a nova regra à lista de regras.

Captura de tela que mostra a configuração da regra de alerta do grupo de regras do Prometheus.

Termine de criar o grupo de regras

  1. Na guia Marcas, defina as marcações de recursos do Azure necessárias a serem adicionadas ao recurso do grupo de regras. Captura de tela que mostra a guia Marcas quando uma regra de alerta é criada.
  2. Na guia Examinar + criar, o grupo de regras é validado e permite que você saiba sobre quaisquer problemas. Nesta guia, você também pode selecionar a opção Exibir modelo de automação e baixar o modelo para o grupo que está prestes a criar.
  3. Quando a validação for aprovada e você tiver examinado as configurações, selecione o botão Criar. Captura de tela que mostra a guia Revisar e criar quando uma regra de alerta é criada.
  4. Você pode acompanhar a implantação do grupo de regras para garantir que ela seja concluída com sucesso ou ser notificado sobre qualquer erro.

Criando um grupo de regras do Prometheus usando o modelo do Resource Manager

Você pode usar um modelo do Resource Manager para criar e configurar grupos de regras, regras de alerta e regras de gravação do Prometheus. Os modelos do Resource Manager permitem que você crie e configure grupos de regras de forma programática, consistente e reproduzível em todos os seus ambientes.

As etapas básicas são as seguintes:

  1. Use o modelo a seguir como um arquivo JSON que descreve como criar o grupo de regras.
  2. Implante o modelo usando qualquer método de implantação, como o portal do Azure, a CLI do Azure, o Azure PowerShell ou a API Rest.

Exemplo de modelo para um grupo de regras do Prometheus

A seguir está um modelo de exemplo que cria um grupo de regras do Prometheus, incluindo uma regra de gravação e uma regra de alertas. Este modelo cria um recurso do tipo Microsoft.AlertsManagement/prometheusRuleGroups. O escopo desse grupo é limitado a um único cluster do AKS. As regras são executadas na ordem em que aparecem em um grupo.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
           "name": "sampleRuleGroup",
           "type": "Microsoft.AlertsManagement/prometheusRuleGroups",
           "apiVersion": "2023-03-01",
           "location": "northcentralus",
           "properties": {
                "description": "Sample Prometheus Rule Group",
                "scopes": [
                    "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.monitor/accounts/<azure-monitor-workspace-name>",
                    "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.containerservice/managedclusters/<myClusterName>"
                ],
                "enabled": true,
                "clusterName": "<myCLusterName>",
                "interval": "PT1M",
                "rules": [
                    {
                        "record": "instance:node_cpu_utilisation:rate5m",
                        "expression": "1 - avg without (cpu) (sum without (mode)(rate(node_cpu_seconds_total{job=\"node\", mode=~\"idle|iowait|steal\"}[5m])))",
                        "labels": {
                            "workload_type": "job"
                        },
                        "enabled": true
                    },
                    {
                        "alert": "KubeCPUQuotaOvercommit",
                        "expression": "sum(min without(resource) (kube_resourcequota{job=\"kube-state-metrics\", type=\"hard\", resource=~\"(cpu|requests.cpu)\"})) /  sum(kube_node_status_allocatable{resource=\"cpu\", job=\"kube-state-metrics\"}) > 1.5",
                        "for": "PT5M",
                        "labels": {
                            "team": "prod"
                        },
                        "annotations": {
                            "description": "Cluster has overcommitted CPU resource requests for Namespaces.",
                            "runbook_url": "https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubecpuquotaovercommit",
                            "summary": "Cluster has overcommitted CPU resource requests."
                        },
                        "enabled": true,
                        "severity": 3,
                        "resolveConfiguration": {
                            "autoResolved": true,
                            "timeToResolve": "PT10M"
                        },
                        "actions": [
                            {
                               "actionGroupID": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/microsoft.insights/actiongroups/<action-group-name>"
                            }
                        ]
                    }
                ]
            }
        }
    ]
}        

As tabelas a seguir descrevem cada uma das propriedades na definição de regras.

Grupo de regras

O grupo de regras contém as seguintes propriedades.

Nome Obrigatória Type Descrição
name True string Nome do grupo de regras do Prometheus
type True string Microsoft.AlertsManagement/prometheusRuleGroups
apiVersion True string 2023-03-01
location True string Localização de recursos de regiões com suporte na versão prévia.
properties.description Falso string Descrição do grupo de regra.
properties.scopes Verdadeiro string[] Deve incluir o destino da Id do workspace do Azure Monitor. Opcionalmente, também pode incluir mais uma ID de cluster.
properties.enabled Falso booleano Habilitar/desabilitar grupo. O padrão é true.
properties.clusterName Falso string Deve corresponder ao rótulo cluster que está adicionado às métricas extraídas do seu cluster de destino. Por padrão, definido como a última parte (nome do recurso) da ID do cluster que aparece em scopes[].
properties.interval Falso string Intervalo da avaliação em grupo. Padrão = PT1M

Regras de gravação

A seção rules contém as seguintes propriedades para regras de gravação.

Nome Obrigatória Type Descrição
record True string Nome da regra de gravação. Esse nome é usado para a nova série temporal.
expression True string Expressão PromQL para calcular o novo valor da série temporal.
labels True string A regra Prometheus rotula pares chave-valor. Esses rótulos são adicionados à série temporal registrada.
enabled Falso booleano Habilitar/desabilitar grupo. O padrão é true.

Regras de alerta

A seção rules contém as seguintes propriedades para regras de alertas.

Nome Obrigatória Type Description Observações
alert Falso string Nome da regra de alerta
expression True string A expressão PromQL a ser avaliada.
for Falso string Tempo limite de disparo de alerta. Valores - PT1M, PT5M etc.
labels Falso objeto Rótulos de pares chave-valor Rótulos da regra de alertas do Prometheus. Esses rótulos são adicionados em alertas disparados por essa regra.
rules.annotations Falso objeto Anotações de pares chave-valor a serem adicionadas ao alerta.
enabled Falso booleano Habilitar/desabilitar grupo. O padrão é true.
rules.severity Falso inteiro Gravidade do alerta. 0 a 4, sendo 3 o padrão (informativo)
rules.resolveConfigurations.autoResolved Falso booleano Quando habilitado, o alerta é resolvido automaticamente quando a condição não é mais verdadeira. Padrão = true
rules.resolveConfigurations.timeToResolve Falso string Tempo limite de resolução automática do alerta. Padrão = "PT5M"
rules.action[].actionGroupId false string Uma ou mais IDs de recurso do grupo de ações. Cada um é ativado quando um alerta é disparado.

Conversão do arquivo de regras do Prometheus em um modelo do ARM de grupo de regras do Prometheus

Se você tiver um arquivo de configuração de regras do Prometheus (no formato YAML), agora poderá convertê-lo em um modelo do ARM do grupo de regras do Azure Prometheus, usando o utilitário az-prom-rules-converter. O arquivo de regras pode conter a definição de um ou mais grupos de regras.

Além do arquivo de regras, você deve fornecer ao utilitário outras propriedades necessárias para criar os grupos de regras do Azure Prometheus, incluindo: assinatura, grupo de recursos, localização, workspace do Azure Monitor de destino, ID e nome do cluster de destino e grupos de ações (usados para regras de alerta). O utilitário cria um arquivo de modelo que pode ser implantado diretamente ou dentro de um pipe de implantação, fornecendo algumas dessas propriedades como parâmetros. As propriedades que você fornece ao utilitário são usadas para todos os grupos de regras no modelo. Por exemplo, todos os grupos de regras no arquivo são criados na mesma assinatura, grupo de recursos e localização, e usam o mesmo workspace do Azure Monitor. Se um grupo de ações for fornecido como parâmetro para o utilitário, o mesmo grupo de ações será usado em todas as regras de alerta no modelo. Se você quiser alterar essa configuração padrão (por exemplo, usar grupos de ações diferentes em regras diferentes), poderá editar o modelo resultante de acordo com suas necessidades, antes de implantá-lo.

Observação

O utilitário az-prom-convert-utility é fornecido como uma ferramenta de cortesia. Recomendamos que você revise o modelo resultante e verifique se ele corresponde à configuração pretendida.

Criando um grupo de regras do Prometheus usando a CLI do Azure

Você pode usar uma CLI do Azure para criar e configurar grupos de regras, regras de alerta e regras de gravação do Prometheus. Os exemplos de código a seguir usam o Azure Cloud Shell.

  1. No portal, selecione Cloud Shell. No prompt, use os comandos a seguir.

  2. Para criar um grupo de regras do Prometheus, use o comando az alerts-management prometheus-rule-group create. Você pode ver a documentação detalhada sobre o comando de criação do grupo de regras do Prometheus na seção az alerts-management prometheus-rule-group create dos Comandos da CLI do Azure para criar e gerenciar grupos de regras do Prometheus.

Exemplo: Criar um novo grupo de regras do Prometheus com regras

 az alerts-management prometheus-rule-group create -n TestPrometheusRuleGroup -g TestResourceGroup -l westus --enabled --description "test" --interval PT10M --scopes "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.monitor/accounts/testaccount" --rules [{"record":"test","expression":"test","labels":{"team":"prod"}},{"alert":"Billing_Processing_Very_Slow","expression":"test","enabled":"true","severity":2,"for":"PT5M","labels":{"team":"prod"},"annotations":{"annotationName1":"annotationValue1"},"resolveConfiguration":{"autoResolved":"true","timeToResolve":"PT10M"},"actions":[{"actionGroupId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/microsoft.insights/actionGroups/test-action-group-name1","actionProperties":{"key11":"value11","key12":"value12"}},{"actionGroupId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testrg/providers/microsoft.insights/actionGroups/test-action-group-name2","actionProperties":{"key21":"value21","key22":"value22"}}]}]

Criar um novo grupo de regras do Prometheus com o PowerShell

Para criar um grupo de regras do Prometheus usando o PowerShell, use o cmdlet new-azprometheusrulegroup .

Exemplo: Criar uma definição de grupo de regras do Prometheus com regras.

$rule1 = New-AzPrometheusRuleObject -Record "job_type:billing_jobs_duration_seconds:99p5m"
$action =  New-AzPrometheusRuleGroupActionObject -ActionGroupId /subscriptions/fffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/MyresourceGroup/providers/microsoft.insights/actiongroups/MyActionGroup -ActionProperty @{"key1" = "value1"}
$Timespan = New-TimeSpan -Minutes 15
$rule2 = New-AzPrometheusRuleObject -Alert Billing_Processing_Very_Slow -Expression "job_type:billing_jobs_duration_seconds:99p5m > 30" -Enabled $false -Severity 3 -For $Timespan -Label @{"team"="prod"} -Annotation @{"annotation" = "value"} -ResolveConfigurationAutoResolved $true -ResolveConfigurationTimeToResolve $Timespan -Action $action
$rules = @($rule1, $rule2)
$scope = "/subscriptions/fffffffff-ffff-ffff-ffff-ffffffffffff/resourcegroups/MyresourceGroup/providers/microsoft.monitor/accounts/MyAccounts"
New-AzPrometheusRuleGroup -ResourceGroupName MyresourceGroup -RuleGroupName MyRuleGroup -Location eastus -Rule $rules -Scope $scope -Enabled

Exibir grupos de regras do Prometheus

Você pode exibir seus grupos de regras do Prometheus e suas regras incluídas no portal do Azure de uma das seguintes maneiras:

  • Na página inicial do portal, na caixa de pesquisa, procure Grupos de Regras do Prometheus.
  • Na página inicial do portal, selecioneMonitorar>Alertase selecioneGrupos de Regras do Prometheus. Captura de tela que mostra como exibir grupos de regras do Prometheus na tela de alertas.
  • Na página de um recurso específico do AKS (Serviços de Kubernetes do Azure) ou de um AMW (Workspace do Azure Monitor) específico, selecione Monitorar>Alertas e selecione Grupos de Regras do Prometheus para exibir uma lista de grupos de regras para esse recurso específico. Você pode selecionar um grupo de regras na lista para exibir ou editar seus detalhes.

Exibir os estados de integridade do recurso de seus grupos de regras do Prometheus

Agora você pode exibir o estado de integridade do recurso do grupo de regras prometheus no portal. Isso pode permitir que você detecte problemas em seus grupos de regras, como configuração incorreta ou problemas de limitação de consulta

  1. No portal, vá para a visão geral do grupo de regras do Prometheus que você gostaria de monitorar
  2. No painel esquerdo, em Ajuda, selecione Integridade do recurso. Captura de tela que mostra como exibir o estado de integridade do recurso de um grupo de regras do Prometheus.
  3. Na tela de integridade do recurso do grupo de regras, você pode ver o estado de disponibilidade atual do grupo de regras, bem como um histórico de eventos recentes de integridade de recursos, até 30 dias atrás. Captura de tela que mostra como exibir o histórico de integridade do recurso de um grupo de regras do Prometheus.
  • Se o grupo de regras estiver marcado como Disponível, ele estará funcionando conforme o esperado.
  • Se o grupo de regras estiver marcado como Degradado, uma ou mais regras no grupo não funcionarão conforme o esperado. Isso pode ocorrer devido à limitação da consulta de regra ou a outros problemas que podem causar falha na avaliação da regra. Expanda a entrada de status para obter mais informações sobre o problema detectado, bem como sugestões de mitigação ou para solução de problemas adicionais.
  • Se o grupo de regras estiver marcado como Indisponível, todo o grupo de regras não estará funcionando conforme o esperado. Isso pode ocorrer devido ao problema de configuração (por exemplo, o Workspace do Azure Monitor não pode ser detectado) ou devido a problemas de serviço internos. Expanda a entrada de status para obter mais informações sobre o problema detectado, bem como sugestões de mitigação ou para solução de problemas adicionais.
  • Se o grupo de regras estiver marcado como Desconhecido, todo o grupo de regras será desabilitado ou estará em um estado desconhecido.

Desabilitar e habilitar grupos de regras

Para habilitar ou desabilitar uma regra, selecione o grupo de regras no portal do Azure. Selecione Habilitar ou Desabilitar para alterar o status.

Próximas etapas