はじめに
aws xrayはプログラムのパフォーマンス分析を行うのに非常に便利な機能です。
本記事はxrayのLambdaで使用するときの基本的な記法についてまとめた記事になります。
環境
使用している環境は以下です。
$ uname -a
Linux XX 5.15.79.1-microsoft-standard-WSL2 #1 SMP Wed Nov 23 01:01:46 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
プログラムの実行環境はaws samを使用して用意し、requirements.txt
にaws-xray-sdk
を追記します。
requests
aws-xray-sdk
(SAMについての基本的な使い方はこちらに書いてあります。)
使い方
1. patch_all
patch_all
を使うことでlambdaから他のサービスへ通信するものがxrayに記録されるようになります。対応しているライブラリは公式ドキュメントを参照してください。
from aws_xray_sdk.core import patch_all
patch_all()
2. patch
patch
はpatch_all
の機能を特定ライブラリに適応させるためのものです。
サポートされているライブラリをpatch
に対して適応することで指定されたライブラリにのみxrayを適応されることができます。
import boto3
import requests
from aws_xray_sdk.core import patch
libraries = (["boto3"])
patch(libraries)
3. 関数セグメント
特定の関数にかかる処理時間を計測したいときはxray_recorder.capture
を使います。
下記のように定義することでdo_something
関数にかかる処理時間をxrayで計測することができます。
from aws_xray_sdk.core import xray_recorder
@xray_recorder.capture("Blabla function")
def do_something():
...
非同期関数の場合は、capture_async
関数を使用します。
from aws_xray_sdk.core import xray_recorder
@xray_recorder.capture_async("Foo function")
async def do_something():
...
4. 特定の区間
xray_recorder.capture
で関数の計測はできますが、関数の中の特定区間を計測することも可能です。
計測したい区間をbegin_segment
とend_segment
でくくることで指定した区間の処理時間を計測することが可能です。
また、セグメントの中に更にbegin_subsegment
を設定することで更に細かい区間をxrayで表示することができます。
from aws_xray_sdk.core import xray_recorder
xray_recorder.begin_segment("計測したいセグメント")
xray_recorder.begin_subsegment("サブセグメント1")
# なにかしらの処理
xray_recorder.end_subsegment()
xray_recorder.begin_subsegment("サブセグメント2")
# なにかしらの処理
xray_recorder.end_subsegment()
xray_recorder.end_segment()
さいごに
xrayの基本的な記法についてまとめました。
これらを使うことによって処理速度を高速化するために非常に役立ちます。
基本的な記法を調べる中でDjangoやFlask, Bottleにもxrayを適用させることができるようです。
余裕があればこのあたりの使い方もまとめておきたいですね。