2016-12-08 5 views
0

나는 Akka 모니터링/원격 측정에 StatsD backend과 함께 Kamon을 사용하려고합니다. 현재 저는 한 명의 배우 만 있고 발신자에게 회신하는 ask을 보내고 있습니다. Graphana와 Graphite, JVM 및 OS 통계에서 맞춤 카운터 데이터를 볼 수 있지만 Akka의 배우 통계는 볼 수 없습니다. 내 프로젝트는 this intro처럼 설정되어 있지만 Kamon 항목과 내 HttpService를 추가했습니다. 내가 뭘 놓치고 있니? 여기 연기 통계가 Kamon에서 StatsD로 전송되지 않았습니다.

내 설정이다 :

import akka.event.Logging 
import akka.http.scaladsl.server.Directives._ 
import akka.http.scaladsl.server.Route 
import akka.pattern.ask 
import akka.util.{ByteString, Timeout} 
import com.incontact.data.GeneratorActor.GenerateId 
import com.incontact.data.IdGenerator.{GeneratorError, IdResult} 
import com.incontact.http.HttpService 
import akka.http.scaladsl.model.StatusCodes._ 
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport 
import spray.json._ 
import kamon.Kamon 

import scala.concurrent.duration._ 

trait IdService extends HttpService with SprayJsonSupport with DefaultJsonProtocol { 
    private lazy val log = Logging(system, classOf[IdService]) 

    implicit val timeout: Timeout = 1.second 
    //implicit val errorFormat = jsonFormat2(GeneratorError) 

    abstract override def route: Route = { 
    log.info("creating generator actor") 
    val generator = system.actorOf(GeneratorActor.props, "generator") 
    val counter = Kamon.metrics.counter("generate-long-id") 

    path("") { 
     get { 
     counter.increment() 
     log.info("IdService sending single request to actor") 
     onSuccess((generator ? GenerateId).mapTo[IdResult]) { 
      case Right(id) => complete(ByteString(s"${id}\n")) 
      case Left(e:GeneratorError) => failWith(e.Error) 
     } 
     } 
    } 
    } ~ super.route 
} 

Main.scala (시작)

import akka.event.Logging 
import com.incontact.data.IdService 
import com.incontact.http.HttpServer 
import kamon.Kamon 

import scala.io.StdIn 
import scala.util.Success 

object Main extends App 
    with HttpServer 
    with IdService { 

    Kamon.start() 

    private lazy val log = Logging(system, getClass) 
    bindingFuture.andThen { 
    case Success(binding) => 
     // this really doesn't support any production behavior since [ENTER] won't be used to shut down the docker container 
     log.info("Press ENTER to exit") 
     StdIn.readLine() 
     log.info("Shutting down...") 
     Kamon.shutdown() 
     system.terminate() 
    } 
} 

scalaVersion := "2.11.8" 
val akkaVersion = "2.4.14" 
val kamonVersion = "0.6.3" 

libraryDependencies ++= Seq(
// remove multiple-dependency warnings 
"org.scala-lang" % "scala-reflect" % scalaVersion.value, 
"org.scala-lang.modules" %% "scala-xml" % "1.0.5", 

// application dependencies 
"com.typesafe.akka" %% "akka-actor" % akkaVersion, 
"com.typesafe.akka" %% "akka-http" % "10.0.0", 
"com.typesafe.akka" %% "akka-http-spray-json" % "10.0.0", 
"com.amazonaws" % "aws-java-sdk-dynamodb" % "1.11.63", 

// kamon dependencies 
"io.kamon" %% "kamon-core" % kamonVersion, 
"io.kamon" %% "kamon-statsd" % kamonVersion, 
"io.kamon" %% "kamon-system-metrics" % kamonVersion, 
"org.aspectj" % "aspectjweaver" % "1.8.6", 

// test dependencies 
"com.typesafe.akka" %% "akka-testkit" % akkaVersion % "test", 
"org.scalatest" %% "scalatest" % "3.0.1" % "test", 
"com.typesafe.akka" %% "akka-http-testkit" % "10.0.0" % "test", 
"org.pegdown" % "pegdown" % "1.1.0" % "test" 
) 
012,351,641

build.sbt : 여기
kamon { 
    trace.level = simple-trace 
    metric { 
    tick-interval = 1 second 
    filters { 
     akka-actor.includes = [ "**" ] 
     akka-router.includes = [ "**" ] 
     akka-dispatcher.includes = [ "**" ] 
     trace.includes = [ "**" ] 
     trace-segment.includes = [ "**" ] 
     histogram.includes = [ "**" ] 
     min-max-counter.includes = [ "**" ] 
     gauge.includes = [ "**" ] 
     counters.includes = [ "**" ] 
     # For web projects 
     http-server.includes = [ "**" ] 

     akka-actor.excludes = [ "**" ] 
     akka-router.excludes = [ "**" ] 
     akka-dispatcher.excludes = [ "**" ] 
     counters.excludes = [ "" ] 
     trace-segment.excludes = [ "" ] 
     histogram.excludes = [ "" ] 
     min-max-counter.excludes = [ "" ] 
     gauge.excludes = [ "" ] 
     http-server.excludes = [ "" ] 
    } 
    } 

    akka { 
    ask-pattern-timeout-warning = "lightweight" 
    } 

    statsd { 
    hostname = "localhost" //Graphite Host 
    port = "8125" 
    flush-interval = 1 second 
    max-packet-size = 1024 bytes 
    subscriptions { 
     histogram = ["**"] 
     min-max-counter = ["**"] 
     gauge = ["**"] 
     counter = ["**"] 
     trace = ["**"] 
     trace-segment = ["**"] 
     system-metric = ["**"] 
     akka-actor = ["**"] 
     akka-dispatcher = ["**"] 
     http-server = ["**"] 
    } 
    report-system-metrics = true 

    simple-metric-key-generator { 
     application = "data-id-generator" 
    } 
    } 
    system-metrics { 
    #sigar is enabled by default 
    sigar-enabled = false 

    #jmx related metrics are enabled by default 
    jmx-enabled = true 
    } 
} 

내 서비스입니다

프로젝트/plugins.sbt 명령 줄에서

addSbtPlugin("io.kamon" % "aspectj-runner" % "0.1.3") 

출시 : 당신은 당신의 설정에있는 모든 배우/디스/라우터 메트릭을 제외하고 같은

$ sbt aspectj-runner:run 

답변

1

것 같습니다. 이렇게하면 모든 측정 항목을 제외해야합니다 (모두 포함하더라도).

akka-actor.excludes = [ "**" ] 
    akka-router.excludes = [ "**" ] 
    akka-dispatcher.excludes = [ "**" ] 

시도하고는

akka-actor.excludes = [ ] 
    akka-router.excludes = [ ] 
    akka-dispatcher.excludes = [ ] 
+0

좋은 캐치로 변경,하지만 좋은. 그것은 여전히 ​​데이터를 보내지 않습니다 –

+0

더 많은 코드가 도움이 될 것 같아요. 예 : 카몬을 시작한거야? kamon-akka 모듈을 가져오고 있습니까? AspectJ로 짜는 방법은? –

+0

나는 kamon-akka 모듈에 대해 몰랐다. kamon-akka 모듈을 추가하여 그 번호를 –