使用 Application Performance Monitoring 在 Oracle Cloud 上监视和跟踪微服务
由于微服务的架构复杂性以及分布式部署模型,监视微服务可能具有挑战性。
微服务应用程序可以由部署在许多不同系统中的数千个独立服务组成,而每个服务都与其进程一起运行。在微服务应用程序中跟踪事务处理流或调试问题时,专注于特定资源和健康监视器的传统监视方法不再有效。
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) 支持在微服务上自动进行 OpenTracing 检测,并捕获完整的端到端用户事务,帮助您了解用户体验和应用性能。APM 包括分布式跟踪系统的实施,该系统支持实例级别、端到端和事务处理跟踪。它还支持应用服务器和业务指标监视。
体系结构
此参考架构演示了如何使用 Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) 监视部署在 OCI Kubernetes Engine (OKE) 集群上的微服务应用程序。
下面的体系结构图显示了部署在 Kubernetes 集群中的微服务应用程序。应用程序托管在具有两个部署副本的应用服务器上,并使用 JDBC 连接到 Oracle Autonomous Database 。最终用户通过 Oracle Cloud 上托管的 Web 界面访问应用。每个图都显示了不同的方法:
-
OpenTelemetry 操作员:第一种方法使用 Kubernetes 操作员来简化将 Java 代理自动注入到 Kubernetes 云池中运行的 Java 虚拟机 (JVM) 的过程。
-
共享文件系统:第二种方法使用共享文件系统来预配和部署 APM 代理。
这两种方法都可以监视部署在 Kubernetes 上的 Java 应用服务器或框架,例如 Oracle WebLogic Server 或 Spring Boot。
下图显示了 OpenTelemetry 运算符实现:
apm-microservices-open-telemetry-oracle.zip
此体系结构中的数据流如下:
- 在 OCI 中创建 APM 域并获取域的数据上载端点 URL 以及专用和公共数据密钥。
- 在 OCI 中创建共享文件系统并创建 Kubernetes 存储对象,例如 OKE 集群中的持久性卷。
- 从 APM 域下载 APM Java 代理,并在装载的卷中预配该代理。
- 通过为 Kubernetes 部署或 StatefulSets 更新 YAML 文件,将 APM 代理部署到应用程序。
B:OpenTelemetry 运算符自动将 Java 代理下载到本地高速缓存。Java 代理安装在 OKE 群集中的每个副本的本地。
C:服务器和 JDBC 跟踪、跨度和度量将发送到 APM 域。重新启动 Kubernetes 云池后,服务器中的跟踪和跨度将发送到数据上载端点 URL 所在的 APM 域。
D:浏览器跟踪、跨度和度量将发送到 APM 域。可在 APM 仪表盘和跟踪浏览器中可视化收集的数据,以进行性能和可用性分析。
下图显示了共享文件系统实现:
apm-microservices-arc-oracle.zip
此体系结构中的数据流如下:
- 在 OCI 中创建 APM 域并获取域的数据上载端点 URL 以及专用和公共数据密钥。
- 在 OCI 中创建共享文件系统并创建 Kubernetes 存储对象,例如 OKE 集群中的持久性卷。
- 从 APM 域下载 APM Java 代理,并在装载的卷中预配该代理。
- 通过为 Kubernetes 部署或 StatefulSets 更新 YAML 文件,将 APM 代理部署到应用程序。
B:服务器和 JDBC 跟踪、跨度和度量将发送到 APM 域。重新启动 Kubernetes 云池后,服务器中的跟踪和跨度将发送到数据上载端点 URL 所在的 APM 域。
C:浏览器跟踪、跨度和度量将发送到 APM 域。可在 APM 仪表盘和跟踪浏览器中可视化收集的数据,以进行性能和可用性分析。
此体系结构包含以下组件:
- Tenancy
租户是 Oracle 在您注册 Oracle Cloud Infrastructure 时在 Oracle Cloud 中设置的安全隔离分区。您可以在租户内的 OCI 中创建、组织和管理资源。租户是公司或组织的同义词。通常,公司将具有单个租户并反映其在该租户中的组织结构。单个租户通常与单个订阅关联,单个订阅通常只有一个租户。
- 区域
Oracle Cloud Infrastructure 区域是一个本地化地理区域,其中包含一个或多个数据中心,托管可用性域。地区独立于其他地区,远距离可以把它们分开(跨越国家甚至大陆)。
- 区间
区间是 Oracle Cloud Infrastructure 租户中的跨区域逻辑分区。使用区间来组织、控制访问并设置 Oracle Cloud 资源的使用限额。在给定的区间中,您可以定义用于控制资源访问和设置权限的策略。
- 虚拟云网络 (VCN) 和子网
VCN 是一个可定制的软件定义网络,您可以在 Oracle Cloud Infrastructure 区域中设置。与传统的数据中心网络一样,VCN 允许您控制您的网络环境。VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 划分为子网,子网可以限定为区域或可用性域。每个子网都包含一系列不与 VCN 中的其他子网重叠的连续地址。可以在创建后更改子网的大小。子网可以是公共子网,也可以是专用子网。
在此架构中,托管 Reds 集群的所有计算实例都连接到一个区域子网。
- 安全列表
对于每个子网,可以创建安全规则来指定允许传入和传出子网的通信的源、目标和类型。
此体系结构为 TCP 端口 16379 和 6379 添加了入站规则。端口 6379 为 Reds 客户机提供服务,端口 16379 由 Reds 集群总线使用。
- Kubernetes 引擎
Oracle Cloud Infrastructure Kubernetes Engine ( OCI Kubernetes 引擎或 OKE )是一项全托管式、可扩展的高可用性服务,您可以使用它将容器化应用程序部署到云中。您可以指定应用所需的计算资源,Kubernetes Engine 在现有租户的 Oracle Cloud Infrastructure 上预配这些资源。OKE 使用 Kubernetes 跨主机集群自动部署、扩展和管理容器化应用。
- 自治事务处理
Oracle Autonomous Transaction Processing 是一个自我驱动、自我保护和自我修复的数据库服务,针对事务处理工作负载进行了优化。您不需要配置或管理任何硬件,或者安装任何软件。Oracle Cloud Infrastructure 负责创建、备份、打补丁、升级和优化数据库。
- 应用程序性能监视
Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) 是一个基于平台即服务 (PaaS) 的解决方案,可深入了解从最终用户到应用日志的应用性能。该服务集成了用户体验信息、应用指标和日志数据分析。
- APM 域
APM 域是包含 APM 监视系统的 Oracle Cloud Infrastructure (OCI) 资源类型。
每个 APM 域在标准 OCI 区间中创建,您可以定义 OCI 访问控制策略,以向一组特定用户授予对 APM 域的访问权限。
- 数据密钥
需要提供数据密钥,以确保 APM 接受数据源收集的观察。数据密钥在创建 APM 域时生成,有两种类型:公共数据密钥和专用数据密钥
- 数据上载端点 URL
数据上载端点是数据源向其发送观察的 URL。数据上载端点是在创建 APM 域并且每个 APM 域都有其数据上载端点时生成的。
- OpenTelemetry 运算符
OpenTelemetry 操作员是 Kubernetes 操作员,旨在简化将 Java 代理自动注入到在 Kubernetes pod 中运行的 JVM 的过程。
- APM Java 代理
APM Java 代理记录来自应用服务器的跨度和度量,并将其发送到 APM。
- APM 浏览器代理
APM 浏览器代理记录用户与网站的交互并向 APM 发送跨度和度量。
- 跟踪和跨度
跟踪是请求在给定时间段内通过分布式系统的所有组件时的完整流。跨度包括跟踪内的操作或逻辑工作单元,并且具有名称、开始时间和持续时间。
- APM 域
推荐
您的要求可能与此处描述的体系结构不同。使用以下建议作为 Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) 的起点。
- APM 浏览器代理
将 APM 浏览器代理部署到应用程序的 Web 界面以启用最终用户监视。跟踪从浏览器上的用户操作开始。
- 综合监视
配置综合监视来监视应用用户界面和 API 端点,以主动检测可用性和性能问题。您可以创建基于浏览器或基于 REST 的监视器,并安排它们从全局位置或从租户虚拟云网络 (VCN) 中定期运行。
注意事项
使用 Oracle Cloud Infrastructure Application Performance Monitoring Cloud Service (APM) 时,请考虑以下事项。
- 数据密钥
使用定制数据密钥管理发送到 APM 的数据。除了默认数据密钥,您还可以为特定目的创建自己的数据密钥。对于许多人使用 APM 的大型部署,您可以为不同的项目所有者提供不同的密钥,以便您作为 APM 域管理员可以轻松控制哪些数据进入 APM,哪些数据没有。
例如,APM 从放弃的项目接收数据集,您希望关闭数据收集。但是,由于项目所有者离开了组织,因此很难确定要关闭哪些代理。您可以删除项目使用的数据密钥,以忽略与该数据密钥关联的数据。
- Kubernetes 资源
配置微服务时,请考虑在配置 Kubernetes 云池资源时使用 StatefulSets 而非部署,以更好地跟踪 APM 中的历史记录。部署云池在重新生成时会更改其 ID,使用相同的 ID 索引(例如 SS_0、SS_1、SS_2)重新生成 StatefulSets,这简化了使用 APM 跟踪历史记录的过程。
- APM 服务名
预配 APM Java 代理时,需要指定 APM 中使用的服务名。请考虑使用部署/StatefulSet 名称作为 APM serviceName ,以便在 APM 中进行一致的跟踪。
- 采样
在大量应用中使用抽样(例如,每秒 100 万个事务)。APM 默认收集所有跨度,并允许您跟踪应用程序的所有事务处理。但是,在大容量应用程序的情况下,这可能会生成许多跨度。在这种情况下,请考虑显式指定采样配置,以提高成本效率并减少跟踪数据量。
部署
部署此参考体系结构中介绍的 APM Java 代理时,请参阅以下 Oracle LiveLabs 研讨会中的分步说明。
以下练习将应用程序与 Spring Boot 和 Oracle WebLogic Server 一起使用。