AWS 全链路监控 (Application Signals/X-Ray) + EKS 实战落地指南

📚 第一部分:概念篇 ------ X-Ray 还在吗?

1. 名字变了?X-Ray vs Application Signals

很多同学现在去控制台找 "X-Ray" 发现入口变了,这里澄清一下:

  • AWS X-Ray (底层技术) :它依然存在,是 AWS 的分布式追踪服务内核。它负责接收 Trace 数据、生成服务地图。

  • CloudWatch Application Signals (现代入口) :这是 AWS 推出的新一代 APM(应用性能监控)体验。它集成了 X-Ray,并加上了 SLO(服务等级目标)和自动化的黄金指标(错误率、延迟、吞吐量)。

一句话总结X-Ray 是引擎,Application Signals 是仪表盘。 我们现在做的配置,本质上是"通过 OpenTelemetry 收集数据,发送给 X-Ray,最终在 Application Signals 里看"。

2. 它有什么用?(运维场景)

在微服务和区块链架构中,它就是**"全链路 CT 扫描"**。

  • 场景 A:提现为什么卡住了?

    • 没有 X-Ray:你只能瞎猜是 RDS 锁表了,还是 KMS 签名慢,还是 MSK 堆积了。

    • 有 X-Ray :你会看到一条长长的链路图,一眼发现 "Step Functions -> KMS" 这段线变红了,耗时 5秒,直接定位是签名服务网络抖动。

  • 场景 B:偶发报错排查

    • 每天有 0.1% 的请求失败,日志里查不到规律。X-Ray 可以通过采样捕获这些特定的错误链路,告诉你是在调用 Redis 时发生了超时。

🛠 第二部分:EKS 部署实战篇 (Ops)

我们将使用 AWS Distro for OpenTelemetry (ADOT) 来实现。

📋 准备工作:IAM 权限 (IRSA)

在安装 Add-on 之前,必须先准备好权限,否则插件装好了也发不出数据。

  1. 创建 IAM Role (例如 EKS-ADOT-Role)。

  2. 附加策略

    • AWSXRayDaemonWriteAccess (必须:允许写数据)

    • CloudWatchAgentServerPolicy (可选:如果还要发指标)

  3. 配置信任关系 :确保 EKS 集群的 OIDC 允许 opentelemetry-operator-system 命名空间下的 ServiceAccount 使用此角色。


🚀 第一步:安装 EKS Add-on (插件)

这是最简单的安装方式,由 AWS 托管控制平面。

  1. 登录 EKS 控制台 -> 点击你的集群 -> Add-ons (加载项)

  2. 点击 Get more add-ons

  3. 搜索并选择 AWS Distro for OpenTelemetry

  4. 点击下一步安装直到完成。

    • 注:这一步会在集群里安装 "ADOT Operator",它是负责管理采集器的"大管家"。

🚀 第二步:部署 Collector 实例 (采集器)

Add-on 只是装了管家,现在我们要部署干活的"邮局"。我们将使用 Kubernetes 的 CRD (自定义资源) 来部署。

创建文件 adot-collector.yaml

复制代码
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: my-collector
  namespace: opentelemetry-operator-system # 建议放在这里
spec:
  mode: deployment # 生产建议用 deployment 模式,甚至可以配 HPA
  serviceAccount: adot-collector # ⚠️ 确保此 SA 绑定了上面的 IAM Role
  config: |
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    processors:
      batch:
        timeout: 1s
        send_batch_size: 1024
    exporters:
      awsxray:
        region: "ap-southeast-1" # ⚠️ 修改为你的真实区域
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [batch]
          exporters: [awsxray]

执行部署

复制代码
kubectl apply -f adot-collector.yaml

这一步完成后,你的 EKS 内部就有了一个地址为 my-collector-collector.opentelemetry-operator-system.svc.cluster.local:4317 的接收服务。


☕ 第三部分:Java 程序接入篇 (Dev)

我们追求无代码侵入,开发人员不需要改动 Controller 逻辑,只需要修改 Docker 镜像和 K8s 配置。

1. 修改 Dockerfile (植入探针)

复制代码
FROM amazoncorretto:17
WORKDIR /app

# 复制业务 Jar
COPY target/my-app.jar /app/app.jar

# ⚠️ 下载 AWS OT Agent (核心步骤)
ADD https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar /app/agent.jar

# ⚠️ 启动时挂载 Agent
ENTRYPOINT ["java", "-javaagent:/app/agent.jar", "-jar", "/app/app.jar"]

2. 修改 K8s Deployment (指向采集器)

通过环境变量告诉 Agent 数据往哪里发。

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-app
spec:
  template:
    spec:
      containers:
        - name: app
          image: my-java-app:v1
          env:
            # 1. 指向第二步部署的 Collector 地址 (GRPC端口)
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "http://my-collector-collector.opentelemetry-operator-system.svc.cluster.local:4317"
            
            # 2. 必须指定使用 OTLP 协议
            - name: OTEL_TRACES_EXPORTER
              value: "otlp"
            
            # 3. 定义服务名 (会在 CloudWatch 地图上显示的名字)
            - name: OTEL_SERVICE_NAME
              value: "blockchain-payment-service"
              
            # 4. 开启 X-Ray 格式传播
            - name: OTEL_PROPAGATORS
              value: "xray,tracecontext,baggage"

✅ 第四部分:验证与查看

  1. 产生流量:访问几下你的 Java 接口。

  2. 查看 CloudWatch

    • 进入 AWS 控制台 -> CloudWatch

    • 左侧菜单找到 Application Signals (或 X-Ray traces)。

    • 点击 Service Map (服务地图)

  3. 验收

    • 你应该能看到 blockchain-payment-service 的圆圈。

    • 如果你调用了 RDS 或 S3,后面会自动连线。

    • 点击圆圈可以看到延迟、错误率和具体的 Trace 详情。

总结 : 这套方案是目前 AWS 最推荐的 "Modern Observability" 架构:

  • 控制面:EKS Add-on 管理 Operator。

  • 数据面:ADOT Collector (CRD) 转发数据。

  • 应用面:Java Agent 自动探针。

相关推荐
zhou lily6 小时前
私有化部署VS云服务:数字化转型中的部署策略选择
云计算
十月南城6 小时前
压测方法论——目标、场景、指标与容量评估的闭环
运维·web安全·ci/cd·微服务·云计算
咕噜企业分发小米7 小时前
腾讯云在多云管理工具上如何实现合规性要求?
java·云计算·腾讯云
骥龙8 小时前
第一篇:背景篇 - 为什么医院需要自己的超算?
云计算·aigc·gpu算力
ZStack开发者社区10 小时前
替代VMware | ZStack CMP vs. VMware Aria:多云管理差别解析
云计算
StevenZeng学堂12 小时前
一文读懂K8S的PV和PVC以及实践攻略
运维·docker·云原生·容器·kubernetes·云计算·go
翼龙云_cloud13 小时前
阿里云渠道商:cpu 弹性扩容有哪些限制条件?
数据库·阿里云·云计算
虎冯河13 小时前
阿里云怎么设置域名的cdn加速
阿里云·云计算
虎冯河14 小时前
绿联云 NAS + 宝塔面板 + 阿里云 CDN 部署全手册
阿里云·云计算