上一节我们定位到了是payment模块的错误率过高。本节我们将定位到具体的原因,并修复它
在Traces & Spans部分,选择一个带Error的trace id并点进去:

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

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

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

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

它会生成一个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中的镜像地址进行了替换:

替换后:

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

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