对应用进行插桩处理以实现应用监控

本文档介绍了如何配置 App Hub 应用,以便该应用生成的指标和轨迹数据包含应用特有的标签。本文还介绍了如何让应用导出一种指标,供应用监控功能用于报告在 Google Kubernetes Engine 上运行的 HTTP 请求工作负载的流量级别、服务器错误率或延迟时间。

应用特有的标签简介

应用特有的标签是指注入到日志、指标或跟踪记录数据中的标签或属性。这些标签用于标识生成数据的服务或工作负载。您可以像使用任何其他标签一样使用应用特有的标签。例如,您可以按应用的 ID 过滤数据。由受支持的基础设施生成的遥测数据会自动包含这些标签。通过插桩,应用写入的指标和轨迹可以包含这些标签。

在本部分中,将 a.b.{x,y} 解读为 a.b.xa.b.y

您添加到应用中的插桩的指标数据可以包含以下指标标签:

  • metric.labels.apphub_application_{container,id,location}
  • metric.labels.apphub_workload_{criticality_type,environment_type,id}

通过您添加到应用中的插桩生成的 Trace span 可以包含以下资源属性:

  • gcp.apphub.application.{container,id,location}
  • gcp.apphub.{workload,service}.{criticality_type,environment_type,id}

关于 OpenTelemetry HTTP 服务器指标

对于在 Google Kubernetes Engine 上运行的工作负载,没有可以报告流量级别、服务器错误率或 HTTP 请求延迟时间的系统指标。不过,这些黄金信号的值可以从 http.server.request.duration 中派生出来,这是一个由 OpenTelemetry HTTP 客户端库自动收集的指标。

googlemanagedprometheus 导出器会将 http.server.request.duration OpenTelemetry 指标转换为具有以下属性的 Prometheus 指标:

  • 名称:prometheus/http_server_request_duration_seconds/histogram
  • 指标:prometheus.googleapis.com/http_server_request_duration_seconds/histogram
  • 资源类型:prometheus_target
  • 单位:s
  • 种类:CUMULATIVE
  • 值类型:DISTRIBUTION

如果您的 Google Cloud 项目包含 http_server_request_duration_seconds 指标,那么开箱即用的信息中心会显示流量水平、服务器错误率和 HTTP 请求的延迟时间。

如需了解如何配置应用以导出 http_server_request_duration_seconds 指标,请参阅本文档的在 Kubernetes 上使用 OpenTelemetry 部分。

向指标数据添加应用标签

Google Cloud Observability 会尝试通过以下方式来识别 Prometheus 指标的来源:将发送到项目的 Prometheus 指标所附加的属性与 App Hub API 返回的数据进行比较。 本部分的其余内容列出了可让 Google Cloud Observability 识别 App Hub 应用的配置。

在 Kubernetes 上使用 OpenTelemetry

如需让 Google Cloud Observability 将应用标签附加到 Google Kubernetes Engine 中运行的应用工作负载生成的指标数据,请执行以下操作:

  1. 使用 OpenTelemetry 对应用进行插桩。

  2. 部署 Google 构建的收集器或 OpenTelemetry 收集器,并按如下方式配置收集器:

    • 使用 googlemanagedprometheus 导出器导出指标数据。
    • 配置 k8sattributes 处理器以从环境中提取元数据,例如 namespace
    • 配置 transform/collision 处理器以设置 project_idlocationclusternamespace 属性。
    • 配置 transform/aco-gke 处理器以填充 top_level_controller_nametop_level_controller_type 标签。

    如需查看示例,请参阅 otlp-k8s-ingest/config/collector.yaml,这是 Google 构建的收集器的配置文件。如需详细了解此收集器,请参阅在 GKE 上部署 Google 构建的 OpenTelemetry 收集器

  3. App Hub 注册应用的工作负载。

在 GKE 上使用 Google Cloud Managed Service for Prometheus

如需让 Google Cloud Observability 将应用标签附加到在 Google Kubernetes Engine 集群上运行的应用工作负载生成的指标数据,请执行以下操作:

  1. 使用 Google Cloud Managed Service for Prometheus(含托管式收集功能)

  2. 在版本至少为 1.32.1-gke.1439000 的 Google Kubernetes Engine 集群上部署工作负载。

  3. App Hub 注册应用的工作负载。

Google Cloud Managed Service for Prometheus 通过服务发现元数据发现应用标签的值,然后将 top_level_controller_{name,type} 标签添加到 targetLabels.metadata。在指标提取期间,Google Cloud Observability 会使用 top_level_controller_{name,type} 标签和 App Hub API 来识别您的 App Hub 应用,并向指标数据添加相应的标签。

使用 Cloud Run

如需让 Google Cloud Observability 将应用标签附加到 Cloud Run 工作负载生成的指标数据,请执行以下操作:

  1. 使用 OpenTelemetry 或适用于 Cloud Run 的 Managed Service for Prometheus Sidecar 对应用进行插桩处理。如需了解这些方法,请参阅以下文档:

  2. App Hub 注册应用的工作负载。

验证指标标签

如需验证您的应用是否正在向项目发送 Prometheus 指标,请执行以下操作:

  1. 验证您的应用是否正在向项目发送 Prometheus 指标:
    1. 在 Google Cloud 控制台中,前往 Metrics Explorer 页面:

      进入 Metrics Explorer

      如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

    2. 在 Google Cloud 控制台的工具栏中,选择您的 Google Cloud 项目。对于 App Hub 配置,请选择 App Hub 宿主项目或已启用应用的文件夹的管理项目。
    3. 指标元素中,展开选择指标菜单,在过滤条件栏中输入 Prometheus Target,然后使用子菜单选择一个特定资源类型和指标:
      1. 活跃资源菜单中,选择 Prometheus 目标
      2. 如需选择指标,请使用活跃指标类别活跃指标菜单。
      3. 点击应用
    4. 如需添加从查询结果中移除时序的过滤条件,请使用过滤条件元素

    5. 配置数据的查看方式。

      如需查看标签,请展开过滤条件菜单。 过滤条件中的每个条目都对应一个标签。

      如需详细了解如何配置图表,请参阅使用 Metrics Explorer 时选择指标

    如果您没有看到任何 Prometheus 指标,请检查您的配置。

如果您的 Prometheus 指标不包含应用标签,请执行以下操作:

  1. 验证您是否已通过 App Hub 注册工作负载或服务。

  2. 检查日志,确定是否存在任何错误。

    例如,如果您部署了 OpenTelemetry 收集器或 Google 构建的收集器,并且在 Google Kubernetes Engine 上运行,则可以执行以下操作:

    1. 在 Google Cloud 控制台中,前往工作负载页面:

      转到工作负载

      如果您使用搜索栏查找此页面,请选择子标题为 Kubernetes Engine 的结果。

    2. 选择您的收集器部署,然后选择日志标签页。
  3. 如果您使用的是 OpenTelemetry 收集器或 Google 构建的收集器,请检查收集器的配置。您的收集器必须执行以下操作:

    • 使用 googlemanagedprometheus 导出器导出指标数据。
    • 配置 k8sattributes 处理器以从环境中提取元数据,例如 namespace
    • 配置 transform/collision 处理器以设置 project_idlocationclusternamespace 属性。
    • 配置 transform/aco-gke 处理器以填充 top_level_controller_nametop_level_controller_type 标签。

    如需查看示例,请参阅 Google 构建的收集器配置文件:otlp-k8s-ingest/config/collector.yaml

向 trace span 添加应用属性

如需让 Cloud Trace 将应用专用的资源属性附加到应用的服务和工作负载生成的跟踪记录数据,请执行以下操作:

  1. 通过 App Hub 注册服务和工作负载。
  2. 使用 OpenTelemetry 对应用进行插桩,并通过 Google Cloud OTLP 端点将从应用收集的跟踪数据发送到您的项目。
  3. 配置 OpenTelemetry 收集器或 Google 构建的收集器,使导出的 span 数据包含用于标识应用所用受支持 Google Cloud 资源OpenTelemetry 资源属性。资源属性必须包含以下内容:

    • cloud.account.id
    • cloud.{availability_zone,region} 之一
    • 特定于资源的属性。例如,对于 Kubernetes 工作负载,span 必须具有 k8s.cluster.namek8s.namespace 和 Kubernetes 部署类型设置。

    使用处理器让收集器将特定于资源的属性附加到 span。如需了解详情,请参阅 resourcedetectionprocessork8sattributesprocessor

    Google Cloud Observability 使用上述资源属性和 App Hub API 来识别您的 App Hub 应用。当系统识别出应用时,会将应用特有的属性添加到跟踪记录数据。

如需详细了解这些属性,请参阅 Google Cloud App Hub 语义惯例