31.1. 设置 Alertmanager ServiceNow webhook

预计完成时间:2 小时

可操作组件的所有者:TS

本文档包含有关如何配置 Alertmanager ServiceNow Webhook 的说明,可让您在有效的 ServiceNow 工单系统实例中创建提醒。

31.1.1. 准备工作

在设置 ServiceNow 网络钩子之前,请完成以下步骤:

  1. 手动创建 Secret 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 应用所需的权限,请让 Security Admin 为您授予以下角色:

    • 可观测性调试器(根管理员集群为 observability-admin-debugger,组织管理员集群和系统集群为 observability-system-debugger
    • Grafana Viewer (grafana-viewer)
    • ServiceNow Admin (system-service-now-admin)

    如需详细了解这些角色,请参阅基础架构运维人员角色

31.1.2. 设置网络钩子

请按照以下步骤配置 Alertmanager ServiceNow webhook:

  1. 您可以在组织中配置 ServiceNow 网络钩子。

    如果您想在组织中的系统集群中配置 ServiceNow webhook,请让您的基础设施运维人员 (IO) 运行 OPA-R0005 runbook,并提供以下信息:

    • 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 作为运营中心 IT 组织的名称。

    2. 依次选择全部> 用户管理 > 用户

    3. 点击 New(新建)。

    4. 在新窗口中,输入以下值:

      • 用户 ID 字段中,输入 SVC_ALERT_ORG
      • 名字字段中,输入 SVC_ALERT_ORG
      • 选中仅限 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 Web 界面网址,例如 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. 重启网络钩子部署:

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

    输出会验证成功,如以下示例所示:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. 重启辅助监控堆栈的网络钩子部署:

    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. 重启网络钩子部署:

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

    输出会验证成功,如以下示例所示:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. 重启辅助监控堆栈的网络钩子部署:

    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. 重启网络钩子部署:

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

    输出会验证成功,如以下示例所示:

    deployment.apps/mon-alertmanager-servicenow-webhook-backend restarted
    
  8. 重启辅助监控堆栈的网络钩子部署:

    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. 重启网络钩子部署:

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

    输出会验证成功,如以下示例所示:

    deployment.apps/meta-alertmanager-servicenow-webhook restarted
    
  16. 重启辅助监控堆栈的网络钩子部署:

    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. 依次前往服务台 > 突发事件页面。

  3. 检查 GDC 宇宙中的每个组织是否都有简短说明为 IgnoreThisAlwaysFiringAlert 的突发事件。

  4. 检查事件中是否已填充以下字段:

    • 数字
    • 优先级
    • 发起者
    • 组件代码
    • 区域 ID
    • 突发事件状态
    • 组织 ID
    • 区域 ID
    • 简短说明
    • 说明(必须包含指纹)