• EnglishEspañol日本語한국어Português
  • EntrarComeçar agora

Esta tradução de máquina é fornecida para sua comodidade.

In the event of any inconsistency between the English version and the translated version, the English versionwill take priority. Please visit this page for more information.

Criar um problema

Instrumentação Scala

O agente Java New Relic é compatível com Scala e suporta chamada de API, anotações e instrumentação personalizada New Relic. Todas as informações abaixo são complementares às instruções de instalação do agente Java da New Relic.

Dica

Para Heroku, consulte agente Java com Scala no Heroku.

Estrutura Scala

Se sua framework não tiver suporte nativo do New Relic ou se você quiser configurar monitoramento adicional, a instrumentação personalizada é uma ótima maneira de se aprofundar em seu aplicativo.

Instrumento Scala com a API Scala

A API do agente New Relic Scala permite controlar, personalizar e estender a funcionalidade do agente Java APM usando código Scala idiomático. Ele pode ser usado junto com a API Java da New Relic , bem como permitir que o usuário

  • Crie segmentos para funções anônimas síncronas e assíncronas
  • Crie segmentos para blocos de código síncronos e assíncronos
  • Crie uma transação se ainda não tiver sido iniciada

Importante

Para obter melhores resultados ao usar a API, certifique-se de ter a versão mais recente do agente Java. A API New Relic Scala requer agente Java 7.1.0 ou mais alto.

Use a API Scala

Para acessar a classe API adicione as seguintes informações ao seu arquivo de configuração Scala:

As versões do Scala suportadas são 2.10, 2.11, 2.12 e 2.13. O usuário Scala 3.0 pode usar o jar 2.13. O jar é implantado no Maven Central e também está no arquivo zip de instalação do agente Java New Relic. Você pode chamar a API quando o agente Java não estiver em execução. Os métodos de API subjacentes são apenas stubs; a implementação é incluída quando o agente Java está em execução.

Segmentos

Para criar um segmento para um bloco de código síncrono, use TraceOps.trace. Por exemplo:

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 também pode ser usado em Scala para compreensões

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)

Se você deseja criar um segmento para um bloco de código assíncrono contendo um Scala Future, use TraceOps.asyncTrace. Isso garantirá que o tempo do segmento inclua o tempo necessário para a conclusão do Futuro.

No exemplo abaixo o tempo do segmento não será inferior a 5 segundos devido ao atraso criado no Future empacotado.

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 também pode ser usado em Scala para compreensões

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

Se você deseja criar um segmento para uma função anônima síncrona, use TraceOps.traceFun. Por exemplo:

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

Se quiser criar segmento para uma função assíncrono que retorne um Scala Future use TraceOps.asyncTraceFun. Isso garantirá que o tempo do segmento inclua o tempo necessário para a conclusão da função.

No exemplo abaixo o tempo do segmento não será inferior a 5 segundos devido ao atraso criado no Future empacotado.

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

Transação

Transação pode ser criada usando o método TraceOps.txn . Por exemplo:

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

txn pode ser usado como uma declaração (como acima) ou como uma expressão

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

txn pode ser usado com qualquer um dos métodos TraceOp para criar segmentos. O exemplo abaixo cria uma transação com 3 segmentos.

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

Instrumento Scala com a API do agente Java

Instrumento Scala para usar a classe ou anotações da API New Relic.

  1. Adicione as seguintes informações ao seu arquivo de configuração Scala:

  2. Importe a classe NewRelic e utilize-a em seu aplicativo:

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

Mais funções de API

Para obter mais informações sobre a API do agente Java e sua funcionalidade, consulte Introdução à API do agente Java.

Instrumento Scala com instrumentação XML

A instrumentação XML está disponível para qualquer aplicativo Scala em execução com o agente Java. Ele permite que a instrumentação seja adicionada sem quaisquer alterações no código.

Para mais informações, veja Instrumentação Java por XML.

Instrumentação adicional

Se você usa Kamon, dê uma olhada no repórter New Relic Kamon.

Copyright © 2024 New Relic Inc.

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