31.1. Configurar el webhook de ServiceNow de Alertmanager

Tiempo estimado para completarlo: 2 horas

Propietario del componente operable: TS

En este documento se incluyen las instrucciones para configurar el webhook de Alertmanager ServiceNow y crear alertas en la instancia activa del sistema de asistencia de ServiceNow.

31.1.1. Antes de empezar

Antes de configurar el webhook de ServiceNow, sigue estos pasos:

  1. Crea el secreto midserver-secret manualmente.
  2. Sigue los pasos del runbook TS-R0012 para configurar correctamente el secreto.
  3. Comprueba que yq esté instalado en el sistema.

    root@bootstrapper:~# yq --version
    yq (https://github.com/mikefarah/yq/) version v4.40.4
    
  4. Para obtener los permisos que necesitas para acceder a los objetos del espacio de nombres obs-system y gestionar la aplicación ServiceNow, pide a tu administrador de seguridad que te conceda los siguientes roles:

    • Depurador de observabilidad (observability-admin-debugger para el clúster de administrador raíz y observability-system-debugger para los clústeres de administrador de la organización y del sistema)
    • Lector de Grafana (grafana-viewer)
    • Administrador de ServiceNow (system-service-now-admin)

    Para obtener más información sobre estos roles, consulta Roles de operador de infraestructura.

31.1.2. Configurar el webhook

Sigue estos pasos para configurar el webhook de Alertmanager ServiceNow:

  1. Puedes configurar el webhook de ServiceNow en una organización.

    Si quieres configurar el webhook de ServiceNow en el clúster del sistema de una organización, pide a tu operador de infraestructura que ejecute el runbook OPA-R0005 con la siguiente información:

    • El valor de la variable de entorno IO_GROUP es el grupo de usuarios al que pertenece el usuario.
    • El valor de la variable de entorno CONSTRAINT_NAME es restrict-system-project-namespace-resources.
  2. Crea una cuenta de servicio de ServiceNow para crear las incidencias basadas en las alertas de una organización:

    1. Abre la URL de la interfaz web de ServiceNow:

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

      Sustituye GDC_URL por la URL de tu organización en Google Distributed Cloud (GDC) con air gap.

      Usa siempre gdchservices como nombre de tu organización de TI de Operations Center.

    2. Seleccione Todos > Administración de usuarios > Usuarios.

    3. Haz clic en New (Nuevo).

    4. En la nueva ventana, introduce los siguientes valores:

      • En el campo User ID (ID de usuario), introduce SVC_ALERT_ORG.
      • En el campo Nombre, introduce SVC_ALERT_ORG.
      • Marca la casilla Solo acceso a servicios web.

      Sustituye ORG por el nombre de tu organización. Cuando realice este paso en el clúster de administrador raíz, use el valor root para el nombre ORG.

    5. Haz clic en Enviar.

      El nuevo registro de usuario aparece en la lista de cuentas de ServiceNow.

  3. Añade el rol itil a la cuenta de servicio:

    1. Abre el registro de usuario de la lista.

    2. Haz clic en la pestaña Roles y, a continuación, en el botón Editar....

    3. Selecciona el rol itil en el menú Colección.

    4. Haz clic en el botón Añadir () para mover el rol al menú Lista de roles.

    5. Haz clic en Guardar.

  4. Define la contraseña de la cuenta de servicio de ServiceNow:

    1. Abre el registro de usuario de la lista.

    2. Haz clic en Definir contraseña y, a continuación, en Generar.

    3. Copia la contraseña que aparece en la ventana y guárdala en un lugar seguro.

    4. Haz clic en Guardar contraseña y cierra la ventana.

  5. Abre la interfaz de línea de comandos.

  6. Define las siguientes variables de entorno:

    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
    

    Haz los cambios siguientes:

    • ORGANIZATION: el nombre de tu organización
    • SERVICENOW_INSTANCE_URL: la URL de la interfaz web de ServiceNow, por ejemplo, https://support.gdchservices.GDC_URL.
    • SERVICENOW_USERNAME: el nombre de usuario de la cuenta de servicio de ServiceNow
    • SERVICENOW_PASSWORD: la contraseña de la cuenta de servicio de ServiceNow
    • SERVICENOW_AUTORESOLVE: "true" si quieres que los incidentes de ServiceNow se resuelvan automáticamente cuando deje de activarse la alerta correspondiente; de lo contrario, "false".
    • SERVICENOW_AUTORESOLVE_REOPEN_DURATION: la duración durante la cual se puede volver a abrir un incidente de ServiceNow resuelto si se vuelve a activar la misma alerta. Por ejemplo: "5m", "30s", "24h", etc.
  7. Ejecuta el siguiente 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. Sigue estos pasos para configurar el webhook de ServiceNow en un clúster:

Clúster de administrador raíz

  1. Define las siguientes variables de entorno:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_ADMIN_KUBECONFIG
    

    Haz los cambios siguientes:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG: la ruta del archivo kubeconfig del clúster de administrador raíz
  2. Busca el despliegue del webhook:

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

    La salida debe mostrar el estado READY y tener el siguiente aspecto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. Comprueba si existe el archivo YAML configmap:

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

    La salida debe tener el siguiente aspecto:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. Comprueba si existe el archivo YAML Secret:

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

    La salida debe tener el siguiente aspecto:

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

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

    Resultado esperado:

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

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

    Resultado esperado:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. Reinicia la implementación del webhook:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. Reinicia la implementación del webhook de la pila de monitorización secundaria:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. Consulta los registros de la implementación de alertmanager-servicenow-webhook para validar la configuración:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. Si los registros contienen la cadena listening on: :9877, significa que la configuración se ha completado. Si no, solicita asistencia para solucionar el problema.

  11. Busca el despliegue del webhook:

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

    La salida debe mostrar el estado READY y tener el siguiente aspecto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. Comprueba si existe el archivo YAML configmap:

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

    La salida debe tener el siguiente aspecto:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. Comprueba si existe el archivo YAML Secret:

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

    La salida debe tener el siguiente aspecto:

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

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

    Resultado esperado:

    subcomponentoverride.lcm.private.gdc.goog/meta-alertmanager-servicenow-webhook created
    
  15. Reinicia la implementación del webhook:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. Reinicia la implementación del webhook de la pila de monitorización secundaria:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. Consulta los registros de la implementación de meta-alertmanager-servicenow-webhook para validar la configuración:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. Si los registros contienen la cadena listening on: :9877, significa que la configuración se ha completado. Si no, solicita asistencia para solucionar el problema.

Clúster de infraestructura de la organización

  1. Define las siguientes variables de entorno:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_KUBECONFIG
    export INFRA_KUBECONFIG=PATH_TO_INFRA_KUBECONFIG
    

    Haz los cambios siguientes:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG: la ruta del archivo kubeconfig del clúster de administrador raíz
    • PATH_TO_INFRA_KUBECONFIG: la ruta del archivo kubeconfig del clúster de infraestructura
  2. Busca el despliegue del webhook:

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

    La salida debe mostrar el estado READY y tener el siguiente aspecto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. Comprueba si existe el archivo YAML configmap:

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

    La salida debe tener el siguiente aspecto:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. Comprueba si existe el archivo YAML Secret:

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

    La salida debe tener el siguiente aspecto:

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

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

    Resultado esperado:

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

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

    Resultado esperado:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. Reinicia la implementación del webhook:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. Reinicia la implementación del webhook de la pila de monitorización secundaria:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. Consulta los registros de la implementación de alertmanager-servicenow-webhook para validar la configuración:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. Si los registros contienen la cadena listening on: :9877, significa que la configuración se ha completado. Si no, solicita asistencia para solucionar el problema.

  11. Busca el despliegue del webhook:

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

    La salida debe mostrar el estado READY y tener el siguiente aspecto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. Comprueba si existe el archivo YAML configmap:

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

    La salida debe tener el siguiente aspecto:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. Comprueba si existe el archivo YAML Secret:

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

    La salida debe tener el siguiente aspecto:

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

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

    Resultado esperado:

    subcomponentoverride.lcm.private.gdc.goog/meta-alertmanager-servicenow-webhook created
    
  15. Reinicia la implementación del webhook:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. Reinicia la implementación del webhook de la pila de monitorización secundaria:

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

    La salida verifica que el proceso se ha completado correctamente, como se muestra en el siguiente ejemplo:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. Consulta los registros de la implementación de meta-alertmanager-servicenow-webhook para validar la configuración:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. Si los registros contienen la cadena listening on: :9877, significa que la configuración se ha completado. Si no, solicita asistencia para solucionar el problema.

31.1.3. Verifica la configuración

Sigue estos pasos para comprobar que la configuración se ha realizado correctamente:

  1. Abre la URL de la interfaz web de ServiceNow:

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

    Sustituye GDC_URL por la URL de tu organización en Google Distributed Cloud (GDC) con air gap.

  2. Vaya a la página Mesa de asistencia > Incidencias.

  3. Comprueba que haya un incidente con la descripción breve IgnoreThisAlwaysFiringAlert para cada organización del universo de GDC.

  4. Comprueba que se hayan rellenado los siguientes campos del incidente:

    • Número
    • Prioridad
    • Persona que llama
    • Código de componente
    • ID de zona
    • Estado del incidente
    • ID de organización
    • ID de zona
    • Descripción breve
    • Descripción (debe incluir una huella digital)