可观测性

使用服务网格可以观察进出服务的流量,从而实现更丰富的监控和调试,而无需更改服务本身的代码。在 Traffic Director 使用的 Sidecar 代理架构中,代理是处理请求并提供必要遥测信息的组件。遥测信息必须收集并存储在集中的位置以供进一步使用,例如数据分析、提醒和问题排查。

本指南演示了如何为 Envoy 代理生成跟踪记录日志记录。本指南还介绍了如何将信息导出到 Cloud TraceCloud Logging

演示设置

本指南使用以下配置来演示跟踪记录和日志记录:

  • 单个应用,用于侦听 HTTP 端口并返回处理请求的虚拟机的主机名。在图示中,此应用位于右上角,标记为 HTTP 服务 (10.10.10.10:80)。一个或多个虚拟机可以提供此服务。
  • 运行此服务使用方的单个 Compute Engine 虚拟机。在图示中,标记为 Demo Compute Engine 虚拟机
  • 由 Traffic Director 安装并配置的 Envoy Sidecar 代理。 在图示中,标记为 Envoy
  • 在灰色方框中显示的服务使用方应用是在 10.10.10.10:80 上运行的 HTTP 服务的使用方。
用于 Envoy 的 Stackdriver 日志记录和监控演示应用(点击放大)
用于 Envoy 的 Stackdriver 日志记录和监控演示应用(点击放大)
  1. Traffic Director 配置 Envoy 代理以平衡 10.10.10.10:80 服务的流量,存储针对此服务发出的每个请求的访问日志记录信息,并为该服务生成跟踪记录信息。
  2. 在使用方向 10.10.10.10 发送请求后,Sidecar 代理会将该请求路由到正确的目的地。
  3. Sidecar 代理还会生成必要的遥测信息:
    1. 在本地磁盘上的访问日志中添加一个条目,其中包含有关该请求的其他信息
    2. 生成跟踪条目,并使用 OpenCensus Envoy 跟踪记录将其发送到 Trace。
  4. 日志记录代理会将这些数据导出到 Cloud Logging API,以便数据可以在 Cloud Logging 界面中使用。

前提条件

确保:

  1. 设置 Traffic Director 前的准备工作中所述,启用 Traffic Director API 并满足其他前提条件。
  2. Compute Engine 虚拟机使用的服务帐号配置了 Cloud Trace Agent 角色。如需了解详情,请参阅 Trace 访问权限控制页面。
  3. Compute Engine 虚拟机使用的服务帐号配置了 Logs Writer 角色。如需了解详情,请参阅 Logging 访问权限控制页面。

设置演示服务和 Traffic Director

本指南使用多个 shell 脚本来执行配置演示服务所需的步骤。查看脚本以了解它们执行的具体步骤。

  1. 启动 Compute Engine 虚拟机并在虚拟机上配置 HTTP 服务。

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_service.sh
    chmod 755 setup_demo_service.sh && ./setup_demo_service.sh
    

    setup_demo_service.sh 脚本会创建一个在虚拟机启动时启动 apache2 的虚拟机模板,以及一个使用此模板的托管实例组。该脚本会在未启用自动扩缩的情况下启动单个实例。

  2. 使用 Traffic Director 为 10.10.10.10 服务配置路由

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_trafficdirector.sh
    chmod 755 setup_demo_trafficdirector.sh && ./setup_demo_trafficdirector.sh
    

    setup_demo_trafficdirector.sh 脚本为 Traffic Director 托管服务配置必要的参数,类似于为具有虚拟机的 Compute Engine 设置 Traffic Director 中所述的配置。

  3. 启动运行 HTTP 服务使用方的 Compute Engine 虚拟机,并在虚拟机上安装和配置 Sidecar 代理。在下面的命令中,将变量 gcp_project_id 替换为应将 Trace 信息发送到的项目 ID。这通常是您的虚拟机所属的项目。

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/setup_demo_client.sh
    chmod 755 setup_demo_client.sh && ./setup_demo_client.sh my_gcp_project_id
    

    setup_demo_client.sh 脚本会创建一个 Compute Engine 虚拟机,该虚拟机有一个 Envoy 代理已预先配置为使用 Traffic Director。这类似于为具有虚拟机的 Compute Engine 设置 Traffic Director 中描述的配置。

以下其他配置设置可启用跟踪记录和日志记录:

  • 为 Sidecar 代理配置其他属性中所述,TRAFFICDIRECTOR_ACCESS_LOG_PATHTRAFFICDIRECTOR_ENABLE_TRACING 引导节点元数据变量用于启用日志记录和跟踪记录。
  • 静态引导配置,支持使用 OpenCensus 将跟踪记录信息导出到 Trace。

注意:您可以通过 Envoy 运行时配置添加和修改其他跟踪参数。

运行这些脚本后,您可以登录 td-observability-demo-client 虚拟机并访问 10.10.10.10 上可用的 HTTP 服务。

curl http://10.10.10.10

此时,Envoy 会生成访问日志和跟踪记录信息。以下部分介绍了如何导出日志和跟踪记录信息。

设置到 Cloud Trace 的跟踪器导出

您在运行 setup-demo-client.sh 脚本时创建的 Envoy 引导配置足以生成跟踪记录信息。 所有其他配置都是可选的。如果要配置其他参数,请参阅 OpenCensus Envoy 配置页面并修改 Envoy 引导配置中的跟踪选项。

向演示服务器 (curl 10.10.10.10) 发出示例请求后,请转到 Google Cloud Console 中的 Trace 界面(Trace > Trace 列表)。您会看到与您发出的请求相对应的跟踪记录。

如需详细了解如何使用 Trace,请参阅其文档

设置到 Logging 的访问日志导出

在此阶段,Envoy 应该将访问日志信息记录到运行虚拟机的本地磁盘。要将这些记录导出到 Logging,您必须在本地安装 Logging 代理。这需要安装和配置 Logging 代理。

安装 Logging 代理

在导出日志记录信息的虚拟机上安装 Logging 代理。对于此示例配置,虚拟机为 td-observability-demo-vm

curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
sudo bash install-logging-agent.sh

如需详细了解 Logging 代理安装,请参阅安装代理指南。

配置 Logging 代理

您可以将 Envoy 日志导出为非结构化文本或结构化文本。

将 Envoy 日志导出为非结构化文本

此选项会将访问权限日志中的日志记录作为原始文本导出到 Cloud Logging。访问日志中的每个条目都会作为单个条目导出到 Logging。此配置更易于安装,因为它依赖于使用当前版本的 Logging 代理分发的解析器,但使用此选项过滤和处理原始文本日志条目会更加困难。

  1. 下载并安装 Envoy 访问日志非结构化导出配置文件。

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_unstructured.conf
    sudo cp envoy_access_fluentd_unstructured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  2. 重启代理。更改将在代理启动后生效。

    sudo service google-fluentd restart
    

以结构化格式导出 Envoy 日志

  1. 从 GitHub 安装 Envoy 访问日志解析器

    sudo /opt/google-fluentd/embedded/bin/gem install fluent-plugin-envoy-parser
    
  2. 下载并安装用于以结构化格式导出 Envoy 访问日志的配置文件:

    curl -sSO https://storage.googleapis.com/traffic-director/demo/observability/envoy_access_fluentd_structured.conf
    sudo cp envoy_access_fluentd_structured.conf /etc/google-fluentd/config.d/envoy_access.conf
    
  3. 重启代理。更改将在代理启动后生效。

    sudo service google-fluentd restart
    

如需详细了解 Logging 代理配置,请参阅配置代理

验证

  1. 从 Sidecar 代理虚拟机生成对演示服务的请求。 此操作会创建新的本地日志记录。举例来说,您可以运行 curl 10.10.10.10
  2. 转到 Cloud Console 中的 Logging > 日志查看器。在下拉菜单中,选择 envoy-access 日志类型。您会看到非结构化或结构化格式的最新请求的日志条目,具体取决于您之前选择的配置类型。

问题排查

如果配置已完成,但您没有看到可用的跟踪条目或日志记录条目,请验证以下内容:

  1. Compute Engine 虚拟机的服务帐号具有必要的 Trace 和 Logging IAM 权限(如前提条件中指定的)。如需了解 Trace IAM 权限,请参阅访问权限控制。如需了解 Logging 权限,请参阅访问权限控制
  2. 对于日志记录:请确保 /var/log/google-fluentd/google-fluentd.log 中没有错误。
  3. 对于日志记录:请确保在发出请求时新的条目会显示在本地访问日志文件中。