2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

New Relicを用いてバッチ処理をモニタリングできるようにする

Last updated at Posted at 2021-04-01

背景

私は普段、New Relic APMを利用してアプリケーションの監視をしています。WEBアプリケーション側についてはAPMを有効にすることですぐに監視することができます。ちょっと工夫した取り組みとしてはAPMのカスタム属性にアカウント情報を付与してアカウント単位でのApex算出などもやったりしました。
一方でバッチ処理などWEBトランザクションから切り離されているものについてはAPMを用いた監視が出来ていませんでした。

バッチ処理のモニタリング方法

New Relic APMの整理の仕方としてバッチ処理などは 非ウェブトランザクション という名目で取り扱います。非ウェブトランザクションの説明としては以下のとおりです。

非ウェブトランザクションは、ウェブトランザクションではないトランザクションです。当社では、トランザクションがウェブリクエストによって開始したかどうかは検知しません。メッセージの手続きやバックグラウンドタスクなど、ウェブリクエストを扱わないプロセスやジョブも、非ウェブトランザクションに含まれます。

非ウェブトランザクションをnew Relic APMでモニタリングするためにはcustom instrumentationの設定を行う必要があります。各言語ごとにそれぞれやり方があります。私の運用しているサービスはRubyで書かれているので、ここで紹介するのはRubyでの設定方法になります。

以下は公式のサンプルです

SalesOrganization#find_new_leads がコールされたときに非ウェブトランザクションとしてモニタリングするように設定されています。重要な点としては以下の3点です。

  1. ControllerInstrumentation モジュールをincludeします
  2. add_transaction_tracer にてfind_new_leadsをモニタリング対象とします。
  3. :category => :task とすることで非ウェブトランザクションとして指定します
require 'newrelic_rpm' 

class SalesOrganization
  include 
::NewRelic::Agent::Instrumentation::ControllerInstrumentation 
  def find_new_leads 
    ... 
  end 
  add_transaction_tracer :find_new_leads, :category => :task 
end

カスタム属性としてアカウント情報を付与

こちらの資料でも紹介しているようにWEBトランザクションのモニタリングについてはアカウント情報を付与して、アカウント単位での分析ができるようにしています。今回のケースも同様にカスタム属性としてアカウント情報を付与するようにしました。

やり方はWEBトランザクションと同様で add_custom_attributes にアカウント情報を追加することで実現可能です。

require 'newrelic_rpm' 

class SalesOrganization
  include 
::NewRelic::Agent::Instrumentation::ControllerInstrumentation 
  def find_new_leads 
    ...
    attributes = {
      user_id: job.job_definition.user.id,
      account_id: job.job_definition.user.account.id,
    }

    ::NewRelic::Agent.add_custom_attributes(attributes)
    ...
  end 
  add_transaction_tracer :find_new_leads, :category => :task 
end

New Relic APM側から確認

New Relic APMのダッシュボードから APM > Transactionsと遷移し、Typeを「Non-Web」に設定することで非ウェブトランザクションがモニタリング出来ていることを確認できます。

スクリーンショット_2021-04-02_6_26_42.png

また、カスタム属性として追加したアカウント情報もこちらより確認が出来ます。

スクリーンショット_2021-04-02_6_27_37.png

現在はバッチ処理においてもWEBトランザクション同様に、アカウント単位で分析するようにダッシュボードに追加しております。

まとめ

今回はNew Relic APMを用いたバッチ処理のモニタリング方法をまとめました。以上!!!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?