com.codahale.metrics.MetricRegistry Scala Examples
The following examples show how to use com.codahale.metrics.MetricRegistry.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
package env import akka.actor.ActorSystem import com.codahale.metrics.MetricRegistry import controllers.AssetsFinder import libs.logs.IzanamiLogger import play.api.libs.ws.WSClient import play.api.{Environment, Mode} import cats._ import cats.implicits._ import scala.util.Random object ModeEq { implicit val eqMode: Eq[Mode] = Eq.fromUniversalEquals } case class Env( izanamiConfig: IzanamiConfig, environment: Environment, // actorSystem: ActorSystem, assetsFinder: AssetsFinder ) { import ModeEq._ val env: Mode = IzanamiConfig.mode(izanamiConfig, environment.mode) def isPlayDevMode = environment.mode === Mode.Dev IzanamiLogger.info(s"Starting izanami with $env mode") // val sharedKey: String = izanamiConfig.claim.sharedKey def hash = Random.nextInt(100000) def getFile(path: String) = environment.getFile(path) val cookieName: String = Option(izanamiConfig.filter) .collect { case Default(config) => config.cookieClaim } .getOrElse("Izanami") val contextPath: String = if (izanamiConfig.contextPath.endsWith("/")) { izanamiConfig.contextPath.dropRight(1) } else { izanamiConfig.contextPath } val baseURL: String = if (izanamiConfig.baseURL.endsWith("/")) { izanamiConfig.baseURL.dropRight(1) } else { izanamiConfig.baseURL } }
Example 2
Source File: InMemoryLedgerReaderWriterSpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.ledger.on.memory import com.codahale.metrics.MetricRegistry import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import com.daml.ledger.participant.state.kvutils.api.CommitMetadata import com.daml.ledger.participant.state.v1.{ParticipantId, SubmissionResult} import com.daml.ledger.validator.{BatchedValidatingCommitter, LedgerStateOperations} import com.daml.lf.data.Ref import com.daml.metrics.Metrics import com.daml.platform.akkastreams.dispatcher.Dispatcher import com.google.protobuf.ByteString import org.mockito.ArgumentMatchers._ import org.mockito.Mockito.{times, verify, when} import org.scalatest.mockito.MockitoSugar import org.scalatest.{AsyncWordSpec, Matchers} import scala.concurrent.{ExecutionContext, Future} class InMemoryLedgerReaderWriterSpec extends AsyncWordSpec with AkkaBeforeAndAfterAll with Matchers with MockitoSugar { "commit" should { "not signal new head in case of failure" in { val mockDispatcher = mock[Dispatcher[Index]] val mockCommitter = mock[BatchedValidatingCommitter[Index]] when( mockCommitter.commit( anyString(), any[ByteString](), any[ParticipantId](), any[LedgerStateOperations[Index]])(any[ExecutionContext]())) .thenReturn( Future.successful(SubmissionResult.InternalError("Validation failed with an exception"))) val instance = new InMemoryLedgerReaderWriter( Ref.ParticipantId.assertFromString("participant ID"), "ledger ID", mockDispatcher, InMemoryState.empty, mockCommitter, new Metrics(new MetricRegistry) ) instance .commit("correlation ID", ByteString.copyFromUtf8("some bytes"), CommitMetadata.Empty) .map { actual => verify(mockDispatcher, times(0)).signalNewHead(anyInt()) actual should be(a[SubmissionResult.InternalError]) } } } }
Example 3
Source File: DatabaseMetrics.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.metrics import com.codahale.metrics.{MetricRegistry, Timer} class DatabaseMetrics private[metrics] ( registry: MetricRegistry, prefix: MetricName, val name: String, ) { protected val dbPrefix: MetricName = prefix :+ name val waitTimer: Timer = registry.timer(dbPrefix :+ "wait") val executionTimer: Timer = registry.timer(dbPrefix :+ "exec") val translationTimer: Timer = registry.timer(dbPrefix :+ "translation") val commitTimer: Timer = registry.timer(dbPrefix :+ "commit") val queryTimer: Timer = registry.timer(dbPrefix :+ "query") }
Example 4
Source File: CacheMetrics.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.metrics import com.codahale.metrics.MetricRegistry.MetricSupplier import com.codahale.metrics.{Counter, Gauge, MetricRegistry, Timer} final class CacheMetrics( registry: MetricRegistry, prefix: MetricName, ) { val hitCount: Counter = registry.counter(prefix :+ "hits") val missCount: Counter = registry.counter(prefix :+ "misses") val loadSuccessCount: Counter = registry.counter(prefix :+ "load_successes") val loadFailureCount: Counter = registry.counter(prefix :+ "load_failures") val totalLoadTime: Timer = registry.timer(prefix :+ "load_total_time") val evictionCount: Counter = registry.counter(prefix :+ "evictions") val evictionWeight: Counter = registry.counter(prefix :+ "evicted_weight") def registerSizeGauge(sizeGauge: Gauge[Long]): Unit = register(prefix :+ "size", () => sizeGauge) def registerWeightGauge(weightGauge: Gauge[Long]): Unit = register(prefix :+ "weight", () => weightGauge) private def register[T](name: MetricName, gaugeSupplier: MetricSupplier[Gauge[_]]): Gauge[T] = { registry.remove(name) registry.gauge(name, gaugeSupplier).asInstanceOf[Gauge[T]] } }
Example 5
Source File: DatabaseSpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.ledger.on.sql import com.codahale.metrics.MetricRegistry import com.daml.ledger.on.sql.Database.InvalidDatabaseException import com.daml.logging.LoggingContext.newLoggingContext import com.daml.metrics.Metrics import org.scalatest.{AsyncWordSpec, Matchers} class DatabaseSpec extends AsyncWordSpec with Matchers { "Database" should { "not accept unnamed H2 database URLs" in { newLoggingContext { implicit logCtx => an[InvalidDatabaseException] should be thrownBy Database.owner("jdbc:h2:mem:", new Metrics(new MetricRegistry)) } } "not accept unnamed SQLite database URLs" in { newLoggingContext { implicit logCtx => an[InvalidDatabaseException] should be thrownBy Database.owner("jdbc:sqlite::memory:", new Metrics(new MetricRegistry)) } } } }
Example 6
Source File: MetricsReporter.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.configuration import java.net.{InetAddress, InetSocketAddress} import java.nio.file.{Path, Paths} import com.codahale.metrics import com.codahale.metrics.{MetricRegistry, ScheduledReporter} import com.daml.platform.sandbox.config.InvalidConfigException import com.google.common.net.HostAndPort import scopt.Read import scala.util.Try sealed trait MetricsReporter { def register(registry: MetricRegistry): ScheduledReporter } object MetricsReporter { case object Console extends MetricsReporter { override def register(registry: MetricRegistry): ScheduledReporter = metrics.ConsoleReporter .forRegistry(registry) .build() } final case class Csv(directory: Path) extends MetricsReporter { override def register(registry: MetricRegistry): ScheduledReporter = metrics.CsvReporter .forRegistry(registry) .build(directory.toFile) } final case class Graphite(address: InetSocketAddress) extends MetricsReporter { override def register(registry: MetricRegistry): ScheduledReporter = metrics.graphite.GraphiteReporter .forRegistry(registry) .build(new metrics.graphite.Graphite(address)) } object Graphite { val defaultHost: InetAddress = InetAddress.getLoopbackAddress val defaultPort: Int = 2003 def apply(): Graphite = Graphite(new InetSocketAddress(defaultHost, defaultPort)) def apply(port: Int): Graphite = Graphite(new InetSocketAddress(defaultHost, port)) } implicit val metricsReporterRead: Read[MetricsReporter] = Read.reads { _.split(":", 2).toSeq match { case Seq("console") => Console case Seq("csv", directory) => Csv(Paths.get(directory)) case Seq("graphite") => Graphite() case Seq("graphite", address) => Try(address.toInt) .map(port => Graphite(port)) .recover { case _: NumberFormatException => //noinspection UnstableApiUsage val hostAndPort = HostAndPort .fromString(address) .withDefaultPort(Graphite.defaultPort) Graphite(new InetSocketAddress(hostAndPort.getHost, hostAndPort.getPort)) } .get case _ => throw new InvalidConfigException( """Must be one of "console", "csv:PATH", or "graphite[:HOST][:PORT]".""") } } }
Example 7
Source File: MetricsReporting.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.sandbox.metrics import java.time.Duration import java.util.concurrent.TimeUnit import com.codahale.metrics.Slf4jReporter.LoggingLevel import com.codahale.metrics.jmx.JmxReporter import com.codahale.metrics.{MetricRegistry, Reporter, Slf4jReporter} import com.daml.metrics.{JvmMetricSet, Metrics} import com.daml.platform.configuration.MetricsReporter import com.daml.resources.{Resource, ResourceOwner} import scala.concurrent.{ExecutionContext, Future} final class MetricsReporting( jmxDomain: String, extraMetricsReporter: Option[MetricsReporter], extraMetricsReportingInterval: Duration, ) extends ResourceOwner[Metrics] { def acquire()(implicit executionContext: ExecutionContext): Resource[Metrics] = { val registry = new MetricRegistry registry.registerAll(new JvmMetricSet) for { slf4JReporter <- acquire(newSlf4jReporter(registry)) _ <- acquire(newJmxReporter(registry)) .map(_.start()) _ <- extraMetricsReporter.fold(Resource.unit) { reporter => acquire(reporter.register(registry)) .map(_.start(extraMetricsReportingInterval.getSeconds, TimeUnit.SECONDS)) } // Trigger a report to the SLF4J logger on shutdown. _ <- Resource(Future.successful(slf4JReporter))(reporter => Future.successful(reporter.report())) } yield new Metrics(registry) } private def newJmxReporter(registry: MetricRegistry): JmxReporter = JmxReporter .forRegistry(registry) .inDomain(jmxDomain) .build() private def newSlf4jReporter(registry: MetricRegistry): Slf4jReporter = Slf4jReporter .forRegistry(registry) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .withLoggingLevel(LoggingLevel.DEBUG) .build() private def acquire[T <: Reporter](reporter: => T)( implicit executionContext: ExecutionContext ): Resource[T] = ResourceOwner .forCloseable(() => reporter) .acquire() }
Example 8
Source File: PostgresIT.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.sandbox.persistence import com.codahale.metrics.{MetricRegistry, SharedMetricRegistries} import com.daml.dec.DirectExecutionContext import com.daml.logging.LoggingContext.newLoggingContext import com.daml.metrics.Metrics import com.daml.platform.configuration.ServerRole import com.daml.platform.store.FlywayMigrations import com.daml.platform.store.dao.{HikariJdbcConnectionProvider, JdbcConnectionProvider} import com.daml.resources.Resource import com.daml.testing.postgresql.PostgresAroundAll import org.scalatest.{AsyncWordSpec, BeforeAndAfterAll, Matchers} import scala.concurrent.Await import scala.concurrent.duration.DurationInt class PostgresIT extends AsyncWordSpec with Matchers with PostgresAroundAll with BeforeAndAfterAll { private var connectionProviderResource: Resource[JdbcConnectionProvider] = _ private var connectionProvider: JdbcConnectionProvider = _ private val metrics = new Metrics(SharedMetricRegistries.getOrCreate("PostgresIT")) override def beforeAll(): Unit = { super.beforeAll() newLoggingContext { implicit logCtx => connectionProviderResource = HikariJdbcConnectionProvider .owner( ServerRole.Testing(getClass), postgresDatabase.url, maxConnections = 4, new MetricRegistry, ) .acquire()(DirectExecutionContext) connectionProvider = Await.result(connectionProviderResource.asFuture, 10.seconds) } } override protected def afterAll(): Unit = { Await.result(connectionProviderResource.release(), 10.seconds) super.afterAll() } "Postgres" when { "running queries using Hikari" should { "be accessible" in { connectionProvider.runSQL(metrics.test.db) { conn => val resultSet = conn.createStatement().executeQuery("SELECT 1") resultSet.next() val result = resultSet.getInt(1) result shouldEqual 1 } } } } "Flyway" should { "execute initialisation script" in { newLoggingContext { implicit logCtx => new FlywayMigrations(postgresDatabase.url).migrate()(DirectExecutionContext) }.map { _ => connectionProvider.runSQL(metrics.test.db) { conn => def checkTableExists(table: String) = { val resultSet = conn.createStatement().executeQuery(s"SELECT * from $table") resultSet.next shouldEqual false } def checkTableDoesNotExist(table: String) = { val resultSet = conn.createStatement().executeQuery(s"SELECT to_regclass('$table')") resultSet.next shouldEqual true Option(resultSet.getString(1)) shouldEqual Option.empty[String] resultSet.wasNull() shouldEqual true } checkTableExists("parameters") checkTableExists("configuration_entries") checkTableExists("participant_command_completions") checkTableExists("participant_command_submissions") checkTableExists("participant_contract_witnesses") checkTableExists("participant_contracts") checkTableExists("participant_events") checkTableExists("parties") checkTableExists("party_entries") checkTableExists("packages") checkTableExists("package_entries") checkTableDoesNotExist("participant_event_flat_transaction_witnesses") checkTableDoesNotExist("participant_event_transaction_tree_witnesses") } } } } }
Example 9
Source File: LedgerResource.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.sandbox import akka.stream.Materializer import com.codahale.metrics.MetricRegistry import com.daml.api.util.TimeProvider import com.daml.ledger.api.domain.LedgerId import com.daml.ledger.api.testing.utils.{OwnedResource, Resource} import com.daml.ledger.participant.state.v1.ParticipantId import com.daml.lf.data.ImmArray import com.daml.lf.transaction.StandardTransactionCommitter import com.daml.logging.LoggingContext import com.daml.metrics.Metrics import com.daml.platform.common.LedgerIdMode import com.daml.platform.configuration.ServerRole import com.daml.platform.packages.InMemoryPackageStore import com.daml.platform.sandbox.stores.InMemoryActiveLedgerState import com.daml.platform.sandbox.stores.ledger.Ledger import com.daml.platform.sandbox.stores.ledger.ScenarioLoader.LedgerEntryOrBump import com.daml.platform.sandbox.stores.ledger.inmemory.InMemoryLedger import com.daml.platform.sandbox.stores.ledger.sql.{SqlLedger, SqlStartMode} import com.daml.platform.store.dao.events.LfValueTranslation import com.daml.resources.ResourceOwner import com.daml.testing.postgresql.PostgresResource import scala.concurrent.ExecutionContext object LedgerResource { def inMemory( ledgerId: LedgerId, participantId: ParticipantId, timeProvider: TimeProvider, acs: InMemoryActiveLedgerState = InMemoryActiveLedgerState.empty, packages: InMemoryPackageStore = InMemoryPackageStore.empty, entries: ImmArray[LedgerEntryOrBump] = ImmArray.empty, )(implicit executionContext: ExecutionContext): Resource[Ledger] = new OwnedResource( ResourceOwner.forValue(() => new InMemoryLedger( ledgerId = ledgerId, participantId = participantId, timeProvider = timeProvider, acs0 = acs, transactionCommitter = StandardTransactionCommitter, packageStoreInit = packages, ledgerEntries = entries, ))) def postgres( testClass: Class[_], ledgerId: LedgerId, participantId: ParticipantId, timeProvider: TimeProvider, metrics: MetricRegistry, packages: InMemoryPackageStore = InMemoryPackageStore.empty, )( implicit executionContext: ExecutionContext, materializer: Materializer, logCtx: LoggingContext, ): Resource[Ledger] = new OwnedResource( for { database <- PostgresResource.owner() ledger <- new SqlLedger.Owner( serverRole = ServerRole.Testing(testClass), jdbcUrl = database.url, initialLedgerId = LedgerIdMode.Static(ledgerId), participantId = participantId, timeProvider = timeProvider, acs = InMemoryActiveLedgerState.empty, packages = packages, initialLedgerEntries = ImmArray.empty, queueDepth = 128, transactionCommitter = StandardTransactionCommitter, startMode = SqlStartMode.AlwaysReset, eventsPageSize = 100, metrics = new Metrics(metrics), lfValueTranslationCache = LfValueTranslation.Cache.none, ) } yield ledger ) }
Example 10
Source File: MetricsAround.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.sandbox import com.codahale.metrics.MetricRegistry import org.scalatest.BeforeAndAfterAll trait MetricsAround extends BeforeAndAfterAll { self: org.scalatest.Suite => @volatile protected var metrics: MetricRegistry = _ override protected def beforeAll(): Unit = { super.beforeAll() metrics = new MetricRegistry } override protected def afterAll(): Unit = { super.afterAll() } }
Example 11
Source File: JdbcLedgerDaoBackend.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.platform.store.dao import com.codahale.metrics.MetricRegistry import com.daml.ledger.api.domain.LedgerId import com.daml.ledger.api.testing.utils.AkkaBeforeAndAfterAll import com.daml.logging.LoggingContext import com.daml.logging.LoggingContext.newLoggingContext import com.daml.metrics.Metrics import com.daml.platform.configuration.ServerRole import com.daml.platform.store.dao.events.LfValueTranslation import com.daml.platform.store.{DbType, FlywayMigrations} import com.daml.resources.{Resource, ResourceOwner} import org.scalatest.Suite import scala.concurrent.duration.DurationInt import scala.concurrent.{Await, ExecutionContext} private[dao] trait JdbcLedgerDaoBackend extends AkkaBeforeAndAfterAll { this: Suite => protected def dbType: DbType protected def jdbcUrl: String protected def daoOwner(implicit logCtx: LoggingContext): ResourceOwner[LedgerDao] = JdbcLedgerDao .writeOwner( serverRole = ServerRole.Testing(getClass), jdbcUrl = jdbcUrl, eventsPageSize = 100, metrics = new Metrics(new MetricRegistry), lfValueTranslationCache = LfValueTranslation.Cache.none, ) protected final var ledgerDao: LedgerDao = _ // `dbDispatcher` and `ledgerDao` depend on the `postgresFixture` which is in turn initialized `beforeAll` private var resource: Resource[LedgerDao] = _ override protected def beforeAll(): Unit = { super.beforeAll() implicit val executionContext: ExecutionContext = system.dispatcher resource = newLoggingContext { implicit logCtx => for { _ <- Resource.fromFuture(new FlywayMigrations(jdbcUrl).migrate()) dao <- daoOwner.acquire() _ <- Resource.fromFuture(dao.initializeLedger(LedgerId("test-ledger"))) } yield dao } ledgerDao = Await.result(resource.asFuture, 10.seconds) } override protected def afterAll(): Unit = { Await.result(resource.release(), 10.seconds) super.afterAll() } }
Example 12
Source File: MesosClusterSchedulerSource.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[mesos] class MesosClusterSchedulerSource(scheduler: MesosClusterScheduler) extends Source { override def sourceName: String = "mesos_cluster" override def metricRegistry: MetricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("waitingDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getQueuedDriversSize }) metricRegistry.register(MetricRegistry.name("launchedDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getLaunchedDriversSize }) metricRegistry.register(MetricRegistry.name("retryDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getPendingRetryDriversSize }) }
Example 13
Source File: GangliaSink.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" val GANGLIA_KEY_DMAX = "dmax" val GANGLIA_DEFAULT_DMAX = 0 def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val dmax = propertyToOption(GANGLIA_KEY_DMAX).map(_.toInt).getOrElse(GANGLIA_DEFAULT_DMAX) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .withDMax(dmax) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 14
Source File: CsvSink.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 15
Source File: MetricsServlet.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.{SecurityManager, SparkConf} import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) def getHandlers(conf: SparkConf): Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr, conf) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 16
Source File: Slf4jSink.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, Slf4jReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 17
Source File: ConsoleSink.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 18
Source File: GraphiteSink.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{Graphite, GraphiteReporter, GraphiteUDP} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 19
Source File: StaticSources.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.source import com.codahale.metrics.MetricRegistry import org.apache.spark.annotation.Experimental private[spark] object StaticSources { def reset(): Unit = { METRIC_PARTITIONS_FETCHED.dec(METRIC_PARTITIONS_FETCHED.getCount()) METRIC_FILES_DISCOVERED.dec(METRIC_FILES_DISCOVERED.getCount()) METRIC_FILE_CACHE_HITS.dec(METRIC_FILE_CACHE_HITS.getCount()) } // clients can use these to avoid classloader issues with the codahale classes def incrementFetchedPartitions(n: Int): Unit = METRIC_PARTITIONS_FETCHED.inc(n) def incrementFilesDiscovered(n: Int): Unit = METRIC_FILES_DISCOVERED.inc(n) def incrementFileCacheHits(n: Int): Unit = METRIC_FILE_CACHE_HITS.inc(n) }
Example 20
Source File: MasterSource.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.count(_.state == WorkerState.ALIVE) }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.apps.count(_.state == ApplicationState.WAITING) }) }
Example 21
Source File: WorkerSource.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 22
Source File: DAGSchedulerSource.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry, Timer} import org.apache.spark.metrics.source.Source private[scheduler] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) val messageProcessingTimer: Timer = metricRegistry.timer(MetricRegistry.name("messageProcessingTime")) }
Example 23
Source File: BlockManagerSource.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 24
Source File: ExecutorSource.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.executor import java.util.concurrent.ThreadPoolExecutor import scala.collection.JavaConverters._ import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.hadoop.fs.FileSystem import org.apache.spark.metrics.source.Source private[spark] class ExecutorSource(threadPool: ThreadPoolExecutor, executorId: String) extends Source { private def fileStats(scheme: String) : Option[FileSystem.Statistics] = FileSystem.getAllStatistics.asScala.find(s => s.getScheme.equals(scheme)) private def registerFileSystemStat[T]( scheme: String, name: String, f: FileSystem.Statistics => T, defaultValue: T) = { metricRegistry.register(MetricRegistry.name("filesystem", scheme, name), new Gauge[T] { override def getValue: T = fileStats(scheme).map(f).getOrElse(defaultValue) }) } override val metricRegistry = new MetricRegistry() override val sourceName = "executor" // Gauge for executor thread pool's actively executing task counts metricRegistry.register(MetricRegistry.name("threadpool", "activeTasks"), new Gauge[Int] { override def getValue: Int = threadPool.getActiveCount() }) // Gauge for executor thread pool's approximate total number of tasks that have been completed metricRegistry.register(MetricRegistry.name("threadpool", "completeTasks"), new Gauge[Long] { override def getValue: Long = threadPool.getCompletedTaskCount() }) // Gauge for executor thread pool's current number of threads metricRegistry.register(MetricRegistry.name("threadpool", "currentPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getPoolSize() }) // Gauge got executor thread pool's largest number of threads that have ever simultaneously // been in th pool metricRegistry.register(MetricRegistry.name("threadpool", "maxPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getMaximumPoolSize() }) // Gauge for file system stats of this executor for (scheme <- Array("hdfs", "file")) { registerFileSystemStat(scheme, "read_bytes", _.getBytesRead(), 0L) registerFileSystemStat(scheme, "write_bytes", _.getBytesWritten(), 0L) registerFileSystemStat(scheme, "read_ops", _.getReadOps(), 0) registerFileSystemStat(scheme, "largeRead_ops", _.getLargeReadOps(), 0) registerFileSystemStat(scheme, "write_ops", _.getWriteOps(), 0) } }
Example 25
Source File: package.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics.dropwizard import zio.RIO import zio.metrics.Label import zio.metrics.dropwizard.reporters._ import com.codahale.metrics.{ Counter => DWCounter, Gauge => DWGauge } import com.codahale.metrics.{ Histogram => DWHistogram, Meter => DWMeter } import com.codahale.metrics.{ Timer => DWTimer } import com.codahale.metrics.{ MetricRegistry, Reservoir, UniformReservoir } import java.util.concurrent.TimeUnit package object helpers { def getCurrentRegistry(): RIO[Registry, MetricRegistry] = RIO.accessM(_.get.getCurrent()) def registerCounter(name: String, labels: Array[String]): RIO[Registry, DWCounter] = RIO.accessM(_.get.registerCounter(Label(name, labels))) def registerGauge[A](name: String, labels: Array[String], f: () => A): RIO[Registry, DWGauge[A]] = RIO.accessM(_.get.registerGauge[String, A](Label(name, labels), f)) def registerTimer(name: String, labels: Array[String]): RIO[Registry, DWTimer] = RIO.accessM(_.get.registerTimer(Label(name, labels))) def registerMeter(name: String, labels: Array[String]): RIO[Registry, DWMeter] = RIO.accessM(_.get.registerMeter(Label(name, labels))) def registerHistogram( name: String, labels: Array[String], reservoir: Reservoir ): RIO[Registry, DWHistogram] = RIO.accessM(_.get.registerHistogram(Label(name, labels), reservoir)) object counter { def register(name: String) = Counter(name, Array.empty[String]) def register(name: String, labels: Array[String]) = Counter(name, labels) } object gauge { def register[A](name: String, f: () => A) = Gauge(name, Array.empty[String], f) def register[A](name: String, labels: Array[String], f: () => A) = Gauge(name, labels, f) } object timer { def register(name: String) = Timer(name, Array.empty[String]) def register(name: String, labels: Array[String]) = Timer(name, labels) } object meter { def register(name: String) = Meter(name, Array.empty[String]) def register(name: String, labels: Array[String]) = Meter(name, labels) } object histogram { def register(name: String) = Histogram(name, Array.empty[String], new UniformReservoir) def register(name: String, labels: Array[String]) = Histogram(name, labels, new UniformReservoir) def register(name: String, labels: Array[String], reservoir: Reservoir) = Histogram(name, labels, reservoir) } def jmx(r: MetricRegistry): RIO[Reporters, Unit] = RIO.accessM( dwr => for { cr <- dwr.get.jmx(r) } yield cr.start() ) def console(r: MetricRegistry, duration: Long, unit: TimeUnit): RIO[Reporters, Unit] = RIO.accessM( dwr => for { cr <- dwr.get.console(r) } yield cr.start(duration, unit) ) }
Example 26
Source File: package.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics.dropwizard import zio.{ Has, Layer, Task, ZLayer } import java.util.concurrent.TimeUnit import java.io.File import java.util.Locale import java.net.InetSocketAddress import java.util.concurrent.TimeUnit import org.slf4j.LoggerFactory import java.{ util => ju } import java.io.File package object reporters { import com.codahale.metrics.MetricRegistry import com.codahale.metrics.MetricFilter import com.codahale.metrics.graphite.Graphite import com.codahale.metrics.graphite.GraphiteReporter import com.codahale.metrics.ConsoleReporter import com.codahale.metrics.Slf4jReporter import com.codahale.metrics.CsvReporter import com.codahale.metrics.jmx.JmxReporter import com.codahale.metrics.Reporter type Reporters = Has[Reporters.Service] object Reporters { trait Service { def jmx(r: MetricRegistry): Task[JmxReporter] def console(r: MetricRegistry): Task[ConsoleReporter] def slf4j(r: MetricRegistry, duration: Int, unit: TimeUnit, loggerName: String): Task[Slf4jReporter] def csv(r: MetricRegistry, file: File, locale: Locale): Task[Reporter] def graphite(r: MetricRegistry, host: String, port: Int, prefix: String): Task[GraphiteReporter] } val live: Layer[Nothing, Reporters] = ZLayer.succeed(new Service { def jmx(r: MetricRegistry): zio.Task[JmxReporter] = Task(JmxReporter.forRegistry(r).build()) def console(r: MetricRegistry): Task[ConsoleReporter] = Task( ConsoleReporter .forRegistry(r) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build() ) def slf4j(r: MetricRegistry, duration: Int, unit: TimeUnit, loggerName: String): Task[Slf4jReporter] = Task( Slf4jReporter .forRegistry(r) .outputTo(LoggerFactory.getLogger(loggerName)) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build() ) def csv(r: MetricRegistry, file: File, locale: ju.Locale): zio.Task[Reporter] = Task( CsvReporter .forRegistry(r) .formatFor(locale) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build(file) ) def graphite(r: MetricRegistry, host: String, port: Int, prefix: String): zio.Task[GraphiteReporter] = Task { val graphite = new Graphite(new InetSocketAddress(host, port)) GraphiteReporter .forRegistry(r) .prefixedWith(prefix) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .filter(MetricFilter.ALL) .build(graphite) } }) } }
Example 27
Source File: package.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics import zio.{ Has, ZLayer } import zio.{ Ref, Task, UIO } package object dropwizard { import com.codahale.metrics.{ MetricFilter, MetricRegistry } import com.codahale.metrics.{ Counter => DWCounter, Gauge => DWGauge } import com.codahale.metrics.{ Histogram => DWHistogram, Timer => DWTimer } import com.codahale.metrics.{ Meter => DWMeter } import com.codahale.metrics.MetricRegistry.MetricSupplier import com.codahale.metrics.Reservoir type Registry = Has[Registry.Service] type HasMetricRegistry = Has[Option[MetricRegistry]] object Registry { trait Service { def getCurrent(): UIO[MetricRegistry] def registerCounter[L: Show](label: Label[L]): Task[DWCounter] def registerGauge[L: Show, A](label: Label[L], f: () => A): Task[DWGauge[A]] def registerHistogram[L: Show](label: Label[L], reservoir: Reservoir): Task[DWHistogram] def registerMeter[L: Show](label: Label[L]): Task[DWMeter] def registerTimer[L: Show](label: Label[L]): Task[DWTimer] } private def label2Name[L: Show](label: Label[L]): String = MetricRegistry.name(Show[L].show(label.name), label.labels: _*) val explicit: ZLayer[HasMetricRegistry, Nothing, Registry] = ZLayer.fromFunction[HasMetricRegistry, Registry.Service]( optionalRegistry => new Service { private val registryRef: UIO[Ref[MetricRegistry]] = { val registry = optionalRegistry.get Ref.make(registry.getOrElse(new MetricRegistry())) } def getCurrent(): UIO[MetricRegistry] = registryRef >>= (_.get) def registerCounter[L: Show](label: Label[L]): Task[DWCounter] = registryRef >>= (_.modify(r => { val name = label2Name(label) (r.counter(name), r) })) def registerGauge[L: Show, A](label: Label[L], f: () => A): Task[DWGauge[A]] = registryRef >>= (_.modify(r => { val name = label2Name(label) val gauges = r.getGauges(MetricFilter.startsWith(name)) val dwgauge = if (gauges.isEmpty()) { val gw = new DWGauge[A]() { def getValue(): A = f() } gw.asInstanceOf[DWGauge[A]] } else gauges.get(gauges.firstKey()).asInstanceOf[DWGauge[A]] (r.register(name, dwgauge), r) })) def registerHistogram[L: Show](label: Label[L], reservoir: Reservoir): Task[DWHistogram] = registryRef >>= (_.modify(r => { val name = label2Name(label) val suppplier = new MetricSupplier[DWHistogram] { def newMetric(): DWHistogram = new DWHistogram(reservoir) } (r.histogram(name, suppplier), r) })) def registerTimer[L: Show](label: Label[L]): Task[DWTimer] = registryRef >>= (_.modify(r => { val name = label2Name(label) (r.timer(name), r) })) def registerMeter[L: Show](label: Label[L]): Task[DWMeter] = registryRef >>= (_.modify(r => { val name = label2Name(label) (r.meter(name), r) })) } ) val live: ZLayer[Any, Nothing, Registry] = ZLayer.succeed[Option[MetricRegistry]](None) >>> explicit def makeFilter(filter: Option[String]): MetricFilter = filter match { case Some(s) => s.charAt(0) match { case '+' => MetricFilter.startsWith(s.substring(1)) case '-' => MetricFilter.endsWith(s.substring(1)) case _ => MetricFilter.contains(s) } case _ => MetricFilter.ALL } } }
Example 28
Source File: Server.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics.dropwizard import scala.util.Properties.envOrNone import cats.data.Kleisli import org.http4s.server.blaze._ import org.http4s.{ Request, Response } import zio.{ RIO, ZIO } import zio.system.System import zio.clock.Clock import zio.console.Console import zio.random.Random import zio.blocking.Blocking import zio.interop.catz._ import io.circe.Json import org.http4s.circe._ import org.http4s.dsl.impl.Root import org.http4s.dsl.io._ import org.http4s.{ HttpRoutes, Response } import zio.RIO import zio.interop.catz._ import zio.metrics.dropwizard.typeclasses._ import zio.metrics.dropwizard.DropwizardExtractor._ import cats.instances.list._ import com.codahale.metrics.MetricRegistry object Server { val port: Int = envOrNone("HTTP_PORT").fold(9090)(_.toInt) type HttpEnvironment = Clock with Console with System with Random with Blocking type HttpTask[A] = RIO[HttpEnvironment, A] type KleisliApp = Kleisli[HttpTask, Request[HttpTask], Response[HttpTask]] //type HttpApp[R <: Registry] = R => KleisliApp def builder[Ctx]: KleisliApp => HttpTask[Unit] = (app: KleisliApp) => ZIO .runtime[HttpEnvironment] .flatMap { implicit rts => BlazeServerBuilder[HttpTask] .bindHttp(port) .withHttpApp(app) .serve .compile .drain } def serveMetrics: MetricRegistry => HttpRoutes[Server.HttpTask] = registry => HttpRoutes.of[Server.HttpTask] { case GET -> Root / filter => { println(s"filter: $filter") val optFilter = if (filter == "ALL") None else Some(filter) RegistryPrinter .report[List, Json](registry, optFilter)( (k: String, v: Json) => Json.obj((k, v)) ) .map(m => Response[Server.HttpTask](Ok).withEntity(m)) } } }
Example 29
Source File: Extractor.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics.dropwizard import cats.Monoid import cats.Foldable import cats.syntax.semigroup._ import zio.{ RIO, Task } import com.codahale.metrics.MetricRegistry //import zio.metrics.dropwizard.typeclasses._ //import zio.metrics.dropwizard.typeclasses.{ Foldable, Monoid } trait Extractor[F[_], A] { type Filter = Option[String] val extractCounters: MetricRegistry => Filter => RIO[Registry, F[A]] val extractGauges: MetricRegistry => Filter => RIO[Registry, F[A]] val extractTimers: MetricRegistry => Filter => RIO[Registry, F[A]] val extractHistograms: MetricRegistry => Filter => RIO[Registry, F[A]] val extractMeters: MetricRegistry => Filter => RIO[Registry, F[A]] } object RegistryPrinter { def report[F[_], A](r: MetricRegistry, filter: Option[String])( cons: (String, A) => A )(implicit M: Monoid[A], L: Foldable[F], E: Extractor[F, A]): Task[A] = { val fs = Seq( ("counters", E.extractCounters(r)(filter)), ("gauges", E.extractGauges(r)(filter)), ("timers", E.extractTimers(r)(filter)), ("histograms", E.extractHistograms(r)(filter)), ("meters", E.extractMeters(r)(filter)) ) fs.foldLeft(RIO(M.empty))( (accT, f) => for { acc <- accT m <- f._2.provideLayer(Registry.live) } yield acc |+| L.foldMap(m)(a => cons(f._1, a)) ) } }
Example 30
Source File: ReportersTest.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics import zio.metrics.dropwizard._ import zio.metrics.dropwizard.helpers._ import zio.metrics.dropwizard.reporters._ import zio.{ App, RIO, Runtime } import java.util.concurrent.TimeUnit import scala.concurrent.duration._ import zio.console._ import zio.duration.Duration import com.codahale.metrics.MetricRegistry import zio.ExitCode object ReportersTest extends App { val rt = Runtime.unsafeFromLayer(Registry.live ++ Reporters.live) val tests: RIO[ Registry with Reporters, MetricRegistry ] = for { r <- getCurrentRegistry() _ <- jmx(r) _ <- console(r, 2, TimeUnit.SECONDS) c <- counter.register(Show.fixClassName(DropwizardTest.getClass()), Array("test", "counter")) _ <- c.inc() _ <- c.inc(2.0) t <- timer.register("DropwizardTimer", Array("test", "timer")) ctx <- t.start() _ <- RIO.foreach( List( Thread.sleep(1000L), Thread.sleep(1400L), Thread.sleep(1200L) ) )(_ => t.stop(ctx)) } yield r override def run(args: List[String]) = { println("Starting tests") val json = rt.unsafeRun(tests >>= (r => DropwizardExtractor.writeJson(r)(None))) RIO.sleep(Duration.fromScala(30.seconds)) putStrLn(json.spaces2).map(_ => ExitCode.success) } }
Example 31
Source File: ServerTest.scala From zio-metrics with Apache License 2.0 | 5 votes |
package zio.metrics import zio.console.putStrLn import zio.metrics.dropwizard._ import zio.metrics.dropwizard.Server._ import zio.metrics.dropwizard.helpers._ import zio.metrics.dropwizard.reporters._ import zio.{ App, RIO, Task } import java.util.concurrent.TimeUnit import scala.util.Properties.envOrNone import zio.interop.catz._ import org.http4s.implicits._ import org.http4s.server.Router import com.codahale.metrics.MetricRegistry import zio.ExitCode object ServerTest extends App { val port: Int = envOrNone("HTTP_PORT").fold(9090)(_.toInt) println(s"Starting server on port $port") val testServer: RIO[ Registry with Reporters, MetricRegistry ] = for { r <- getCurrentRegistry() _ <- jmx(r) _ <- helpers.console(r, 30, TimeUnit.SECONDS) c <- counter.register(Show.fixClassName(DropwizardTest.getClass()), Array("test", "counter")) _ <- c.inc() _ <- c.inc(2.0) t <- timer.register("DropwizardTimer", Array("test", "timer")) ctx <- t.start() _ <- RIO.foreach( List( Thread.sleep(1000L), Thread.sleep(1400L), Thread.sleep(1200L) ) )(_ => t.stop(ctx)) } yield r val httpApp = (registry: MetricRegistry) => Router( "/metrics" -> Server.serveMetrics(registry) ).orNotFound override def run(args: List[String]) = { println("Starting tests") val kApp: Task[KleisliApp] = testServer .map(r => httpApp(r)) .provideLayer(Registry.live ++ Reporters.live) val app: RIO[HttpEnvironment, Unit] = kApp >>= builder println(s"App: $app") app .catchAll(t => putStrLn(s"$t")) .run .map(r => { println(s"Exiting $r"); ExitCode.success }) } }
Example 32
Source File: KafkaSink.scala From spark-kafka-sink with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.{ Properties, Locale } import java.util.concurrent.TimeUnit import org.slf4j.Logger import org.slf4j.LoggerFactory import com.codahale.metrics.MetricRegistry import org.apache.spark.SecurityManager import com.manyangled.kafkasink.KafkaReporter class KafkaSink(val properties: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends org.apache.spark.metrics.sink.Sink { val logger: Logger = LoggerFactory.getLogger(this.getClass) private def popt(prop: String): Option[String] = Option(properties.getProperty(prop)) // These are non-negotiable val broker = popt("broker").get val topic = popt("topic").get lazy val reporter = new KafkaReporter(registry, broker, topic, properties) def start(): Unit = { logger.info(s"Starting Kafka metric reporter at $broker, topic $topic") val period = popt("period").getOrElse("10").toLong val tstr = popt("unit").getOrElse("seconds").toUpperCase(Locale.ROOT) val tunit = TimeUnit.valueOf(tstr) reporter.start(period, tunit) } def stop(): Unit = { logger.info(s"Stopping Kafka metric reporter at $broker, topic $topic") reporter.stop() } def report(): Unit = { logger.info(s"Reporting metrics to Kafka reporter at $broker, topic $topic") reporter.report() } }
Example 33
Source File: StatsDSink.scala From spark-statsd with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, MetricFilter} import com.readytalk.metrics.StatsDReporter import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem import org.apache.spark.metrics.sink.Sink private[spark] class StatsDSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val STATSD_DEFAULT_PERIOD = 10 val STATSD_DEFAULT_UNIT = "SECONDS" val STATSD_DEFAULT_PREFIX = "" val STATSD_KEY_HOST = "host" val STATSD_KEY_PORT = "port" val STATSD_KEY_PERIOD = "period" val STATSD_KEY_UNIT = "unit" val STATSD_KEY_PREFIX = "prefix" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(STATSD_KEY_HOST).isDefined) { throw new Exception("StatsD sink requires 'host' property.") } if (!propertyToOption(STATSD_KEY_PORT).isDefined) { throw new Exception("StatsD sink requires 'port' property.") } val host = propertyToOption(STATSD_KEY_HOST).get val port = propertyToOption(STATSD_KEY_PORT).get.toInt val pollPeriod = propertyToOption(STATSD_KEY_PERIOD) match { case Some(s) => s.toInt case None => STATSD_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(STATSD_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(STATSD_DEFAULT_UNIT) } val prefix = propertyToOption(STATSD_KEY_PREFIX).getOrElse(STATSD_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter = StatsDReporter.forRegistry(registry) .prefixedWith(prefix) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .filter(MetricFilter.ALL) .build(host, port) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 34
Source File: MetricsFactory.scala From rokku with Apache License 2.0 | 5 votes |
package com.ing.wbaa.rokku.proxy.metrics import akka.http.scaladsl.model.{ HttpMethod, HttpMethods } import com.codahale.metrics.{ JmxReporter, MetricRegistry } object MetricsFactory { val ALL_REQUEST = "requests.status.all.total" val SUCCESS_REQUEST = "requests.status.success.total" val FAILURE_REQUEST = "requests.status.failure.total" val UNAUTHENTICATED_REQUEST = "requests.status.unauthenticated.total" val REQUEST_TIME = "requests.nanoseconds.total" val REQUEST_TIME_HIST = "requests.time.histogram" val HTTP_METHOD = "{httpMethod}" val HTTP_DIRECTION = "{InOut}" val REQUEST_CONTEXT_LENGTH = s"requests.method.$HTTP_METHOD.$HTTP_DIRECTION.context.length.bytes" val REQUEST_CONTEXT_LENGTH_SUM = s"requests.method.$HTTP_METHOD.$HTTP_DIRECTION.context.length.bytes.total" val REQUEST_QUEUE_OCCUPIED = "request.queue.occupied" val REQUEST_USER = "{user}" val REQUEST_QUEUE_OCCUPIED_BY_USER = s"request.queue.occupied.by.$REQUEST_USER" val ERROR_REPORTED_TOTAL = "errors.reported.total" val OBJECTS_UPLOAD_OPERATIONS_TOTAL = s"requests.method.$HTTP_METHOD.operations.total" val KAFKA_SENT_NOTIFICATION_TOTAL = "requests.kafka.notification.sent.total" val KAFKA_SENT_NOTIFICATION_ERROR_TOTAL = "requests.kafka.notification.sent.errors.total" private[this] val metrics = new MetricRegistry() JmxReporter.forRegistry(metrics).inDomain("rokku").build.start() def registryMetrics(): MetricRegistry = metrics def countRequest(name: String, count: Long = 1, countAll: Boolean = true): Unit = { metrics.counter(name).inc(count) if (countAll) metrics.counter(ALL_REQUEST).inc() } def markRequestTime(time: Long): Unit = { metrics.counter(REQUEST_TIME).inc(time) metrics.histogram(REQUEST_TIME_HIST).update(time) } def incrementRequestQueue(name: String): Unit = { metrics.counter(name).inc() metrics.counter(REQUEST_QUEUE_OCCUPIED).inc() } def decrementRequestQueue(name: String): Unit = { metrics.counter(name).dec() metrics.counter(REQUEST_QUEUE_OCCUPIED).dec() } def countLogErrors(name: String): Unit = { metrics.counter(name).inc() } def incrementObjectsUploaded(requestMethodName: HttpMethod): Unit = { requestMethodName match { case HttpMethods.PUT | HttpMethods.POST => metrics.counter(OBJECTS_UPLOAD_OPERATIONS_TOTAL.replace(MetricsFactory.HTTP_METHOD, requestMethodName.value)).inc() case _ => } } def incrementKafkaNotificationsSent(requestMethodName: HttpMethod): Unit = { requestMethodName match { case HttpMethods.PUT | HttpMethods.POST => metrics.counter(KAFKA_SENT_NOTIFICATION_TOTAL).inc() case _ => } } def incrementKafkaSendErrors(): Unit = { metrics.counter(KAFKA_SENT_NOTIFICATION_ERROR_TOTAL).inc() } }
Example 35
Source File: MetricsReporter.scala From XSQL with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.execution.streaming import java.text.SimpleDateFormat import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.internal.Logging import org.apache.spark.metrics.source.{Source => CodahaleSource} import org.apache.spark.sql.catalyst.util.DateTimeUtils import org.apache.spark.sql.streaming.StreamingQueryProgress class MetricsReporter( stream: StreamExecution, override val sourceName: String) extends CodahaleSource with Logging { override val metricRegistry: MetricRegistry = new MetricRegistry // Metric names should not have . in them, so that all the metrics of a query are identified // together in Ganglia as a single metric group registerGauge("inputRate-total", _.inputRowsPerSecond, 0.0) registerGauge("processingRate-total", _.processedRowsPerSecond, 0.0) registerGauge("latency", _.durationMs.get("triggerExecution").longValue(), 0L) private val timestampFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") // ISO8601 timestampFormat.setTimeZone(DateTimeUtils.getTimeZone("UTC")) registerGauge("eventTime-watermark", progress => convertStringDateToMillis(progress.eventTime.get("watermark")), 0L) registerGauge("states-rowsTotal", _.stateOperators.map(_.numRowsTotal).sum, 0L) registerGauge("states-usedBytes", _.stateOperators.map(_.memoryUsedBytes).sum, 0L) private def convertStringDateToMillis(isoUtcDateStr: String) = { if (isoUtcDateStr != null) { timestampFormat.parse(isoUtcDateStr).getTime } else { 0L } } private def registerGauge[T]( name: String, f: StreamingQueryProgress => T, default: T): Unit = { synchronized { metricRegistry.register(name, new Gauge[T] { override def getValue: T = Option(stream.lastProgress).map(f).getOrElse(default) }) } } }
Example 36
Source File: MetricRegistryFactory.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.core.metrics import com.codahale.metrics.{ JmxReporter, MetricRegistry } import com.typesafe.config.Config import org.slf4j.LoggerFactory object MetricRegistryFactory { private val logger = LoggerFactory.getLogger("com.comcast.money.core.metrics.MetricRegistryFactory") def metricRegistry(config: Config): MetricRegistry = { try { val realFactory = if (config.hasPath("metrics-registry.class-name")) Class.forName(config.getString("metrics-registry.class-name")).newInstance.asInstanceOf[MetricRegistryFactory] else new DefaultMetricRegistryFactory() // Ask the custom factory for an MetricRegistry - and pass in our configuration so that an implementation // can add their settings in the application.conf, too. realFactory.metricRegistry(config) } catch { case e: Throwable => logger.error("Unable to create actual factory instance", e) throw e } } } class DefaultMetricRegistryFactory extends MetricRegistryFactory { override def metricRegistry(config: Config): MetricRegistry = { val registry = new MetricRegistry val jmxReporter = JmxReporter.forRegistry(registry).build() jmxReporter.start() registry } } trait MetricRegistryFactory { def metricRegistry(config: Config): MetricRegistry }
Example 37
Source File: MetricRegistryFactorySpec.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.core.metrics import com.codahale.metrics.MetricRegistry import com.typesafe.config.Config import org.mockito.Mockito._ import org.scalatest.Matchers._ import org.scalatest._ import org.scalatest.mockito.MockitoSugar object MockMetricRegistryFactory extends MetricRegistryFactory with MockitoSugar { lazy val mockRegistry = mock[MetricRegistry] def metricRegistry(config: Config): MetricRegistry = mockRegistry } class MockMetricRegistryFactory extends MetricRegistryFactory { def metricRegistry(config: Config): MetricRegistry = MockMetricRegistryFactory.mockRegistry } class MetricRegistryFactorySpec extends WordSpecLike with BeforeAndAfter with MockitoSugar { private val conf = mock[Config] "The MetricRegistry" when { "use the DefaultMetricRegistryFactory" should { "creating MetricRegistries" in { doReturn("com.comcast.money.metrics.DefaultMetricRegistryFactory").when(conf).getString("metrics-registry.class-name") val registry = MetricRegistryFactory.metricRegistry(conf) registry shouldNot be(null) } } } "fall back to the DefaultMetricRegistryFactory" should { "when the config is broken" in { doReturn(true).when(conf).hasPath("metrics-registry.class-name") doReturn("lorem ipsum").when(conf).getString("metrics-registry.class-name") intercept[ClassNotFoundException] { val registry = MetricRegistryFactory.metricRegistry(conf) } } } "use the MockMetricRegistryFactory" should { "when configured so" in { doReturn(true).when(conf).hasPath("metrics-registry.class-name") doReturn("com.comcast.money.core.metrics.MockMetricRegistryFactory").when(conf).getString("metrics-registry.class-name") val registry1 = MetricRegistryFactory.metricRegistry(conf) val registry2 = MetricRegistryFactory.metricRegistry(conf) registry1 should be theSameInstanceAs registry2 } } }
Example 38
Source File: MetricsHandlerSpec.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.core.handlers import com.codahale.metrics.{ Meter, Histogram, MetricRegistry } import com.typesafe.config.Config import org.mockito.Mockito._ import org.mockito.Matchers._ import org.scalatest.mockito.MockitoSugar import org.scalatest.{ OneInstancePerTest, Matchers, WordSpec } class MetricsHandlerSpec extends WordSpec with Matchers with MockitoSugar with TestData with OneInstancePerTest { val conf = mock[Config] doReturn(true).when(conf).hasPath("metrics-registry.class-name") doReturn("com.comcast.money.core.metrics.MockMetricRegistryFactory").when(conf).getString("metrics-registry.class-name") "MetricsSpanHandler" should { "configure the metrics registry" in { val underTest = new MetricsSpanHandler() underTest.configure(conf) underTest.metricRegistry shouldBe a[MetricRegistry] } "save latency metric" in { val underTest = new MetricsSpanHandler() underTest.configure(conf) val latencyMetric = mock[Histogram] val errorMetric = mock[Meter] doReturn(latencyMetric).when(underTest.metricRegistry).histogram(anyString()) doReturn(errorMetric).when(underTest.metricRegistry).meter(anyString()) underTest.handle(testSpanInfo) verify(latencyMetric).update(testSpanInfo.durationMicros) verifyZeroInteractions(errorMetric) } "update the error metric" in { val underTest = new MetricsSpanHandler() underTest.configure(conf) val latencyMetric = mock[Histogram] val errorMetric = mock[Meter] doReturn(latencyMetric).when(underTest.metricRegistry).histogram(anyString()) doReturn(errorMetric).when(underTest.metricRegistry).meter(anyString()) underTest.handle(testSpanInfo.copy(success = false)) verify(latencyMetric).update(testSpanInfo.durationMicros) verify(errorMetric).mark() } } }
Example 39
Source File: LogAnalyticsMetricsSink.scala From spark-monitoring with MIT License | 5 votes |
package org.apache.spark.metrics.sink.loganalytics import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import org.apache.spark.internal.Logging import org.apache.spark.metrics.sink.Sink import org.apache.spark.{SecurityManager, SparkException} private class LogAnalyticsMetricsSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink with Logging { private val config = new LogAnalyticsSinkConfiguration(property) org.apache.spark.metrics.MetricsSystem.checkMinimalPollingPeriod(config.pollUnit, config.pollPeriod) var reporter = LogAnalyticsReporter.forRegistry(registry) .withWorkspaceId(config.workspaceId) .withWorkspaceKey(config.secret) .withLogType(config.logType) .build() override def start(): Unit = { reporter.start(config.pollPeriod, config.pollUnit) logInfo(s"LogAnalyticsMetricsSink started") } override def stop(): Unit = { reporter.stop() logInfo("LogAnalyticsMetricsSink stopped.") } override def report(): Unit = { reporter.report() } }
Example 40
Source File: CustomDirectivesApplication.scala From Akka-Cookbook with MIT License | 5 votes |
package com.packt.chapter9 import java.util.concurrent.TimeUnit import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.HttpApp import akka.http.scaladsl.settings.ServerSettings import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import com.typesafe.config.ConfigFactory object CustomDirectivesServer extends HttpApp with MetricDirectives { private val metricRegistry = new MetricRegistry() ConsoleReporter.forRegistry(metricRegistry).build().start(10, TimeUnit.SECONDS) val route = timer(metricRegistry) { get { complete { Thread.sleep(200); "Hello from GET!" } } ~ post { complete { Thread.sleep(500); "Hello from POST!" } } ~ put { meter(metricRegistry) { complete { "Hello from PUT!" } } } } } object CustomDirectivesApplication extends App { CustomDirectivesServer.startServer("0.0.0.0", 8088, ServerSettings(ConfigFactory.load)) }
Example 41
Source File: MetricDirectives.scala From Akka-Cookbook with MIT License | 5 votes |
package com.packt.chapter9 import akka.http.scaladsl.server.Directive0 import akka.http.scaladsl.server.Directives._ import com.codahale.metrics.MetricRegistry trait MetricDirectives { def meter(metricRegistry: MetricRegistry) : Directive0 = { extractMethod.flatMap[Unit] { httpMethod => extractUri.flatMap { uri ⇒ metricRegistry.meter(s"meter-Method[${httpMethod.value}]-Uri[${uri.path.toString}]").mark pass } } } def timer(metricRegistry: MetricRegistry) : Directive0 = { extractMethod.flatMap[Unit] { httpMethod => extractUri.flatMap { uri ⇒ val timer = metricRegistry.timer(s"timer-Method[${httpMethod.value}]-Uri[${uri.path.toString}]") val timerContext = timer.time() mapRouteResult { x ⇒ timerContext.stop() x } } } } }
Example 42
Source File: MesosClusterSchedulerSource.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[mesos] class MesosClusterSchedulerSource(scheduler: MesosClusterScheduler) extends Source { override def sourceName: String = "mesos_cluster" override def metricRegistry: MetricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("waitingDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getQueuedDriversSize }) metricRegistry.register(MetricRegistry.name("launchedDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getLaunchedDriversSize }) metricRegistry.register(MetricRegistry.name("retryDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getPendingRetryDriversSize }) }
Example 43
Source File: GangliaSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" val GANGLIA_KEY_DMAX = "dmax" val GANGLIA_DEFAULT_DMAX = 0 def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val dmax = propertyToOption(GANGLIA_KEY_DMAX).map(_.toInt).getOrElse(GANGLIA_DEFAULT_DMAX) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .withDMax(dmax) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 44
Source File: MetricsReporter.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.execution.streaming import java.{util => ju} import scala.collection.mutable import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.internal.Logging import org.apache.spark.metrics.source.{Source => CodahaleSource} import org.apache.spark.util.Clock class MetricsReporter( stream: StreamExecution, override val sourceName: String) extends CodahaleSource with Logging { override val metricRegistry: MetricRegistry = new MetricRegistry // Metric names should not have . in them, so that all the metrics of a query are identified // together in Ganglia as a single metric group registerGauge("inputRate-total", () => stream.lastProgress.inputRowsPerSecond) registerGauge("processingRate-total", () => stream.lastProgress.inputRowsPerSecond) registerGauge("latency", () => stream.lastProgress.durationMs.get("triggerExecution").longValue()) private def registerGauge[T](name: String, f: () => T)(implicit num: Numeric[T]): Unit = { synchronized { metricRegistry.register(name, new Gauge[T] { override def getValue: T = f() }) } } }
Example 45
Source File: CsvSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 46
Source File: HDFSSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import org.apache.spark.{HDFSReporter, SecurityManager} import org.apache.spark.metrics.MetricsSystem private[spark] class HDFSSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val HDFS_KEY_PERIOD = "period" val HDFS_KEY_UNIT = "unit" val HDFS_KEY_DIR = "dir" val HDFS_DEFAULT_PERIOD = 10 val HDFS_DEFAULT_UNIT = "SECONDS" val HDFS_DEFAULT_DIR = "hdfs://localhost:9000/custom-metrics/" val pollPeriod = Option(property.getProperty(HDFS_KEY_PERIOD)) match { case Some(s) => s.toInt case None => HDFS_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(HDFS_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(HDFS_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(HDFS_KEY_DIR)) match { case Some(s) => s case None => HDFS_DEFAULT_DIR } val reporter: HDFSReporter = HDFSReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(pollDir) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 47
Source File: MetricsServlet.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.{SecurityManager, SparkConf} import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) def getHandlers(conf: SparkConf): Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr, conf) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 48
Source File: MQTTSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import org.apache.spark.{MQTTReporter, SecurityManager} import org.apache.spark.metrics.MetricsSystem private[spark] class MQTTSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val MQTT_KEY_PERIOD = "pollPeriod" val MQTT_KEY_UNIT = "unit" val MQTT_KEY_HOST = "host" val MQTT_KEY_PORT = "port" val MQTT_DEFAULT_PERIOD = 10 val MQTT_DEFAULT_UNIT = "SECONDS" val MQTT_DEFAULT_HOST = "localhost" val MQTT_DEFAULT_PORT = 1883 val pollPeriod = Option(property.getProperty(MQTT_KEY_PERIOD)) match { case Some(s) => s.toInt case None => MQTT_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(MQTT_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(MQTT_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val masterHost = Option(property.getProperty(MQTT_KEY_HOST)) match { case Some(s) => s case None => MQTT_DEFAULT_HOST } val masterPort = Option(property.getProperty(MQTT_KEY_PORT)) match { case Some(s) => s.toInt case None => MQTT_DEFAULT_PORT } val reporter: MQTTReporter = MQTTReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(masterHost, masterPort) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 49
Source File: Slf4jSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, Slf4jReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 50
Source File: ConsoleSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 51
Source File: GraphiteSink.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{Graphite, GraphiteReporter, GraphiteUDP} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 52
Source File: MasterSource.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.count(_.state == WorkerState.ALIVE) }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.apps.count(_.state == ApplicationState.WAITING) }) }
Example 53
Source File: WorkerSource.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 54
Source File: DAGSchedulerSource.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry, Timer} import org.apache.spark.metrics.source.Source private[scheduler] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) val messageProcessingTimer: Timer = metricRegistry.timer(MetricRegistry.name("messageProcessingTime")) }
Example 55
Source File: BlockManagerSource.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 56
Source File: ExecutorSource.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.executor import java.util.concurrent.ThreadPoolExecutor import scala.collection.JavaConverters._ import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.hadoop.fs.FileSystem import org.apache.spark.metrics.source.Source private[spark] class ExecutorSource(threadPool: ThreadPoolExecutor, executorId: String) extends Source { private def fileStats(scheme: String) : Option[FileSystem.Statistics] = FileSystem.getAllStatistics.asScala.find(s => s.getScheme.equals(scheme)) private def registerFileSystemStat[T]( scheme: String, name: String, f: FileSystem.Statistics => T, defaultValue: T) = { metricRegistry.register(MetricRegistry.name("filesystem", scheme, name), new Gauge[T] { override def getValue: T = fileStats(scheme).map(f).getOrElse(defaultValue) }) } override val metricRegistry = new MetricRegistry() override val sourceName = "executor" // Gauge for executor thread pool's actively executing task counts metricRegistry.register(MetricRegistry.name("threadpool", "activeTasks"), new Gauge[Int] { override def getValue: Int = threadPool.getActiveCount() }) // Gauge for executor thread pool's approximate total number of tasks that have been completed metricRegistry.register(MetricRegistry.name("threadpool", "completeTasks"), new Gauge[Long] { override def getValue: Long = threadPool.getCompletedTaskCount() }) // Gauge for executor thread pool's current number of threads metricRegistry.register(MetricRegistry.name("threadpool", "currentPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getPoolSize() }) // Gauge got executor thread pool's largest number of threads that have ever simultaneously // been in th pool metricRegistry.register(MetricRegistry.name("threadpool", "maxPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getMaximumPoolSize() }) // Gauge for file system stats of this executor for (scheme <- Array("hdfs", "file")) { registerFileSystemStat(scheme, "read_bytes", _.getBytesRead(), 0L) registerFileSystemStat(scheme, "write_bytes", _.getBytesWritten(), 0L) registerFileSystemStat(scheme, "read_ops", _.getReadOps(), 0) registerFileSystemStat(scheme, "largeRead_ops", _.getLargeReadOps(), 0) registerFileSystemStat(scheme, "write_ops", _.getWriteOps(), 0) } }
Example 57
Source File: PerformanceSupport.scala From donut with MIT License | 5 votes |
package report.donut.performance import com.codahale.metrics.MetricRegistry import report.donut.log.Log import scala.concurrent.duration._ trait PerformanceSupport extends Log { def registry: MetricRegistry = PerformanceSupport.registry def timed[T](id: String, msg: String)(thunk: => T): T = { val timer = registry.timer(id).time val result = thunk val duration = timer.stop.nanos log.debug(s"$msg in ${duration.toMillis}ms") result } } object PerformanceSupport { val registry = new MetricRegistry }
Example 58
Source File: CsvSink.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 59
Source File: ConsoleSink.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 60
Source File: GraphiteSink.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{GraphiteUDP, Graphite, GraphiteReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 61
Source File: MasterSource.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.waitingApps.size }) }
Example 62
Source File: WorkerSource.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 63
Source File: DAGSchedulerSource.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge,MetricRegistry} import org.apache.spark.SparkContext import org.apache.spark.metrics.source.Source private[spark] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) }
Example 64
Source File: BlockManagerSource.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge,MetricRegistry} import org.apache.spark.SparkContext import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 65
Source File: ExecutorSource.scala From SparkCore with Apache License 2.0 | 5 votes |
package org.apache.spark.executor import scala.collection.JavaConversions._ import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.hadoop.fs.FileSystem import org.apache.spark.metrics.source.Source private[spark] class ExecutorSource(val executor: Executor, executorId: String) extends Source { private def fileStats(scheme: String) : Option[FileSystem.Statistics] = FileSystem.getAllStatistics().filter(s => s.getScheme.equals(scheme)).headOption private def registerFileSystemStat[T]( scheme: String, name: String, f: FileSystem.Statistics => T, defaultValue: T) = { metricRegistry.register(MetricRegistry.name("filesystem", scheme, name), new Gauge[T] { override def getValue: T = fileStats(scheme).map(f).getOrElse(defaultValue) }) } override val metricRegistry = new MetricRegistry() override val sourceName = "executor" // Gauge for executor thread pool's actively executing task counts metricRegistry.register(MetricRegistry.name("threadpool", "activeTasks"), new Gauge[Int] { override def getValue: Int = executor.threadPool.getActiveCount() }) // Gauge for executor thread pool's approximate total number of tasks that have been completed metricRegistry.register(MetricRegistry.name("threadpool", "completeTasks"), new Gauge[Long] { override def getValue: Long = executor.threadPool.getCompletedTaskCount() }) // Gauge for executor thread pool's current number of threads metricRegistry.register(MetricRegistry.name("threadpool", "currentPool_size"), new Gauge[Int] { override def getValue: Int = executor.threadPool.getPoolSize() }) // Gauge got executor thread pool's largest number of threads that have ever simultaneously // been in th pool metricRegistry.register(MetricRegistry.name("threadpool", "maxPool_size"), new Gauge[Int] { override def getValue: Int = executor.threadPool.getMaximumPoolSize() }) // Gauge for file system stats of this executor for (scheme <- Array("hdfs", "file")) { registerFileSystemStat(scheme, "read_bytes", _.getBytesRead(), 0L) registerFileSystemStat(scheme, "write_bytes", _.getBytesWritten(), 0L) registerFileSystemStat(scheme, "read_ops", _.getReadOps(), 0) registerFileSystemStat(scheme, "largeRead_ops", _.getLargeReadOps(), 0) registerFileSystemStat(scheme, "write_ops", _.getWriteOps(), 0) } }
Example 66
Source File: PrometheusSink.scala From spark-metrics with Apache License 2.0 | 5 votes |
package org.apache.spark.banzaicloud.metrics.sink import java.net.URL import java.util.Properties import com.banzaicloud.spark.metrics.sink.PrometheusSink.SinkConfig import com.codahale.metrics.MetricRegistry import io.prometheus.client.exporter.PushGateway import org.apache.spark.banzaicloud.metrics.sink.PrometheusSink.SinkConfigProxy import org.apache.spark.internal.config import org.apache.spark.metrics.sink.Sink import org.apache.spark.{SecurityManager, SparkConf, SparkEnv} object PrometheusSink { class SinkConfigProxy extends SinkConfig { // SparkEnv may become available only after metrics sink creation thus retrieving // SparkConf from spark env here and not during the creation/initialisation of PrometheusSink. @transient private lazy val sparkConfig = Option(SparkEnv.get).map(_.conf).getOrElse(new SparkConf(true)) // Don't use sparkConf.getOption("spark.metrics.namespace") as the underlying string won't be substituted. def metricsNamespace: Option[String] = sparkConfig.get(config.METRICS_NAMESPACE) def sparkAppId: Option[String] = sparkConfig.getOption("spark.app.id") def sparkAppName: Option[String] = sparkConfig.getOption("spark.app.name") def executorId: Option[String] = sparkConfig.getOption("spark.executor.id") } } class PrometheusSink(property: Properties, registry: MetricRegistry, securityMgr: SecurityManager, sinkConfig: SinkConfig, pushGatewayBuilder: URL => PushGateway) extends com.banzaicloud.spark.metrics.sink.PrometheusSink(property, registry, sinkConfig, pushGatewayBuilder) with Sink { // Constructor required by MetricsSystem::registerSinks() def this(property: Properties, registry: MetricRegistry, securityMgr: SecurityManager) = { this( property, registry, securityMgr, new SinkConfigProxy, new PushGateway(_) ) } }
Example 67
Source File: DeduplicatedCollectorRegistrySuite.scala From spark-metrics with Apache License 2.0 | 5 votes |
package com.banzaicloud.spark.metrics import com.codahale.metrics.MetricRegistry import io.prometheus.client.{Collector, CollectorRegistry} import io.prometheus.client.dropwizard.DropwizardExports import org.junit.{Assert, Test} import scala.collection.JavaConverters._ class DeduplicatedCollectorRegistrySuite { @Test def testDeduplication(): Unit = { // given val baseRegistry = new MetricRegistry val registryA = new MetricRegistry val counterA = registryA.counter("counter") counterA.inc(20) counterA.inc(30) val registryB = new MetricRegistry val counterB = registryB.counter("counter") counterB.inc(40) counterB.inc(50) baseRegistry.register("hive_", registryA) baseRegistry.register("hive.", registryB) val metricsExports = new DropwizardExports(baseRegistry) val deduplicatedCollectorRegistry = new DeduplicatedCollectorRegistry(new CollectorRegistry(true)) // when metricsExports.register(deduplicatedCollectorRegistry) val samples = deduplicatedCollectorRegistry.metricFamilySamples() // then val actual = samples .asScala .filter(mfs => mfs.`type`== Collector.Type.GAUGE && mfs.name == "hive__counter") Assert.assertEquals(1, actual.size) } }
Example 68
Source File: RioOtherParser.scala From databus-maven-plugin with GNU Affero General Public License v3.0 | 5 votes |
package org.dbpedia.databus.parse import java.io._ import java.util.concurrent.TimeUnit import org.eclipse.rdf4j.rio._ import scala.collection.mutable import scala.io.Source import com.codahale.metrics.{ConsoleReporter, Meter, MetricRegistry} object RioOtherParser { val batchSize = 500 * 1000 def parse(in: InputStream, rdfParser: RDFParser): (Boolean, String) = { var success = false var errors = "None" try { rdfParser.parse(in, "") // parsing of successfull success = true } catch { case e: RDFParseException => { //parsing failed somewhere, reiterate success = false errors = e.getLineNumber + "" + e.getMessage } } (success, errors) } }
Example 69
Source File: Compression.scala From databus-maven-plugin with GNU Affero General Public License v3.0 | 5 votes |
package org.dbpedia.databus.lib import better.files._ import java.io.{BufferedInputStream, FileInputStream, InputStream} import com.codahale.metrics.MetricRegistry import org.apache.commons.compress.archivers.{ArchiveEntry, ArchiveException, ArchiveInputStream, ArchiveStreamFactory} import org.apache.commons.compress.compressors.{CompressorException, CompressorInputStream, CompressorStreamFactory} import scala.util.Try object Compression { def detectCompression(datafile: File): Option[String] = { try { Some(datafile.inputStream.map(_.buffered).apply(CompressorStreamFactory.detect)) } catch { case ce: CompressorException => None } } def detectArchive(datafile: File): Option[String] = { try { Some(datafile.inputStream.map(_.buffered).apply(ArchiveStreamFactory.detect)) } catch { case ce: ArchiveException => None } } }
Example 70
Source File: RegistryFactory.scala From bandar-log with Apache License 2.0 | 5 votes |
package com.aol.one.dwh.bandarlog.reporters import com.aol.one.dwh.bandarlog.metrics.Metric import com.aol.one.dwh.infra.util.LogTrait import com.codahale.metrics.{Gauge, MetricRegistry} object RegistryFactory extends LogTrait { def create(): MetricRegistry = { new MetricRegistry() } def createWithMetric[V](metric: Metric[V]): MetricRegistry = { val metricRegistry = create() metricRegistry.register(s"${metric.prefix}.${metric.name}", toGauge(metric)) metricRegistry } private def toGauge[V](metric: Metric[V]): Gauge[V] = { new Gauge[V] { override def getValue: V = { // null values will be filtered and not reported metric.value.getValue.getOrElse(None.orNull.asInstanceOf[V]) } } } }
Example 71
Source File: DatadogMetricReporter.scala From bandar-log with Apache License 2.0 | 5 votes |
package com.aol.one.dwh.bandarlog.reporters import java.net.InetAddress import java.util.concurrent.TimeUnit import com.aol.one.dwh.infra.config.{DatadogConfig, ReportConfig} import com.codahale.metrics.MetricRegistry import org.coursera.metrics.datadog.DatadogReporter import org.coursera.metrics.datadog.transport.UdpTransport import scala.collection.JavaConverters._ class DatadogMetricReporter(config: DatadogConfig, tags: List[String], metricRegistry: MetricRegistry, reportConf: ReportConfig) extends MetricReporter { private lazy val datadogReporter = { val udpTransport = new UdpTransport.Builder().build() DatadogReporter. forRegistry(metricRegistry). withTags(tags.asJava). withTransport(udpTransport). withHost(config.host.getOrElse(InetAddress.getLocalHost.getHostName)). build() } override def start(): Unit = { datadogReporter.start(reportConf.interval, TimeUnit.SECONDS) } override def stop(): Unit = { datadogReporter.stop() } }
Example 72
Source File: MetricReporter.scala From bandar-log with Apache License 2.0 | 5 votes |
package com.aol.one.dwh.bandarlog.reporters import com.aol.one.dwh.infra.config.{ReportConfig, ReporterConfig, Tag} import com.aol.one.dwh.infra.config.RichConfig._ import com.codahale.metrics.MetricRegistry import com.typesafe.config.Config import TagsFormatter.datadogFormat trait MetricReporter { def start(): Unit def stop(): Unit } object MetricReporter { def apply(reporter: ReporterConfig, tags: List[Tag], metricRegistry: MetricRegistry, mainConf: Config, reportConf: ReportConfig): MetricReporter = { reporter.reporterType match { case "datadog" => val datadogTags = TagsFormatter.format(tags, datadogFormat) val datadogConfig = mainConf.getDatadogConfig(reporter.configId) new DatadogMetricReporter(datadogConfig, datadogTags, metricRegistry, reportConf) case _ => throw new IllegalArgumentException(s"Unsupported reporter:[$reporter]") } } }
Example 73
Source File: RemoraDatadogReporter.scala From remora with MIT License | 5 votes |
package reporter import java.util.concurrent.TimeUnit import com.codahale.metrics.{Metric, MetricFilter, MetricRegistry} import config.DataDog import models.RegistryKafkaMetric import org.coursera.metrics.datadog.TaggedName.TaggedNameBuilder import org.coursera.metrics.datadog.transport.UdpTransport import org.coursera.metrics.datadog.{DatadogReporter, MetricNameFormatter} class RemoraDatadogReporter(metricRegistry: MetricRegistry, datadogConfig: DataDog) { private val transport = new UdpTransport.Builder().withStatsdHost(datadogConfig.agentHost).withPort(datadogConfig.agentPort).build private val kafkaConsumerGroupFilter: MetricFilter = new MetricFilter { override def matches(metricName: String, metric: Metric): Boolean = { val trackedConsumerGroups = datadogConfig.trackedConsumerGroups trackedConsumerGroups.isEmpty || trackedConsumerGroups.exists(consumerGroupName => metricName.contains(consumerGroupName)) } } private def metricNameFormatter(removeTagsFromMetricName: Boolean): MetricNameFormatter = new MetricNameFormatter { override def format(nameWithPrefix: String, path: String*): String = { RegistryKafkaMetric.decode(nameWithPrefix.replaceFirst(s"${datadogConfig.name}\\.","")) match { case Some(registryKafkaMetric) => val builder = new TaggedNameBuilder().metricName( if (removeTagsFromMetricName) buildNameWithoutTags(registryKafkaMetric) else nameWithPrefix ).addTag("topic", registryKafkaMetric.topic) .addTag("group", registryKafkaMetric.group) registryKafkaMetric.partition.foreach(p => builder.addTag("partition", p)) builder.build().encode() case None => nameWithPrefix } } } private def buildNameWithoutTags(registryKafkaMetric: RegistryKafkaMetric): String = s"${datadogConfig.name}.${registryKafkaMetric.prefix}.${registryKafkaMetric.suffix}" def startReporter(): Unit = DatadogReporter .forRegistry(metricRegistry) .withPrefix(datadogConfig.name) .withTransport(transport) .filter(kafkaConsumerGroupFilter) .withMetricNameFormatter(metricNameFormatter(datadogConfig.removeTagsFromMetricName)) .build .start(datadogConfig.intervalMinutes, TimeUnit.MINUTES) }
Example 74
Source File: RemoraDatadogReporterSpec.scala From remora with MIT License | 5 votes |
package reporter import com.codahale.metrics.{Metric, MetricFilter, MetricRegistry} import config.DataDog import org.coursera.metrics.datadog.MetricNameFormatter import org.scalamock.scalatest.MockFactory import org.scalatest.{FlatSpec, Matchers, PrivateMethodTester} class RemoraDatadogReporterSpec extends FlatSpec with Matchers with PrivateMethodTester with MockFactory { private val metricRegistry: MetricRegistry = new MetricRegistry private val metric: Metric = mock[Metric] private val config = DataDog(enabled = true, "test", 1, "localhost", 8125, List.empty, removeTagsFromMetricName = false) private val configRemoveTags = DataDog(enabled = true, "test", 1, "localhost", 8125, List.empty, removeTagsFromMetricName = true) "Metrics filter" should "match any metric when no filter is given" in { val filter = buildMetricFilter(List.empty) filter.matches("any_metrics_name", metric) should be(true) } it should "match metric containing consumer group name" in { val kafkaConsumerGroupName = "test-consumer1" val filter = buildMetricFilter(List(kafkaConsumerGroupName)) filter.matches(s"metric-name-$kafkaConsumerGroupName", metric) should be(true) } it should "not match metric containing consumer group name" in { val filter = buildMetricFilter(List("test-consumer1")) filter.matches("some-metrics", metric) should be(false) } "Metric name formatter" should "add tag information if metric is well formatted" in { val formatter = getMetricNameFormatter(config) formatter.format(s"${config.name}.gauge.test.1.test-consumer.lag") should be(s"${config.name}.gauge.test.1.test-consumer.lag[topic:test,group:test-consumer,partition:1]") } it should "not add partition tag information if no partition" in { val formatter = getMetricNameFormatter(config) formatter.format(s"${config.name}.gauge.test-topic.test-consumer.totalLag") should be(s"${config.name}.gauge.test-topic.test-consumer.totalLag[topic:test-topic,group:test-consumer]") } it should "not add tag information otherwise" in { val formatter = getMetricNameFormatter(config) formatter.format(s"${config.name}.gauge.test_1_faulty_test-consumer__lag") should be(s"${config.name}.gauge.test_1_faulty_test-consumer__lag") } "Metric name formatter without tags" should "add tag information if metric is well formatted" in { val formatter = getMetricNameFormatter(configRemoveTags) formatter.format(s"${configRemoveTags.name}.gauge.test.1.test-consumer.lag") should be(s"${configRemoveTags.name}.gauge.lag[topic:test,group:test-consumer,partition:1]") } it should "not add partition tag information if no partition" in { val formatter = getMetricNameFormatter(configRemoveTags) formatter.format(s"${configRemoveTags.name}.gauge.test-topic.test-consumer.totalLag") should be(s"${configRemoveTags.name}.gauge.totalLag[topic:test-topic,group:test-consumer]") } private def buildMetricFilter(kafkaConsumerList: List[String], removeTags: Boolean = false): MetricFilter = { val config = DataDog(enabled = true, "test", 1, "localhost", 8125, kafkaConsumerList, removeTags) val reporter = new RemoraDatadogReporter(metricRegistry, config) reporter invokePrivate PrivateMethod[MetricFilter]('kafkaConsumerGroupFilter)() } private def getMetricNameFormatter(config: DataDog): MetricNameFormatter = { val reporter = new RemoraDatadogReporter(metricRegistry, config) reporter invokePrivate PrivateMethod[MetricNameFormatter]('metricNameFormatter)(config.removeTagsFromMetricName) } }
Example 75
Source File: MesosClusterSchedulerSource.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[mesos] class MesosClusterSchedulerSource(scheduler: MesosClusterScheduler) extends Source { override def sourceName: String = "mesos_cluster" override def metricRegistry: MetricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("waitingDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getQueuedDriversSize }) metricRegistry.register(MetricRegistry.name("launchedDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getLaunchedDriversSize }) metricRegistry.register(MetricRegistry.name("retryDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getPendingRetryDriversSize }) }
Example 76
Source File: GangliaSink.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" val GANGLIA_KEY_DMAX = "dmax" val GANGLIA_DEFAULT_DMAX = 0 def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val dmax = propertyToOption(GANGLIA_KEY_DMAX).map(_.toInt).getOrElse(GANGLIA_DEFAULT_DMAX) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .withDMax(dmax) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 77
Source File: MetricsReporter.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.execution.streaming import java.{util => ju} import scala.collection.mutable import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.internal.Logging import org.apache.spark.metrics.source.{Source => CodahaleSource} import org.apache.spark.util.Clock class MetricsReporter( stream: StreamExecution, override val sourceName: String) extends CodahaleSource with Logging { override val metricRegistry: MetricRegistry = new MetricRegistry // Metric names should not have . in them, so that all the metrics of a query are identified // together in Ganglia as a single metric group registerGauge("inputRate-total", () => stream.lastProgress.inputRowsPerSecond) registerGauge("processingRate-total", () => stream.lastProgress.inputRowsPerSecond) registerGauge("latency", () => stream.lastProgress.durationMs.get("triggerExecution").longValue()) private def registerGauge[T](name: String, f: () => T)(implicit num: Numeric[T]): Unit = { synchronized { metricRegistry.register(name, new Gauge[T] { override def getValue: T = f() }) } } }
Example 78
Source File: CsvSink.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 79
Source File: MetricsServlet.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.{SecurityManager, SparkConf} import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) def getHandlers(conf: SparkConf): Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr, conf) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 80
Source File: Slf4jSink.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, Slf4jReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 81
Source File: ConsoleSink.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 82
Source File: GraphiteSink.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{Graphite, GraphiteReporter, GraphiteUDP} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 83
Source File: MasterSource.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.count(_.state == WorkerState.ALIVE) }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.apps.count(_.state == ApplicationState.WAITING) }) }
Example 84
Source File: WorkerSource.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 85
Source File: DAGSchedulerSource.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry, Timer} import org.apache.spark.metrics.source.Source private[scheduler] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) val messageProcessingTimer: Timer = metricRegistry.timer(MetricRegistry.name("messageProcessingTime")) }
Example 86
Source File: BlockManagerSource.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 87
Source File: ExecutorSource.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.executor import java.util.concurrent.ThreadPoolExecutor import scala.collection.JavaConverters._ import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.hadoop.fs.FileSystem import org.apache.spark.metrics.source.Source private[spark] class ExecutorSource(threadPool: ThreadPoolExecutor, executorId: String) extends Source { private def fileStats(scheme: String) : Option[FileSystem.Statistics] = FileSystem.getAllStatistics.asScala.find(s => s.getScheme.equals(scheme)) private def registerFileSystemStat[T]( scheme: String, name: String, f: FileSystem.Statistics => T, defaultValue: T) = { metricRegistry.register(MetricRegistry.name("filesystem", scheme, name), new Gauge[T] { override def getValue: T = fileStats(scheme).map(f).getOrElse(defaultValue) }) } override val metricRegistry = new MetricRegistry() override val sourceName = "executor" // Gauge for executor thread pool's actively executing task counts metricRegistry.register(MetricRegistry.name("threadpool", "activeTasks"), new Gauge[Int] { override def getValue: Int = threadPool.getActiveCount() }) // Gauge for executor thread pool's approximate total number of tasks that have been completed metricRegistry.register(MetricRegistry.name("threadpool", "completeTasks"), new Gauge[Long] { override def getValue: Long = threadPool.getCompletedTaskCount() }) // Gauge for executor thread pool's current number of threads metricRegistry.register(MetricRegistry.name("threadpool", "currentPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getPoolSize() }) // Gauge got executor thread pool's largest number of threads that have ever simultaneously // been in th pool metricRegistry.register(MetricRegistry.name("threadpool", "maxPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getMaximumPoolSize() }) // Gauge for file system stats of this executor for (scheme <- Array("hdfs", "file")) { registerFileSystemStat(scheme, "read_bytes", _.getBytesRead(), 0L) registerFileSystemStat(scheme, "write_bytes", _.getBytesWritten(), 0L) registerFileSystemStat(scheme, "read_ops", _.getReadOps(), 0) registerFileSystemStat(scheme, "largeRead_ops", _.getLargeReadOps(), 0) registerFileSystemStat(scheme, "write_ops", _.getWriteOps(), 0) } }
Example 88
Source File: GangliaSink.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 89
Source File: CsvSink.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 90
Source File: MetricsServlet.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.SecurityManager import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) def getHandlers: Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 91
Source File: Slf4jSink.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{Slf4jReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 92
Source File: ConsoleSink.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 93
Source File: GraphiteSink.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{GraphiteUDP, Graphite, GraphiteReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 94
Source File: MasterSource.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.filter(_.state == WorkerState.ALIVE).size }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.waitingApps.size }) }
Example 95
Source File: WorkerSource.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 96
Source File: DAGSchedulerSource.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) }
Example 97
Source File: MesosClusterSchedulerSource.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[mesos] class MesosClusterSchedulerSource(scheduler: MesosClusterScheduler) extends Source { override def sourceName: String = "mesos_cluster" override def metricRegistry: MetricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("waitingDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getQueuedDriversSize }) metricRegistry.register(MetricRegistry.name("launchedDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getLaunchedDriversSize }) metricRegistry.register(MetricRegistry.name("retryDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getPendingRetryDriversSize }) }
Example 98
Source File: BlockManagerSource.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 99
Source File: ExecutorSource.scala From iolap with Apache License 2.0 | 5 votes |
package org.apache.spark.executor import java.util.concurrent.ThreadPoolExecutor import scala.collection.JavaConversions._ import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.hadoop.fs.FileSystem import org.apache.spark.metrics.source.Source private[spark] class ExecutorSource(threadPool: ThreadPoolExecutor, executorId: String) extends Source { private def fileStats(scheme: String) : Option[FileSystem.Statistics] = FileSystem.getAllStatistics().find(s => s.getScheme.equals(scheme)) private def registerFileSystemStat[T]( scheme: String, name: String, f: FileSystem.Statistics => T, defaultValue: T) = { metricRegistry.register(MetricRegistry.name("filesystem", scheme, name), new Gauge[T] { override def getValue: T = fileStats(scheme).map(f).getOrElse(defaultValue) }) } override val metricRegistry = new MetricRegistry() override val sourceName = "executor" // Gauge for executor thread pool's actively executing task counts metricRegistry.register(MetricRegistry.name("threadpool", "activeTasks"), new Gauge[Int] { override def getValue: Int = threadPool.getActiveCount() }) // Gauge for executor thread pool's approximate total number of tasks that have been completed metricRegistry.register(MetricRegistry.name("threadpool", "completeTasks"), new Gauge[Long] { override def getValue: Long = threadPool.getCompletedTaskCount() }) // Gauge for executor thread pool's current number of threads metricRegistry.register(MetricRegistry.name("threadpool", "currentPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getPoolSize() }) // Gauge got executor thread pool's largest number of threads that have ever simultaneously // been in th pool metricRegistry.register(MetricRegistry.name("threadpool", "maxPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getMaximumPoolSize() }) // Gauge for file system stats of this executor for (scheme <- Array("hdfs", "file")) { registerFileSystemStat(scheme, "read_bytes", _.getBytesRead(), 0L) registerFileSystemStat(scheme, "write_bytes", _.getBytesWritten(), 0L) registerFileSystemStat(scheme, "read_ops", _.getReadOps(), 0) registerFileSystemStat(scheme, "largeRead_ops", _.getLargeReadOps(), 0) registerFileSystemStat(scheme, "write_ops", _.getWriteOps(), 0) } }
Example 100
Source File: MetricsContainer.scala From seahorse with Apache License 2.0 | 5 votes |
package ai.deepsense.commons.metrics import java.io.File import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, CsvReporter} import nl.grons.metrics.scala.InstrumentedBuilder object MetricsContainer { val reportPeriod = 10 val metricRegistry = new MetricRegistry() CsvReporter.forRegistry(metricRegistry) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build(new File("/var/log/deepsense/metrics")) .start(reportPeriod, TimeUnit.SECONDS) } trait Instrumented extends InstrumentedBuilder { val metricRegistry = MetricsContainer.metricRegistry }
Example 101
Source File: AffinityMetrics.scala From affinity with Apache License 2.0 | 5 votes |
package io.amient.affinity.core.util import java.util.concurrent.ConcurrentHashMap import akka.actor.ActorSystem import akka.http.scaladsl.model.HttpResponse import com.codahale.metrics.{MetricRegistry, Timer} import scala.concurrent.{Future, Promise} import scala.util.{Failure, Success} object AffinityMetrics { private val reporters = scala.collection.mutable.ListBuffer[MetricRegistry => Unit]() def apply(f: MetricRegistry => Unit): Unit = reporters += f private val metricsRegistries = new ConcurrentHashMap[ActorSystem, AffinityMetrics]() def forActorSystem(system: ActorSystem): AffinityMetrics = { metricsRegistries.get(system) match { case null => val registry = new AffinityMetrics reporters.foreach(_(registry)) metricsRegistries.put(system, registry) registry case registry => registry } } } class AffinityMetrics extends MetricRegistry { private implicit val executor = scala.concurrent.ExecutionContext.Implicits.global private val processMetricsMap = new ConcurrentHashMap[String, ProcessMetrics]() def meterAndHistogram(name: String): ProcessMetrics = { processMetricsMap.get(name) match { case null => val m = new ProcessMetrics(name) processMetricsMap.put(name, m) m case some => some } } def process(groupName: String, result: Promise[_]): Unit = process(groupName, result.future) def process(groupName: String, result: Future[Any]): Unit = { val metrics = meterAndHistogram(groupName) val startTime = metrics.markStart() result.onComplete { case Success(response: HttpResponse) => if (response.status.intValue() < 400) metrics.markSuccess(startTime) else metrics.markFailure(startTime) case Success(_) => metrics.markSuccess(startTime) case Failure(_) => metrics.markFailure(startTime) } } class ProcessMetrics(name: String) { val durations = timer(s"$name.timer") val successes = meter(s"$name.success") val failures = meter(s"$name.failure") def markStart(): Timer.Context = durations.time() def markSuccess(context: Timer.Context, n: Long = 1): Unit = { context.stop successes.mark(n) } def markFailure(context: Timer.Context): Unit = { context.stop failures.mark() } } }
Example 102
Source File: Registry.scala From shield with MIT License | 5 votes |
package shield.metrics import java.util.concurrent.TimeUnit import com.codahale.metrics.json.MetricsModule import com.codahale.metrics.jvm.{ThreadStatesGaugeSet, MemoryUsageGaugeSet, GarbageCollectorMetricSet} import com.codahale.metrics.{JvmAttributeGaugeSet, MetricRegistry} import com.fasterxml.jackson.databind.ObjectMapper import spray.http.{ContentTypes, HttpEntity, StatusCodes, HttpResponse} // todo: Separate metrics per domain object Registry { val metricRegistry = new MetricRegistry() metricRegistry.register("jvm.attribute", new JvmAttributeGaugeSet()) metricRegistry.register("jvm.gc", new GarbageCollectorMetricSet()) metricRegistry.register("jvm.memory", new MemoryUsageGaugeSet()) metricRegistry.register("jvm.threads", new ThreadStatesGaugeSet()) private val mapper = new ObjectMapper() mapper.registerModule(new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, false)) private val writer = mapper.writerWithDefaultPrettyPrinter() def metricsResponse : HttpResponse = HttpResponse(StatusCodes.OK, HttpEntity(ContentTypes.`application/json`, writer.writeValueAsBytes(metricRegistry) )) }
Example 103
Source File: JsonFileReporter.scala From kyuubi with Apache License 2.0 | 5 votes |
package yaooqinn.kyuubi.metrics import java.io.{BufferedWriter, Closeable, IOException, OutputStreamWriter} import java.util.{Timer, TimerTask} import java.util.concurrent.TimeUnit import scala.util.Try import scala.util.control.NonFatal import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.apache.hadoop.fs.{FileSystem, Path} import org.apache.hadoop.fs.permission.FsPermission import org.apache.kyuubi.Logging import org.apache.spark.{KyuubiSparkUtil, SparkConf} import org.apache.spark.KyuubiConf._ private[metrics] class JsonFileReporter(conf: SparkConf, registry: MetricRegistry) extends Closeable with Logging { private val jsonMapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.MILLISECONDS, TimeUnit.MILLISECONDS, false)) private val timer = new Timer(true) private val interval = KyuubiSparkUtil.timeStringAsMs(conf.get(METRICS_REPORT_INTERVAL)) private val path = conf.get(METRICS_REPORT_LOCATION) private val hadoopConf = KyuubiSparkUtil.newConfiguration(conf) def start(): Unit = { timer.schedule(new TimerTask { var bw: BufferedWriter = _ override def run(): Unit = try { val json = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(registry) val tmpPath = new Path(path + ".tmp") val tmpPathUri = tmpPath.toUri val fs = if (tmpPathUri.getScheme == null && tmpPathUri.getAuthority == null) { FileSystem.getLocal(hadoopConf) } else { FileSystem.get(tmpPathUri, hadoopConf) } fs.delete(tmpPath, true) bw = new BufferedWriter(new OutputStreamWriter(fs.create(tmpPath, true))) bw.write(json) bw.close() fs.setPermission(tmpPath, FsPermission.createImmutable(Integer.parseInt("644", 8).toShort)) val finalPath = new Path(path) fs.rename(tmpPath, finalPath) fs.setPermission(finalPath, FsPermission.createImmutable(Integer.parseInt("644", 8).toShort)) } catch { case NonFatal(e) => error("Error writing metrics to json file" + path, e) } finally { if (bw != null) { Try(bw.close()) } } }, 0, interval) } override def close(): Unit = { timer.cancel() } }
Example 104
Source File: JsonFileReporterSuite.scala From kyuubi with Apache License 2.0 | 5 votes |
package yaooqinn.kyuubi.metrics import com.codahale.metrics.MetricRegistry import org.apache.spark.{KyuubiConf, KyuubiSparkUtil, SparkConf, SparkFunSuite} class JsonFileReporterSuite extends SparkFunSuite { test("json file report test") { val registry = new MetricRegistry() val conf = new SparkConf() KyuubiSparkUtil.setupCommonConfig(conf) conf.set(KyuubiConf.METRICS_REPORTER.key, "JSON") conf.set(KyuubiConf.METRICS_REPORT_INTERVAL.key, "1ms") val reporter = new JsonFileReporter(conf, registry) reporter.start() Thread.sleep(5000) reporter.close() conf.set(KyuubiConf.METRICS_REPORT_LOCATION.key, "hdfs://user/test/report.json") val reporter2 = new JsonFileReporter(conf, registry) reporter2.start() Thread.sleep(5000) reporter2.close() } }
Example 105
Source File: GangliaSink.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 106
Source File: CsvSink.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 107
Source File: MetricsServlet.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.SecurityManager import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) //最终生成处理/metrics/json请求的ServletContextHandler,而请求的真正处理由getMetricsSnapshot方法 //利用fastJson解析,生成 def getHandlers: Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 108
Source File: Slf4jSink.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{Slf4jReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 109
Source File: ConsoleSink.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 110
Source File: GraphiteSink.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{GraphiteUDP, Graphite, GraphiteReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 111
Source File: MasterSource.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster // 测量集群中Woker数 metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster //测量集群中存活的Woker数 metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.filter(_.state == WorkerState.ALIVE).size }) // Gauge for application numbers in cluster // 测量集群中应用程序数 metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster //测量集群中等待应用程序数 metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.waitingApps.size }) }
Example 112
Source File: WorkerSource.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker 这个worker使用的核数 metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker 用于此worker的内存数 metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker 用于此worker的可用核数 metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker 用于此worker的可用内存数 metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 113
Source File: DAGSchedulerSource.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry, Timer} import org.apache.spark.metrics.source.Source private[scheduler] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) val messageProcessingTimer: Timer = metricRegistry.timer(MetricRegistry.name("messageProcessingTime")) }
Example 114
Source File: MesosClusterSchedulerSource.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[mesos] class MesosClusterSchedulerSource(scheduler: MesosClusterScheduler) extends Source { override def sourceName: String = "mesos_cluster" override def metricRegistry: MetricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("waitingDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getQueuedDriversSize }) metricRegistry.register(MetricRegistry.name("launchedDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getLaunchedDriversSize }) metricRegistry.register(MetricRegistry.name("retryDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getPendingRetryDriversSize }) }
Example 115
Source File: BlockManagerSource.scala From spark1.52 with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 116
Source File: GangliaSink.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" val GANGLIA_KEY_DMAX = "dmax" val GANGLIA_DEFAULT_DMAX = 0 def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val dmax = propertyToOption(GANGLIA_KEY_DMAX).map(_.toInt).getOrElse(GANGLIA_DEFAULT_DMAX) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .withDMax(dmax) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 117
Source File: MetricsReporter.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.sql.execution.streaming import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.internal.Logging import org.apache.spark.metrics.source.{Source => CodahaleSource} import org.apache.spark.sql.streaming.StreamingQueryProgress class MetricsReporter( stream: StreamExecution, override val sourceName: String) extends CodahaleSource with Logging { override val metricRegistry: MetricRegistry = new MetricRegistry // Metric names should not have . in them, so that all the metrics of a query are identified // together in Ganglia as a single metric group registerGauge("inputRate-total", _.inputRowsPerSecond, 0.0) registerGauge("processingRate-total", _.processedRowsPerSecond, 0.0) registerGauge("latency", _.durationMs.get("triggerExecution").longValue(), 0L) private def registerGauge[T]( name: String, f: StreamingQueryProgress => T, default: T): Unit = { synchronized { metricRegistry.register(name, new Gauge[T] { override def getValue: T = Option(stream.lastProgress).map(f).getOrElse(default) }) } } }
Example 118
Source File: StatsdSink.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import org.apache.spark.SecurityManager import org.apache.spark.internal.Logging import org.apache.spark.metrics.MetricsSystem private[spark] object StatsdSink { val STATSD_KEY_HOST = "host" val STATSD_KEY_PORT = "port" val STATSD_KEY_PERIOD = "period" val STATSD_KEY_UNIT = "unit" val STATSD_KEY_PREFIX = "prefix" val STATSD_DEFAULT_HOST = "127.0.0.1" val STATSD_DEFAULT_PORT = "8125" val STATSD_DEFAULT_PERIOD = "10" val STATSD_DEFAULT_UNIT = "SECONDS" val STATSD_DEFAULT_PREFIX = "" } private[spark] class StatsdSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink with Logging { import StatsdSink._ val host = property.getProperty(STATSD_KEY_HOST, STATSD_DEFAULT_HOST) val port = property.getProperty(STATSD_KEY_PORT, STATSD_DEFAULT_PORT).toInt val pollPeriod = property.getProperty(STATSD_KEY_PERIOD, STATSD_DEFAULT_PERIOD).toInt val pollUnit = TimeUnit.valueOf(property.getProperty(STATSD_KEY_UNIT, STATSD_DEFAULT_UNIT).toUpperCase) val prefix = property.getProperty(STATSD_KEY_PREFIX, STATSD_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter = new StatsdReporter(registry, host, port, prefix) override def start(): Unit = { reporter.start(pollPeriod, pollUnit) logInfo(s"StatsdSink started with prefix: '$prefix'") } override def stop(): Unit = { reporter.stop() logInfo("StatsdSink stopped.") } override def report(): Unit = reporter.report() }
Example 119
Source File: CsvSink.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase(Locale.ROOT)) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 120
Source File: MetricsServlet.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.{SecurityManager, SparkConf} import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) def getHandlers(conf: SparkConf): Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr, conf) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 121
Source File: Slf4jSink.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, Slf4jReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase(Locale.ROOT)) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 122
Source File: ConsoleSink.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase(Locale.ROOT)) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 123
Source File: GraphiteSink.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{Graphite, GraphiteReporter, GraphiteUDP} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase(Locale.ROOT)) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase(Locale.ROOT)) match { case Some("udp") => new GraphiteUDP(host, port) case Some("tcp") | None => new Graphite(host, port) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 124
Source File: MasterSource.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.count(_.state == WorkerState.ALIVE) }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.apps.count(_.state == ApplicationState.WAITING) }) }
Example 125
Source File: WorkerSource.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 126
Source File: DAGSchedulerSource.scala From Spark-2.3.1 with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry, Timer} import org.apache.spark.metrics.source.Source private[scheduler] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) val messageProcessingTimer: Timer = metricRegistry.timer(MetricRegistry.name("messageProcessingTime")) }
Example 127
Source File: GangliaSink.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.ganglia.GangliaReporter import info.ganglia.gmetric4j.gmetric.GMetric import info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem class GangliaSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GANGLIA_KEY_PERIOD = "period" val GANGLIA_DEFAULT_PERIOD = 10 val GANGLIA_KEY_UNIT = "unit" val GANGLIA_DEFAULT_UNIT: TimeUnit = TimeUnit.SECONDS val GANGLIA_KEY_MODE = "mode" val GANGLIA_DEFAULT_MODE: UDPAddressingMode = GMetric.UDPAddressingMode.MULTICAST // TTL for multicast messages. If listeners are X hops away in network, must be at least X. val GANGLIA_KEY_TTL = "ttl" val GANGLIA_DEFAULT_TTL = 1 val GANGLIA_KEY_HOST = "host" val GANGLIA_KEY_PORT = "port" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GANGLIA_KEY_HOST).isDefined) { throw new Exception("Ganglia sink requires 'host' property.") } if (!propertyToOption(GANGLIA_KEY_PORT).isDefined) { throw new Exception("Ganglia sink requires 'port' property.") } val host = propertyToOption(GANGLIA_KEY_HOST).get val port = propertyToOption(GANGLIA_KEY_PORT).get.toInt val ttl = propertyToOption(GANGLIA_KEY_TTL).map(_.toInt).getOrElse(GANGLIA_DEFAULT_TTL) val mode: UDPAddressingMode = propertyToOption(GANGLIA_KEY_MODE) .map(u => GMetric.UDPAddressingMode.valueOf(u.toUpperCase)).getOrElse(GANGLIA_DEFAULT_MODE) val pollPeriod = propertyToOption(GANGLIA_KEY_PERIOD).map(_.toInt) .getOrElse(GANGLIA_DEFAULT_PERIOD) val pollUnit: TimeUnit = propertyToOption(GANGLIA_KEY_UNIT) .map(u => TimeUnit.valueOf(u.toUpperCase)) .getOrElse(GANGLIA_DEFAULT_UNIT) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val ganglia = new GMetric(host, port, mode, ttl) val reporter: GangliaReporter = GangliaReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(ganglia) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 128
Source File: CsvSink.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.io.File import java.util.{Locale, Properties} import java.util.concurrent.TimeUnit import com.codahale.metrics.{CsvReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class CsvSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CSV_KEY_PERIOD = "period" val CSV_KEY_UNIT = "unit" val CSV_KEY_DIR = "directory" val CSV_DEFAULT_PERIOD = 10 val CSV_DEFAULT_UNIT = "SECONDS" val CSV_DEFAULT_DIR = "/tmp/" val pollPeriod = Option(property.getProperty(CSV_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CSV_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CSV_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CSV_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val pollDir = Option(property.getProperty(CSV_KEY_DIR)) match { case Some(s) => s case None => CSV_DEFAULT_DIR } val reporter: CsvReporter = CsvReporter.forRegistry(registry) .formatFor(Locale.US) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build(new File(pollDir)) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 129
Source File: MetricsServlet.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import javax.servlet.http.HttpServletRequest import com.codahale.metrics.MetricRegistry import com.codahale.metrics.json.MetricsModule import com.fasterxml.jackson.databind.ObjectMapper import org.eclipse.jetty.servlet.ServletContextHandler import org.apache.spark.{SparkConf, SecurityManager} import org.apache.spark.ui.JettyUtils._ private[spark] class MetricsServlet( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SERVLET_KEY_PATH = "path" val SERVLET_KEY_SAMPLE = "sample" val SERVLET_DEFAULT_SAMPLE = false val servletPath = property.getProperty(SERVLET_KEY_PATH) val servletShowSample = Option(property.getProperty(SERVLET_KEY_SAMPLE)).map(_.toBoolean) .getOrElse(SERVLET_DEFAULT_SAMPLE) val mapper = new ObjectMapper().registerModule( new MetricsModule(TimeUnit.SECONDS, TimeUnit.MILLISECONDS, servletShowSample)) def getHandlers(conf: SparkConf): Array[ServletContextHandler] = { Array[ServletContextHandler]( createServletHandler(servletPath, new ServletParams(request => getMetricsSnapshot(request), "text/json"), securityMgr, conf) ) } def getMetricsSnapshot(request: HttpServletRequest): String = { mapper.writeValueAsString(registry) } override def start() { } override def stop() { } override def report() { } }
Example 130
Source File: Slf4jSink.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{Slf4jReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class Slf4jSink( val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val SLF4J_DEFAULT_PERIOD = 10 val SLF4J_DEFAULT_UNIT = "SECONDS" val SLF4J_KEY_PERIOD = "period" val SLF4J_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(SLF4J_KEY_PERIOD)) match { case Some(s) => s.toInt case None => SLF4J_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(SLF4J_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(SLF4J_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: Slf4jReporter = Slf4jReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 131
Source File: ConsoleSink.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.{ConsoleReporter, MetricRegistry} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class ConsoleSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val CONSOLE_DEFAULT_PERIOD = 10 val CONSOLE_DEFAULT_UNIT = "SECONDS" val CONSOLE_KEY_PERIOD = "period" val CONSOLE_KEY_UNIT = "unit" val pollPeriod = Option(property.getProperty(CONSOLE_KEY_PERIOD)) match { case Some(s) => s.toInt case None => CONSOLE_DEFAULT_PERIOD } val pollUnit: TimeUnit = Option(property.getProperty(CONSOLE_KEY_UNIT)) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(CONSOLE_DEFAULT_UNIT) } MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val reporter: ConsoleReporter = ConsoleReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .build() override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 132
Source File: GraphiteSink.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.metrics.sink import java.net.InetSocketAddress import java.util.Properties import java.util.concurrent.TimeUnit import com.codahale.metrics.MetricRegistry import com.codahale.metrics.graphite.{GraphiteUDP, Graphite, GraphiteReporter} import org.apache.spark.SecurityManager import org.apache.spark.metrics.MetricsSystem private[spark] class GraphiteSink(val property: Properties, val registry: MetricRegistry, securityMgr: SecurityManager) extends Sink { val GRAPHITE_DEFAULT_PERIOD = 10 val GRAPHITE_DEFAULT_UNIT = "SECONDS" val GRAPHITE_DEFAULT_PREFIX = "" val GRAPHITE_KEY_HOST = "host" val GRAPHITE_KEY_PORT = "port" val GRAPHITE_KEY_PERIOD = "period" val GRAPHITE_KEY_UNIT = "unit" val GRAPHITE_KEY_PREFIX = "prefix" val GRAPHITE_KEY_PROTOCOL = "protocol" def propertyToOption(prop: String): Option[String] = Option(property.getProperty(prop)) if (!propertyToOption(GRAPHITE_KEY_HOST).isDefined) { throw new Exception("Graphite sink requires 'host' property.") } if (!propertyToOption(GRAPHITE_KEY_PORT).isDefined) { throw new Exception("Graphite sink requires 'port' property.") } val host = propertyToOption(GRAPHITE_KEY_HOST).get val port = propertyToOption(GRAPHITE_KEY_PORT).get.toInt val pollPeriod = propertyToOption(GRAPHITE_KEY_PERIOD) match { case Some(s) => s.toInt case None => GRAPHITE_DEFAULT_PERIOD } val pollUnit: TimeUnit = propertyToOption(GRAPHITE_KEY_UNIT) match { case Some(s) => TimeUnit.valueOf(s.toUpperCase()) case None => TimeUnit.valueOf(GRAPHITE_DEFAULT_UNIT) } val prefix = propertyToOption(GRAPHITE_KEY_PREFIX).getOrElse(GRAPHITE_DEFAULT_PREFIX) MetricsSystem.checkMinimalPollingPeriod(pollUnit, pollPeriod) val graphite = propertyToOption(GRAPHITE_KEY_PROTOCOL).map(_.toLowerCase) match { case Some("udp") => new GraphiteUDP(new InetSocketAddress(host, port)) case Some("tcp") | None => new Graphite(new InetSocketAddress(host, port)) case Some(p) => throw new Exception(s"Invalid Graphite protocol: $p") } val reporter: GraphiteReporter = GraphiteReporter.forRegistry(registry) .convertDurationsTo(TimeUnit.MILLISECONDS) .convertRatesTo(TimeUnit.SECONDS) .prefixedWith(prefix) .build(graphite) override def start() { reporter.start(pollPeriod, pollUnit) } override def stop() { reporter.stop() } override def report() { reporter.report() } }
Example 133
Source File: MasterSource.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.master import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class MasterSource(val master: Master) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "master" // Gauge for worker numbers in cluster metricRegistry.register(MetricRegistry.name("workers"), new Gauge[Int] { override def getValue: Int = master.workers.size }) // Gauge for alive worker numbers in cluster metricRegistry.register(MetricRegistry.name("aliveWorkers"), new Gauge[Int]{ override def getValue: Int = master.workers.filter(_.state == WorkerState.ALIVE).size }) // Gauge for application numbers in cluster metricRegistry.register(MetricRegistry.name("apps"), new Gauge[Int] { override def getValue: Int = master.apps.size }) // Gauge for waiting application numbers in cluster metricRegistry.register(MetricRegistry.name("waitingApps"), new Gauge[Int] { override def getValue: Int = master.waitingApps.size }) }
Example 134
Source File: WorkerSource.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.deploy.worker import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[worker] class WorkerSource(val worker: Worker) extends Source { override val sourceName = "worker" override val metricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("executors"), new Gauge[Int] { override def getValue: Int = worker.executors.size }) // Gauge for cores used of this worker metricRegistry.register(MetricRegistry.name("coresUsed"), new Gauge[Int] { override def getValue: Int = worker.coresUsed }) // Gauge for memory used of this worker metricRegistry.register(MetricRegistry.name("memUsed_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryUsed }) // Gauge for cores free of this worker metricRegistry.register(MetricRegistry.name("coresFree"), new Gauge[Int] { override def getValue: Int = worker.coresFree }) // Gauge for memory free of this worker metricRegistry.register(MetricRegistry.name("memFree_MB"), new Gauge[Int] { override def getValue: Int = worker.memoryFree }) }
Example 135
Source File: DAGSchedulerSource.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler import com.codahale.metrics.{Gauge, MetricRegistry, Timer} import org.apache.spark.metrics.source.Source private[scheduler] class DAGSchedulerSource(val dagScheduler: DAGScheduler) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "DAGScheduler" metricRegistry.register(MetricRegistry.name("stage", "failedStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.failedStages.size }) metricRegistry.register(MetricRegistry.name("stage", "runningStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.runningStages.size }) metricRegistry.register(MetricRegistry.name("stage", "waitingStages"), new Gauge[Int] { override def getValue: Int = dagScheduler.waitingStages.size }) metricRegistry.register(MetricRegistry.name("job", "allJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.numTotalJobs }) metricRegistry.register(MetricRegistry.name("job", "activeJobs"), new Gauge[Int] { override def getValue: Int = dagScheduler.activeJobs.size }) val messageProcessingTimer: Timer = metricRegistry.timer(MetricRegistry.name("messageProcessingTime")) }
Example 136
Source File: MesosClusterSchedulerSource.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[mesos] class MesosClusterSchedulerSource(scheduler: MesosClusterScheduler) extends Source { override def sourceName: String = "mesos_cluster" override def metricRegistry: MetricRegistry = new MetricRegistry() metricRegistry.register(MetricRegistry.name("waitingDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getQueuedDriversSize }) metricRegistry.register(MetricRegistry.name("launchedDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getLaunchedDriversSize }) metricRegistry.register(MetricRegistry.name("retryDrivers"), new Gauge[Int] { override def getValue: Int = scheduler.getPendingRetryDriversSize }) }
Example 137
Source File: BlockManagerSource.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.storage import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.spark.metrics.source.Source private[spark] class BlockManagerSource(val blockManager: BlockManager) extends Source { override val metricRegistry = new MetricRegistry() override val sourceName = "BlockManager" metricRegistry.register(MetricRegistry.name("memory", "maxMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val maxMem = storageStatusList.map(_.maxMem).sum maxMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "remainingMem_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val remainingMem = storageStatusList.map(_.memRemaining).sum remainingMem / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("memory", "memUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val memUsed = storageStatusList.map(_.memUsed).sum memUsed / 1024 / 1024 } }) metricRegistry.register(MetricRegistry.name("disk", "diskSpaceUsed_MB"), new Gauge[Long] { override def getValue: Long = { val storageStatusList = blockManager.master.getStorageStatus val diskSpaceUsed = storageStatusList.map(_.diskUsed).sum diskSpaceUsed / 1024 / 1024 } }) }
Example 138
Source File: ExecutorSource.scala From BigDatalog with Apache License 2.0 | 5 votes |
package org.apache.spark.executor import java.util.concurrent.ThreadPoolExecutor import scala.collection.JavaConverters._ import com.codahale.metrics.{Gauge, MetricRegistry} import org.apache.hadoop.fs.FileSystem import org.apache.spark.metrics.source.Source private[spark] class ExecutorSource(threadPool: ThreadPoolExecutor, executorId: String) extends Source { private def fileStats(scheme: String) : Option[FileSystem.Statistics] = FileSystem.getAllStatistics.asScala.find(s => s.getScheme.equals(scheme)) private def registerFileSystemStat[T]( scheme: String, name: String, f: FileSystem.Statistics => T, defaultValue: T) = { metricRegistry.register(MetricRegistry.name("filesystem", scheme, name), new Gauge[T] { override def getValue: T = fileStats(scheme).map(f).getOrElse(defaultValue) }) } override val metricRegistry = new MetricRegistry() override val sourceName = "executor" // Gauge for executor thread pool's actively executing task counts metricRegistry.register(MetricRegistry.name("threadpool", "activeTasks"), new Gauge[Int] { override def getValue: Int = threadPool.getActiveCount() }) // Gauge for executor thread pool's approximate total number of tasks that have been completed metricRegistry.register(MetricRegistry.name("threadpool", "completeTasks"), new Gauge[Long] { override def getValue: Long = threadPool.getCompletedTaskCount() }) // Gauge for executor thread pool's current number of threads metricRegistry.register(MetricRegistry.name("threadpool", "currentPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getPoolSize() }) // Gauge got executor thread pool's largest number of threads that have ever simultaneously // been in th pool metricRegistry.register(MetricRegistry.name("threadpool", "maxPool_size"), new Gauge[Int] { override def getValue: Int = threadPool.getMaximumPoolSize() }) // Gauge for file system stats of this executor for (scheme <- Array("hdfs", "file")) { registerFileSystemStat(scheme, "read_bytes", _.getBytesRead(), 0L) registerFileSystemStat(scheme, "write_bytes", _.getBytesWritten(), 0L) registerFileSystemStat(scheme, "read_ops", _.getReadOps(), 0) registerFileSystemStat(scheme, "largeRead_ops", _.getLargeReadOps(), 0) registerFileSystemStat(scheme, "write_ops", _.getWriteOps(), 0) } }
Example 139
Source File: DemandSupplyMetrics.scala From squbs with Apache License 2.0 | 5 votes |
package org.squbs.streams import akka.actor.ActorSystem import akka.event.Logging import akka.stream._ import akka.stream.scaladsl.Flow import akka.stream.stage._ import com.codahale.metrics.MetricRegistry import org.squbs.metrics.MetricsExtension object DemandSupplyMetrics { class DemandSupplyMetricsStage[T](name: String)(implicit system: ActorSystem) extends GraphStage[FlowShape[T, T]] { val domain = MetricsExtension(system).Domain val metrics = MetricsExtension(system).metrics val in = Inlet[T](Logging.simpleName(this) + ".in") val out = Outlet[T](Logging.simpleName(this) + ".out") override val shape = FlowShape.of(in, out) // naming convention "domain:key-property-list" val upstreamCounter = MetricRegistry.name(domain, s"$name-upstream-counter") val downstreamCounter = MetricRegistry.name(domain, s"$name-downstream-counter") override def createLogic(inheritedAttributes: Attributes): GraphStageLogic = new GraphStageLogic(shape) { setHandler(in, new InHandler { override def onPush(): Unit = { val elem = grab(in) metrics.meter(upstreamCounter).mark push(out, elem) } }) setHandler(out, new OutHandler { override def onPull(): Unit = { metrics.meter(downstreamCounter).mark pull(in) } }) } }
Example 140
Source File: MetricsExtension.scala From service-container with Apache License 2.0 | 5 votes |
package com.github.vonnagy.service.container.metrics import java.lang.management.ManagementFactory import akka.actor._ import com.codahale.metrics.MetricRegistry import com.codahale.metrics.jvm.{BufferPoolMetricSet, GarbageCollectorMetricSet, MemoryUsageGaugeSet, ThreadStatesGaugeSet} class MetricsExtension(extendedSystem: ExtendedActorSystem) extends Extension { // Allow access to the extended system val system = extendedSystem // The application wide metrics registry. val metricRegistry = new MetricRegistry() // Register the Jvm metrics val srv = ManagementFactory.getPlatformMBeanServer metricRegistry.register("jvm.buffer-pool", new BufferPoolMetricSet(srv)) metricRegistry.register("jvm.gc", new GarbageCollectorMetricSet) metricRegistry.register("jvm.memory", new MemoryUsageGaugeSet) metricRegistry.register("jvm.thread", new ThreadStatesGaugeSet) } object Metrics extends ExtensionId[MetricsExtension] with ExtensionIdProvider { //The lookup method is required by ExtensionIdProvider, // so we return ourselves here, this allows us // to configure our extension to be loaded when // the ActorSystem starts up override def lookup = Metrics //This method will be called by Akka // to instantiate our Extension override def createExtension(system: ExtendedActorSystem) = new MetricsExtension(system) def apply()(implicit system: ActorSystem): MetricsExtension = system.registerExtension(this) }
Example 141
Source File: MetricsWriterSpec.scala From service-container with Apache License 2.0 | 5 votes |
package com.github.vonnagy.service.container.metrics import com.codahale.metrics.MetricRegistry import com.github.vonnagy.service.container.http.DefaultMarshallers import org.specs2.mutable.Specification class MetricsWriterSpec extends Specification with DefaultMarshallers { val reg = new MetricRegistry() val writer = new MetricsWriter(reg) step { reg.counter("test.counter").inc(10) reg.meter("test.meter").mark(10) reg.timer("test.timer") reg.histogram("test.histogram").update(10) reg.register("test.gauge", new com.codahale.metrics.Gauge[Int] { def getValue: Int = 10 }) reg.counter("jvm.test").inc(20) } "The metrics writer" should { "create json for custom metrics" in { val json = writer.getMetrics(false) val value = json \ "system" \ "metrics" \ "test.counter" value.extract[Int] must be equalTo 10 } "create json for custom and jvm metrics" in { val json = writer.getMetrics(true) val value = json \ "system" \ "metrics" \ "test.counter" value.extract[Int] must be equalTo 10 val value2 = json \ "system" \ "jvm" \ "unkown" \ "jvm.test" value2.extract[Int] must be equalTo 20 } } }
Example 142
Source File: OffsetGraphiteReporter.scala From kafka-offset-monitor-graphite with Apache License 2.0 | 5 votes |
package pl.allegro.tech.kafka.offset.monitor.graphite import java.net.InetSocketAddress import java.util.concurrent.TimeUnit import com.codahale.metrics.{MetricRegistry, MetricFilter} import com.codahale.metrics.graphite.{GraphiteReporter, Graphite} import com.google.common.cache._ import com.quantifind.kafka.OffsetGetter.OffsetInfo import com.codahale.metrics.Gauge class OffsetGraphiteReporter (pluginsArgs: String) extends com.quantifind.kafka.offsetapp.OffsetInfoReporter { GraphiteReporterArguments.parseArguments(pluginsArgs) val metrics : MetricRegistry = new MetricRegistry() val graphite : Graphite = new Graphite(new InetSocketAddress(GraphiteReporterArguments.graphiteHost, GraphiteReporterArguments.graphitePort)) val reporter : GraphiteReporter = GraphiteReporter.forRegistry(metrics) .prefixedWith(GraphiteReporterArguments.graphitePrefix) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .filter(MetricFilter.ALL) .build(graphite) reporter.start(GraphiteReporterArguments.graphiteReportPeriod, TimeUnit.SECONDS) val removalListener : RemovalListener[String, GaugesValues] = new RemovalListener[String, GaugesValues] { override def onRemoval(removalNotification: RemovalNotification[String, GaugesValues]) = { metrics.remove(removalNotification.getKey() + ".offset") metrics.remove(removalNotification.getKey() + ".logSize") metrics.remove(removalNotification.getKey() + ".lag") } } val gauges : LoadingCache[String, GaugesValues] = CacheBuilder.newBuilder() .expireAfterAccess(GraphiteReporterArguments.metricsCacheExpireSeconds, TimeUnit.SECONDS) .removalListener(removalListener) .build( new CacheLoader[String, GaugesValues]() { def load(key: String): GaugesValues = { val values: GaugesValues = new GaugesValues() val offsetGauge: Gauge[Long] = new Gauge[Long] { override def getValue: Long = { values.offset } } val lagGauge: Gauge[Long] = new Gauge[Long] { override def getValue: Long = { values.lag } } val logSizeGauge: Gauge[Long] = new Gauge[Long] { override def getValue: Long = { values.logSize } } metrics.register(key + ".offset", offsetGauge) metrics.register(key + ".logSize", logSizeGauge) metrics.register(key + ".lag", lagGauge) values } } ) override def report(info: scala.IndexedSeq[OffsetInfo]) = { info.foreach(i => { val values: GaugesValues = gauges.get(getMetricName(i)) values.logSize = i.logSize values.offset = i.offset values.lag = i.lag }) } def getMetricName(offsetInfo: OffsetInfo): String = { offsetInfo.topic.replace(".", "_") + "." + offsetInfo.group.replace(".", "_") + "." + offsetInfo.partition } }
Example 143
Source File: Init.scala From cave with MIT License | 5 votes |
package init import java.util.concurrent.TimeUnit import com.cave.metrics.data.influxdb.{InfluxClientFactory, InfluxConfiguration} import com.cave.metrics.data.metrics.InternalReporter import com.cave.metrics.data.{AlertManager, AwsConfig, Metric, PasswordHelper} import com.codahale.metrics.MetricRegistry import com.codahale.metrics.jvm.{GarbageCollectorMetricSet, MemoryUsageGaugeSet, ThreadStatesGaugeSet} import com.typesafe.config.ConfigFactory import org.apache.commons.logging.LogFactory import play.api.Play object Init { val metricRegistry = new MetricRegistry private val log = LogFactory.getLog("Init") private val InternalTags = Map(Metric.Organization -> Metric.Internal) private[this] val configuration = Play.current.configuration val baseUrl = configuration.getString("baseUrl").getOrElse("https://api.cavellc.io") val maxTokens = configuration.getInt("maxTokens").getOrElse(3) val serviceConfFile = configuration.getString("serviceConf").getOrElse("api-service.conf") val appConfig = ConfigFactory.load(serviceConfFile).getConfig("api-service") // prepare AWS config and Kinesis data sink val awsConfig = new AwsConfig(appConfig) // a wrapper for required AWS val awsWrapper = new AwsWrapper(awsConfig) // a connection to the InfluxDB backend val influxConfig = appConfig.getConfig("influx") val influxClientFactory = new InfluxClientFactory(InfluxConfiguration(influxConfig)) val alertManager = new AlertManager(awsWrapper.dataManager, influxClientFactory) val mailService = new MailService val passwordHelper = new PasswordHelper def init() { awsWrapper.init() log.warn("Init.init()") val reporter = InternalReporter(registry = metricRegistry) { metrics => metrics foreach(metric => awsWrapper.dataSink.sendMetric(Metric(metric.name, metric.timestamp, metric.value, InternalTags ++ metric.tags))) } reporter.start(1, TimeUnit.MINUTES) metricRegistry.register(MetricRegistry.name("jvm", "gc"), new GarbageCollectorMetricSet()) metricRegistry.register(MetricRegistry.name("jvm", "memory"), new MemoryUsageGaugeSet()) metricRegistry.register(MetricRegistry.name("jvm", "thread-states"), new ThreadStatesGaugeSet()) } def shutdown() { awsWrapper.shutdown() influxClientFactory.close() log.warn("Init.shutdown()") } }
Example 144
Source File: MicrometerJmxModule.scala From scala-server-toolkit with MIT License | 5 votes |
package com.avast.sst.micrometer.jmx import java.time.Duration import cats.effect.{Resource, Sync} import com.codahale.metrics.MetricRegistry import com.codahale.metrics.jmx.JmxReporter import io.micrometer.core.instrument.Clock import io.micrometer.core.instrument.config.NamingConvention import io.micrometer.core.instrument.util.HierarchicalNameMapper import io.micrometer.jmx.{JmxConfig, JmxMeterRegistry} object MicrometerJmxModule { def make[F[_]: Sync]( config: MicrometerJmxConfig, clock: Clock = Clock.SYSTEM, nameMapper: HierarchicalNameMapper = HierarchicalNameMapper.DEFAULT ): Resource[F, JmxMeterRegistry] = { Resource .make { Sync[F].delay { if (config.enableTypeScopeNameHierarchy) { val dropwizardRegistry = new MetricRegistry val registry = new JmxMeterRegistry( new CustomJmxConfig(config), clock, nameMapper, dropwizardRegistry, makeJmxReporter(dropwizardRegistry, config.domain) ) registry.config.namingConvention(NamingConvention.dot) registry } else { new JmxMeterRegistry(new CustomJmxConfig(config), clock, nameMapper) } } }(registry => Sync[F].delay(registry.close())) } private def makeJmxReporter(metricRegistry: MetricRegistry, domain: String) = { JmxReporter .forRegistry(metricRegistry) .inDomain(domain) .createsObjectNamesWith(new TypeScopeNameObjectNameFactory()) .build } private class CustomJmxConfig(c: MicrometerJmxConfig) extends JmxConfig { override val domain: String = c.domain override val step: Duration = Duration.ofMillis(c.step.toMillis) // the method is @Nullable and we don't need to implement it here @SuppressWarnings(Array("scalafix:DisableSyntax.null")) override def get(key: String): String = null } }