Valutazione delle regole con deployment automatico e generazione di avvisi

Google Cloud Managed Service per Prometheus supporta la valutazione delle regole e gli avvisi compatibili con Prometheus. Questo documento descrive come configurare la valutazione delle regole con deployment automatico, incluso il componente di valutazione delle regole autonomo.

Devi seguire queste istruzioni solo se vuoi eseguire regole e alert sul datastore globale.

Valutazione delle regole per la raccolta con deployment automatico

Dopo aver eseguito il deployment di Managed Service per Prometheus, puoi continuare a valutare le regole localmente in ogni istanza di cui è stato eseguito il deployment utilizzando il campo rule_files del file di configurazione di Prometheus. Tuttavia, la finestra di query massima per le regole è limitata dal periodo di conservazione dei dati locali da parte del server.

La maggior parte delle regole viene eseguita solo negli ultimi minuti di dati, pertanto l'esecuzione delle regole su ogni server locale è spesso una strategia valida. In questo caso, non è necessaria alcuna ulteriore configurazione.

Tuttavia, a volte è utile poter valutare le regole in base al backend metrico globale, ad esempio quando tutti i dati di una regola non sono co-localizzati in una determinata istanza Prometheus. Per questi casi, Managed Service per Prometheus fornisce anche un componente di valutazione delle regole.

Prima di iniziare

Questa sezione descrive la configurazione necessaria per le attività descritte in questo documento.

Configura il tuo ambiente

Per evitare di inserire ripetutamente l'ID progetto o il nome del cluster, esegui la seguente configurazione:

  • Configura gli strumenti a riga di comando come segue:

    • Configura gcloud CLI in modo che faccia riferimento all'ID del tuo progetto Google Cloud:

      gcloud config set project PROJECT_ID
      
    • Configura l'interfaccia a riga di comando kubectl in modo da utilizzare il cluster:

      kubectl config set-cluster CLUSTER_NAME
      

    Per ulteriori informazioni su questi strumenti, consulta quanto segue:

Configura uno spazio dei nomi

Crea lo spazio dei nomi Kubernetes NAMESPACE_NAME per le risorse che crei nell'ambito dell'applicazione di esempio:

kubectl create ns NAMESPACE_NAME

Verifica le credenziali dell'account di servizio

Puoi saltare questa sezione se nel tuo cluster Kubernetes è attivata la federazione delle identità per i carichi di lavoro per GKE.

Quando viene eseguito su GKE, Managed Service per Prometheus recupera automaticamente le credenziali dall'ambiente in base all'account di servizio predefinito di Compute Engine. L'account di servizio predefinito ha le autorizzazioni necessarie, monitoring.metricWriter e monitoring.viewer, per impostazione predefinita. Se non utilizzi la federazione delle identità di lavoro per GKE e hai precedentemente rimosso uno di questi ruoli dall'account di servizio del nodo predefinito, dovrai aggiungere di nuovo le autorizzazioni mancanti prima di continuare.

Se non esegui l'operazione su GKE, consulta Fornire le credenziali in modo esplicito.

Configura un account di servizio per Workload Identity Federation for GKE

Puoi saltare questa sezione se nel tuo cluster Kubernetes non è attivata la federazione delle identità per i carichi di lavoro per GKE.

Managed Service per Prometheus acquisisce i dati delle metriche utilizzando l'API Cloud Monitoring. Se il tuo cluster utilizza la federazione delle identità per i carichi di lavoro per GKE, devi concedere all'account di servizio Kubernetes l'autorizzazione all'API Monitoring. Questa sezione descrive quanto segue:

Crea e associa l'account di servizio

Questo passaggio viene visualizzato in diversi punti della documentazione di Managed Service per Prometheus. Se hai già eseguito questo passaggio nell'ambito di un'attività precedente, non devi ripeterlo. Vai a Autorizzare l'account di servizio.

La seguente sequenza di comandi crea l'account di servizio gmp-test-sa e lo associa all'account di servizio Kubernetes predefinito nello spazio dei nomi NAMESPACE_NAME:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \
  gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com

Se utilizzi uno spazio dei nomi o un account di servizio GKE diverso, aggiusta i comandi di conseguenza.

Autorizza l'account di servizio

I gruppi di autorizzazioni correlate vengono raccolti in ruoli e li concedi a un'entità, in questo esempio l'account di servizio Google Cloud. Per ulteriori informazioni sui ruoli di monitoraggio, consulta Controllo dell'accesso.

Il seguente comando concede all'account di servizio Google Cloud, gmp-test-sa, i ruoli dell'API Monitoring di cui ha bisogno per leggere e scrivere dati delle metriche.

Se hai già concesso all'account di servizio Google Cloud un ruolo specifico nell'ambito di un'attività precedente, non devi ripetere l'operazione.

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

Eseguire il debug della configurazione di Workload Identity Federation for GKE

Se hai difficoltà a far funzionare Workload Identity Federation per GKE, consulta la documentazione per la verifica della configurazione di Workload Identity Federation per GKE e la guida alla risoluzione dei problemi di Workload Identity Federation per GKE.

Poiché gli errori ortografici e i copia e incolla parziali sono le fonti di errori più comuni durante la configurazione della federazione delle identità per i carichi di lavoro per GKE, ti consigliamo vivamente di utilizzare le variabili modificabili e le icone di copia e incolla cliccabili incorporate negli esempi di codice in queste istruzioni.

Workload Identity Federation for GKE negli ambienti di produzione

L'esempio descritto in questo documento lega l'account di servizio Google Cloud all'account di servizio Kubernetes predefinito e concede all'account di servizio Google Cloud tutte le autorizzazioni necessarie per utilizzare l'API Monitoring.

In un ambiente di produzione, ti consigliamo di utilizzare un approccio più granulare, con un account di servizio per ogni componente, ciascuno con autorizzazioni minime. Per ulteriori informazioni sulla configurazione degli account di servizio per la gestione delle identità dei carichi di lavoro, consulta Utilizzare la federazione delle identità per i carichi di lavoro per GKE.

Esegui il deployment del valutatore delle regole autonomo

Lo valutatore delle regole di Managed Service per Prometheus valuta le regole di registrazione e avviso di Prometheus in base all'API HTTP di Managed Service per Prometheus e restituisce i risultati a Monarch. Accetta lo stesso formato del file di configurazione e del file di regole di Prometheus. Anche i flag sono per lo più identici.

  1. Crea un esempio di implementazione dell'valutatore delle regole preconfigurato per valutare una regola di avviso e una di registrazione:

    kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.13.0/manifests/rule-evaluator.yaml
    
  2. Verifica che i pod per l'evaluator delle regole siano stati dipartiti correttamente:

    kubectl -n NAMESPACE_NAME get pod
    

    Se il deployment è andato a buon fine, viene visualizzato un output simile al seguente:

    NAME                              READY   STATUS    RESTARTS   AGE
    ...
    rule-evaluator-64475b696c-95z29   2/2     Running   0          1m
    

Dopo aver verificato che lo strumento di valutazione delle regole è stato implementato correttamente, puoi apportare modifiche ai manifest installati per:

  • Aggiungi i file delle regole personalizzate.
  • Configura l'attributo rule-evaluator per inviare avvisi a un Alertmanager di Prometheus di cui è stato eseguito il deployment autonomo utilizzando il campo alertmanager_config del file di configurazione.

Se Alertmanager si trova in un cluster diverso rispetto al valutatore delle regole, potrebbe essere necessario configurare una risorsa Endpoints. Ad esempio, se OperatorConfig specifica che gli endpoint di Alertmanager possono essere trovati nell'oggetto Endpoints ns=alertmanager/name=alertmanager, puoi creare manualmente o tramite programmazione questo oggetto e compilarlo con gli IP raggiungibili dall'altro cluster.

Fornisci le credenziali in modo esplicito

Quando viene eseguito su GKE, lo strumento di valutazione delle regole recupera automaticamente le credenziali dall'ambiente in base all'account di servizio del nodo o alla configurazione di Workload Identity Federation per GKE. Nei cluster Kubernetes non GKE, le credenziali devono essere fornite esplicitamente al valutatore delle regole utilizzando i flag o la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS.

  1. Imposta il contesto sul progetto di destinazione:

    gcloud config set project PROJECT_ID
    
  2. Crea un account di servizio:

    gcloud iam service-accounts create gmp-test-sa
    

    Questo passaggio crea l'account di servizio che potresti aver già creato nelle istruzioni di Workload Identity Federation per GKE.

  3. Concedi le autorizzazioni richieste 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
    

  4. 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
    
  5. Aggiungi il file della chiave come secret al cluster non GKE:

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

  6. Apri la risorsa di deployment dello strumento di valutazione delle regole per la modifica:

    kubectl -n NAMESPACE_NAME edit deploy rule-evaluator
    
    1. Aggiungi il testo in grassetto alla risorsa:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        namespace: NAMESPACE_NAME
        name: rule-evaluator
      spec:
        template
          containers:
          - name: evaluator
            args:
            - --query.credentials-file=/gmp/key.json
            - --export.credentials-file=/gmp/key.json
      ...
            volumeMounts:
            - name: gmp-sa
              mountPath: /gmp
              readOnly: true
      ...
          volumes:
          - name: gmp-sa
            secret:
              secretName: gmp-test-sa
      ...
      

    2. Salva il file e chiudi l'editor. Una volta applicata la modifica, i pod vengono ricreati e iniziano l'autenticazione al backend metrico con l'account di servizio specificato.

    In alternativa, anziché utilizzare i flag impostati in questo esempio, puoi impostare il percorso del file della chiave utilizzando la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS.

    Valutazione delle regole a livello globale e per più progetti

    Ti consigliamo di eseguire un'istanza dello valutatore delle regole in ogni progetto e regione Google Cloud anziché un'istanza che esegue la valutazione in base a molti progetti e regioni. Tuttavia, supportiamo la valutazione delle regole per più progetti per gli scenari che lo richiedono.

    Quando viene eseguito il deployment su Google Kubernetes Engine, lo valutatore delle regole utilizza il progetto Google Cloud associato al cluster, che viene rilevato automaticamente. Per valutare le regole che interessano più progetti, puoi sostituire il progetto sottoposto a query utilizzando il flag --query.project-id e specificando un progetto con un ambito di metriche multi-progetto. Se l'ambito delle metriche contiene tutti i tuoi progetti, le regole vengono valutate a livello globale. Per ulteriori informazioni, consulta Ambiti delle metriche.

    Devi anche aggiornare le autorizzazioni dell'account di servizio utilizzato dall'evaluator delle regole in modo che possa leggere dal progetto di definizione dell'ambito e scrivere in tutti i progetti monitorati nell'ambito delle metriche.

    Mantieni le etichette quando scrivi le regole

    Per i dati che l'valutatore riscriverà in Managed Service per Prometheus, supporta gli stessi flag --export.* e la stessa configurazione basata su external_labels del file binario del server Managed Service per Prometheus. Ti consigliamo vivamente di scrivere regole in modo che le etichette project_id, location, cluster e namespace vengano conservate in modo appropriato per il loro livello di aggregazione, altrimenti il rendimento delle query potrebbe diminuire e potresti incontrare limiti di cardinalità.

    Le etichette project_id o location sono obbligatorie. Se queste etichette non sono presenti, i valori nei risultati della valutazione delle regole vengono impostati in base alla configurazione dell'analizzatore delle regole. Le etichette cluster o namespace mancanti non hanno valori.

    Osservabilità autonoma

    rule-evaluator emette le metriche Prometheus su una porta configurabile utilizzando il flag --web.listen-address.

    Ad esempio, se il pod rule-evaluator-64475b696c-95z29 espone queste metriche sulla porta 9092, le metriche possono essere visualizzate manualmente utilizzando kubectl:

    # Port forward the metrics endpoint.
    kubectl port-forward rule-evaluator-64475b696c-95z29 9092
    # Then query in a separate terminal.
    curl localhost:9092/metrics
    

    Puoi configurare lo stack Prometheus in modo da raccogliere questi dati e avere visibilità sul rendimento dell'evaluator delle regole.

    Deployment ad alta disponibilità

    Il valutatore delle regole può essere eseguito in una configurazione ad alta disponibilità seguendo lo stesso approccio descritto per il server Prometheus.

    Avvisi con le metriche di Cloud Monitoring

    Puoi configurare il valutatore delle regole in modo che invii un avviso per le metriche di sistema di Google Cloud utilizzando PromQL. Per istruzioni su come creare una query valida, consulta PromQL per le metriche di Cloud Monitoring.