修复应用的报错

上一节我们定位到了是payment模块的错误率过高。本节我们将定位到具体的原因,并修复它

Traces & Spans部分,选择一个带Error的trace id并点进去:

image-20230826174542039

这时会包括trace的详细信息,比如每个span所花的时间,这里我们看到/payment接口是报错的:

image-20230826174643050


复制上面的trace id,在log events中查询这个trace id,点击Refresh进行查询:

image-20230826174801144

在查询出来的日志中,里面包括了具体报错的信息,以及哪一行报的错(paymentService.py第77行):

image-20230826174911874

修复报错

进入到paymentService第77行相关的部分,我们看到了代码的逻辑如下:

image-20230826175102678

它会生成一个0-99的随机数,并与ERROR_RATE_THRESHOLD比较,如果小于它就会报错。而继续往上看,在第23行ERROR_RATE_THRESHOLD这个值是100,所以应用会永远报错。我们将ERROR_RATE_THRESHOLD改成0。

重新构建应用镜像,将新版本的镜像打上fixed标签:

aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com

export repo_name=payment-service
cd $HOME/environment/observability-with-amazon-opensearch/sample-apps/08-paymentService/
docker build -t ${repo_name}:fixed .
docker tag ${repo_name}:fixed ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${repo_name}:fixed
docker push ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${repo_name}:fixed

重新部署镜像:

sed -i -e "s|amazonaws\.com\/payment\-service|amazonaws\.com\/payment\-service\:fixed|g" ${HOME}/environment/observability-with-amazon-opensearch/sample-apps/08-paymentService/kubernetes/01-deployment.yaml
kubectl apply -f ${HOME}/environment/observability-with-amazon-opensearch/sample-apps/08-paymentService/kubernetes/

上面的命令中将原来deployment中的镜像地址进行了替换:

image-20230826175359459

替换后:

image-20230826175422706

检查应用

在前端页面重新模拟几条购买记录:

image-20230826175455861

在OpenSearch Dashboards中,查看最近一段时间的service错误率,确认payment服务已被修复:

image-20230826175715555