月に一回、月次で実行しているバッチアプリケーションを検出し、New Relicのアラートとして通知したいとします。
New Relic アラートの設定では、あるはずのメトリクスが "ない" ことを検知する場合、信号損失を利用して検知する方法を利用しますが、閾値の有効期限は最大48時間であるため、これ以上の間隔で実行されるような月次バッチ等では、この設定を使って検知することができません。
※参考:信号損失の閾値を設定
そこで、ユースケースの一例としてNew Relic Workflow Automationを使った月次バッチが起動していないことを検出する方法をご紹介します。
New Relic株式会社のQiita Organizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
前提条件
バッチアプリケーションはAWS Lambdaで実行されているものとします。
また、Amazon CloudWatch Metric StreamsによるAWSインテグレーション設定がすでにされており、AWS LambdaのメトリクスをNew Relicに連携しているものとします。
他の場合でも、ご自身の環境でご利用できるメトリクス等があれば、実現可能かと思いますので、読み替えて実施ください。
Workflow Automationの詳細につきましては、以下のドキュメントをご参照ください。
https://docs.newrelic.com/jp/docs/workflow-automation/introduction-to-workflow/
アラート通知するまでの流れ
Lambdaで実行されているため、通常はLambdaのメトリクスがNew Relicに送信されているはずですが、起動していなかった場合、メトリクスも送信されていないはずです。
まずWorkflow Automationにて、NRQLを発行し、実行されるべき時間帯にメトリクスがあるか確認します。
メトリクスがなければカスタムイベントとして、ないことを記録します。
そして、そのカスタムイベントのデータを条件とした、アラートコンディションを設定することで、アラート通知を行います。
Workflow Automationの作成
それでは具体的にWorkflow Automationを作成していきます。
まず、NRQLを発行するステップを作成します。
ここで、AWS Lambdaのメトリクスがあるかどうかを確認します。
ステップの種類はQuery NRDBで、以下のようなNRQLを設定します。
SELECT count(provider.functionName) AS count FROM ServerlessSample
WHERE provider='LambdaFunction' AND provider.functionName = 'go-runtime'
SINCE '09:30:00 +0900' UNTIL '09:40:00 +0900'

provider.functionName には対象のAWS Lambdaの関数名を指定してください。
次にカスタムイベントを送信するステップを作成します。
ここで、実行できなかったことを記すカスタムイベントのデータを送信します。
ステップの種類はSend eventsで、以下のように設定します。
- Event type: BatchExecuted
- Custom Fields:
- key: executed
- value: false
次にSwitchを設置します。
ここで、NRQLで問い合わせデータの数をもとに判定をし、データがない場合は次のステップに進みます。
Default stepはendにします。
Expressionは以下のように設定し、Link stepはsend_eventsにします。
${{ .steps.nrdb_query.outputs.results[0].count == 0 }}
こちらでWorkflow AutomationのWorkflowの設定は終了です。全体像とYAMLを記載しておきます。

name: batch_executed_checker
description: ''
steps:
- name: nrdb_query
type: action
action: newrelic.nrdb.query
version: 1
inputs:
query: >-
SELECT count(provider.functionName) AS count FROM ServerlessSample WHERE
provider='LambdaFunction' AND provider.functionName = 'go-runtime' LIMIT
MAX SINCE '09:30:00 +0900' UNTIL '09:40:00 +0900'
- name: nrdb_query_result_switch
type: switch
switch:
- condition: ${{ .steps.nrdb_query.outputs.results[0].count == 0 }}
next: send_events
next: end
- name: send_events
type: action
action: newrelic.ingest.sendEvents
version: 1
inputs:
events:
- eventType: BatchExecuted
executed: 'false'
next: end
Workflow Automationのスケジュール
定期実行するために、作成したWorkflow Automationのschedulesに設定していきます。
このWorkflow Automationを10時00分に起動するように設定しておきます。
いつWorkflow Automationを起動するかは、ご要件に応じて設定してください。
- Monthly
- Repeat every: 1
- Start time: 10:00am
- Time zone: Asia/Tokyo
アラートコンディションの作成
Workflow Automationで送信したカスタムイベントに対してアラートコンディションを作成していきます。
- Query:
SELECT count(*) FROM BatchExecuted WHERE executed = 'false' - Window duration: 1 minute
- Sliding window aggregation: Disabled
- Slide by interval: Not set
- Streaming method: Event timer
- Timer: 1 minute
- Thresholds: Critical: Query result is above or equals 1 at least once in 1 minute.
アラートコンディションの詳細な設定につきましても、ご要件に応じて設定ください。
以上で設定は完了です。
おわりに
以上の設定により月次で起動されるべきバッチが起動されなかった時にNew Relicアラートによる通知が行われるようになります。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!




