Esegui query e visualizza gli avvisi aperti

Il monitoraggio degli avvisi nell'appliance Google Distributed Cloud (GDC) con air gap ti consente di monitorare e risolvere i problemi delle notifiche attive nel tuo progetto dopo aver creato le regole di avviso. Puoi esaminare la gravità, la durata, lo stato e le etichette degli avvisi nella console GDC. Per script, cron job e integrazioni personalizzate, esegui una query sull'endpoint HTTP di Cortex Alertmanager del tuo progetto con curl.

Prima di iniziare

Per ottenere le autorizzazioni necessarie per eseguire query e visualizzare gli avvisi, chiedi all'amministratore IAM del progetto di concederti uno dei ruoli Project Cortex Alertmanager associati nello spazio dei nomi del progetto. A seconda del livello di accesso e delle autorizzazioni di cui hai bisogno, potresti ottenere ruoli Editor o Visualizzatore per questa risorsa in un progetto.

Per ottenere le autorizzazioni necessarie per esportare i log, chiedi all'amministratore IAM del progetto di concederti il ruolo Project Grafana Viewer (project-grafana-viewer). Questo processo di controllo dell'accesso basato su ruoli ti consente di accedere alle visualizzazioni dei dati in modo sicuro. Per saperne di più su questi ruoli, consulta Prepara le autorizzazioni IAM.

La tabella seguente riassume i requisiti di Role per PA and AO persona.

Utente tipo Oggetto Cluster Ruolo Spazio dei nomi Gruppo/utente Configurazione
PA alertmanager org-admin project-cortex-alertmanager-viewer platform-obs Gruppo 1
PA alertmanager org-admin project-cortex-alertmanager-viewer platform-obs Utente 2
AO alertmanager org-admin project-cortex-alertmanager-viewer PROJECT_NAMESPACE Gruppo 1
AO alertmanager org-admin project-cortex-alertmanager-viewer PROJECT_NAMESPACE Utente 2

Sostituisci le seguenti variabili in modo appropriato:

Variabile Descrizione
KUBECONFIG Ti servirà il kubeconfig per il cluster specifico che contiene il NAMESPACE in cui verrà applicato questo RoleBinding.
RULE_NAME Il nome univoco di questa risorsa RoleBinding all'interno dello spazio dei nomi. Ad esempio, pa-cortex-alertmanager-viewer.
NAMESPACE Lo spazio dei nomi Kubernetes in cui verrà creato e applicato questo RoleBinding. Cerca la colonna Namespace nella tabella precedente.
EMAIL_ADDRESS L'identificatore dell'utente a cui viene concesso il ruolo. Spesso si tratta di un indirizzo email. Ad esempio, platform-administrator@example.com.
ROLE Il nome del Role che contiene le autorizzazioni che vuoi concedere all'utente. Cerca i ruoli disponibili nella tabella precedente
GROUP_NAME Il nome del Group a cui appartiene l'utente PA/AO. Ad esempio, pa-group.
ZONE Nome della zona

Configurazione 1

Questa configurazione concede le autorizzazioni a un gruppo di utenti per accedere agli avvisi PA/AO nel cluster org. Dopo aver configurato questa impostazione, consulta la sezione Console di questo documento per visualizzare gli avvisi nella console GDC.

  • Comando kubectl

    Questo è il formato generico del comando:

    kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n `NAMESPACE` --group=`GROUP_NAME` --role=project-cortex-alertmanager-viewer
    

    Esempio:

    kubectl --kubeconfig <path-to-kubeconfig> create rolebinding project-cortex-alertmanager-viewer-binding --role=project-cortex-alertmanager-viewer --group=my-team --namespace=platform-obs
    
  • File YAML

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: RULE_NAME
      namespace: NAMESPACE
    subjects:
    - kind: Group
      name: GROUP_NAME
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: project-cortex-alertmanager-viewer
      apiGroup: rbac.authorization.k8s.io
    

Configurazione 2

Questa configurazione concede a un utente le autorizzazioni per accedere agli avvisi PA/AO nel cluster org. Dopo aver configurato questa impostazione, consulta la sezione Console di questo documento per visualizzare gli avvisi nella console GDC.

  • Comando kubectl

    Questo è il formato generico del comando:

    kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n `NAMESPACE` --user=`EMAIL_ADDRESS` --role=project-cortex-alertmanager-viewer
    

    Esempio:

    kubectl --kubeconfig <path-to-kubeconfig> create rolebinding project-cortex-alertmanager-viewer-binding --role=project-cortex-alertmanager-viewer --user=my-email@example.com --namespace=platform-obs
    
  • Percorso file IAC

    /infrastructure/zonal/zones/`ZONE`/org-admin/rolebindings/`EMAIL_ADDRESS`/<YAML_FILE>
    
  • File YAML

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: RULE_NAME
      namespace: NAMESPACE
    subjects:
    - kind: User
      name: EMAIL_ADDRESS
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: project-cortex-alertmanager-viewer
      apiGroup: rbac.authorization.k8s.io
    

    Per saperne di più su questi ruoli, consulta Prepara le autorizzazioni IAM

Endpoint Grafana

Per l'operatore di applicazioni (AO):

Apri il seguente URL per accedere all'endpoint del tuo progetto:

https://GDC_URL/PROJECT_NAMESPACE/grafana

Sostituisci quanto segue:

  • GDC_URL: l'URL della tua organizzazione in GDC.
  • PROJECT_NAMESPACE: lo spazio dei nomi del progetto.

La UI del progetto contiene dashboard predefinite, come la dashboard Avvisi - Panoramica con informazioni sugli avvisi. Eseguire query sugli avvisi dalla UI ti consente di recuperare visivamente le informazioni sugli avvisi dal tuo progetto e di ottenere una visualizzazione integrata delle risorse per la consapevolezza e la rapida risoluzione dei problemi.

Per l'amministratore della piattaforma (PA):

Apri il seguente URL per accedere all'endpoint del tuo progetto platform-obs:

https://GDC_URL/platform-obs/grafana

Sostituisci GDC_URL con l'URL della tua organizzazione in GDC.

L'interfaccia utente (UI) dell'istanza di monitoraggio del sistema contiene dashboard predefinite, come la dashboard Avvisi - Panoramica con informazioni sugli avvisi per l'osservabilità dei dati. Eseguire query sugli avvisi dalla UI ti consente di recuperare visivamente le informazioni sugli avvisi dal tuo progetto e di ottenere una visualizzazione integrata delle risorse per la consapevolezza e la rapida risoluzione dei problemi.

La dashboard Avvisi - Panoramica mostra informazioni sul numero di avvisi per un'origine dati specifica e un grafico a linee della cronologia degli avvisi, che mostra il numero di avvisi aperti all'ora per l'origine dati.

Figura 1. La dashboard Alerts - Overview (Avvisi - Panoramica) nell'interfaccia utente di Grafana.

Visualizza e filtra gli avvisi aperti

Seleziona uno dei seguenti metodi per eseguire query e filtrare gli avvisi aperti dallo spazio dei nomi del progetto:

Console

Visualizza gli avvisi aperti in un progetto dalla console GDC:

  1. Accedi alla console GDC.
  2. Nella console GDC, seleziona il progetto.
  3. Nel menu di navigazione, seleziona Operazioni > Avvisi.
  4. Seleziona la scheda Avvisi.
  5. Visualizza l'elenco degli avvisi.
  6. Nella sezione Avvisi aperti, fai clic su Filtra per visualizzare solo gli avvisi aperti. Puoi anche filtrare gli avvisi in base ad altri nomi o valori di proprietà.
  7. Fai clic sul nome di un avviso per visualizzarne i dettagli.

Endpoint Cortex

Questa sezione descrive come accedere agli avvisi utilizzando l'endpoint Cortex Alertmanager.

Identifica l'endpoint Cortex

Il seguente URL è l'endpoint dell'istanza Cortex del tuo progetto:

  https://GDC_URL/PROJECT_NAMESPACE/cortex/alertmanager/

Sostituisci quanto segue:

  • GDC_URL: l'URL della tua organizzazione in GDC.
  • PROJECT_NAMESPACE: lo spazio dei nomi del progetto.

    Ad esempio, l'endpoint Cortex per il progetto platform-obs nell'organizzazione org-1 è https://org-1/platform-obs/cortex/alertmanager/.

Autentica la richiesta curl

  1. Scarica e installa l'interfaccia a riga di comando gdcloud.
  2. Imposta la proprietà gdcloud core/organization_console_url:

    gdcloud config set core/organization_console_url
    https://GDC_URL
    
  3. Accedi con il provider di identità configurato:

    gdcloud auth login
    
  4. Utilizza il tuo nome utente e la tua password per autenticarti e accedere.

    Una volta eseguito l'accesso, puoi utilizzare l'intestazione di autorizzazione nella richiesta cURL tramite il comando gdcloud auth print-identity-token. Per ulteriori informazioni, consulta gdcloud auth.

Chiama l'endpoint Cortex

Completa i seguenti passaggi per raggiungere l'endpoint Cortex utilizzando lo strumento curl:

  1. Autentica la richiesta curl.
  2. Utilizza curl per chiamare l'endpoint Cortex ed estendi l'URL utilizzando la specifica standard dell'API Alertmanager (https://prometheus.io/docs/prometheus/latest/querying/api/#alertmanagers) per eseguire query sugli avvisi.

    Di seguito è riportato un esempio di richiesta curl:

      curl https://GDC_URL/PROJECT_NAME/cortex/alertmanager/api/v1/alertmanagers \
      -H "Authorization: Bearer $(gdcloud auth print-identity-token \
      --audiences=https://GDC_URL)"
    

    Ottieni l'output seguente al comando. La risposta dell'API è in formato JSON.

Alertmanager

Alertmanager ti consente di monitorare le notifiche di avviso dalle applicazioni client. Puoi esaminare e silenziare gli avvisi utilizzando Alertmanager, nonché filtrare o raggruppare gli avvisi:

Ignora gli avvisi degli audit log di rifiuto di Loki nel cluster root-admin

Figura 2. Opzione di menu per eseguire query sui log di controllo da Alertmanager.

Policy di avviso predefinite

La tabella seguente elenca le regole di avviso preinstallate in Prometheus:

Nome Descrizione
KubeAPIDown (critico) KubeAPI è scomparso dal rilevamento dei target di Prometheus per 15 minuti.
KubeClientErrors (avviso) Rapporto errori client del server API Kubernetes > 0,01 per 15 minuti.
KubeClientErrors (critico) Rapporto errori client del server API Kubernetes > 0,1 per 15 minuti.
KubePodCrashLooping (avviso) Il pod è in uno stato di loop di arresto anomalo da più di 15 minuti.
KubePodNotReady (avviso) Il pod è in uno stato non pronto da più di 15 minuti.
KubePersistentVolumeFillingUp (critico) Byte disponibili di un PersistentVolume richiesto < 0,03.
KubePersistentVolumeFillingUp (warning) Byte liberi di un PersistentVolume richiesto < 0,15.
KubePersistentVolumeErrors (critico) Il volume permanente è in fase Non riuscito o In attesa per cinque minuti.
KubeNodeNotReady (avviso) Il nodo non è pronto da più di 15 minuti.
KubeNodeCPUUsageHigh (critico) L'utilizzo della CPU del nodo è > 80%.
KubeNodeMemoryUsageHigh (critico) La memoria utilizzata dal nodo è > 80%.
NodeFilesystemSpaceFillingUp (avviso) L'utilizzo del file system del nodo è > 60%.
NodeFilesystemSpaceFillingUp (critico) L'utilizzo del file system del nodo è > 85%.
CertManagerCertExpirySoon (avviso) Un certificato scadrà tra 21 giorni.
CertManagerCertNotReady (critico) Un certificato non è pronto per gestire il traffico dopo 10 minuti.
CertManagerHittingRateLimits (critico) È stato raggiunto un limite di frequenza per la creazione e il rinnovo dei certificati per cinque minuti.
DeploymentNotReady (critico). Un deployment nel cluster di amministrazione dell'organizzazione è in stato non pronto da più di 15 minuti.

Esempio di alertmanagerConfigurationConfigmaps

La sintassi delle configurazioni nei ConfigMap elencati da alertmanagerConfigurationConfigmaps deve seguire https://prometheus.io/docs/alerting/latest/configuration/

apiVersion: observability.gdc.goog/v1alpha1
kind: ObservabilityPipeline
metadata:
  # Choose namespace that matches the project's namespace
  namespace: kube-system
  name: observability-config
# Configure Alertmanager
 alerting:
  # Storage size for alerting data within organization
  # Permission: PA
  localStorageSize: 1Gi

  # Permission: PA & AO
  # alertmanager config must be under the key "alertmanager.yml" in the configMap
  alertmanagerConfig: <configmap-for-alertmanager-config>

  # Permission: PA
  volumes:
    - <volume referenced in volumeMounts>

  # Permission: PA
  volumeMounts:
    - <volumeMount referenced in alertmanagerConfig>

Esempio di configurazione della regola

# Configures either an alert or a target record for precomputation
apiVersion: monitoring.gdc.goog/v1alpha1
kind: MonitoringRule
metadata:
  # Choose namespace that contains the metrics that rules are based on
  # Note: alert/record will be produced in the same namespace
  namespace: g-fleetns-a
  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
  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>

  # Configure alert rules
  alertRules:
    # Define alert name 
  - alert: <string>

    # Define PromQL expression to evaluate for this rule
    # https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
    expr: <string>

    # Define when an active alert moves from pending to firing
    # Optional, Default: 0s
    for: <duration>

    # Define labels to add or overwrite
    # Required, Map of {key, value} pairs
    # Required labels: 
    #     severity: [error, critical, warning, info]
    #     code: 
    #     resource: component/service/hardware related to alert
    #     additional labels are optional
    labels:
      severity: <enum: [error, critical, warning, info]>
      code: 
      resource: <Short name of the related operable component>
      <labelname>: <tmpl_string>

    # Define annotations to add
    # Optional, Map of {key, value} pairs
    # Recommended annotations:
    #     message: value of Message field in UI
    #     expression: value of Rule field in UI
    #     runbookurl: URL for link in Actions to take field in UI
    annotations:
      <labelname>: <tmpl_string>
# Configures either an alert or a target record for precomputation
apiVersion: logging.gdc.goog/v1alpha1
kind: LoggingRule
metadata:
  # Choose namespace that contains the logs that rules are based on
  # Note: alert/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
  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>

  # Configure alert rules
  alertRules:
    # Define alert name
  - alert: <string>

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

    # Define when an active alert moves from pending to firing
    # Optional, Default: 0s
    for: <duration>

    # Define labels to add or overwrite
    # Required, Map of {key, value} pairs
    # Required labels: 
    #     severity: [error, critical, warning, info]
    #     code: 
    #     resource: component/service/hardware related to alert
    #     additional labels are optional
    labels:
      severity: <enum: [error, critical, warning, info]>
      code:
      resource: <Short name of the related operable component>
      <labelname>: <tmpl_string>

    # Define annotations to add
    # Optional, Map of {key, value} pairs
    # Recommended annotations:
    #     message: value of Message field in UI
    #     expression: value of Rule field in UI
    #     runbookurl: URL for link in Actions to take field in UI
    annotations:
      <labelname>: <tmpl_string>

Esegui query sugli avvisi dall'API HTTP

La piattaforma di osservabilità espone un endpoint API HTTP per eseguire query e leggere metriche, avvisi e altri dati delle serie temporali del tuo progetto per il monitoraggio del sistema.

Esegui query sugli avvisi direttamente dall'API HTTP di Observability per configurare attività automatizzate, adattare le risposte e creare integrazioni in base al tuo caso d'uso. Ad esempio, inserisci l'output in un altro comando, esporta i dettagli in formati file di testo o configura un cron job Linux. Puoi chiamare l'API HTTP di Observability dall'interfaccia a riga di comando (CLI) o da un browser web e ottenere il risultato in formato JSON.

Questa sezione spiega come chiamare l'endpoint API HTTP di Observability dall'interfaccia a riga di comando utilizzando la specifica API Alertmanagerper eseguire query sugli avvisi.

Esegui query sugli avvisi direttamente dall'API HTTP di Observability per configurare attività automatizzate, adattare le risposte e creare integrazioni in base al tuo caso d'uso. Ad esempio, inserisci l'output in un altro comando, esporta i dettagli in formati file di testo o configura un cron job Linux. Puoi chiamare l'API HTTP di Observability dall'interfaccia a riga di comando (CLI) o da un browser web e ottenere il risultato in formato JSON.

Questa sezione spiega come chiamare l'endpoint API HTTP di Observability dall'interfaccia a riga di comando utilizzando la specifica dell'API Alertmanager per eseguire query sulle metriche.

Prima di iniziare

Per ottenere le autorizzazioni necessarie per accedere all'endpoint API HTTP di Observability, chiedi all'amministratore IAM del progetto di concederti il ruolo Project Cortex Alertmanager Viewer (project-cortex-alertmanager-viewer) nello spazio dei nomi del progetto.

L'amministratore IAM del progetto può concederti l'accesso creando un'associazione di ruoli:

a. Amministratore root dell'operatore di infrastruttura (IO) - Project Cortex Alertmanager Viewer:

kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding 
io-cortex-alertmanager-viewer-binding -n infra-obs 
--user=fop-infrastructure-operator@example.com 
--role=project-cortex-alertmanager-viewer

b. Platform-Admin (PA) Root-Admin - Project Cortex Alertmanager Viewer:

kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding
pa-cortex-alertmanager-viewer-binding -n platform-obs 
--user=fop-platform-admin@example.com 
--role=project-cortex-alertmanager-viewer

c. Application Operator (AO) Root-Admin - Project Cortex Alertmanager Viewer: Project: $AO_PROJECT AO User Name: $AO_USER

kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding 
project-cortex-alertmanager-viewer-binding -n $AO_PROJECT 
--user=$AO_USER 
--role=project-cortex-alertmanager-viewer

Dopo aver creato l'associazione dei ruoli, puoi accedere ad Alertmanager corrispondente con il tuo nome utente di accesso.

Verifica l'associazione del ruolo

kubectl --kubeconfig $HOME/org-1-admin-kubeconfig get rolebinding -n platform-obs

Per informazioni sull'impostazione delle associazioni dei ruoli dalla console GDC, consulta Concedi l'accesso alle risorse.

Endpoint Cortex

Il seguente URL è l'endpoint Cortex per accedere agli avvisi:

https://GDC_URL/PROJECT_NAME/cortex/alertmanager/

Sostituisci quanto segue:

  • GDC_URL: l'URL della tua organizzazione in GDC.
  • PROJECT_NAME: il nome del progetto

Chiama l'endpoint API

Segui questi passaggi per raggiungere l'endpoint API Cortex dall'interfaccia a riga di comando ed eseguire query sugli avvisi:

  1. Assicurati di soddisfare i prerequisiti.
  2. Apri l'interfaccia a riga di comando.
  3. Utilizza lo strumento curl per chiamare l'URL dell'endpoint Cortex ed estendi l'URL utilizzando l'indirizzo standard https://prometheus.io/docs/prometheus/latest/querying/api/#alertmanagers per eseguire query sugli avvisi. Ad esempio:

    curl https://console.org-1.zone1.google.gdch.test/alice/cortex/alertmanager/api/v1/alertmanagers
    

Ottieni l'output nell'interfaccia a riga di comando dopo il comando. Il formato della risposta dell'API è JSON.