5

通过 API Gateway 使用 AWS X-Ray 服务地图和跟踪视图

 3 years ago
source link: https://www.ishells.cn/archives/apigateway-xray
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
通过 API Gateway 使用 AWS X-Ray 服务地图和跟踪视图

通过 API Gateway 使用 AWS X-Ray 服务地图和跟踪视图

23 次访问 2020-12-09

一、API Gateway

1、API Gateway 是什么?

官方解释:Amazon API Gateway 是一项 AWS 服务,用于创建、发布、维护、监控和保护任意规模的 REST、HTTP 和 WebSocket API。API 开发人员可以创建能够访问 AWS、其他 Web 服务以及存储在 AWS 云中的数据的 API。作为 API Gateway API 开发人员,您可以创建 API 以在您自己的客户端应用程序中使用。或者,您可以将您的 API 提供给第三方应用程序开发人员

简单解释:API Gateway 可以作为一系列API的集合,无服务架构的向外提供API

2、API Gateway简单测试:

① 控制台创建一个实例API( REST API / HTTP API / WebSocket API 各有其优缺点,其区别不是本篇重点,不过多讨论 )

image20201209153438591.png
image20201209153643452.png

② 部署该API资源

image20201209153733633.png
image20201209153806079.png

③ 访问此URL以访问此GET方法:

image20201209154006057.png

二、X-ray

1、X-ray是什么?

官方解释:AWS X-Ray 是一项服务,收集用户应用程序所服务的请求的相关数据,并提供用于查看、筛选和获取数据洞察力的工具,以确定问题和发现优化的机会。对于任何被跟踪的对应用程序的请求,用户不仅可以查看请求和响应的详细信息,还可以查看应用程序对下游 AWS 资源、微服务、数据库和 HTTP Web API 进行的调用的详细信息。

简单解释:X-Ray可以追踪特定资源、服务的相关数据,例延迟和状态码等信息,以便更容易细化故障的原因和出处。X-Ray Trace 显示的是在aws 中的延迟和状态码等信息

2、API Gateway开启X-Ray追踪:

① 在已部署的阶段中,找到日志/跟踪,开启X-Ray跟踪:

image20201209154839733.png

② 测试访问该阶段的不同GET方法,查看X-Ray控制台:

image20201209155252000.png

③ 点击某一个具体的Trace ID可以查看具体的追踪详情:

image20201209155350873.png

三、详细测试

因为生产环境中关于API Gateway 都是较为复杂的,所以我们来进行一下生产环境的模仿测试

1、第一种架构

客户端-》访问API Gateway URL-》 代理到 自定义域名 -》域名CNAME转到 ALB -》ALB 转发到具体的EC2服务器

image20201209160917818.png

① 添加域名Cname解析到ALB

image20201209161520029.png

② 将API Gateway导向该自定义域名,部署该资源并开启X-Ray追踪

image20201209161735481.png
image20201209161921018.png

③ ALB 和 EC2 服务的准备这里就不贴出来

④ 访问测试,web访问API Gateway跳转到自定义域名,找到后端的EC2服务

⑤ X-Ray界面查看,发现有两个Trace ID,一个是API Gateway的追踪,一个是自定义域名的追踪。

image20201209170312842.png

在我们的这种架构中,显示了两段的Trace,分别是API Gateway的和自定义域名的。每段的"延迟" 是通过请求的开始和结束时间计算的. 比如 apigateway这段, 当客户端请求包到 apigateway , 开始计时, 一直到 apigateway 把结果发回给客户端结束。

那么API Gateway这段显示的延迟其实是本次请求总的时间,即客户端向API Gateway发起请求到结束本次请求。

域名这块, 可以理解为 api gateway 在处理请求过程中, 将请求转发给域名从域名处获取到结果 的时间

那如果想要得到具体的EC2->ALB这一段之间的延迟应该怎么办呢?

答:因为ALB本身是不能开启X-Ray追踪的,所以可以在EC2上开启X-Ray追踪,即装一个X-Ray守护进程,但是EC2上的应用必须主动向X-Ray守护进程发送数据,X-Ray才能获取到具体的数据。从xray 的角度, 它是接收特定的请求数据才能进行记录的, 所以一般的应用都没法直接监控, 如果您后端用的是自己的程序框架 ,比如 go / python / java 等, 都可以通过 sdk 来向 xray daemon 发送记录数据。这需要具体的应用(Python、Java等)通过调用SDK去实现,与Web中间件没有关系。

在 Amazon EC2 上运行 X-Ray 守护程序 - AWS X-Ray

xray 也是可以收集 eks 中运行的 pod 的数据的, 但是也是需要 pod 中的应用主动向 xray daemon 发数据

EKS Tracing with X-Ray

2、第二种架构

客户端访问自定义域名-》自定义域名-》CNAME到API Gateway-》VpcLink连接API Gateway和私有ALB-》请求转到ALB上-》后端服务器

这种架构下,开启了X-Ray追踪依然看不到EC2与ALB之间具体的延迟与状态码等信息,依然需要如上说的,需要在EC2上安装X-Ray守护进程,并主动向它发送数据

通过X-ray检测到的延迟和状态码这些数据,我能否根据某一段的延迟、状态码去做一个报警邮件提醒?

xray 本身没法直接配 alarm. 这个需要通过 lambda 之类的方式实现, 可以通过 xray 的api 来获取到 trace 的信息, 然后通过分析这些信息来触发 cloudwatch

https://aws.amazon.com/blogs/devops/using-amazon-cloudwatch-and-amazon-sns-to-notify-when-aws-x-ray-detects-elevated-levels-of-latency-errors-and-faults-in-your-application/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK