Skip to content

Commit 5154c88

Browse files
ningyougangJesseStutler
authored andcommitted
Add containerPool container histogram metric (apache#5222)
* Add containerPool container histogram metric * Add pod creation consume time metric * Add docker container creation consume time metric * Use transaction to calculate * Add namespace and action tags for container metric * Avoid send metric repeatedly * Fix scala 2.13 compilation error * Update according to review comment
1 parent 0bd279b commit 5154c88

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,10 @@ object LoggingMarkers {
412412
LogMarkerToken(invoker, "sharedPackage", counter, None, Map("path" -> path))(MeasurementUnit.none)
413413
def INVOKER_CONTAINERPOOL_MEMORY(state: String) =
414414
LogMarkerToken(invoker, "containerPoolMemory", counter, Some(state), Map("state" -> state))(MeasurementUnit.none)
415+
def INVOKER_CONTAINERPOOL_CONTAINER(state: String, tags: Option[Map[String, String]] = None) = {
416+
val map = Map("state" -> state) ++: tags.getOrElse(Map.empty)
417+
LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), map)(MeasurementUnit.none)
418+
}
415419

416420
// System overload and random invoker assignment
417421
val MANAGED_SYSTEM_OVERLOAD =
@@ -493,12 +497,10 @@ object LoggingMarkers {
493497
val INVOKER_ACTIVATION = LogMarkerToken(invoker, activation, start)(MeasurementUnit.none)
494498
def INVOKER_DOCKER_CMD(cmd: String) =
495499
LogMarkerToken(invoker, "docker", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.time.milliseconds)
496-
def INVOKER_DOCKER_CMD_TIMEOUT(cmd: String) =
497-
LogMarkerToken(invoker, "docker", timeout, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.none)
498500
def INVOKER_RUNC_CMD(cmd: String) =
499501
LogMarkerToken(invoker, "runc", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.time.milliseconds)
500502
def INVOKER_KUBEAPI_CMD(cmd: String) =
501-
LogMarkerToken(invoker, "kubeapi", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.none)
503+
LogMarkerToken(invoker, "kubeapi", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.time.milliseconds)
502504
def INVOKER_CONTAINER_START(containerState: String, invocationNamespace: String, namespace: String, action: String) =
503505
LogMarkerToken(
504506
invoker,

core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import scala.util.Try
3434
import akka.event.Logging.{ErrorLevel, InfoLevel}
3535
import pureconfig._
3636
import pureconfig.generic.auto._
37-
import org.apache.openwhisk.common.{Logging, LoggingMarkers, MetricEmitter, TransactionId}
37+
import org.apache.openwhisk.common.{Logging, LoggingMarkers, TransactionId}
3838
import org.apache.openwhisk.core.ConfigKeys
3939
import org.apache.openwhisk.core.containerpool.ContainerId
4040
import org.apache.openwhisk.core.containerpool.ContainerAddress
@@ -207,7 +207,6 @@ class DockerClient(dockerHost: Option[String] = None,
207207
case Success(_) => transid.finished(this, start)
208208
case Failure(pte: ProcessTimeoutException) =>
209209
transid.failed(this, start, pte.getMessage, ErrorLevel)
210-
MetricEmitter.emitCounterMetric(LoggingMarkers.INVOKER_DOCKER_CMD_TIMEOUT(args.head))
211210
case Failure(t) => transid.failed(this, start, t.getMessage, ErrorLevel)
212211
}
213212
}

core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,23 @@ class FunctionPullingContainerPool(
110110
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("busy"), memoryConsumptionOf(busyPool))
111111
MetricEmitter
112112
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("prewarmed"), memoryConsumptionOf(prewarmedPool))
113+
MetricEmitter
114+
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("warmed"), memoryConsumptionOf(warmedPool))
113115
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("max"), poolConfig.userMemory.toMB)
116+
val prewarmedSize = prewarmedPool.size
117+
val busySize = busyPool.size
118+
val warmedSize = warmedPool.size
119+
val warmedPoolMap = warmedPool groupBy {
120+
case (_, warmedData) => (warmedData.invocationNamespace, warmedData.action.toString)
121+
} mapValues (_.size)
122+
for ((data, size) <- warmedPoolMap) {
123+
val tags: Option[Map[String, String]] = Some(Map("namespace" -> data._1, "action" -> data._2))
124+
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed", tags), size)
125+
}
126+
val allSize = prewarmedSize + busySize + warmedSize
127+
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("prewarmed"), prewarmedSize)
128+
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("busy"), busySize)
129+
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("all"), allSize)
114130
})
115131

116132
// Key is ColdStartKey, value is the number of cold Start in minute

0 commit comments

Comments
 (0)