AWS CLI で X-Ray のセグメントを送信する

AWS
AWSその他
この記事は約5分で読めます。

AWS CLI で、X-Ray の put-trace-segments により送信できます。

put-trace-segments — AWS CLI 2.9.18 Command Reference

上記リファレンスのサンプルコマンドを修正し、CloudShell で実行したコマンドが以下です。

 aws xray put-trace-segments --trace-segment-documents '{"id":"20312a0e2b8809f4","name":"Tutorial","trace_id":"1-63d25cfb-a43aafded3334a971fe312db","start_time":1674730765.000,"end_time":1674730806.000,"http":{"response":{"content_length":60,"status":200}},"inferred":true,"aws":{"consistent_read":false,"table_name":"scorekeep-session-xray","operation":"GetItem","request_id":"SCAU23OM6M8FO38UASGC7785ARVV4KQNSO5AEMVJF66Q9ASUAAJG","resource_names":["scorekeep-session-xray"]},"origin":"AWS::DynamoDB::Table"}'

コンソールからもトレースが出力されることが確認できました。
もちろん DynamoDB は扱っていません。送信したセグメントをそのような内容にしただけです。

おまけ

上記サンプルコマンド修正時に発生したエラー集

{
    "UnprocessedTraceSegments": [
        {
            "Id": "20312a0e2b8809f4",
            "ErrorCode": "InvalidTraceId",
            "Message": "Invalid segment. ErrorCode: InvalidTraceId"
        }
    ]
}

トレースの日付が古いと発生するらしいので、trace_id の真ん中部分(今回のコマンドだと 63d25cfb。この値はエポック秒を 16 進数にしたものであり、詳細は上掲の CLI リファレンスに記載)、start_time 、end_time をコマンド実行日のランダムな日時に変更して解決。
なお、trace_id の真ん中部分を変更するだけエラーは回避できる。

この出力には、処理に失敗したセグメントが表示されます。たとえば、トレース ID の日付が遠い過去の場合は、次のようなエラーが表示されます。

https://docs.aws.amazon.com/ja_jp/xray/latest/devguide/xray-api-sendingdata.html
{
    "UnprocessedTraceSegments": [
        {
            "ErrorCode": "ParseError",
            "Message": "Invalid segment. ErrorCode: ParseError"
        }
    ]
}

二重引用符で囲んでいたものを一重引用符に変更、及びエスケープを除外。
“{\”id\” ~ \”origin”\:\”AWS::DynamoDB::Table\”}” とあったのを、‘{“id” ~ “origin”:”AWS::DynamoDB::Table”}’ にして回避。

{
    "UnprocessedTraceSegments": [
        {
            "Id": "20312a0e2b8809f4",
            "ErrorCode": "MissingName",
            "Message": "Invalid segment. ErrorCode: MissingName"
        }
    ]
}

二重引用符の一部に全角の二重引用符が含まれていたため、半角の二重引用符に変更して回避。
デバッグオプションをつけて再実行すると送信したセグメントドキュメントの内容が確認できるところ、二重引用符があるはずの箇所が「u201d」になっていたことから判明。

body': b'{"TraceSegmentDocuments": ["{\\"id\\":\\"20312a0e2b8809f4\\",\\"name\\u201d:\\u201dTutorial\\u201d,\\u201dtrace_id\\":\\"1-63d25cfb-a43aafded3334a971fe312db\\",
タイトルとURLをコピーしました