31.1. Configurare il webhook ServiceNow di Alertmanager

Tempo stimato per il completamento: 2 ore

Proprietario del componente utilizzabile: TS

Questo documento contiene le istruzioni per configurare il webhook Alertmanager ServiceNow e consente di creare avvisi nell'istanza attiva del sistema di gestione dei ticket ServiceNow.

31.1.1. Prima di iniziare

Prima di configurare il webhook ServiceNow, segui questi passaggi:

  1. Crea manualmente il secret midserver-secret.
  2. Segui i passaggi nel runbook TS-R0012 per configurare correttamente il secret.
  3. Verifica che yq sia installato sul sistema.

    root@bootstrapper:~# yq --version
    yq (https://github.com/mikefarah/yq/) version v4.40.4
    
  4. Per ottenere le autorizzazioni necessarie per accedere agli oggetti nello spazio dei nomi obs-system e gestire l'applicazione ServiceNow, chiedi all'Amministratore sicurezza di concederti i seguenti ruoli:

    • Debugger di osservabilità (observability-admin-debugger per il cluster di amministrazione principale e observability-system-debugger per i cluster di amministrazione dell'organizzazione e di sistema)
    • Visualizzatore Grafana (grafana-viewer)
    • Amministratore ServiceNow (system-service-now-admin)

    Per maggiori informazioni su questi ruoli, vedi Ruoli dell'operatore dell'infrastruttura.

31.1.2. Configura il webhook

Segui questi passaggi per configurare il webhook Alertmanager ServiceNow:

  1. Puoi configurare il webhook ServiceNow in un'organizzazione.

    Se vuoi configurare il webhook ServiceNow nel cluster di sistema per un'organizzazione, chiedi all'operatore dell'infrastruttura di eseguire il runbook OPA-R0005 con le seguenti informazioni:

    • Il valore della variabile di ambiente IO_GROUP è il gruppo di utenti a cui appartiene l'utente.
    • Il valore della variabile di ambiente CONSTRAINT_NAME è restrict-system-project-namespace-resources.
  2. Crea un account di servizio ServiceNow per creare gli incident in base agli avvisi di un'organizzazione:

    1. Apri l'URL dell'interfaccia web di ServiceNow:

      https://support.gdchservices.GDC_URL/navpage.do
      

      Sostituisci GDC_URL con l'URL della tua organizzazione in Google Distributed Cloud (GDC) air-gapped.

      Utilizza sempre gdchservices come nome dell'organizzazione IT di Operations Center.

    2. Seleziona Tutti > Amministrazione utenti > Utenti.

    3. Fai clic su New (Nuovo).

    4. Nella nuova finestra, inserisci i seguenti valori:

      • Nel campo ID utente, inserisci SVC_ALERT_ORG.
      • Nel campo Nome, inserisci SVC_ALERT_ORG.
      • Seleziona la casella di controllo Solo accesso al servizio web.

      Sostituisci ORG con il nome della tua organizzazione. Quando esegui questo passaggio nel cluster di amministrazione principale, utilizza il valore root per il nome ORG.

    5. Fai clic su Invia.

      Il nuovo record utente viene visualizzato nell'elenco degli account ServiceNow.

  3. Aggiungi il ruolo itil al account di servizio:

    1. Apri il record utente dall'elenco.

    2. Fai clic sulla scheda Ruoli e poi sul pulsante Modifica….

    3. Seleziona il ruolo itil dal menu Raccolta.

    4. Fai clic sul pulsante Aggiungi () per spostare il ruolo nel menu Elenco ruoli.

    5. Fai clic su Salva.

  4. Imposta la password del account di servizio ServiceNow:

    1. Apri il record utente dall'elenco.

    2. Fai clic su Imposta password e poi su Genera.

    3. Copia la password visualizzata dalla finestra e conservala in un luogo sicuro.

    4. Fai clic su Salva password e chiudi la finestra.

  5. Apri l'interfaccia a riga di comando.

  6. Imposta le seguenti variabili di ambiente:

    export ORG=ORGANIZATION
    export SERVICENOW_INSTANCE_URL=SERVICENOW_INSTANCE_URL
    export SERVICENOW_USERNAME=SERVICENOW_USERNAME
    export SERVICENOW_PASSWORD=SERVICENOW_PASSWORD
    export SERVICENOW_AUTORESOLVE=SERVICENOW_AUTORESOLVE
    export SERVICENOW_AUTORESOLVE_REOPEN_DURATION=SERVICENOW_AUTORESOLVE_REOPEN_DURATION
    

    Sostituisci quanto segue:

    • ORGANIZATION: il nome della tua organizzazione
    • SERVICENOW_INSTANCE_URL: l'URL dell'interfaccia web di ServiceNow, ad esempio https://support.gdchservices.GDC_URL.
    • SERVICENOW_USERNAME: il nome utente del account di servizio ServiceNow
    • SERVICENOW_PASSWORD: la password del account di servizio ServiceNow
    • SERVICENOW_AUTORESOLVE: "true" se vuoi risolvere automaticamente gli incidenti ServiceNow una volta che l'avviso corrispondente smette di attivarsi, altrimenti "false"
    • SERVICENOW_AUTORESOLVE_REOPEN_DURATION: la durata entro la quale un incidente ServiceNow risolto può essere riaperto se viene attivato di nuovo lo stesso avviso. Esempi: "5m", "30s", "24h" e così via.
  7. Esegui questo comando:

    cat << EOF > ~/mon-alertmanager-servicenow-webhook-subcomponentoverride.yaml
    apiVersion: lcm.private.gdc.goog/v1
    kind: SubcomponentOverride
    metadata:
      name: mon-alertmanager-servicenow-webhook
    spec:
      subComponentRef: "mon-alertmanager-servicenow-webhook"
      backend:
        operableParameters:
          servicenowCredentials:
            instanceName: ${SERVICENOW_INSTANCE_URL:?}
            username: ${SERVICENOW_USERNAME:?}
            password: ${SERVICENOW_PASSWORD:?}
          serviceNowSettings:
            autoResolve: ${SERVICENOW_AUTORESOLVE:?}
            autoResolveReopenDuration: ${SERVICENOW_AUTORESOLVE_REOPEN_DURATION:?}
    EOF
    cat << EOF > ~/meta-alertmanager-servicenow-webhook-subcomponentoverride.yaml
    apiVersion: lcm.private.gdc.goog/v1
    kind: SubcomponentOverride
    metadata:
      name: meta-alertmanager-servicenow-webhook
    spec:
      subComponentRef: "mon-meta-monitoring"
      backend:
        operableParameters:
          servicenowCredentials:
            instanceName: ${SERVICENOW_INSTANCE_URL:?}
            username: ${SERVICENOW_USERNAME:?}
            password: ${SERVICENOW_PASSWORD:?}
          serviceNowSettings:
            autoResolve: ${SERVICENOW_AUTORESOLVE:?}
            autoResolveReopenDuration: ${SERVICENOW_AUTORESOLVE_REOPEN_DURATION:?}
    EOF
    cat << EOF > ~/ts-networking-subcomponentoverride.yaml
    apiVersion: lcm.private.gdc.goog/v1
    kind: SubcomponentOverride
    metadata:
      name: ts-networking
    spec:
      subComponentRef: "ts-networking"
      backend:
        operableParameters:
          serviceNowEndpoint: ${SERVICENOW_INSTANCE_URL:?}
    EOF
    
  8. Segui questi passaggi per configurare il webhook ServiceNow in un cluster:

Cluster di amministrazione principale

  1. Imposta le seguenti variabili di ambiente:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_ADMIN_KUBECONFIG
    

    Sostituisci quanto segue:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG: il percorso del file kubeconfig per il cluster di amministrazione principale
  2. Trova il deployment del webhook:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" get deployment mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output deve mostrare lo stato READY e avere un aspetto simile al seguente esempio:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. Controlla se esiste il file YAML configmap:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" get configmap/mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. Controlla se esiste il file YAML Secret:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" get secret/mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                          TYPE     DATA   AGE
    mon-alertmanager-servicenow-webhook-backend   Opaque   2      8h
    
  5. Configura il file YAML configmap:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" apply -n root -f ~/mon-alertmanager-servicenow-webhook-subcomponentoverride.yaml
    

    Output previsto:

    subcomponentoverride.lcm.private.gdc.goog/mon-alertmanager-servicenow-webhook created
    
  6. Configura il networking:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" apply -n root -f ~/ts-networking-subcomponentoverride.yaml
    

    Output previsto:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. Riavvia il deployment del webhook:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" rollout restart deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. Riavvia il deployment del webhook dello stack di monitoraggio secondario:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" rollout restart deployment/meta-alertmanager-servicenow-webhook -n obs-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. Controlla i log del deployment di alertmanager-servicenow-webhook per convalidare la configurazione:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. Se i log contengono la stringa listening on: :9877, la configurazione è completa. In caso contrario, richiedi assistenza per la risoluzione dei problemi.

  11. Trova il deployment del webhook:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" get deployment meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output deve mostrare lo stato READY e avere un aspetto simile al seguente esempio:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. Controlla se esiste il file YAML configmap:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" get configmap/meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. Controlla se esiste il file YAML Secret:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" get secret/meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                          TYPE     DATA   AGE
    meta-alertmanager-servicenow-webhook          Opaque   2      8h
    
  14. Configura il file YAML configmap:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" apply -n ${ORG:?} -f ~/meta-alertmanager-servicenow-webhook-subcomponentoverride.yaml
    

    Output previsto:

    subcomponentoverride.lcm.private.gdc.goog/meta-alertmanager-servicenow-webhook created
    
  15. Riavvia il deployment del webhook:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" rollout restart deployment/meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. Riavvia il deployment del webhook dello stack di monitoraggio secondario:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" rollout restart deployment/meta-alertmanager-servicenow-webhook -n obs-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. Controlla i log del deployment di meta-alertmanager-servicenow-webhook per convalidare la configurazione:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. Se i log contengono la stringa listening on: :9877, la configurazione è completa. In caso contrario, richiedi assistenza per la risoluzione dei problemi.

Cluster Org Infra

  1. Imposta le seguenti variabili di ambiente:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_KUBECONFIG
    export INFRA_KUBECONFIG=PATH_TO_INFRA_KUBECONFIG
    

    Sostituisci quanto segue:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG: il percorso del file kubeconfig per il cluster di amministrazione principale
    • PATH_TO_INFRA_KUBECONFIG: il percorso del file kubeconfig per il cluster di infrastruttura
  2. Trova il deployment del webhook:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" get deployment mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output deve mostrare lo stato READY e avere un aspetto simile al seguente esempio:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. Controlla se esiste il file YAML configmap:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" get configmap/mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. Controlla se esiste il file YAML Secret:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" get secret/mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                          TYPE     DATA   AGE
    mon-alertmanager-servicenow-webhook-backend   Opaque   2      8h
    
  5. Configura il file YAML configmap:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" apply -n ${ORG:?} -f ~/mon-alertmanager-servicenow-webhook-subcomponentoverride.yaml
    

    Output previsto:

    subcomponentoverride.lcm.private.gdc.goog/mon-alertmanager-servicenow-webhook created
    
  6. Configura il networking:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" apply -n ${ORG:?} -f ~/ts-networking-subcomponentoverride.yaml
    

    Output previsto:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. Riavvia il deployment del webhook:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" rollout restart deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. Riavvia il deployment del webhook dello stack di monitoraggio secondario:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" rollout restart deployment/meta-alertmanager-servicenow-webhook -n obs-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. Controlla i log del deployment di alertmanager-servicenow-webhook per convalidare la configurazione:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. Se i log contengono la stringa listening on: :9877, la configurazione è completa. In caso contrario, richiedi assistenza per la risoluzione dei problemi.

  11. Trova il deployment del webhook:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" get deployment meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output deve mostrare lo stato READY e avere un aspetto simile al seguente esempio:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. Controlla se esiste il file YAML configmap:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" get configmap/meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. Controlla se esiste il file YAML Secret:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" get secret/meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output deve essere simile al seguente esempio:

    NAME                                          TYPE     DATA   AGE
    meta-alertmanager-servicenow-webhook          Opaque   2      8h
    
  14. Configura il file YAML configmap:

    kubectl --kubeconfig "${ROOT_ADMIN_KUBECONFIG:?}" apply -n ${ORG:?} -f ~/meta-alertmanager-servicenow-webhook-subcomponentoverride.yaml
    

    Output previsto:

    subcomponentoverride.lcm.private.gdc.goog/meta-alertmanager-servicenow-webhook created
    
  15. Riavvia il deployment del webhook:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" rollout restart deployment/meta-alertmanager-servicenow-webhook -n mon-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. Riavvia il deployment del webhook dello stack di monitoraggio secondario:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" rollout restart deployment/meta-alertmanager-servicenow-webhook -n obs-system
    

    L'output verifica la riuscita dell'operazione, come mostrato nell'esempio seguente:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. Controlla i log del deployment di meta-alertmanager-servicenow-webhook per convalidare la configurazione:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. Se i log contengono la stringa listening on: :9877, la configurazione è completa. In caso contrario, richiedi assistenza per la risoluzione dei problemi.

31.1.3. Verifica la configurazione

Segui questi passaggi per verificare che la configurazione sia riuscita:

  1. Apri l'URL dell'interfaccia web di ServiceNow:

    https://support.gdchservices.GDC_URL/navpage.do
    

    Sostituisci GDC_URL con l'URL della tua organizzazione in Google Distributed Cloud (GDC) air-gapped.

  2. Vai alla pagina Service Desk > Incidenti.

  3. Verifica che esista un incidente con la breve descrizione IgnoreThisAlwaysFiringAlert per ogni organizzazione nell'universo GDC.

  4. Verifica che i seguenti campi siano compilati nell'incidente:

    • Numero
    • Priorità
    • Chiamante
    • Codice componente
    • ID zona
    • Stato dell'incidente
    • ID organizzazione
    • ID zona
    • Descrizione breve
    • Descrizione (deve contenere un'impronta)