31.1. Configure o webhook do ServiceNow do Alertmanager

Tempo estimado até à conclusão: 2 horas

Proprietário do componente operacional: TS

Este documento contém as instruções para configurar o webhook do Alertmanager ServiceNow e permitir-lhe criar alertas na instância ativa do sistema de emissão de pedidos do ServiceNow.

31.1.1. Antes de começar

Antes de configurar o webhook do ServiceNow, siga os passos abaixo:

  1. Crie o segredo manualmente midserver-secret.
  2. Siga os passos no manual de procedimentos TS-R0012 para configurar corretamente o segredo.
  3. Verifique se o yq está instalado no sistema.

    root@bootstrapper:~# yq --version
    yq (https://github.com/mikefarah/yq/) version v4.40.4
    
  4. Para receber as autorizações de que precisa para aceder a objetos no espaço de nomes obs-system e gerir a aplicação ServiceNow, peça ao seu administrador de segurança para lhe conceder as seguintes funções:

    • Depurador de observabilidade (observability-admin-debugger para o cluster de administrador raiz e observability-system-debugger para os clusters de administrador da organização e do sistema)
    • Grafana Viewer (grafana-viewer)
    • Administrador do ServiceNow (system-service-now-admin)

    Para mais informações sobre estas funções, consulte o artigo Funções do operador de infraestrutura.

31.1.2. Configure o webhook

Siga estes passos para configurar o webhook do Alertmanager ServiceNow:

  1. Pode configurar o webhook do ServiceNow numa organização.

    Se quiser configurar o webhook do ServiceNow no cluster do sistema para uma organização, peça ao seu operador de infraestrutura (IO) que execute o runbook OPA-R0005 com as seguintes informações:

    • O valor da variável de ambiente IO_GROUP é o grupo de utilizadores ao qual o utilizador pertence.
    • O valor da variável de ambiente CONSTRAINT_NAME é restrict-system-project-namespace-resources.
  2. Crie uma conta de serviço do ServiceNow para criar os incidentes com base nos alertas de uma organização:

    1. Abra o URL da interface Web do ServiceNow:

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

      Substitua GDC_URL pelo URL da sua organização no Google Distributed Cloud (GDC) air-gapped.

      Use sempre gdchservices como o nome da organização de TI do centro de operações.

    2. Selecione Tudo > Administração de utilizadores > Utilizadores.

    3. Clique em Novo.

    4. Na nova janela, introduza os seguintes valores:

      • No campo ID do utilizador, introduza SVC_ALERT_ORG.
      • No campo Nome próprio, introduza SVC_ALERT_ORG.
      • Selecione a caixa de verificação Acesso apenas ao serviço Web.

      Substitua ORG pelo nome da sua organização. Quando realizar este passo no cluster de administrador raiz, use o valor root para o nome ORG.

    5. Clique em Enviar.

      O novo registo de utilizador é apresentado na lista de contas do ServiceNow.

  3. Adicione a função itil à conta de serviço:

    1. Abra o registo de utilizador a partir da lista.

    2. Clique no separador Funções e, de seguida, no botão Editar….

    3. Selecione a função itil no menu Coleção.

    4. Clique no botão Adicionar () para mover a função para o menu Lista de funções.

    5. Clique em Guardar.

  4. Defina a palavra-passe da conta de serviço do ServiceNow:

    1. Abra o registo de utilizador a partir da lista.

    2. Clique em Definir palavra-passe e, de seguida, em Gerar.

    3. Copie a palavra-passe apresentada na janela e guarde-a num local seguro.

    4. Clique em Guardar palavra-passe e feche a janela.

  5. Abra a interface de linhas de comando.

  6. Defina as seguintes variáveis de 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
    

    Substitua o seguinte:

    • ORGANIZATION: o nome da sua organização
    • SERVICENOW_INSTANCE_URL: o URL da interface Web do ServiceNow, por exemplo, https://support.gdchservices.GDC_URL.
    • SERVICENOW_USERNAME: o nome de utilizador da conta de serviço do ServiceNow
    • SERVICENOW_PASSWORD: a palavra-passe da conta de serviço do ServiceNow
    • SERVICENOW_AUTORESOLVE: "true" se quiser resolver automaticamente os incidentes do ServiceNow assim que o alerta correspondente deixar de ser acionado, caso contrário, "false"
    • SERVICENOW_AUTORESOLVE_REOPEN_DURATION: a duração durante a qual um incidente resolvido do ServiceNow pode ser reaberto se o mesmo alerta for acionado novamente. Exemplos: "5m", "30s", "24h", etc.
  7. Execute o seguinte 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. Siga os passos seguintes para configurar o webhook do ServiceNow num cluster:

Cluster de administrador raiz

  1. Defina as seguintes variáveis de ambiente:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_ADMIN_KUBECONFIG
    

    Substitua o seguinte:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG: o caminho do ficheiro kubeconfig para o cluster de administrador raiz
  2. Encontre a implementação do webhook:

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

    O resultado tem de mostrar um estado READY e ter o seguinte aspeto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. Verifique se o ficheiro YAML configmap existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. Verifique se o ficheiro YAML Secret existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                          TYPE     DATA   AGE
    mon-alertmanager-servicenow-webhook-backend   Opaque   2      8h
    
  5. Configure o ficheiro YAML configmap:

    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. Configure a rede:

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

    Resultado esperado:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. Reinicie a implementação do webhook:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. Reinicie a implementação do webhook da pilha de monitorização secundária:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. Verifique os registos da implementação do alertmanager-servicenow-webhook para validar a configuração:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. Se os registos contiverem a string listening on: :9877, a configuração está concluída. Caso contrário, peça assistência para a resolução de problemas.

  11. Encontre a implementação do webhook:

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

    O resultado tem de mostrar um estado READY e ter o seguinte aspeto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. Verifique se o ficheiro YAML configmap existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. Verifique se o ficheiro YAML Secret existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                          TYPE     DATA   AGE
    meta-alertmanager-servicenow-webhook          Opaque   2      8h
    
  14. Configure o ficheiro YAML configmap:

    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. Reinicie a implementação do webhook:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. Reinicie a implementação do webhook da pilha de monitorização secundária:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. Verifique os registos da implementação do meta-alertmanager-servicenow-webhook para validar a configuração:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. Se os registos contiverem a string listening on: :9877, a configuração está concluída. Caso contrário, peça assistência para a resolução de problemas.

Cluster de infraestrutura da organização

  1. Defina as seguintes variáveis de ambiente:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_KUBECONFIG
    export INFRA_KUBECONFIG=PATH_TO_INFRA_KUBECONFIG
    

    Substitua o seguinte:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG: o caminho do ficheiro kubeconfig para o cluster de administrador raiz
    • PATH_TO_INFRA_KUBECONFIG: o caminho do ficheiro kubeconfig para o cluster de infraestrutura
  2. Encontre a implementação do webhook:

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

    O resultado tem de mostrar um estado READY e ter o seguinte aspeto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. Verifique se o ficheiro YAML configmap existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. Verifique se o ficheiro YAML Secret existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                          TYPE     DATA   AGE
    mon-alertmanager-servicenow-webhook-backend   Opaque   2      8h
    
  5. Configure o ficheiro YAML configmap:

    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. Configure a rede:

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

    Resultado esperado:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. Reinicie a implementação do webhook:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. Reinicie a implementação do webhook da pilha de monitorização secundária:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. Verifique os registos da implementação do alertmanager-servicenow-webhook para validar a configuração:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. Se os registos contiverem a string listening on: :9877, a configuração está concluída. Caso contrário, peça assistência para a resolução de problemas.

  11. Encontre a implementação do webhook:

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

    O resultado tem de mostrar um estado READY e ter o seguinte aspeto:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. Verifique se o ficheiro YAML configmap existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. Verifique se o ficheiro YAML Secret existe:

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

    O resultado tem de ser semelhante ao seguinte exemplo:

    NAME                                          TYPE     DATA   AGE
    meta-alertmanager-servicenow-webhook          Opaque   2      8h
    
  14. Configure o ficheiro YAML configmap:

    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. Reinicie a implementação do webhook:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. Reinicie a implementação do webhook da pilha de monitorização secundária:

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

    O resultado confirma o êxito, como se pode ver no exemplo seguinte:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. Verifique os registos da implementação do meta-alertmanager-servicenow-webhook para validar a configuração:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. Se os registos contiverem a string listening on: :9877, a configuração está concluída. Caso contrário, peça assistência para a resolução de problemas.

31.1.3. Valide a configuração

Siga estes passos para verificar se a configuração foi bem-sucedida:

  1. Abra o URL da interface Web do ServiceNow:

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

    Substitua GDC_URL pelo URL da sua organização no Google Distributed Cloud (GDC) air-gapped.

  2. Navegue para a página Service Desk > Incidentes.

  3. Verifique se existe um incidente com a descrição breve IgnoreThisAlwaysFiringAlert para cada organização no universo do GDC.

  4. Verifique se os seguintes campos estão preenchidos no incidente:

    • Número
    • Prioridade
    • Autor da chamada
    • Código do componente
    • ID da zona
    • Estado do incidente
    • ID da organização
    • ID da zona
    • Breve descrição
    • Descrição (tem de conter uma impressão digital)