短命のバッチ処理をNew Relic APMで計測する方法についてご紹介します。今回はGCP Cloud Runを例にご紹介しますが、他のインフラでバッチ処理を実行する際も同様です。
バッチ処理の計測について
バッチ処理は短時間で実行を終えるため、「どの関数の実行に時間がかかったか」「データベースへのクエリは効率的だったか」といった重要な情報を監視できないケースがあります。今回は、短命で終わるバッチ処理をNew Relic APM エージェントで計測する設定についても紹介します。
セットアップの流れ
① 初期設定
Google Cloud をGoogle Cloud CLIで操作できるようにするために初期セットアップを作業端末で実施します。
下記ドキュメントの「始める前に」の11のステップまで実施してください。
② サンプルアプリケーションを用意
helloworld という名前のディレクトリを作成し、そのディレクトリに移動します。
mkdir helloworld
cd helloworld
main.py という名前のファイルを作成し、次のコードを貼り付けます。
関数の実行をAPMで計測するために、New Relicライブラリの読み込みとNew Relic Agentの初期化、そしてデコレーターの設定が入っています。
import sys
import json
# newrelicライブラリの読み込み
import newrelic.agent
# newrelic-agentを初期化
newrelic.agent.initialize()
# 計測対象の関数に対しデコレーターを設定。
# 非Webトランザクションを計測するbackground_task を使用する
@newrelic.agent.background_task()
def main():
if len(sys.argv) == 1:
name = 'World'
elif sys.argv[1] == "error":
raise Exception("Task failed.")
else:
name = sys.argv[1]
print('Hello {}!'.format(name))
if __name__ == "__main__":
try:
main()
except Exception as err:
message = (
f"failed: {str(err)}"
)
print(json.dumps({"message": message, "severity": "ERROR"}))
sys.exit(1)
New Relic のAPMエージェントはWebフレームワーク(Flask, Django, Ruby on Rails, Tomcatなど)や主要なデータベースライブラリなど、一般的な処理は自動インストゥルメンテーションによって、処理のどこで時間がかかっているのか、エラーが起きているかなど処理の詳細を計測してくれます。
一方でWebリクエストで動かないバッチ処理では、Webフレームワークを使ってないため、処理の詳細を計測できないときがあります。
そのような時はカスタムインストゥルメンテーションを設定することで、バッチ処理でもパフォーマンスのボトルネックなど詳細な情報をより正確に特定できるようになります。
Pythonのカスタムインストゥルメンテーションについては以下ドキュメントをご参考にください。
main.py と同じ階層にDockerfileを作成し、以下をコピーします。
PythonのAPMエージェントをpipでインストールするのと、Pythonエージェントが実行するプログラムをラップする設定が入っています。
# Use the official Python image.
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install --upgrade pip
RUN pip install --no-cache-dir newrelic
ENTRYPOINT ["newrelic-admin", "run-program"]
CMD ["python", "main.py"]
③ Cloud Run にデプロイする
main.py がおいてあるディレクトリでCloud Runにデプロイするコマンドを実行します。
gcloud run jobs deploy --source .
このコマンドに関する補足情報は以下ドキュメントをご確認ください。
④ ジョブで実行するコンテナの環境変数を設定
NEW_RELIC_APP_NAME: *** # Cloud Functionsの名前を指定
NEW_RELIC_LICENSE_KEY: *** # New RelicのLicense keyを指定
NEW_RELIC_STARTUP_TIMEOUT: 10.0
NEW_RELIC_SHUTDOWN_TIMEOUT: 2.5
バッチのような短命プロセスをAPMで計測する場合、デフォルトのエージェント設定では計測ができないケースがあります。その場合、エージェントがNew Relicサーバーへの登録を完了するまで、指定した時間だけ処理を待機させるNEW_RELIC_STARTUP_TIMEOUTの設定と、収集したすべてのデータをNew Relicに送信し、その完了を待つNEW_RELIC_SHUTDOWN_TIMEOUTの設定値を調整します。
セットアップはこれで完了です。
ジョブを実行
作成したCloud Runのジョブを実行します。
gcloud run jobs execute helloworld --region asia-northeast1
画面でデータが入っていることを確認
計測が成功しているとAPMの画面にNEW_RELIC_APP_NAMEで指定した名前でAPMエージェントが収集したデータが取得できていることを確認できます。
まとめ
本記事ではCloud Runで実行するPythonのジョブをNew Relic APMエージェントで計測する方法について紹介しました。他の言語(Javaなど)も同様に短命バッチの計測する際の設定ができます。
Javaのバッチを計測する方法をハンズオン形式で学べるコンテンツも公開しておりますので、ご興味ある方は是非ご確認ください!
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!




