aws / aws/aws-xray-sdk-python

trace simple websocket messages - python

オープン
#439 コメント 5 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
339
フォーク
147
PR マージ指標
30日以内にマージされた PR はありません

説明

Hello XRay Team,

im having a project in python which uses websockets library. now we want to use xray to get some insights and i have to instrument it. as a starting point, i decided to set up a sample project to get to know xray, but it seems i cannot make it work.

when a client connects, im getting an error:

> connection handler failed
> Traceback (most recent call last):
> File "/home/ec2-user/environment/projects/xray/websocket.py", line 25, in echo
> subsegment = xray_recorder.begin_subsegment('process_message')
> File "/home/ec2-user/.local/lib/python3.9/site-packages/aws_xray_sdk/core/recorder.py", line 313, in begin_subsegment
> return self._begin_subsegment_helper(name, namespace)
> File "/home/ec2-user/.local/lib/python3.9/site-packages/aws_xray_sdk/core/recorder.py", line 287, in _begin_subsegment_helper
> segment = self.current_segment()
> File "/home/ec2-user/.local/lib/python3.9/site-packages/aws_xray_sdk/core/recorder.py", line 271, in current_segment
> entity = self.get_trace_entity()
> File "/home/ec2-user/.local/lib/python3.9/site-packages/aws_xray_sdk/core/recorder.py", line 411, in get_trace_entity
> return self.context.get_trace_entity()
> File "/home/ec2-user/.local/lib/python3.9/site-packages/aws_xray_sdk/core/context.py", line 101, in get_trace_entity
> return self.handle_context_missing()
> File "/home/ec2-user/.local/lib/python3.9/site-packages/aws_xray_sdk/core/context.py", line 125, in handle_context_missing
> raise SegmentNotFoundException(MISSING_SEGMENT_MSG)
> aws_xray_sdk.core.exceptions.exceptions.SegmentNotFoundException: cannot find the current segment/subsegment, please make sure you have a segment open

```
#!/usr/bin/env python

import asyncio
from websockets.server import serve

from aws_xray_sdk.core.async_context import AsyncContext
from aws_xray_sdk.core import xray_recorder

# Configure the X-Ray recorder
xray_recorder.configure(
service='websocket',
context=AsyncContext(),
context_missing='RUNTIME_ERROR',
daemon_address='localhost:2000'
)

async def echo(websocket):
segment = xray_recorder.begin_segment('echo')

try:
async for message in websocket:
subsegment = xray_recorder.begin_subsegment('process_message')

try:
await websocket.send(message)
except Exception as e:
subsegment.add_exception(e)
finally:
xray_recorder.end_subsegment()

except Exception as e:
segment.add_exception(e)
finally:
xray_recorder.end_segment()

async def main():
async with serve(echo, "localhost", 8765):
await asyncio.Future() # run forever

asyncio.run(main())
```

what am i doing wrong?

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

websocket.py で発生する接続失敗を再現します。特に、issue に示されている echo と begin_segment/begin_subsegment の呼び出しを確認してください。aws_xray_sdk.core.async_context.AsyncContext と、current_segment および get_trace_entity 周辺の recorder のコンテキストメソッドを読みます。クライアントが SegmentNotFoundException なしで websocket メッセージを交換でき、メッセージがトレースされれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
backend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
32/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。