Calcular métricas com base em dados de métricas

Calcular métricas significa gerar novas métricas com base em registros ou métricas preexistentes para observabilidade de dados. Para calcular métricas no GDC, configure regras de gravação em um recurso personalizado MonitoringRule. As regras de gravação pré-calculam expressões que são necessárias com frequência ou que exigem muita computação. Essas regras salvam o resultado como um novo conjunto de série temporal. Consultar o resultado pré-calculado é mais rápido do que executar a expressão original sempre que necessário. Essa pré-computação é especialmente útil para painéis e alertas complexos, que precisam consultar a mesma expressão repetidamente sempre que são atualizados ou avaliados.

Você configura regras de gravação no recurso personalizado MonitoringRule para calcular métricas com base em outras métricas de monitoramento do sistema. O recurso personalizado MonitoringRule contém regras de gravação que descrevem as condições para calcular novas métricas com base nas métricas preexistentes.

Antes de começar

Para receber as permissões necessárias para calcular métricas de métricas, peça ao administrador do IAM do projeto para conceder a você um dos seguintes papéis:

  • Editor de regras de monitoramento: edita ou modifica recursos personalizados MonitoringRule. Solicite o papel de editor de regras do Monitoring (monitoringrule-editor).
  • Leitor de regras do Monitoring: visualiza recursos personalizados MonitoringRule. Solicite o papel Leitor de regras do Monitoring (monitoringrule-viewer).

Criar regras de gravação

Defina um nome de registro e uma expressão válida que avalie a regra. A expressão precisa ser resolvida como um valor numérico para ser registrada como uma nova métrica. Implante o recurso personalizado no namespace do projeto no cluster de administrador para criar as regras de gravação.

Para mais informações sobre regras de gravação, consulte https://grafana.com/docs/loki/latest/rules/

Siga as etapas abaixo para criar regras de registro e calcular métricas no namespace do seu projeto:

  1. Abra ou crie o arquivo YAML para o CR usando o modelo CR MonitoringRule para regras de registro de monitoramento.
  2. No campo namespace do CR, insira o namespace do projeto.
  3. No campo name, insira o nome da configuração de regra.
  4. Opcional: você pode escolher a origem do registro no campo source. As opções válidas são operational e audit.
  5. No campo interval, insira o número de segundos para a duração do intervalo de avaliação da regra.
  6. Opcional: no campo limit, insira o número máximo de alertas. Insira 0 para alertas ilimitados.
  7. No campo recordRules, insira as seguintes informações para calcular métricas:

    • No campo record, insira o nome do registro. Esse valor define a série temporal em que a regra de gravação será escrita e precisa ser um nome de métrica válido.
    • No campo expr, insira uma expressão PromQL para a regra de métrica.

      Essa expressão precisa ser resolvida como um valor numérico para ser registrada como uma nova métrica.

    • Opcional: no campo labels, defina os rótulos que você quer adicionar ou substituir como pares de chave-valor.

  8. Salve o arquivo YAML da CR.

  9. Implante o CR no namespace do projeto do cluster de administrador para criar as regras de registro.

As regras de registro MonitoringRule

Um recurso personalizado MonitoringRule contém regras de gravação que descrevem as condições para calcular novas métricas com base em métricas de monitoramento do sistema preexistentes.

O arquivo YAML a seguir mostra um modelo para o campo recordRules da CR MonitoringRule.

# Configures either an alert or a target record for precomputation
apiVersion: monitoring.gdc.goog/v1alpha1
kind: MonitoringRule
metadata:
  # Choose namespace that matches the project's namespace
  # Note: The alert or record will be produced in the same namespace
  namespace: PROJECT_NAMESPACE
  name: alerting-config
spec:
  # Rule evaluation interval
  interval: <duration>

  # Configure limit for number of alerts (0: no limit)
  # Optional, Default: 0 (no limit)
  limit: <int>

  # Configure record rules to generate new metrics based on pre-existing metrics.
  # Record rules precompute expressions that are frequently needed or computationally expensive.
  # These rules save their result as a new set of time series.
  recordRules:
    # Define which timeseries to write to (must be a valid metric name)
  - record: <string>

    # Define PromQL expression to evaluate for this rule
    expr: <string>

    # Define labels to add or overwrite
    # Optional, Map of {key, value} pairs
    labels:
      <labelname>: <labelvalue>
...

Substitua PROJECT_NAMESPACE pelo namespace do projeto.

As regras de registro LoggingRule

Um CR LoggingRule contém regras de registro que descrevem as condições para calcular novas métricas com base em registros preexistentes.

O arquivo YAML a seguir mostra um modelo para o campo recordRules da CR LoggingRule.

# Configures either an alert or a target record for precomputation
apiVersion: logging.gdc.goog/v1alpha1
kind: LoggingRule
metadata:
  # Choose namespace that matches the project's namespace
  # Note: The alert or record will be produced in the same namespace
  namespace: g-fleetns-a
  name: alerting-config
spec:
  # Choose which log source to base alerts on (Operational/Audit/Security Logs)
  # Optional, Default: Operational
  source: <string>

  # Rule evaluation interval
  interval: <duration>

  # Configure limit for number of alerts (0: no limit)
  # Optional, Default: 0 (no limit)
  limit: <int>

  # Configure record rules to generate new metrics based on pre-existing logs.
  # Record rules generate metrics based on logs.
  # Use record rules for complex alerts, which query the same expression repeatedly every time they are evaluated.
  recordRules:
    # Define which timeseries to write to (must be a valid metric name)
  - record: <string>

    # Define LogQL expression to evaluate for this rule
    # https://grafana.com/docs/loki/latest/rules/
    expr: <string>

    # Define labels to add or overwrite
    # Optional, Map of {key, value} pairs
    labels:
      <labelname>: <labelvalue>
...