AWS EKS与EC2服务集成及X-Ray追踪、CloudMap配置咨询
解决方案:EC2服务的X-Ray链路追踪与CloudMap集成配置
一、AWS X-Ray 追踪EC2上的服务(Camunda Tomcat + Kafka)
1. 基础准备:EC2实例IAM权限配置
给运行Camunda Tomcat和Kafka的EC2实例附加包含以下权限的IAM角色:
xray:PutTraceSegmentsxray:PutTelemetryRecordsxray:GetSamplingRulesxray:GetSamplingTargetsxray:GetSamplingStatisticSummaries
2. 安装X-Ray Daemon到EC2实例
X-Ray Daemon负责收集本地追踪数据并发送到AWS X-Ray服务,两种部署方式:
- 包管理器安装(以Amazon Linux 2为例):
sudo yum install -y xray-daemon sudo systemctl start xray-daemon sudo systemctl enable xray-daemon - Docker部署:
docker run -d --name xray-daemon --net host amazon/aws-xray-daemon -b 0.0.0.0:2000
3. Camunda Tomcat(WAR包)的X-Ray集成
(1)添加X-Ray Java SDK依赖
在应用的pom.xml中加入以下依赖(版本可根据实际调整):
<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-core</artifactId> <version>2.16.0</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-servlet</artifactId> <version>2.16.0</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-xray-recorder-sdk-apache-http</artifactId> <version>2.16.0</version> </dependency>
(2)配置Tomcat请求拦截器
在应用的web.xml中添加X-Ray过滤器,拦截HTTP请求生成追踪段:
<filter> <filter-name>AWSXRayServletFilter</filter-name> <filter-class>com.amazonaws.xray.javax.servlet.AWSXRayServletFilter</filter-class> <init-param> <param-name>fixedName</param-name> <param-value>camunda-tomcat-service</param-value> </init-param> </filter> <filter-mapping> <filter-name>AWSXRayServletFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
(3)Kafka客户端链路追踪
如果Camunda应用调用Kafka,需在生产者/消费者配置中添加X-Ray拦截器:
Properties producerProps = new Properties(); // 其他Kafka生产者配置 producerProps.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, "com.amazonaws.xray.kafka.AWSXRayKafkaProducerInterceptor"); // 消费者配置同理 Properties consumerProps = new Properties(); consumerProps.put(ConsumerConfig.INTERCEPTOR_CLASSES_CONFIG, "com.amazonaws.xray.kafka.AWSXRayKafkaConsumerInterceptor");
4. Kafka集群的X-Ray集成
(1)添加X-Ray Kafka拦截器
修改Kafka broker的server.properties配置文件:
interceptor.classes=com.amazonaws.xray.kafka.AWSXRayKafkaBrokerInterceptor
将X-Ray Kafka SDK的jar包放入Kafka的lib目录,确保broker启动时能加载该拦截器。
(2)验证链路
部署完成后,发起跨服务请求,进入AWS X-Ray控制台即可查看EKS微服务 → Camunda Tomcat → Kafka的完整调用链路。
二、AWS CloudMap集成EC2上的服务
1. 创建CloudMap命名空间
登录AWS控制台进入CloudMap,创建私有DNS类型的命名空间(适配VPC内服务发现):
- 命名空间名称:例如
my-microservices.local - 关联目标VPC:选择EC2和EKS所在的VPC
2. 注册Camunda Tomcat服务
(1)创建服务定义
- 服务名称:
camunda-tomcat - DNS记录类型:A记录(映射EC2实例私有IP)
- 端口:指定Tomcat运行端口(如8080)
(2)注册EC2实例
- 手动注册:在CloudMap控制台直接添加EC2实例的私有IP
- 自动注册:给EC2实例附加包含
servicediscovery:RegisterInstance、servicediscovery:DeregisterInstance权限的IAM角色,然后执行以下脚本(可加入crontab定期更新):aws servicediscovery register-instance \ --service-id <你的Camunda服务ID> \ --instance-id <EC2实例ID> \ --attributes AWS_INSTANCE_IPV4=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
3. 注册Kafka集群服务
(1)创建服务定义
- 服务名称:
kafka-cluster - DNS记录类型:SRV记录(适配Kafka端口9092)或A记录+端口
(2)注册Kafka Broker实例
自动注册脚本示例:
aws servicediscovery register-instance \ --service-id <你的Kafka服务ID> \ --instance-id <EC2实例ID> \ --attributes AWS_INSTANCE_IPV4=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4),AWS_INSTANCE_PORT=9092
4. 服务发现集成
- EKS内的微服务可通过CloudMap域名直接访问EC2服务,例如:
- Camunda Tomcat:
camunda-tomcat.my-microservices.local:8080 - Kafka集群:
kafka-cluster.my-microservices.local:9092
- Camunda Tomcat:
- Java应用可通过Spring Cloud AWS自动集成,在
application.yml中配置:spring: cloud: aws: servicediscovery: enabled: true namespace: my-microservices.local
内容的提问来源于stack exchange,提问作者junka
相关产品推荐
相关产品推荐

