31.1. 設定 Alertmanager ServiceNow Webhook

預計完成時間:2 小時

可操作元件擁有者:TS

本文提供相關操作說明,協助您設定 Alertmanager ServiceNow Webhook,並在有效的 ServiceNow 票證系統執行個體中建立快訊。

31.1.1. 事前準備

設定 ServiceNow Webhook 前,請先完成下列步驟:

  1. 手動建立密鑰 midserver-secret
  2. 請按照 TS-R0012 執行手冊中的步驟,正確設定密鑰。
  3. 確認系統已安裝 yq

    root@bootstrapper:~# yq --version
    yq (https://github.com/mikefarah/yq/) version v4.40.4
    
  4. 如要取得存取 obs-system 命名空間中物件的權限,以及管理 ServiceNow 應用程式,請要求安全管理員授予下列角色:

    • 可觀測性 Debugger (根管理員叢集為 observability-admin-debugger,機構管理員和系統叢集為 observability-system-debugger)
    • Grafana 檢視者 (grafana-viewer)
    • ServiceNow 管理員 (system-service-now-admin)

    如要進一步瞭解這些角色,請參閱「基礎架構運算子角色」。

31.1.2. 設定 Webhook

請按照下列步驟設定 Alertmanager ServiceNow Webhook:

  1. 您可以在機構中設定 ServiceNow Webhook。

    如要在機構的系統叢集中設定 ServiceNow Webhook,請要求基礎架構營運人員 (IO) 執行 OPA-R0005 執行手冊,並提供下列資訊:

    • IO_GROUP 環境變數的值是使用者所屬的使用者群組。
    • CONSTRAINT_NAME 環境變數的值為 restrict-system-project-namespace-resources
  2. 建立 ServiceNow 服務帳戶,根據機構的快訊建立事件:

    1. 開啟 ServiceNow 網頁介面網址:

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

      GDC_URL 替換為 Google Distributed Cloud (GDC) 實體隔離環境中貴機構的網址。

      請一律使用 gdchservices 做為 Operations Center IT 機構名稱。

    2. 依序選取「All」(全部)>「User Administration」(使用者管理) >「Users」(使用者)

    3. 點選「New」

    4. 在新視窗中輸入下列值:

      • 在「User ID」(使用者 ID) 欄位中輸入 SVC_ALERT_ORG
      • 在「名字」欄位中輸入 SVC_ALERT_ORG
      • 勾選「Web service access only」(僅限存取 Web 服務) 核取方塊。

      並將 ORG 替換為貴機構的名稱。在根管理員叢集中執行這個步驟時,請使用值 root 做為 ORG 名稱。

    5. 按一下「提交」

      新的使用者記錄會顯示在 ServiceNow 帳戶清單中。

  3. itil 角色新增至服務帳戶:

    1. 從清單中開啟使用者記錄。

    2. 按一下「角色」分頁標籤,然後按一下「編輯...」按鈕。

    3. 從「集合」選單中選取 itil 角色。

    4. 按一下「新增」 () 按鈕,將角色移至「角色清單」選單。

    5. 按一下 [儲存]

  4. 設定 ServiceNow 服務帳戶的密碼:

    1. 從清單中開啟使用者記錄。

    2. 依序點選「設定密碼」和「產生」

    3. 複製視窗中顯示的密碼,並妥善儲存於安全的位置。

    4. 按一下「儲存密碼」,然後關閉視窗。

  5. 開啟指令列介面。

  6. 設定下列環境變數:

    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
    

    更改下列內容:

    • ORGANIZATION:貴機構的名稱
    • SERVICENOW_INSTANCE_URLServiceNow 網頁介面網址,例如 https://support.gdchservices.GDC_URL
    • SERVICENOW_USERNAME:ServiceNow 服務帳戶的使用者名稱
    • SERVICENOW_PASSWORD:ServiceNow 服務帳戶的密碼
    • SERVICENOW_AUTORESOLVE:如果要在相應的快訊停止觸發後自動解決 ServiceNow 事件,請設為「true」,否則請設為「false」
    • SERVICENOW_AUTORESOLVE_REOPEN_DURATION:如果再次觸發相同快訊,已解決的 ServiceNow 事件可在這段時間內重新開啟。例如:「5m」、「30s」、「24h」等。
  7. 執行下列指令:

    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. 請按照下列步驟,在叢集中設定 ServiceNow Webhook:

根管理員叢集

  1. 設定下列環境變數:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_ADMIN_KUBECONFIG
    

    更改下列內容:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG:根管理員叢集的 kubeconfig 檔案路徑
  2. 找出 Webhook 部署作業:

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

    輸出內容必須顯示 READY 狀態,且應如下列範例所示:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. 檢查 configmap YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. 檢查 Secret YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                          TYPE     DATA   AGE
    mon-alertmanager-servicenow-webhook-backend   Opaque   2      8h
    
  5. 設定 configmap YAML 檔案:

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

    預期輸出內容:

    subcomponentoverride.lcm.private.gdc.goog/mon-alertmanager-servicenow-webhook created
    
  6. 設定網路:

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

    預期輸出內容:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. 重新啟動 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. 重新啟動次要監控堆疊的 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. 檢查 alertmanager-servicenow-webhook 部署作業的記錄,驗證設定:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. 如果記錄包含字串 listening on: :9877,表示設定完成。否則,請要求疑難排解協助。

  11. 找出 Webhook 部署作業:

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

    輸出內容必須顯示 READY 狀態,且應如下列範例所示:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. 檢查 configmap YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. 檢查 Secret YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                          TYPE     DATA   AGE
    meta-alertmanager-servicenow-webhook          Opaque   2      8h
    
  14. 設定 configmap YAML 檔案:

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

    預期輸出內容:

    subcomponentoverride.lcm.private.gdc.goog/meta-alertmanager-servicenow-webhook created
    
  15. 重新啟動 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. 重新啟動次要監控堆疊的 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. 檢查 meta-alertmanager-servicenow-webhook 部署作業的記錄,驗證設定:

    kubectl --kubeconfig "${ROOT_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. 如果記錄包含字串 listening on: :9877,表示設定完成。否則,請要求疑難排解協助。

機構基礎架構叢集

  1. 設定下列環境變數:

    export ROOT_KUBECONFIG=PATH_TO_ROOT_KUBECONFIG
    export INFRA_KUBECONFIG=PATH_TO_INFRA_KUBECONFIG
    

    更改下列內容:

    • PATH_TO_ROOT_ADMIN_KUBECONFIG:根管理員叢集的 kubeconfig 檔案路徑
    • PATH_TO_INFRA_KUBECONFIG:基礎架構叢集的 kubeconfig 檔案路徑
  2. 找出 Webhook 部署作業:

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

    輸出內容必須顯示 READY 狀態,且應如下列範例所示:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    mon-alertmanager-servicenow-webhook-backend   1/1     1            1           8h
    
  3. 檢查 configmap YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                         DATA   AGE
    mon-alertmanager-servicenow-webhookbackend   1      8h
    
  4. 檢查 Secret YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                          TYPE     DATA   AGE
    mon-alertmanager-servicenow-webhook-backend   Opaque   2      8h
    
  5. 設定 configmap YAML 檔案:

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

    預期輸出內容:

    subcomponentoverride.lcm.private.gdc.goog/mon-alertmanager-servicenow-webhook created
    
  6. 設定網路:

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

    預期輸出內容:

    subcomponentoverride.lcm.private.gdc.goog/ts-networking created
    
  7. 重新啟動 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. 重新啟動次要監控堆疊的 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/alertmanager-servicenow-webhook restarted
    
  9. 檢查 alertmanager-servicenow-webhook 部署作業的記錄,驗證設定:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/mon-alertmanager-servicenow-webhook-backend -n mon-system
    
  10. 如果記錄包含字串 listening on: :9877,表示設定完成。否則,請要求疑難排解協助。

  11. 找出 Webhook 部署作業:

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

    輸出內容必須顯示 READY 狀態,且應如下列範例所示:

    NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
    meta-alertmanager-servicenow-webhook          1/1     1            1           8h
    
  12. 檢查 configmap YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                         DATA   AGE
    meta-alertmanager-servicenow-webhook         1      8h
    
  13. 檢查 Secret YAML 檔案是否存在:

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

    輸出內容必須與下列範例類似:

    NAME                                          TYPE     DATA   AGE
    meta-alertmanager-servicenow-webhook          Opaque   2      8h
    
  14. 設定 configmap YAML 檔案:

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

    預期輸出內容:

    subcomponentoverride.lcm.private.gdc.goog/meta-alertmanager-servicenow-webhook created
    
  15. 重新啟動 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. 重新啟動次要監控堆疊的 Webhook 部署作業:

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

    輸出內容會驗證是否成功,如下列範例所示:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  17. 檢查 meta-alertmanager-servicenow-webhook 部署作業的記錄,驗證設定:

    kubectl --kubeconfig "${INFRA_KUBECONFIG:?}" logs deployment/meta-alertmanager-servicenow-webhook -n mon-system
    
  18. 如果記錄包含字串 listening on: :9877,表示設定完成。否則,請要求疑難排解協助。

31.1.3. 驗證設定

請按照下列步驟確認設定是否成功:

  1. 開啟 ServiceNow 網頁介面網址:

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

    GDC_URL 替換為 Google Distributed Cloud (GDC) 實體隔離環境中貴機構的網址。

  2. 前往「Service Desk」 >「Incidents」頁面。

  3. 確認 GDC 宇宙中的每個機構都有簡短說明為 IgnoreThisAlwaysFiringAlert 的事件。

  4. 確認事件中已填入下列欄位:

    • 數字
    • 優先順序
    • 撥話者
    • 元件代碼
    • 可用區 ID
    • 事件狀態
    • 機構 ID
    • 可用區 ID
    • 簡短說明
    • 說明 (必須包含指紋)