Use o comando ruleup da ferramenta promtool do Managed Service for Prometheus para validar, enviar e gerenciar arquivos de configuração PrometheusRule em um diretório local.
Aplicável a:
Usuários que desejam gerenciar regras de alerta com Infraestrutura como Código (IaC).
Usuários que pretendem configurar um pipeline de CI para publicar regras de alerta.
Preparativos
-
Baixe a ferramenta promtool
curl -fsSL "https://o11y-addon-hangzhou-public.oss-cn-hangzhou.aliyuncs.com/share/promtool/install.sh" | bash -
Entenda o formato do arquivo de regras
Os arquivos PrometheusRule devem seguir este formato:
# Extended fields, data source configuration (required) datasources: - type: aliyun_prometheus # instance: <prometheus-instance-id> regionId: <region-id> # Rule group groups: - name: <group-name> interval: <evaluation-interval> # Optional, such as "30s" rules: - alert: <alert-name> expr: <promql-expression> for: <duration> # Optional, such as "5m" labels: severity: <severity-level> # such as warning, critical, or info # Other labels... annotations: summary: <summary-text> description: <description-text> # Other annotations...Configuração da fonte de dados
type: Tipo da fonte de dados. Somentealiyun_prometheusé compatível.instance: ID da instância do Managed Service for Prometheus.regionId: ID da região do Alibaba Cloud, comocn-hangzhououcn-beijing.
Mapeamento de nível de regra
O campo
labels.severityem uma regra corresponde ao campolevelde uma regra de alerta do Managed Service for Prometheus:warning→warningcritical→criticalinfo→infoOutros valores →
warning(padrão)
Observações
-
Segurança
Não insira informações confidenciais, como AccessKey IDs ou AccessKey secrets, diretamente na linha de comando.
Use variáveis de ambiente ou arquivos de configuração para gerenciar credenciais.
Garanta que os arquivos de regras não contenham dados sensíveis.
-
Configuração da fonte de dados
As operações de envio e exclusão afetam todas as fontes de dados configuradas no arquivo de regras.
Verifique se a configuração da fonte de dados está correta antes de prosseguir.
-
Sobrescrita de regras
O envio sobrescreve grupos de regras com o mesmo nome na fonte de dados de destino.
A exclusão remove todas as regras dos grupos especificados.
-
Requisitos de rede
As operações de envio e exclusão exigem acesso às APIs do Alibaba Cloud.
Certifique-se de ter conectividade de rede estável e as permissões necessárias.
-
Operações simultâneas
Não envie nem exclua regras do mesmo grupo simultaneamente.
Após concluir uma operação, aguarde um breve período antes de iniciar a próxima.
-
Códigos de saída
0: Operação bem-sucedida.1: Falha na operação devido a erro de validação, envio ou exclusão.
-
Valide o arquivo de regras: Valide o arquivo para verificar sua integridade e a sintaxe das expressões PromQL.
promtool ruleup --dir /path/to/rules --checkExemplo de saída (validação bem-sucedida):
Found 1 rule file(s) in directory: /path/to/rules File: /path/to/rules/prometheus-rules.yml Type: prometheus Validation: OKExemplo de saída (falha na validação):
Found 1 rule file(s) in directory: /path/to/rules File: /path/to/rules/prometheus-rules.yml Type: prometheus Validation errors: - group "system_resources": rule "HighCPUUsage": invalid PromQL expression: syntax error - group "application_services": rule "HighHTTPErrorRate": missing 'for' durationSe a validação falhar, o comando será encerrado com código de saída 1.
-
Envie as regras: Após a validação, envie as regras para o Managed Service for Prometheus.
promtool ruleup --dir /path/to/rules --upload --access-key-id YOUR_ACCESS_KEY_ID --access-key-secret YOUR_ACCESS_KEY_SECRET --user-id YOUR_USER_IDConfirmação interativa: O comando exibe a configuração de envio e solicita confirmação:
=== Upload Configuration === User ID: 123456789 Rule groups to upload: 5 [1] system_resources (4 rules) [2] application_services (4 rules) [3] database (3 rules) [4] kubernetes (3 rules) [5] business_metrics (2 rules) Total rules to upload: 16 Datasources: 2 [1] Region: cn-hangzhou, Instance: rw-dfaa8e87409285b4b422b3c862ee [2] Region: cn-beijing, Instance: rw-abc123456789 Workspace: will be automatically retrieved from instance Do you want to proceed with the upload? (yes/no):Insira
yesouypara continuar. Qualquer outra entrada cancela o envio.Exemplo de resultado do envio:
=== Upload Result === Total uploads: 10 (rule groups × datasources) Success: 10, Failed: 0 Datasource [1]: Region=cn-hangzhou, Instance=rw-dfaa8e87409285b4b422b3c862ee Group: system_resources, Request ID: 12345678-1234-1234-1234-123456789abc Uploaded rules: 4 - HighCPUUsage (ID: rule-001, Status: enabled, Level: warning) - HighMemoryUsage (ID: rule-002, Status: enabled, Level: warning) - HighDiskUsage (ID: rule-003, Status: enabled, Level: critical) - HighDiskIO (ID: rule-004, Status: enabled, Level: warning) Upload completed! 10 datasource(s) succeeded. Valide as regras antes de enviá-las.
-
Use versionamento:
Armazene os arquivos de regras em um sistema de controle de versão, como Git.
Faça backup da configuração existente antes de modificar regras.
-
Gerencie por ambiente:
Use diretórios diferentes de arquivos de regras para ambientes distintos, como desenvolvimento, homologação e produção.
Adote configurações de fontes de dados distintas para diferenciar os ambientes.
-
Siga convenções de nomenclatura de regras:
Use nomes significativos para grupos de regras, como
system_resourceseapplication_services.Escolha nomes de alertas que descrevam claramente o problema, como
HighCPUUsageeServiceInstanceDown.
-
Configure as fontes de dados:
Certifique-se de que os valores de
instanceeregionIdna configuração da fonte de dados estejam corretos.Verifique se o ID da instância existe e está acessível.
-
Confirme antes de operações em lote:
Operações de envio e exclusão podem afetar múltiplas fontes de dados. Revise a configuração cuidadosamente antes de prosseguir.
Valide as operações em um ambiente de homologação antes de executá-las em produção.
-
Exemplo de fluxo de trabalho completo
Erros comuns
Nenhum arquivo de regra encontrado no diretório
Causa: Nenhum arquivo de regra foi localizado no diretório especificado.
Solução: Verifique se o caminho do diretório está correto. Certifique-se de que o diretório contém arquivos de regras YAML válidos.
Nenhum arquivo PrometheusRule encontrado
Causa: Não foram encontrados arquivos do tipo PrometheusRule no diretório.
Solução: Garanta que pelo menos um arquivo contenha uma configuração PrometheusRule.
Nenhum grupo de regras encontrado no PrometheusRule
Causa: Não há grupos de regras configurados no arquivo PrometheusRule.
Solução: Adicione pelo menos uma configuração de
groupsao arquivo de regras.
Nenhuma fonte de dados configurada no PrometheusRule
Causa: Nenhuma fonte de dados está configurada no arquivo de regras.
Solução: Inclua uma configuração de
datasourcesno início do arquivo de regras.
Fonte de dados [N] sem o campo instance
Causa: O campo
instanceestá ausente ou vazio na configuração da fonte de dados.Solução: Defina um valor válido para
instanceem cada fonte de dados.
Fonte de dados [N] sem o campo regionId
Causa: O campo
regionIdestá ausente ou vazio na configuração da fonte de dados.Solução: Defina um valor válido para
regionIdem cada fonte de dados.
Falha na validação da regra
Causa: A validação da regra falhou. Isso pode ocorrer devido a um erro de sintaxe PromQL ou à ausência de um campo obrigatório.
Solução: Use o parâmetro
--checkpara visualizar mensagens detalhadas de erro de validação. Corrija os erros e tente novamente.
--access-key-id é obrigatório quando --upload está definido
Causa: Nenhum AccessKey ID foi fornecido ao usar
--upload.Solução: Adicione o parâmetro
--access-key-id.
--user-id é obrigatório quando --upload está definido
Causa: Nenhum ID de usuário foi fornecido ao usar
--upload.Solução: Adicione o parâmetro
--user-id.
Referências
Ajuda do comando ruleup
Execute
promtool ruleup --helppara visualizar todos os parâmetros disponíveis.Parâmetro
Tipo
Valor padrão
Descrição
--dirstring
""Caminho do diretório que contém os arquivos de regras YAML.
--checkbool
falseVerifica se a configuração é válida. Se um erro for encontrado, o comando encerra com um código de status diferente de zero.
--uploadbool
falseEnvia o PrometheusRule para uma instância do Managed Service for Prometheus.
--deletebool
falseExclui o PrometheusRule de uma instância do Managed Service for Prometheus.
--access-key-idstring
-
AccessKey ID da sua conta Alibaba Cloud. Este parâmetro é obrigatório para envios ou exclusões.
--access-key-secretstring
-
AccessKey secret da sua conta Alibaba Cloud. Este parâmetro é obrigatório para envios ou exclusões.
--user-idstring
-
ID da sua conta Alibaba Cloud. Este parâmetro é obrigatório para envios ou exclusões.
Melhores práticas
Envio de regras
Exclusão de regras do Managed Service for Prometheus
Exclua grupos de regras específicos de uma instância do Managed Service for Prometheus. A mesma validação aplicada aos envios também ocorre antes da exclusão.
promtool ruleup \
--dir /path/to/rules \
--delete \
--access-key-id YOUR_ACCESS_KEY_ID \
--access-key-secret YOUR_ACCESS_KEY_SECRET \
--user-id YOUR_USER_ID
Confirmação interativa: O comando exibe a configuração de exclusão e solicita confirmação.
=== Delete Configuration ===
User ID: 123456789
Rule groups to delete: 5
[1] system_resources
[2] application_services
[3] database
[4] kubernetes
[5] business_metrics
Datasources: 2
[1] Region: cn-hangzhou, Instance: rw-dfaa8e87409285b4b422b3c862ee
[2] Region: cn-beijing, Instance: rw-abc123456789
WARNING: This will delete all rules in the specified groups from the datasources!
Do you want to proceed with the deletion? (yes/no):
Exemplo de resultado da exclusão:
=== Delete Result ===
Total deletions: 10 (rule groups × datasources)
Success: 10, Failed: 0
Datasource [1]: Region=cn-hangzhou, Instance=rw-dfaa8e87409285b4b422b3c862ee
Group: system_resources deleted, Request ID: 12345678-1234-1234-1234-123456789abc
All rules in group deleted successfully
Deletion completed! 10 deletion(s) succeeded.
Visualize informações básicas sobre arquivos de regras
Visualize informações básicas sobre todos os arquivos de regras em um diretório, incluindo tipo de arquivo, quantidade de grupos de regras e contagem de fontes de dados.
promtool ruleup --dir /path/to/rules
Exemplo de saída:
Found 2 rule file(s) in directory: /path/to/rules
File: /path/to/rules/prometheus-rules.yml
Type: prometheus
PrometheusRule: 5 group(s), 2 datasource(s)
Total rules: 15
File: /path/to/rules/alertmanager.yml
Type: alertmanager
AlertManagerRule: 3 receiver(s)
Route configured: yes