LoginSignup
2
1

More than 1 year has passed since last update.

Lambdaのパフォーマンスチェックに便利なx-rayの基本的な書き方をまとめる

Posted at

はじめに

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.txtaws-xray-sdkを追記します。

requirements.txt
requests
aws-xray-sdk

(SAMについての基本的な使い方はこちらに書いてあります。)

使い方

1. patch_all

patch_allを使うことでlambdaから他のサービスへ通信するものがxrayに記録されるようになります。対応しているライブラリは公式ドキュメントを参照してください。

from aws_xray_sdk.core import patch_all

patch_all()

2. patch

patchpatch_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_segmentend_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を適用させることができるようです。
余裕があればこのあたりの使い方もまとめておきたいですね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1