2016/12/13

New Relic APM: バックグラウンド処理の計測方法

New Relic アドベントカレンダー13日目は、New Relic APM でバックグラウンド処理を計測する方法についてサンプルを交えて説明していきます。

バックグラウンド処理の見え方

New Relic APM の UI では、バッググラウンド処理も計測できます。基本 New Relic では、WebNon-Web の2つを切り替えて表示します。

下記は、Overview ページです。メインチャートの上のドロップダウンをクリックすると、Non-web のトランザクションがある場合は、選択できます。表示形式は、時系列チャート(左のアイコン)と場合によって、ヒストグラムの形式(真中のアイコン)を選択できます。

nr_apm_non_web_1

また、トランザクションページでも同じように選択できます。こちらはもぅ少し細かく選択できます。

nr_apm_non_web_2

この後に表示されるトランザクショントレースなどの内容は Web の場合と同じなので、割愛します。

バックグラウンドを計測する方法

今回は、Ruby エージェントを使った場合での書いてますが、他の言語でもそれぞれやり方がありますので、「バックグラウンドプロセスの監視」から各言語のページにアクセスしてください。

Ruby エージェントの場合 – デフォルトでサポートされている gem

以下の gem はデフォルトで Ruby エージェントがサポートしています。そのため、Ruby エージェントを使っていれば、自動的に計測され、UI 上で見ることができます。

うまく計測されていないなど、問題がある場合は、リンク先のドキュメントを確認してください。

Rake タスクの計測

New Relic では Rake タスクの計測もサポートしていますが、多少コードに手をいれる必要があります。そのため、Rake タスクは自動的には New Relic の計測対象とはなりません。

Rake タスクの計測は以下の2箇所修正が必要となります。

  • newrelic.yml に計測対象のタスクを指定
  • 計測対象 Rake タスクファイルに計測の指定

newrelic.yml に計測対象のタスクを指定

以下のように計測対象を newrelic.yml に指定します。

common: &default_settings
  license_key: xxxxxx
  app_name: Todo
  rake:
    tasks: ['report:min']

tasks を特に指定したくない場合は、tasks: [‘.*’] と指定すれば全タスクが対象となります。ここには、正規表現が使えます。

計測対象 Rake タスクファイルに計測の指定

計測対象の rake ファイルの先頭に以下の行を追加します。

require 'tasks/newrelic'

Cron などのスケジューラーの処理の計測

では、Cron などのスケジューラーからの Ruby コードの実行の場合はどのように計測を行えばよいのでしょうか? 上記で述べたように、Rake タスクは上記の方法で計測できるため、スケジューラーで Rake タスクを指定している場合は、上記の方法で計測できます。

スケジューラーとして、whenever gem を使っていたとして、schedule.rb に以下の指定があるとします。

every 4.minute do
  runner 'Report.todo'
end

“lib/report.rb”

class Report
  def self.todo
    tasks = Task.todo
    puts "Todo Tasks: #{tasks.count}"
  end

  # 追加
  class << self
    include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
    add_transaction_tracer :todo, :category => :task
  end
end

class << self 以下を追加します。これは、クラスメソッドの場合の測定方法です。

上記のように指定すると、New Relic UI に以下のように表示されます。
nr_apm_non_web_3

インスタンスメソッドの計測

インスタンスメソッドを計測する場合は以下のようになります。

class Report
  include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation # 追加

  def todo
    tasks = Task.todo
    puts "Todo Tasks: #{tasks.count}"
  end
  add_transaction_tracer :todo, :category => :task # 追加
end

詳しくは、「Ruby のバックグラウンドプロセスとデーモンの監視」をご覧ください。

Rake タスクや対象外のバックグラウンド処理で計測コードを指定していない場合

上記で Rake タスクやその他のバックグラウンド処理を計測するためのコードの追加方法を説明しました。しかし、そのようなコードを追加しなくても、DB処理などは APM の Databases UI に表示されます。(ただし、トランザクションとの結びつきはありません)。そのため、データベース計測に呼び出し元が存在しないデータがある場合は、これらの処理から呼ばれているのではと考えてみてください。

Qiita で New Relic Advent Calendar 2017 いろいろ書きました。特に、New Relic APM の入門的な連載を書きましたので、是非、ご覧ください。

New Relic 公式の日本 New Relic ユーザー会を立ち上げました。ワークショップの情報など日本のお客様向けに情報を発信していきますので、是非、参加ください。

過去記事

2018/09/13

翻訳: FutureStack18: New Relic 開発者向けプログラム-オープン化、シンプル化、活発化への道

今年も始まりました。New Relic の年次カンファレンス FutureStack 18。
この記事では、Elixir 用の New Relic APM エージェントの発表とデベロッパープログラムの発表がされています。

続きを読む

2018/08/27

翻訳: New Relic APM 新機能: 分散トレーシング

New Relic APM にDistributed Tracing (分散トレーシング)機能が追加されました。メニュー単位で機能が追加されたのはだいぶなかったのではないかと思います。マイクロサービスにおけるサービスをまたがったデータの流れを可視化できる機能のようです。是非、チェックしてみてください。

続きを読む

2018/05/18

SREcon18 と Rails デベロッパー向けアンケート結果の紹介

SRECon America カンファレンスにおけるアンケートの記事と Rails デベロッパーに対するアンケートの記事という2つの異なったレイヤーのアンケートに関する記事を見つけたので、ざっくり紹介します。違った視点での傾向が見れてなかなか面白いです。

続きを読む

2018/05/11

AWS Summit Tokyo を中心に直近の New Relic 関連イベントのご紹介

5/30 から始まる AWS summit Tokyo に参加するということで、海外から New Relic スタッフが来日し、イベント等を行います。是非、この機会に New Relic に興味のある人は参加してみてはいかがでしょうか。(基本、日本人スタッフいるので、日本語でも大丈夫なはず)

続きを読む

2018/03/17

翻訳: New Relic Browser JavaScript Error Analytics ベータ版 – エラーの早期発見、修正に役立つ

New Relic Browser の JS エラー機能が新しくなるようです (現在ベータ版)。APM で採用されているエラープロファイルが JS エラーにも対応したようです。これによって、エラーが起きている傾向が分析できるようになり、今後の JS のエラーが起きる前に対策が取りやすくなります。既存の PRO ユーザーはベータ版が使えるようなので、是非、使ってみてください。

続きを読む

 もっと見る