我在 Docker ECS 容器中运行我的应用程序(因此 XRAY 守护程序也在 Docker 容器中运行)。我看到了由自动修补库(请求、sqlite3、httplib、botocore)和检测中间件(Django)产生的痕迹。日志显示我手动创建的分段和子分段很好,我可以在 AWS 服务地图上看到 trace_id。问题是我在日志中看到的手动创建的段和子段在服务地图上找不到。
这里是一个在 pytest 测试中调用我的 API 和中间件的示例:
from aws_xray_sdk.core import patch_all, xray_recorder
# configure X-RAY plugins for EC2 and ECS
xray_recorder.configure(
sampling=False,
context_missing="LOG_ERROR",
plugins=("EC2Plugin", "ECSPlugin", "ElasticBeanstalkPlugin"),
daemon_address="127.0.0.1:2000",
dynamic_naming="*__init__silvakle*",
service="__INIT__",
)
logging.basicConfig(level="WARNING")
logging.getLogger("aws_xray_sdk").setLevel(logging.DEBUG)
patch_all(double_patch=True)
def test_call_api:
xray_recorder.begin_segment(name="systest_testX_rest_api")
#call routine execute_command()
xray_recorder.end_segment()
@xray_recorder.capture("## execute_command")
def execute_command(text, reply_all_messages=True):
...
在终端中,我清楚地看到名为“systest_testX_rest_api”的段和子段“## execute_command”,但在 AWS XRAY 服务地图上,虽然我看到 trace_id 很好,但找不到段和子段。
那么,我在这里缺少什么?我们还应该做些什么来让手动创建的分段和子分段显示在 AWS 服务地图上?