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 アプリケーションを管理するために必要な権限を取得するには、次のロールを付与するようセキュリティ管理者に依頼してください。

    • オブザーバビリティ デバッガ(ルート管理クラスタの場合は 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 ウェブ インターフェースの URL を開きます。

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

      GDC_URL は、Google Distributed Cloud(GDC)エアギャップ内の組織の URL に置き換えます。

      Operations Center の IT 組織名には、常に gdchservices を使用します。

    2. [すべて> ユーザー管理 > ユーザー] を選択します。

    3. [New] をクリックします。

    4. 新しいウィンドウで、次の値を入力します。

      • [ユーザー ID] フィールドに「SVC_ALERT_ORG」と入力します。
      • [] フィールドに「SVC_ALERT_ORG」と入力します。
      • [Web サービスへのアクセスのみ] チェックボックスをオンにします。

      ORG は組織の名前に置き換えます。ルート管理クラスタでこの手順を実行する場合は、ORG 名に値 root を使用します。

    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_URL: ServiceNow ウェブ インターフェースの URL(例: 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 ウェブフックを構成します。

ルート管理クラスタ

  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 ウェブ インターフェースの URL を開きます。

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

    GDC_URL は、Google Distributed Cloud(GDC)エアギャップ内の組織の URL に置き換えます。

  2. [サービスデスク] > [インシデント] ページに移動します。

  3. GDC ユニバースの各組織に、短い説明が IgnoreThisAlwaysFiringAlert のインシデントがあることを確認します。

  4. インシデントに次のフィールドが入力されていることを確認します。

    • 数値
    • 優先度
    • 発信者
    • コンポーネント コード
    • ゾーン ID
    • インシデントの状態
    • 組織 ID
    • ゾーン ID
    • 簡単な説明
    • 説明(指紋を含める必要があります)