6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

New Relic Workflow Automationを使って月次バッチが起動していないことを検出したい

6
Posted at

月に一回、月次で実行しているバッチアプリケーションを検出し、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'

image.png
provider.functionName には対象のAWS Lambdaの関数名を指定してください。

次にカスタムイベントを送信するステップを作成します。
ここで、実行できなかったことを記すカスタムイベントのデータを送信します。
ステップの種類はSend eventsで、以下のように設定します。

  • Event type: BatchExecuted
  • Custom Fields:
    • key: executed
    • value: false

image.png

次にSwitchを設置します。
ここで、NRQLで問い合わせデータの数をもとに判定をし、データがない場合は次のステップに進みます。
Default stepはendにします。
Expressionは以下のように設定し、Link stepはsend_eventsにします。

${{ .steps.nrdb_query.outputs.results[0].count == 0 }}

image.png

こちらでWorkflow AutomationのWorkflowの設定は終了です。全体像とYAMLを記載しておきます。
image.png

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

image.png

アラートコンディションの作成

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.

image.png

アラートコンディションの詳細な設定につきましても、ご要件に応じて設定ください。

以上で設定は完了です。

おわりに

以上の設定により月次で起動されるべきバッチが起動されなかった時にNew Relicアラートによる通知が行われるようになります。

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

image.png

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?