AWS xray + lambda 异常处理,我如何 return 一条错误消息并将我的 xray 跟踪标记为失败
AWS xray + lambda exception handling, how can I return an error message and have my xray trace flagged as a failure
我有一个用 Python 3.6 编写的 AWS Lambda 使用最新的稳定 aws_xray_sdk 并部署为 lambda 函数,而不是 API 网关端点。
一切都按预期运行,但是,我为我的 lambda 创建了一个自定义异常处理程序,因此如果发生异常,则会记录错误并将错误响应发送给调用者,而不仅仅是 return false
.
有没有办法将我当前的 aws xray 子分段标记为错误?
我发现 subsegment
对象有一个 apply_status_code
方法,但是,这似乎也没有达到我希望的效果。
def unhandled_exception(e, event: LambdaDict, context: LambdaContext):
logging.exception(e)
logging.error(f"""Event: {str(event)}
Context: {str(dict(context))}""")
sub_segment = xray_recorder.current_subsegment()
sub_segment.apply_status_code(500)
return {
'sms_sent': False,
'error': f"{type(e).__name__}:{e}",
}
编辑 1:
我已经能够使用以下代码在 X 射线跟踪中至少获得我自己的子段报告 400 和错误状态。
...
# when an error state exists
if sub_segment:
sub_segment.add_error_flag()
sub_segment.apply_status_code(400)
...
...
# directly before the return
try:
xray_recorder.end_subsegment()
xray_recorder.end_segment()
except Exception as xray_e:
logging.warning(xray_e)
return response
但是,这不是用来生成 xray 服务地图的。
我开始认为我应该让我的 lambdas 休息 APIs,因为至少那些 return 我可以追踪的 HTTP 状态代码。
服务地图中的节点对应于段,因此为了让您看到反映的故障或错误,您需要将错误标志添加到段。不幸的是,Lambda::Function
段是由 Lambda 创建的,无法修改,因此如果您自己处理异常,则无法设置 Lambda::Function
段错误标志。
但是,您可以通过将 Lambda 负载中返回的状态代码映射到应用程序代码中的段故障或错误,使 im-xmpp-prod 节点反映服务映射中的错误或故障。您可以通过调用 segment = xray_recorder.current_segment()
获取当前段然后调用 segment.add_error_flag()
或 segment.add_fault_flag()
将段错误或故障属性设置为相等来执行此操作(假设这也是 Python)为真。
我有一个用 Python 3.6 编写的 AWS Lambda 使用最新的稳定 aws_xray_sdk 并部署为 lambda 函数,而不是 API 网关端点。
一切都按预期运行,但是,我为我的 lambda 创建了一个自定义异常处理程序,因此如果发生异常,则会记录错误并将错误响应发送给调用者,而不仅仅是 return false
.
有没有办法将我当前的 aws xray 子分段标记为错误?
我发现 subsegment
对象有一个 apply_status_code
方法,但是,这似乎也没有达到我希望的效果。
def unhandled_exception(e, event: LambdaDict, context: LambdaContext):
logging.exception(e)
logging.error(f"""Event: {str(event)}
Context: {str(dict(context))}""")
sub_segment = xray_recorder.current_subsegment()
sub_segment.apply_status_code(500)
return {
'sms_sent': False,
'error': f"{type(e).__name__}:{e}",
}
编辑 1: 我已经能够使用以下代码在 X 射线跟踪中至少获得我自己的子段报告 400 和错误状态。
...
# when an error state exists
if sub_segment:
sub_segment.add_error_flag()
sub_segment.apply_status_code(400)
...
...
# directly before the return
try:
xray_recorder.end_subsegment()
xray_recorder.end_segment()
except Exception as xray_e:
logging.warning(xray_e)
return response
但是,这不是用来生成 xray 服务地图的。
我开始认为我应该让我的 lambdas 休息 APIs,因为至少那些 return 我可以追踪的 HTTP 状态代码。
服务地图中的节点对应于段,因此为了让您看到反映的故障或错误,您需要将错误标志添加到段。不幸的是,Lambda::Function
段是由 Lambda 创建的,无法修改,因此如果您自己处理异常,则无法设置 Lambda::Function
段错误标志。
但是,您可以通过将 Lambda 负载中返回的状态代码映射到应用程序代码中的段故障或错误,使 im-xmpp-prod 节点反映服务映射中的错误或故障。您可以通过调用 segment = xray_recorder.current_segment()
获取当前段然后调用 segment.add_error_flag()
或 segment.add_fault_flag()
将段错误或故障属性设置为相等来执行此操作(假设这也是 Python)为真。