• EnglishEspañol日本語한국어Português
  • ログイン今すぐ開始

この機械翻訳は参考用に提供されます。

英語版と翻訳版に矛盾がある場合は、英語版が優先されます。詳細については、このページ を参照してください。

問題を作成する

Scalaのインストルメント

New Relic Java エージェントは Scala と互換性があり 、New Relic API コール、アノテーション、 カスタムインスツルメンテーションをサポートしています 。以下の情報はすべて、New Relic の Java エージェントのインストール方法 を補足するものです。

ヒント

Herokuについては、 Java agent with Scala on Heroku を参照してください。

Scalaのフレームワーク

フレームワーク がNew Relicにネイティブに対応していない場合や、追加のモニタリングを設定したい場合は、 カスタムインスツルメンテーション を利用すると、アプリケーションをより深く掘り下げることができます。

Scala APIでScalaを動かす

New Relic Scala エージェント API では、慣用的な Scala コードを使用して、APM Java エージェントの機能を制御、カスタマイズ、拡張することができます。 New Relic Java API と並行して使用することができ、ユーザーは以下のことが可能になります。

  • 同期および非同期の匿名関数のためのセグメントの作成
  • 同期および非同期コードブロックのためのセグメントの作成
  • トランザクションが開始されていない場合は、トランザクションを作成します。

重要

API を使用する際に最良の結果を得るためには、最新の Java エージェントのリリースがあることを確認してください。New Relic Scala API には、Java agent 7.1.0 以降が必要です。

ScalaのAPIを使う

APIクラスにアクセスするには、Scalaの設定ファイルに以下の情報を追加してください。

対応するScalaのバージョンは2.10、2.11、2.12、2.13です。Scala 3.0 のユーザーは、2.13 の jar を使用できます。この jar は Maven Central にデプロイされ、New Relic Java エージェントのインストール zip ファイルにも含まれています。Java エージェントが実行されていないときでも、API を呼び出すことができます。基本となる API メソッドは単なるスタブであり、実装は Java エージェントが実行されているときに追加されます。

セグメント

同期コード ブロックのセグメントを作成するには、 TraceOps.traceを使用します。例えば:

import com.newrelic.scala.api.TraceOps.trace
trace("statement segment") {
val i = 1
val j = 2
println(i + j)
}
// trace can also be used as an expression
val x: Int = trace("expression segment") {
val i = 1
val j = 2
i + j
}
println(x) // 2

trace Scalaでも使用できます

import scala.concurrent.{ExecutionContext, Future}
import com.newrelic.scala.api.TraceOps.trace
// implicit execution
implicit val ec: ExecutionContext = ???
val x: Option[Int] = for {
one <- trace("segment one")(Option(1))
two <- trace("segment two")(Option(one + 1))
three <- trace("segment three")(Option(two + 1))
} yield three
println(x) // Some(3)

Scala Future を含む非同期コード ブロックのセグメントを作成する場合は、 TraceOps.asyncTraceを使用します。これにより、セグメントのタイミングに Future の完了にかかる時間が含まれるようになります。

以下の例では、ラッピングされたFutureで遅延が発生するため、セグメントタイムは5秒以上になります。

import scala.concurrent.{ExecutionContext, Future}
import com.newrelic.scala.api.TraceOps.asyncTrace
// implicit execution
implicit val ec: ExecutionContext = ???
val x: Future[Int] = asyncTrace("segment name")(Future {
Thread.sleep(5000)
1
})
x.foreach(println) // prints 1 on completion of Future

asyncTrace Scalaでも使用できます

import scala.concurrent.{ExecutionContext, Future}
import com.newrelic.scala.api.TraceOps.asyncTrace
// implicit execution
implicit val ec: ExecutionContext = ???
val x: Future[Int] = for {
one <- asyncTrace("segment one")(Future(1))
two <- asyncTrace("segment two")(Future(one + 1))
three <- asyncTrace("segment three")(Future(two + 1))
} yield three
x.foreach(println) // prints 3 on completion of Future

同期匿名関数のセグメントを作成する場合は、 TraceOps.traceFunを使用します。例えば:

import com.newrelic.scala.api.TraceOps.traceFun
val x: Option[Int] = Option(1)
.map(traceFun("statement segment")(i => i + 1))
println(x) //Some(2)

Scala Future を返す非同期関数のセグメントを作成する場合は、 TraceOps.asyncTraceFunを使用します。これにより、セグメントのタイミングに関数の完了にかかる時間が含まれるようになります。

以下の例では、ラッピングされたFutureで遅延が発生するため、セグメントタイムは5秒以上になります。

import scala.concurrent.{ExecutionContext, Future}
import com.newrelic.scala.api.TraceOps.asyncTraceFun
// implicit execution
implicit val ec: ExecutionContext = ???
val x: Future[Int] = Future(1)
.flatMap(asyncTraceFun("statement segment")(i => Future(i + 1)))
x.foreach(println) // prints 2 on completion of Future

トランザクション

トランザクションは、 TraceOps.txnメソッドを使用して作成できます。例えば:

import com.newrelic.scala.api.TraceOps.txn
txn {
val i = 1
val j = 2
println(i + j)
}

txn (上記のように) ステートメントとして、または式として使用できます。

import com.newrelic.scala.api.TraceOps.txn
val i: Int = txn(1 + 2) //transaction created
println(i) // 3

txn TraceOpメソッドのいずれかと一緒に使用して、セグメントを作成できます。以下の例では、3 つのセグメントを持つトランザクションを作成します。

import scala.concurrent.{ExecutionContext, Future}
import com.newrelic.scala.api.TraceOps.{txn, asyncTrace}
// implicit execution
implicit val ec: ExecutionContext = ???
val x: Future[Int] = txn(
for {
one <- asyncTrace("segment one")(Future(1))
two <- asyncTrace("segment two")(Future(one + 1))
three <- asyncTrace("segment three")(Future(two + 1))
} yield three
)
x.foreach(println) // prints 3 on completion of Future

Java agent APIでScalaをインストゥルメントする

New Relic API クラスまたは アノテーションを使用するために Scala をインスツルメントする.

  1. Scalaの設定ファイルに以下の情報を追加してください。

  2. NewRelicクラスをインポートして、アプリケーションで使用します。

    import com.newrelic.api.agent.NewRelic
    ...
    NewRelic.setTransactionName(null, "/myTransaction");

追加API機能

JavaエージェントAPIとその機能の詳細については、JavaエージェントAPI入門を参照してください。

XMLインストゥルメンテーションによるScalaのインストゥルメント

XMLインスツルメンテーションは、Javaエージェントで動作するすべてのScalaアプリケーションで利用できます。これにより、コードに変更を加えることなくインスツルメンテーションを追加することができます。

詳しくは、 Java instrumentation by XML をご覧ください。

追加のインストゥルメンテーション

Kamonをお使いの方は、New Relic Kamon reporter をご覧ください。

Copyright © 2024 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.