查询和查看未解决的提醒

本页面详细介绍了如何使用 GDC 控制台和 Cortex 端点的 curl 工具查询和直观呈现公开提醒,以便了解问题并解决问题。

根据 Google Distributed Cloud (GDC) 气隙设备环境中的日志和指标创建提醒规则 后,您 可以开始监控项目中的公开提醒。您可以在 GDC 控制台上直观呈现和过滤系统事件触发的提醒,也可以使用 curl 工具直接从 Cortex 访问这些提醒,以便进行灵活的脚本编写和自动化。

您可以通过以下两种方法之一访问公开提醒:

  • GDC 控制台:在集成面板中直观呈现提醒数据 ,这些面板包含特定数据源的提醒数量 、严重级别、持续时间、状态、消息和标签等信息。GDC 控制台提供了一个用户友好的界面,用于过滤和分析系统组件中的提醒。
  • Cortex Alertmanager 端点:对于更高级的用例,请在命令行中使用 curl 工具直接查询您的 项目 Cortex 实例。 Cortex 会存储项目的 Alertmanager 提醒,并提供 HTTP 端点以进行程序化访问。通过此访问权限,您可以导出数据、自动执行任务、配置 cron 作业以及构建自定义集成。

准备工作

如需获得查询和可视化提醒所需的权限,请让项目 IAM 管理员在项目命名空间中为您授予其中一个关联的项目 Cortex Alertmanager 角色。根据您需要的访问权限级别,您可以在项目中获得此资源的 Editor 或 Viewer 角色。

如需获得导出日志所需的权限,请让项目 IAM 管理员为您授予 Project Grafana Viewer (project-grafana-viewer) 角色。通过这种基于角色的访问权限控制流程,您可以安全地访问数据可视化图。如需详细了解这些角色,请参阅准备 IAM 权限

下表总结了 PA and AO personaRole 要求。

角色 对象 集群 角色 命名空间 群组/用户 配置
PA alertmanager org-admin project-cortex-alertmanager-viewer platform-obs 群组 1
PA alertmanager org-admin project-cortex-alertmanager-viewer platform-obs 用户 2
AO alertmanager org-admin project-cortex-alertmanager-viewer PROJECT_NAMESPACE 群组 1
AO alertmanager org-admin project-cortex-alertmanager-viewer PROJECT_NAMESPACE 用户 2

请适当替换以下变量:

变量 说明
KUBECONFIG 您将需要包含此 RoleBinding 将应用到的 NAMESPACE 的特定集群的 kubeconfig。
RULE_NAME RoleBinding 资源在命名空间中的唯一名称。例如,pa-cortex-alertmanager-viewer
NAMESPACE 将创建和应用此 RoleBinding 的 Kubernetes 命名空间。请在之前的表格中查找 Namespace 列。
EMAIL_ADDRESS 被授予角色的用户的标识符。这通常是一个电子邮件地址。例如,platform-administrator@example.com
ROLE 包含您要授予用户的权限的 Role 的名称。请在之前的表格中查找可用的角色
GROUP_NAME PA/AO 用户所属的 Group 的名称。例如,pa-group
ZONE 区域的名称

配置 1

此配置向用户组授予访问 org 集群中的 PA/AO 提醒的权限。设置此配置后,请参阅本文档的控制台部分,以在 GDC 控制台上查看提醒。

  • Kubectl 命令

    这是一般命令格式:

    kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n `NAMESPACE` --group=`GROUP_NAME` --role=project-cortex-alertmanager-viewer
    

    示例

    kubectl --kubeconfig <path-to-kubeconfig> create rolebinding project-cortex-alertmanager-viewer-binding --role=project-cortex-alertmanager-viewer --group=my-team --namespace=platform-obs
    
  • Yaml 文件

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: RULE_NAME
      namespace: NAMESPACE
    subjects:
    - kind: Group
      name: GROUP_NAME
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: project-cortex-alertmanager-viewer
      apiGroup: rbac.authorization.k8s.io
    

配置 2

此配置向用户授予访问 org 集群中的 PA/AO 提醒的权限。设置此配置后,请参阅本文档的控制台部分,以在 GDC 控制台上查看提醒。

  • Kubectl 命令

    这是一般命令格式:

    kubectl --kubeconfig `KUBECONFIG` create rolebinding `RULE_NAME` -n `NAMESPACE` --user=`EMAIL_ADDRESS` --role=project-cortex-alertmanager-viewer
    

    示例

    kubectl --kubeconfig <path-to-kubeconfig> create rolebinding project-cortex-alertmanager-viewer-binding --role=project-cortex-alertmanager-viewer --user=my-email@example.com --namespace=platform-obs
    
  • IAC 文件路径

    /infrastructure/zonal/zones/`ZONE`/org-admin/rolebindings/`EMAIL_ADDRESS`/<YAML_FILE>
    
  • Yaml 文件

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: RULE_NAME
      namespace: NAMESPACE
    subjects:
    - kind: User
      name: EMAIL_ADDRESS
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: project-cortex-alertmanager-viewer
      apiGroup: rbac.authorization.k8s.io
    

    如需详细了解这些角色,请参阅 准备 IAM 权限

Grafana 端点

对于应用运维人员 (AO)

打开以下网址以访问项目的端点:

https://GDC_URL/PROJECT_NAMESPACE/grafana

替换以下内容:

  • GDC_URL:您在 GDC 中的组织的网址。
  • PROJECT_NAMESPACE:项目的命名空间。

项目的界面包含默认信息中心,例如包含提醒信息的提醒 - 概览 信息中心。通过界面查询提醒,您可以直观地从项目中检索提醒信息,并获得资源的集成视图,以便了解问题并快速解决问题。

对于平台管理员 (PA)

打开以下网址以访问 platform-obs 项目的端点:

https://GDC_URL/platform-obs/grafana

GDC_URL 替换为您在 GDC 中的组织的网址。

系统监控实例的用户界面 (UI) 包含默认信息中心,例如包含数据可观测性提醒信息的提醒 - 概览 信息中心。通过界面查询提醒,您可以直观地从项目中检索提醒信息,并获得资源的集成视图,以便了解问题并快速解决问题。

“提醒 - 概览”信息中心会显示特定数据源的提醒数量,以及提醒历史记录的折线图,其中显示了相应数据源每小时的待处理提醒数量。

图 1. Grafana 界面上的提醒 - 概览 信息中心。

查看和过滤公开提醒

选择以下方法之一,从项目命名空间查询和过滤公开提醒:

控制台

从 GDC 控制台查看项目中的公开提醒:

  1. 登录 GDC 控制台
  2. 在 GDC 控制台中,选择您的项目。
  3. 在导航菜单中,选择 运维 > 提醒
  4. 选择提醒 标签页。
  5. 查看提醒列表。
  6. 已打开的提醒 部分,点击过滤条件 以仅显示公开提醒。您还可以按其他属性名称或值过滤提醒。
  7. 点击提醒名称可查看提醒详情。

Cortex 端点

本部分介绍如何使用 Cortex Alertmanager 端点访问提醒。

确定 Cortex 端点

以下网址是项目的 Cortex 实例的端点:

  https://GDC_URL/PROJECT_NAMESPACE/cortex/alertmanager/

替换以下内容:

  • GDC_URL:您在 GDC 中的组织的网址。
  • PROJECT_NAMESPACE:您的项目命名空间。

    例如, org-1 组织中 platform-obs 项目的 Cortex 端点为 https://org-1/platform-obs/cortex/alertmanager/

curl 请求进行身份验证

  1. 下载并安装 gdcloud CLI
  2. 设置 gdcloud core/organization_console_url 属性:

    gdcloud config set core/organization_console_url
    https://GDC_URL
    
  3. 使用配置的身份提供方登录

    gdcloud auth login
    
  4. 使用您的用户名和密码进行身份验证并登录。

    登录成功后,您可以通过 gdcloud auth print-identity-token 命令在 c网址 请求中使用授权标头。如需了解详情,请参阅 gdcloud auth

调用 Cortex 端点

完成以下步骤,使用 curl 工具访问 Cortex 端点:

  1. curl 请求进行身份验证
  2. 使用 curl 调用 Cortex 端点 并 使用标准 Alertmanager API 规范 (https://prometheus.io/docs/prometheus/latest/querying/api/#alertmanagers) 扩展网址以查询提醒。

    以下是 curl 请求的示例:

      curl https://GDC_URL/PROJECT_NAME/cortex/alertmanager/api/v1/alertmanagers \
      -H "Authorization: Bearer $(gdcloud auth print-identity-token \
      --audiences=https://GDC_URL)"
    

    您可以在命令后获取输出。API 响应采用 JSON 格式。

Alertmanager

借助 Alertmanager,您可以监控来自客户端应用的提醒通知。您可以使用 Alertmanager 检查和关闭提醒,并过滤或分组提醒:

忽略根管理员集群中的 Loki 拒绝审核日志提醒

图 2. 用于从 Alertmanager 查询审核日志的菜单选项。

预定义的提醒政策

下表列出了 Prometheus 中的预安装提醒规则:

名称 说明
KubeAPIDown(关键) KubeAPI 已从 Prometheus 目标发现中消失了 15 分钟。
KubeClientErrors(警告) Kubernetes API 服务器客户端错误率超过 0.01,持续 15 分钟。
KubeClientErrors(关键) Kubernetes API 服务器客户端错误率超过 0.1,持续 15 分钟。
KubePodCrashLooping(警告) Pod 处于崩溃循环状态的时长已超过 15 分钟。
KubePodNotReady(警告) Pod 处于就绪状态的时长已超过 15 分钟。
KubePersistentVolumeFillingUp(关键) 已声明的 PersistentVolume 的可用字节数小于 0.03。
KubePersistentVolumeFillingUp(警告) 已声明的 PersistentVolume 的可用字节数小于 0.15。
KubePersistentVolumeErrors(关键) 永久性卷处于“失败”或“待处理”阶段达到 5 分钟。
KubeNodeNotReady(警告) 节点处于未读状态超过 15 分钟。
KubeNodeCPUUsageHigh(关键) 节点 CPU 使用率超过 80%。
KubeNodeMemoryUsageHigh(关键) 节点内存用量超过 80%。
NodeFilesystemSpaceFillingUp(警告) 节点文件系统使用量超过 60%。
NodeFilesystemSpaceFillingUp(关键) 节点文件系统使用量超过 85%。
CertManagerCertExpirySoon(警告) 证书将于 21 天后过期。
CertManagerCertNotReady(关键) 在 10 分钟后,证书尚未准备好处理流量。
CertManagerHittingRateLimits(严重) 创建和续订证书达到速率限制已有 5 分钟。
DeploymentNotReady(严重)。 组织管理员集群上的 Deployment 处于非就绪状态的时长已超过 15 分钟。

示例 alertmanagerConfigurationConfigmaps

alertmanagerConfigurationConfigmaps 列出的 ConfigMap 中的配置的语法必须遵循 https://prometheus.io/docs/alerting/latest/configuration/

apiVersion: observability.gdc.goog/v1alpha1
kind: ObservabilityPipeline
metadata:
  # Choose namespace that matches the project's namespace
  namespace: kube-system
  name: observability-config
# Configure Alertmanager
 alerting:
  # Storage size for alerting data within organization
  # Permission: PA
  localStorageSize: 1Gi

  # Permission: PA & AO
  # alertmanager config must be under the key "alertmanager.yml" in the configMap
  alertmanagerConfig: <configmap-for-alertmanager-config>

  # Permission: PA
  volumes:
    - <volume referenced in volumeMounts>

  # Permission: PA
  volumeMounts:
    - <volumeMount referenced in alertmanagerConfig>

示例规则配置

# Configures either an alert or a target record for precomputation
apiVersion: monitoring.gdc.goog/v1alpha1
kind: MonitoringRule
metadata:
  # Choose namespace that contains the metrics that rules are based on
  # Note: alert/record will be produced in the same namespace
  namespace: g-fleetns-a
  name: alerting-config
spec:
  # Rule evaluation interval
  interval: <duration>

  # Configure limit for number of alerts (0: no limit)
  # Optional, Default: 0 (no limit)
  limit: <int>

  # Configure record rules
  recordRules:
    # Define which timeseries to write to (must be a valid metric name)
  - record: <string>

    # Define PromQL expression to evaluate for this rule
    expr: <string>

    # Define labels to add or overwrite
    # Optional, Map of {key, value} pairs
    labels:
      <labelname>: <labelvalue>

  # Configure alert rules
  alertRules:
    # Define alert name 
  - alert: <string>

    # Define PromQL expression to evaluate for this rule
    # https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
    expr: <string>

    # Define when an active alert moves from pending to firing
    # Optional, Default: 0s
    for: <duration>

    # Define labels to add or overwrite
    # Required, Map of {key, value} pairs
    # Required labels: 
    #     severity: [error, critical, warning, info]
    #     code: 
    #     resource: component/service/hardware related to alert
    #     additional labels are optional
    labels:
      severity: <enum: [error, critical, warning, info]>
      code: 
      resource: <Short name of the related operable component>
      <labelname>: <tmpl_string>

    # Define annotations to add
    # Optional, Map of {key, value} pairs
    # Recommended annotations:
    #     message: value of Message field in UI
    #     expression: value of Rule field in UI
    #     runbookurl: URL for link in Actions to take field in UI
    annotations:
      <labelname>: <tmpl_string>
# Configures either an alert or a target record for precomputation
apiVersion: logging.gdc.goog/v1alpha1
kind: LoggingRule
metadata:
  # Choose namespace that contains the logs that rules are based on
  # Note: alert/record will be produced in the same namespace
  namespace: g-fleetns-a
  name: alerting-config
spec:
  # Choose which log source to base alerts on (Operational/Audit/Security Logs)
  # Optional, Default: Operational
  source: <string>

  # Rule evaluation interval
  interval: <duration>

  # Configure limit for number of alerts (0: no limit)
  # Optional, Default: 0 (no limit)
  limit: <int>

  # Configure record rules
  recordRules:
    # Define which timeseries to write to (must be a valid metric name)
  - record: <string>

    # Define LogQL expression to evaluate for this rule
    # https://grafana.com/docs/loki/latest/rules/
    expr: <string>

    # Define labels to add or overwrite
    # Optional, Map of {key, value} pairs
    labels:
      <labelname>: <labelvalue>

  # Configure alert rules
  alertRules:
    # Define alert name
  - alert: <string>

    # Define LogQL expression to evaluate for this rule
    expr: <string>

    # Define when an active alert moves from pending to firing
    # Optional, Default: 0s
    for: <duration>

    # Define labels to add or overwrite
    # Required, Map of {key, value} pairs
    # Required labels: 
    #     severity: [error, critical, warning, info]
    #     code: 
    #     resource: component/service/hardware related to alert
    #     additional labels are optional
    labels:
      severity: <enum: [error, critical, warning, info]>
      code:
      resource: <Short name of the related operable component>
      <labelname>: <tmpl_string>

    # Define annotations to add
    # Optional, Map of {key, value} pairs
    # Recommended annotations:
    #     message: value of Message field in UI
    #     expression: value of Rule field in UI
    #     runbookurl: URL for link in Actions to take field in UI
    annotations:
      <labelname>: <tmpl_string>

通过 HTTP API 查询提醒

可观测性平台公开了 HTTP API 端点,用于从项目中查询和读取指标、提醒和其他时序数据,以进行系统监控。

直接从可观测性 HTTP API 查询提醒,以根据您的用例设置自动化任务、调整响应和构建集成。例如,将输出插入另一个命令、将详细信息导出为文本文件格式,或配置 Linux cron 作业。您可以从命令行界面 (CLI) 或网络浏览器调用可观测性 HTTP API,并以 JSON 格式获取结果。

本部分介绍如何使用 API 规范从 CLI 调用可观测性 HTTP API 端点以查询提醒。

直接从可观测性 HTTP API 查询提醒,以根据您的用例设置自动化任务、调整响应和构建集成。例如,将输出插入另一个命令、将详细信息导出为文本文件格式,或配置 Linux cron 作业。您可以从命令行界面 (CLI) 或网络浏览器调用可观测性 HTTP API,并以 JSON 格式获取结果。

本部分介绍如何使用 Alertmanager API 规范从 CLI 调用可观测性 HTTP API 端点以查询指标。

准备工作

如需获得访问可观测性 HTTP API 端点所需的权限,请让项目 IAM 管理员在项目命名空间中为您授予 Project Cortex Alertmanager Viewer (project-cortex-alertmanager-viewer) 角色。

项目 IAM 管理员可以通过创建角色绑定来授予您访问权限:

a. 基础架构运维人员 (IO) 根管理员 - Project Cortex Alertmanager Viewer

kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding 
io-cortex-alertmanager-viewer-binding -n infra-obs 
--user=fop-infrastructure-operator@example.com 
--role=project-cortex-alertmanager-viewer

b. 平台管理员 (PA) 根管理员 - Project Cortex Alertmanager Viewer

kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding
pa-cortex-alertmanager-viewer-binding -n platform-obs 
--user=fop-platform-admin@example.com 
--role=project-cortex-alertmanager-viewer

c. 应用运维人员 (AO) 根管理员 - Project Cortex Alertmanager Viewer:项目:$AO_PROJECT AO 用户名:$AO_USER

kubectl --kubeconfig $HOME/root-admin-kubeconfig create rolebinding 
project-cortex-alertmanager-viewer-binding -n $AO_PROJECT 
--user=$AO_USER 
--role=project-cortex-alertmanager-viewer

创建角色绑定后,您可以使用登录用户名访问相应的 Alertmanager。

验证角色绑定

kubectl --kubeconfig $HOME/org-1-admin-kubeconfig get rolebinding -n platform-obs

如需了解如何从 GDC 控制台设置角色绑定,请参阅 授予对资源的访问权限

Cortex 端点

以下网址是用于访问提醒的 Cortex 端点:

https://GDC_URL/PROJECT_NAME/cortex/alertmanager/

替换以下内容:

  • GDC_URL:您在 GDC 中的组织的网址。
  • PROJECT_NAME:您的项目名称。

调用 API 端点

请按照以下步骤从 CLI 访问 Cortex API 端点并查询提醒:

  1. 确保您满足前提条件
  2. 打开 CLI。
  3. 使用 curl 工具调用 Cortex 端点网址,并使用标准 https://prometheus.io/docs/prometheus/latest/querying/api/#alertmanagers 扩展网址以查询提醒。例如:

    curl https://console.org-1.zone1.google.gdch.test/alice/cortex/alertmanager/api/v1/alertmanagers
    

您可以在命令后在 CLI 中获取输出。API 响应格式为 JSON。