Valutazione delle regole gestite

Google Cloud Managed Service per Prometheus supporta la valutazione delle regole compatibili con Prometheus. Questo documento descrive come configurare la valutazione delle regole gestite.

Valutazione regole

Managed Service per Prometheus fornisce un componente del Valutatore delle regole che ti consente di scrivere in sicurezza regole nel contesto di un backend Prometheus globale, impedendoti di interferire con altri utenti nei dati di organizzazioni di grandi dimensioni. Il deployment del componente viene eseguito automaticamente come parte della raccolta gestita quando viene eseguito su cluster Kubernetes.

Regole

Il valutatore gestito dalla regola utilizza la risorsa Regole per configurare le regole di registrazione e avviso. Di seguito è riportato un esempio di risorsa Regole:

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: gmp-test
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Il formato dell'elemento .spec.groups è identico all'array Prometheus rule_group a monte. Le regole di avviso e registrazione definite in Rules hanno come ambito project_id, cluster e namespace della risorsa. Ad esempio, la regola job:up:sum nella risorsa riportata sopra esegue in modo efficace le query sum without(instance) (up{project_id="test-project", cluster="test-cluster", namespace="gmp-test"}). Questa garanzia assicura che le regole di avviso o di registrazione non valutino involontariamente le metriche di applicazioni di cui potresti non accorgerti.

Per applicare le regole di esempio al cluster, esegui il comando seguente:

kubectl apply -n gmp-test -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.0/examples/rules.yaml

Dopo qualche minuto, la metrica job:up:sum diventa disponibile. Viene attivato anche l'avviso AlwaysFiring. Per informazioni su come inviare avvisi a un AlertManager, consulta la configurazione di Alertmanager.

Le risorse ClusterRule eGlobalRule forniscono la stessa interfaccia della risorsa Rules, ma applicano le regole a ambiti più ampi. I ClusterRegole selezionano i dati utilizzando le etichette project_id e cluster, mentre GlobalRegole seleziona tutti i dati nell'ambito delle metriche oggetto di query senza limitare le etichette.

Per la documentazione di riferimento su tutte le risorse personalizzate di Managed Service for Prometheus, consulta il riferimento prometheus-engine/doc/api.

Conversione dalle regole di Prometheus a regole

La risorsa Regole fornisce un'interfaccia compatibile con le regole Prometheus per fornire un percorso di migrazione senza problemi per incorporare le regole esistenti nella valutazione delle regole gestite. Puoi includere le regole esistenti in una risorsa Regole. Ad esempio, la regola Prometheus riportata di seguito:

groups:
- name: example
  interval: 30s
  rules:
  - record: job:up:sum
    expr: sum without(instance) (up)
  - alert: AlwaysFiring
    expr: vector(1)

La risorsa Regole corrispondente, con la regola Prometheus originale in grassetto, segue:

apiVersion: monitoring.googleapis.com/v1
kind: Rules
metadata:
  namespace: gmp-test
  name: example-rules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

ClusterCluster

Puoi utilizzare la risorsa ClusterRule per configurare le regole di registrazione e avviso che possono valutare tutte le serie temporali inviate a Managed Service for Prometheus da tutti gli spazi dei nomi in un determinato cluster. La specifica è identica a quella di Rules. La precedente regola Prometheus di esempio diventa la seguente risorsa ClusterRules:

apiVersion: monitoring.googleapis.com/v1
kind: ClusterRules
metadata:
  name: example-clusterrules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Ti consigliamo di utilizzare le risorse ClusterRule solo su metriche orizzontali, ad esempio quelle prodotte da un mesh di servizi. Per le metriche dei singoli deployment, utilizza le risorse delle regole per assicurarti che la valutazione non includa dati indesiderati.

Regole globali

Puoi utilizzare la risorsa GlobalRule per configurare regole di avviso e registrazione che possono valutare tutte le serie temporali inviate a Managed Service for Prometheus per tutti i progetti compresi in un ambito di metriche. La specifica è identica a quella di Rules. La precedente regola Prometheus di esempio diventa la seguente risorsa GlobalRules:

apiVersion: monitoring.googleapis.com/v1
kind: GlobalRules
metadata:
  name: example-globalrules
spec:
  groups:
  - name: example
    interval: 30s
    rules:
    - record: job:up:sum
      expr: sum without(instance) (up)
    - alert: AlwaysFiring
      expr: vector(1)

Ti consigliamo di utilizzare GlobalRegole solo per i rari casi d'uso in cui un avviso potrebbe richiedere dati in tutti i cluster contemporaneamente. Per le metriche dei singoli deployment, utilizza le risorse Rules o ClusterRule per una maggiore affidabilità e per assicurarti che la valutazione non includa dati indesiderati.

Ti consigliamo vivamente di mantenere le etichette cluster e namespace nei risultati di valutazione delle regole, a meno che lo scopo della regola non sia aggregarle, altrimenti il rendimento delle query potrebbe diminuire e potresti riscontrare limiti di cardinalità. È sconsigliabile rimuovere entrambe le etichette.

Valutazione di regole globali e più progetti

Quando è eseguito il deployment su Google Kubernetes Engine, la valutazione della regola utilizza il progetto Google Cloud associato al cluster, che il Valutatore della regola rileva automaticamente. Per valutare le regole che riguardano progetti, devi configurare il valutatore della regola che esegue la risorsa GlobalRule per utilizzare un progetto con un ambito delle metriche multiprogetto. A tale scopo, puoi procedere in uno dei due seguenti modi:

  • Inserisci la risorsa GlobalRegole in un progetto con un ambito delle metriche multiprogetto.
  • Imposta il campo queryProjectID in OperatorConfig in modo da utilizzare un progetto con ambito multiprogetto.

Devi anche aggiornare le autorizzazioni dell'account di servizio utilizzato dalla valutazione della regola (di solito l'account di servizio predefinito sul nodo) in modo che l'account di servizio possa leggere dal progetto di definizione dell'ambito e scrivere in tutti i progetti monitorati nell'ambito delle metriche.

Se l'ambito delle metriche contiene tutti i progetti, le regole vengono valutate a livello globale. Per scoprire di più, consulta l'articolo Ambiti delle metriche.

Fornisci le credenziali in modo esplicito

Quando viene eseguito su GKE, il valutatore della regola recupera automaticamente le credenziali dall'ambiente in base all'account di servizio predefinito di Compute Engine o alla configurazione di Workload Identity.

Nei cluster Kubernetes non GKE, le credenziali devono essere fornite esplicitamente tramite la risorsa OperatorConfig nello spazio dei nomi gmp-public.

  1. Crea un account di servizio:

    gcloud iam service-accounts create gmp-test-sa
    

  2. Concedi le autorizzazioni necessarie all'account di servizio:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  3. Crea e scarica una chiave per l'account di servizio:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  4. Aggiungi il file della chiave come secret al cluster non GKE:

    kubectl -n gmp-public create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  5. Apri la risorsa OperatorConfig per modificare:

    kubectl -n gmp-public edit operatorconfig config
    

  6. Aggiungi il testo in grassetto alla risorsa:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    rules:
      credentials:
        name: gmp-test-sa
        key: key.json
    

  7. Salva il file e chiudi l'editor. Dopo l'applicazione della modifica, i pod vengono ricreati e iniziano ad autenticarsi nel backend della metrica con l'account di servizio specificato.

Configurazione di AlertManager

Puoi utilizzare la risorsa OperatorConfig per configurare il valutatore della regola gestita per l'invio di avvisi a un Alertmanager di cui è stato eseguito il deployment automatico. Per configurare il valutatore della regola:

  1. Apri la risorsa OperatorConfig per modificare:

    kubectl -n gmp-public edit operatorconfig config
    
  2. Configura la risorsa per l'invio di avvisi al servizio Alertmanager:

    apiVersion: monitoring.googleapis.com/v1
    kind: OperatorConfig
    metadata:
      namespace: gmp-public
      name: config
    rules:
      alerting:
        alertmanagers:
        - name: SERVICE_NAME
          namespace: SERVICE_NAMESPACE
          port: PORT_NAME
    

Se AlertManager si trova in un cluster diverso da quello del valutatore delle regole, potresti dover configurare una risorsa endpoint. Ad esempio, se il tuo OperatorConfig indica che gli endpoint Alertmanager si trovano nell'oggetto Endpoints ns=alertmanager/name=alertmanager, puoi creare manualmente questo oggetto manualmente o a livello di programmazione e completarlo con IP raggiungibili dall'altro cluster. La sezione di configurazione AlertmanagerEndpoints fornisce opzioni per la configurazione dell'autorizzazione, se necessario.