跳到主要内容

独立使用 APO Trace 模块实现 Trace 数据监控功能

最后于 更新

简介​

  • APO-one-agent 默认开启并支持全量采集多种类型的可观测数据,包括 Trace、Metrics 和 Logs。用户可根据自身需求,灵活配置 APO-one-agent 的数据采集范围,以适应用户环境中现有的数据类型。
  • APO 监控 Trace 数据相较于传统的 Trace 数据采集监控,可以实现为应用自动注入 Trace 配置,拥有更高的集成度与兼容性并可以实现快速部署。
  • 本文档介绍 APO 如何独立监控 Trace 数据,并介绍如何配置 APO 独立采集并监控 Trace 数据。

与传统方式对比​

传统的 Trace 数据采集: 目前两大较为流行的 Trace 体系——Skywalking 和 Opentelemetry,以 JAVA 为例都需要手动配置 Trace 探针,并部署 Skywalking 或者 OTEL采集器,最后将数据导入到 ElasticSearch 数据库并查询,应用配置 Trace 探针繁琐,探针配置更新不易同步;且 ElasticSearch 性能消耗资源多,成本高。

APO 实现的 Trace 数据采集: 使用 OneAgent 的自动注入方案,为应用自动注入对应的环境变量以及 Trace 探针文件,只需要重启应用即可自动完成注入;兼容 Skywalking 以及 Opentelemetry 数据格式,将所有 Trace 数据发送到 OTEL Collector 转换后推送 Jaeger Collector存储至 Clickhouse。APO 自动计算统计 Trace 信息,并内嵌 Jaeger UI 用于查询全量的 Trace 数据。所有组件集成于一次部署中,实现系统的快速搭建与监控能力的全面覆盖。

画板

实现原理​

OneAgent 配置 OTEL 探针采集 Trace 数据​

应用产生 Trace 数据后会同一将数据传输给当前节点的 APO-one-agent 中的 OTEL Collector Agent 中,同时也支持您将已有的应用探针的 OAP地址指向 APO 中使用并关联其他数据。数据在 OTEL Collector 中会被自动转换成 OTEL 数据格式,并被推送到服务端 Jaeger 存储。

自动配置多种编程语言应用 Trace 探针​

相较于传统的 Trace 数据采集,APO-one-agent 采用自动配置的方式,使用 Odiglet 将 Trace 数据采集所需要的配置与文件注入到配置的目标服务当中。

APO-one-agent 自动注入探针默认使用流行的 OTEL 开源探针方案:

  1. Java agent: opentelemetry-java-instrumentation v2.8.0
  2. Python agent: opentelemetry-python 1.23.0/0.44b0
  3. NodeJs agent: opentelemetry-js v1.24.1/0.51.1
  4. Go agent: Grafana Beyla v1.8.4

假如您已经使用了 Skywalking 或者 OTEL 的应用探针来采集数据,我们也支持您使打包 APO-one-agent 的自定义探针镜像版本。

OTEL Collector 完成数据跨云、跨集群传输​

通过使用 OTEL Collector,APO 实现了数据在跨云、跨集群环境中的高效传输。OTEL Collector 作为 OpenTelemetry 数据采集与传输的核心组件,支持多种协议和传输模式,确保无论数据源位于何处,都可以可靠地收集并传输到集中式的存储或监控平台。这种架构极大地增强了系统在多云和混合云环境中的灵活性,消除了不同云供应商或集群之间的数据孤岛问题。

APO 将 Trace 数据存储在 Clickhouse 中​

ClickHouse 作为一款高性能的列式存储数据库,相较于 ElasticSearch,在处理高吞吐量写入和复杂查询操作方面表现得更加出色。由于其列式存储架构,ClickHouse 在面对大规模数据分析时能够显著提升查询速度,尤其在执行聚合、过滤等操作时表现出极高的效率,同等数据量下的存储空间占用更少,这进一步减少了资源消耗。APO 还支持将数据导入现有的 Clickhouse 实例,具体配置请参见生产环境部署建议。

利用 APO 集成的 Jaeger 查询全量 Trace 数据​

APO 平台自带 Trace 数据分析,可以统计应用接口的平均响应时间,错误率和吞吐量的数据,统计这些数据的日环比与周环比;故障发生时,能给出具体发生错误的实例信息与故障 Trace 信息关联。APO 平台还能提供全量 Trace 数据检索功能,能快速筛选出延迟请求与错误请求产生的 Trace 数据;同时,APO 平台还提供内置的 Jaeger UI 用于全量 Trace 数据查询。

轻松拓展 Trace Metrics Log 一体化可观测平台​

相较于传统的 Trace 监控体系,APO 不仅能够实现为应用自动注入 Trace 配置,还可以轻松扩展至涵盖 Trace、Metrics 和 Log 的一体化可观测平台。通过这一平台,不同数据类型(如指标、链路追踪、日志)可以相互关联,提供完整的可观测性视图,帮助开发者和运维人员在性能调优、故障排查、异常监控等方面更加高效。APO 以一站式的方式搭建起涵盖全栈的可观测体系,极大简化了系统的管理和监控工作。

如何配置 APO 仅使用 Trace 监控模块​

第一步:准备工作​

要使用 Helm 安装 APO,请确保已完成以下操作:

  • 在计算机上安装 Kubernetes 服务器。有关安装 Kubernetes 的信息,请参阅安装 Kubernetes。
  • 安装 Helm 的最新稳定版本。有关安装 Helm 的信息,请参阅安装 Helm。
  • 网络策略:需要 APO-one-agent 所在集群/机器能够访问 APO-server 集群的 30044、31363、31317、30319 端口。

第二步:设置 APO Helm 仓库​

要设置 APO Helm 存储库,以便在计算机上下载正确的 APO Helm charts,请完成以下步骤:使用下方命令添加 apo Helm 仓库

helm repo add apo https://apo-charts.oss-cn-hangzhou.aliyuncs.com
helm repo update apo

第三步:配置 APO 组件为独立采集 Trace 数据模式​

创建文件apo-values.yaml,并根据您的需求进行定义,并在部署阶段挂载配置。

本步骤配置 APO-server 数据模式为独立使用 Trace 模块数据模式。

# apo-values.yaml

# agentCollectorMode 为采集数据模式
global:
agentCollectorMode:
- trace

# APO-server
# 持久化配置,默认为false
# 生产环境:推荐打开
# POC阶段:可以使用非持久化配置进行快速部署
# 如果为持久化配置则需要根据PVC创建PV
altinity-clickhouse-operator:
clickhouse:
persistence:
enabled: true
victoria-metrics-single:
server:
persistentVolume:
enabled: true
apo-backend:
persistence:
enabled: true

这里提供的为 APO 部署的基础配置,如果您要进行更多配置更改,请从 APO Helm Charts 库中下载values.yaml文件:

helm show values apo/apo > values.yaml

第四步:部署 APO-server​

运行以下命令,挂载配置文件并部署 。

helm install apo apo/apo -n apo --create-namespace \
-f apo-values.yaml

第五步:配置 APO-one-agent 仅使用 Trace 监控模块​

创建文件apo-one-agent-values.yaml,并根据您的需求进行定义,并在部署阶段挂载配置。

本步骤配置 APO-on-agent 数据模式为独立使用 Trace 模块数据模式。

# apo-one-agent-values.yaml

# apoServerIP 为 APO-server 所在的 ClusterIP
# agentCollectorMode 为采集数据模式
global:
apoServerIP: x.x.x.x # FIXME
agentCollectorMode:
- trace

这里提供的为 APO 部署的基础配置,如果您要进行更多配置更改,请从 APO Helm Charts 库中下载values.yaml文件:

helm show values apo/apo-one-agent > values.yaml

第六步:部署 APO-one-agent​

运行以下命令,挂载配置文件并部署 。

helm install apo-one-agent apo/apo-one-agent -n apo --create-namespace \
-f apo-one-agent-values.yaml

第七步:验证​

执行下方命令查询 pod 运行状态

kubectl get po -n apo

卸载 APO-server​

kubectl delete clickhouseinstallation apo -napo
helm uninstall apo -n apo
kubectl delete ns apo

卸载 APO-one-agent​

helm uninstall apo-one-agent -n apo
kubectl delete ns apo