头图
  • 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.5.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:opentelemetry-go-instrumentation v0.13.0-alpha

假如已经使用了 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 的信息,请参阅链接:https://kubernetes.io/docs/setup/,安装 Kubernetes。
  • 安装 Helm 的最新稳定版本。有关安装 Helm 的信息,请参阅链接:https://helm.sh/docs/intro/install/,安装 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 数据模式为独立采集 Trace 数据模式,请配置探针自动注入目标。

# apo-values.yaml

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

# APO-server 
# 持久化配置,推荐打开,默认为false
# 如果为持久化配置则需要根据PVC为 victoria-metrics 创建PV
victoria-metrics-single:
  server:
    persistentVolume:
      enabled: true

# APO-one-agent 
apo-one-agent:
  enabled: true
  odigos:
    instrumentor:
      # targetNamespace 
      # name:目标命名空间
      # value:
      #   enabled: 注入现有的所有服务,但不注入后续新增应用
      #   enabledFuture: 注入现在以及后续的所有服务
      #   disabled: 不注入指定namespace下的服务,用于在instrument-all-namespace时忽略特定的Namespace
      targetNamespace:
      - name: default
        value: enabledFuture
      - name: default2
        value: enabled
      # instrument-all-namespace 是否注入所有namespace
      # 等价于设置所有namespace的enabledFuture
      # 但如果已经设置了ns或者workload的disabled将不会注入
      instrumentAllNamespace: false
      # force-instrument-all-namespace 是否强制注入所有namespace
      # 和instrument-all-namespace类似,所有ns设置enabledFuture
      # 并忽略所有disabled设置
      forceInstrumentAllNamespace: false

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

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

第四步:部署 APO

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

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

第五步:验证

见到类似输出即代表安装成功。

NAME: apo
LAST DEPLOYED: Fri Aug  9 15:48:42 2024
NAMESPACE: apo
STATUS: deployed
REVISION: 1
NOTES:
==================================================
      ___           ___           ___
     /\  \         /\  \         /\  \
    /::\  \       /::\  \       /::\  \
   /:/\:\  \     /:/\:\  \     /:/\:\  \
  /::\~\:\  \   /::\~\:\  \   /:/  \:\  \
 /:/\:\ \:\__\ /:/\:\ \:\__\ /:/__/ \:\__\
 \/__\:\/:/  / \/__\:\/:/  / \:\  \ /:/  /
      \::/  /       \::/  /   \:\  /:/  /
      /:/  /         \/__/     \:\/:/  /
     /:/  /                     \::/  /
     \/__/                       \/__/

Official Website:   https://apo.kindlingx.com/
APO Frontend:       http://<NodeIP>:31364
Grafana:            http://<NodeIP>:31364/#/system-dashboard
==================================================

卸载 APO

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

APO介绍:
国内开源首个 OpenTelemetry 结合 eBPF 的向导式可观测性产品
apo.kindlingx.com
https://github.com/CloudDetail/apo

云观秋毫
20 声望0 粉丝

Kindling - OriginX 故障根因推理引擎,基于 eBPF 的自动化 Tracing 分析


引用和评论

0 条评论