New Relic Java 에이전트는 Scala와 호환되며 New Relic API 호출, 주석 및 사용자 정의 계측 을 지원합니다. 아래의 모든 정보는 New Relic의 Java 에이전트 설치 지침 을 보완합니다.
팁
Heroku의 경우 Heroku에서 Scala를 사용하는 Java 에이전트를 참조하세요.
스칼라 프레임워크
프레임워크 가 기본적으로 New Relic에서 지원되지 않거나 추가 모니터링을 설정하려는 경우 사용자 지정 계측 은 애플리케이션을 더 깊이 파고들 수 있는 좋은 방법입니다.
Scala API로 Scala 계측
New Relic Scala 에이전트 API를 사용하면 관용적인 Scala 코드를 사용하여 APM Java 에이전트의 기능을 제어, 사용자 지정 및 확장할 수 있습니다. New Relic Java API 와 함께 사용할 수 있을 뿐만 아니라 사용자가
- 동기 및 비동기 익명 함수에 대한 세그먼트 만들기
- 동기 및 비동기 코드 블록에 대한 세그먼트 생성
- 트랜잭션이 아직 시작되지 않은 경우 생성
중요
API를 사용할 때 최상의 결과를 얻으려면 최신 Java 에이전트 릴리스가 있는지 확인하십시오. New Relic Scala API를 사용하려면 Java 에이전트 7.1.0 이상이 필요합니다.
스칼라 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 expressionval 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 executionimplicit 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 executionimplicit 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 executionimplicit 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 executionimplicit 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.txntxn { val i = 1 val j = 2 println(i + j)}
txn
진술(위와 같이) 또는 표현식으로 사용할 수 있습니다.
import com.newrelic.scala.api.TraceOps.txnval i: Int = txn(1 + 2) //transaction createdprintln(i) // 3
txn
모든 TraceOp
메서드와 함께 사용하여 세그먼트를 만들 수 있습니다. 아래 예에서는 3개의 세그먼트가 있는 트랜잭션을 생성합니다.
import scala.concurrent.{ExecutionContext, Future}import com.newrelic.scala.api.TraceOps.{txn, asyncTrace}// implicit executionimplicit 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 에이전트 API로 Scala 계측
New Relic API 클래스 또는 주석 을 사용하도록 Scala를 계측합니다.
Scala 구성 파일에 다음 정보를 추가합니다.
NewRelic 클래스를 가져와 애플리케이션에서 사용합니다.
import com.newrelic.api.agent.NewRelic...NewRelic.setTransactionName(null, "/myTransaction");
더 많은 API 기능
Java 에이전트 API 및 해당 기능에 대한 자세한 내용은 Java 에이전트 API 소개 를 참조하십시오.
XML 인스트루먼테이션이 있는 인스트루먼트 스칼라
XML 계측은 Java 에이전트와 함께 실행되는 모든 Scala 애플리케이션에서 사용할 수 있습니다. 코드를 변경하지 않고 계측을 추가할 수 있습니다.
자세한 내용 은 XML을 통한 Java 계측을 참조하세요.
추가 계측
카몬을 사용하신다면 뉴레릭 카몬 리포터 를 참고하세요.