You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by ni...@apache.org on 2022/05/26 08:00:43 UTC
[openwhisk] branch add-container-count-metric created (now 09d1e9230)
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a change to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
at 09d1e9230 Update according to review comment
This branch includes the following new commits:
new 0c193ca65 Add containerPool container histogram metric
new db90668bd Add pod creation consume time metric
new df68fc2a5 Add docker container creation consume time metric
new 09451419f Use transaction to calculate
new 998414f3c Add namespace and action tags for container metric
new 374c6baa1 Avoid send metric repeatedly
new 8ba090259 Fix scala 2.13 compilation error
new 09d1e9230 Update according to review comment
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[openwhisk] 06/08: Avoid send metric repeatedly
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit 374c6baa173883073f023e597ff46d20db10c342
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Tue May 10 16:40:41 2022 +0800
Avoid send metric repeatedly
---
.../main/scala/org/apache/openwhisk/common/Logging.scala | 4 +---
.../core/containerpool/docker/DockerClient.scala | 13 +++----------
.../core/containerpool/kubernetes/KubernetesClient.scala | 16 +++-------------
3 files changed, 7 insertions(+), 26 deletions(-)
diff --git a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
index 48230ee6a..686a4b672 100644
--- a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
+++ b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
@@ -502,12 +502,10 @@ object LoggingMarkers {
val INVOKER_ACTIVATION = LogMarkerToken(invoker, activation, start)(MeasurementUnit.none)
def INVOKER_DOCKER_CMD(cmd: String) =
LogMarkerToken(invoker, "docker", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.time.milliseconds)
- def INVOKER_DOCKER_CMD_TIMEOUT(cmd: String) =
- LogMarkerToken(invoker, "docker", timeout, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.none)
def INVOKER_RUNC_CMD(cmd: String) =
LogMarkerToken(invoker, "runc", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.time.milliseconds)
def INVOKER_KUBEAPI_CMD(cmd: String) =
- LogMarkerToken(invoker, "kubeapi", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.none)
+ LogMarkerToken(invoker, "kubeapi", start, Some(cmd), Map("cmd" -> cmd))(MeasurementUnit.time.milliseconds)
def INVOKER_CONTAINER_START(containerState: String, invocationNamespace: String, namespace: String, action: String) =
LogMarkerToken(
invoker,
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
index d4196c0a8..4efdc2d6d 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
@@ -21,6 +21,7 @@ import java.io.FileNotFoundException
import java.nio.file.Files
import java.nio.file.Paths
import java.util.concurrent.Semaphore
+
import akka.actor.ActorSystem
import scala.collection.concurrent.TrieMap
@@ -31,15 +32,13 @@ import scala.util.Failure
import scala.util.Success
import scala.util.Try
import akka.event.Logging.{ErrorLevel, InfoLevel}
-import kamon.metric.MeasurementUnit
import pureconfig._
import pureconfig.generic.auto._
-import org.apache.openwhisk.common.{LogMarkerToken, Logging, LoggingMarkers, MetricEmitter, TransactionId}
+import org.apache.openwhisk.common.{Logging, LoggingMarkers, TransactionId}
import org.apache.openwhisk.core.ConfigKeys
import org.apache.openwhisk.core.containerpool.ContainerId
import org.apache.openwhisk.core.containerpool.ContainerAddress
-import java.time.Instant
import scala.concurrent.duration.Duration
object DockerContainerId {
@@ -205,15 +204,9 @@ class DockerClient(dockerHost: Option[String] = None,
s"running ${cmd.mkString(" ")} (timeout: $timeout)",
logLevel = InfoLevel)
executeProcess(cmd, timeout).andThen {
- case Success(_) =>
- MetricEmitter.emitHistogramMetric(
- LogMarkerToken("docker", "runCmd", "duration", Some(args.head), Map("cmd" -> args.head))(
- MeasurementUnit.time.milliseconds),
- Instant.now.toEpochMilli - transid.meta.start.toEpochMilli)
- transid.finished(this, start)
+ case Success(_) => transid.finished(this, start)
case Failure(pte: ProcessTimeoutException) =>
transid.failed(this, start, pte.getMessage, ErrorLevel)
- MetricEmitter.emitCounterMetric(LoggingMarkers.INVOKER_DOCKER_CMD_TIMEOUT(args.head))
case Failure(t) => transid.failed(this, start, t.getMessage, ErrorLevel)
}
}
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
index 5c4e6765f..9dd588eda 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
@@ -22,6 +22,7 @@ import java.net.SocketTimeoutException
import java.time.format.DateTimeFormatterBuilder
import java.time.temporal.ChronoField
import java.time.{Instant, ZoneId}
+
import akka.actor.ActorSystem
import akka.event.Logging.ErrorLevel
import akka.event.Logging.InfoLevel
@@ -37,18 +38,11 @@ import collection.JavaConverters._
import io.fabric8.kubernetes.api.model._
import io.fabric8.kubernetes.client.utils.Serialization
import io.fabric8.kubernetes.client.{ConfigBuilder, DefaultKubernetesClient}
-import kamon.metric.MeasurementUnit
import okhttp3.{Call, Callback, Request, Response}
import okio.BufferedSource
import org.apache.commons.lang3.exception.ExceptionUtils
-import org.apache.openwhisk.common.{
- ConfigMapValue,
- LogMarkerToken,
- Logging,
- LoggingMarkers,
- MetricEmitter,
- TransactionId
-}
+import org.apache.openwhisk.common.LoggingMarkers
+import org.apache.openwhisk.common.{ConfigMapValue, Logging, TransactionId}
import org.apache.openwhisk.core.ConfigKeys
import org.apache.openwhisk.core.containerpool.docker.ProcessRunner
import org.apache.openwhisk.core.containerpool.{ContainerAddress, ContainerId}
@@ -182,10 +176,6 @@ class KubernetesClient(
waitForPod(namespace, createdPod, start.start, config.timeouts.run)
.map { readyPod =>
transid.finished(this, start, logLevel = InfoLevel)
- MetricEmitter.emitHistogramMetric(
- LogMarkerToken("kubeapi", "create", "duration", Some("create"), Map("cmd" -> "create"))(
- MeasurementUnit.time.milliseconds),
- Instant.now.toEpochMilli - transid.meta.start.toEpochMilli)
toContainer(readyPod)
}
.recoverWith {
[openwhisk] 04/08: Use transaction to calculate
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit 09451419f67d9d4a4d7d66a18bc680c5d7cca980
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Tue May 10 13:23:59 2022 +0800
Use transaction to calculate
---
.../apache/openwhisk/core/containerpool/docker/DockerClient.scala | 5 ++---
.../openwhisk/core/containerpool/kubernetes/KubernetesClient.scala | 4 +---
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
index 296c5eb58..d4196c0a8 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
@@ -39,6 +39,7 @@ import org.apache.openwhisk.core.ConfigKeys
import org.apache.openwhisk.core.containerpool.ContainerId
import org.apache.openwhisk.core.containerpool.ContainerAddress
+import java.time.Instant
import scala.concurrent.duration.Duration
object DockerContainerId {
@@ -203,14 +204,12 @@ class DockerClient(dockerHost: Option[String] = None,
LoggingMarkers.INVOKER_DOCKER_CMD(args.head),
s"running ${cmd.mkString(" ")} (timeout: $timeout)",
logLevel = InfoLevel)
- val t0 = System.currentTimeMillis()
executeProcess(cmd, timeout).andThen {
case Success(_) =>
- val t1 = System.currentTimeMillis()
MetricEmitter.emitHistogramMetric(
LogMarkerToken("docker", "runCmd", "duration", Some(args.head), Map("cmd" -> args.head))(
MeasurementUnit.time.milliseconds),
- t1 - t0)
+ Instant.now.toEpochMilli - transid.meta.start.toEpochMilli)
transid.finished(this, start)
case Failure(pte: ProcessTimeoutException) =>
transid.failed(this, start, pte.getMessage, ErrorLevel)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
index 5ba09f11d..5c4e6765f 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
@@ -151,7 +151,6 @@ class KubernetesClient(
log.info(this, s"Pod spec being created\n${Serialization.asYaml(pod)}")
}
val namespace = kubeRestClient.getNamespace
- val t0 = System.currentTimeMillis()
val start = transid.started(
this,
LoggingMarkers.INVOKER_KUBEAPI_CMD("create"),
@@ -183,11 +182,10 @@ class KubernetesClient(
waitForPod(namespace, createdPod, start.start, config.timeouts.run)
.map { readyPod =>
transid.finished(this, start, logLevel = InfoLevel)
- val t1 = System.currentTimeMillis()
MetricEmitter.emitHistogramMetric(
LogMarkerToken("kubeapi", "create", "duration", Some("create"), Map("cmd" -> "create"))(
MeasurementUnit.time.milliseconds),
- t1 - t0)
+ Instant.now.toEpochMilli - transid.meta.start.toEpochMilli)
toContainer(readyPod)
}
.recoverWith {
[openwhisk] 01/08: Add containerPool container histogram metric
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit 0c193ca6594ecb0b718c5fe3a3d256c46efc6f75
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Sun Apr 24 13:21:13 2022 +0800
Add containerPool container histogram metric
---
.../src/main/scala/org/apache/openwhisk/common/Logging.scala | 3 ++-
.../core/containerpool/v2/FunctionPullingContainerPool.scala | 8 ++++++++
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
index caba798d7..53adfe23e 100644
--- a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
+++ b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
@@ -412,7 +412,8 @@ object LoggingMarkers {
LogMarkerToken(invoker, "sharedPackage", counter, None, Map("path" -> path))(MeasurementUnit.none)
def INVOKER_CONTAINERPOOL_MEMORY(state: String) =
LogMarkerToken(invoker, "containerPoolMemory", counter, Some(state), Map("state" -> state))(MeasurementUnit.none)
-
+ def INVOKER_CONTAINERPOOL_CONTAINER(state: String) =
+ LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), Map("state" -> state))(MeasurementUnit.none)
// System overload and random invoker assignment
val MANAGED_SYSTEM_OVERLOAD =
LogMarkerToken(controller, "managedInvokerSystemOverload", counter)(MeasurementUnit.none)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
index 07029814c..bfc65d33d 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
@@ -111,6 +111,14 @@ class FunctionPullingContainerPool(
MetricEmitter
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("prewarmed"), memoryConsumptionOf(prewarmedPool))
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("max"), poolConfig.userMemory.toMB)
+ val prewarmedSize = prewarmedPool.size
+ val busySize = busyPool.size
+ val warmedSize = warmedPool.size
+ val allSize = prewarmedSize + busySize + warmedSize
+ MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("prewarmed"), prewarmedSize)
+ MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("busy"), busySize)
+ MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed"), warmedSize)
+ MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("all"), allSize)
})
// Key is ColdStartKey, value is the number of cold Start in minute
[openwhisk] 08/08: Update according to review comment
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit 09d1e923008b9550330563c16b5b171917f01801
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Thu May 26 15:27:00 2022 +0800
Update according to review comment
---
.../scala/src/main/scala/org/apache/openwhisk/common/Logging.scala | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
index 686a4b672..3072ff33d 100644
--- a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
+++ b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
@@ -413,12 +413,7 @@ object LoggingMarkers {
def INVOKER_CONTAINERPOOL_MEMORY(state: String) =
LogMarkerToken(invoker, "containerPoolMemory", counter, Some(state), Map("state" -> state))(MeasurementUnit.none)
def INVOKER_CONTAINERPOOL_CONTAINER(state: String, tags: Option[Map[String, String]] = None) = {
- var map = Map("state" -> state)
- tags.foreach { mapTags =>
- for ((k, v) <- mapTags) {
- map += (k -> v)
- }
- }
+ val map = Map("state" -> state) ++: tags.getOrElse(Map.empty)
LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), map)(MeasurementUnit.none)
}
[openwhisk] 05/08: Add namespace and action tags for container metric
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit 998414f3c717b6b5e60fb7bb94145c9aee1f799e
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Tue May 10 15:49:49 2022 +0800
Add namespace and action tags for container metric
---
.../src/main/scala/org/apache/openwhisk/common/Logging.scala | 12 ++++++++++--
.../core/containerpool/v2/FunctionPullingContainerPool.scala | 10 +++++++++-
2 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
index 53adfe23e..48230ee6a 100644
--- a/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
+++ b/common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala
@@ -412,8 +412,16 @@ object LoggingMarkers {
LogMarkerToken(invoker, "sharedPackage", counter, None, Map("path" -> path))(MeasurementUnit.none)
def INVOKER_CONTAINERPOOL_MEMORY(state: String) =
LogMarkerToken(invoker, "containerPoolMemory", counter, Some(state), Map("state" -> state))(MeasurementUnit.none)
- def INVOKER_CONTAINERPOOL_CONTAINER(state: String) =
- LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), Map("state" -> state))(MeasurementUnit.none)
+ def INVOKER_CONTAINERPOOL_CONTAINER(state: String, tags: Option[Map[String, String]] = None) = {
+ var map = Map("state" -> state)
+ tags.foreach { mapTags =>
+ for ((k, v) <- mapTags) {
+ map += (k -> v)
+ }
+ }
+ LogMarkerToken(invoker, "containerPoolContainer", counter, Some(state), map)(MeasurementUnit.none)
+ }
+
// System overload and random invoker assignment
val MANAGED_SYSTEM_OVERLOAD =
LogMarkerToken(controller, "managedInvokerSystemOverload", counter)(MeasurementUnit.none)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
index bfc65d33d..a1396b7a0 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
@@ -110,14 +110,22 @@ class FunctionPullingContainerPool(
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("busy"), memoryConsumptionOf(busyPool))
MetricEmitter
.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("prewarmed"), memoryConsumptionOf(prewarmedPool))
+ MetricEmitter
+ .emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("warmed"), memoryConsumptionOf(warmedPool))
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_MEMORY("max"), poolConfig.userMemory.toMB)
val prewarmedSize = prewarmedPool.size
val busySize = busyPool.size
val warmedSize = warmedPool.size
+ val warmedPoolMap: Map[(String, String), Int] = warmedPool groupBy {
+ case (_, warmedData) => (warmedData.invocationNamespace, warmedData.action.toString)
+ } mapValues (_.size)
+ for((data, size) <- warmedPoolMap) {
+ val tags: Option[Map[String, String]] = Some(Map("namespace" -> data._1, "action" -> data._2))
+ MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed", tags), size)
+ }
val allSize = prewarmedSize + busySize + warmedSize
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("prewarmed"), prewarmedSize)
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("busy"), busySize)
- MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed"), warmedSize)
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("all"), allSize)
})
[openwhisk] 07/08: Fix scala 2.13 compilation error
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit 8ba0902595d3aaf58354560cd5001fefd138fe0b
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Thu May 26 13:22:09 2022 +0800
Fix scala 2.13 compilation error
---
.../core/containerpool/v2/FunctionPullingContainerPool.scala | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
index a1396b7a0..d305ef349 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/v2/FunctionPullingContainerPool.scala
@@ -19,7 +19,6 @@ package org.apache.openwhisk.core.containerpool.v2
import java.util.concurrent.atomic.AtomicInteger
import akka.actor.{Actor, ActorRef, ActorRefFactory, Cancellable, Props}
-
import org.apache.openwhisk.common._
import org.apache.openwhisk.core.connector.ContainerCreationError._
import org.apache.openwhisk.core.connector.{
@@ -44,7 +43,7 @@ import org.apache.openwhisk.http.Messages
import scala.annotation.tailrec
import scala.collection.concurrent.TrieMap
-import scala.collection.immutable
+import scala.collection.{immutable, mutable}
import scala.concurrent.Future
import scala.concurrent.duration._
import scala.util.{Random, Try}
@@ -116,10 +115,10 @@ class FunctionPullingContainerPool(
val prewarmedSize = prewarmedPool.size
val busySize = busyPool.size
val warmedSize = warmedPool.size
- val warmedPoolMap: Map[(String, String), Int] = warmedPool groupBy {
+ val warmedPoolMap = warmedPool groupBy {
case (_, warmedData) => (warmedData.invocationNamespace, warmedData.action.toString)
} mapValues (_.size)
- for((data, size) <- warmedPoolMap) {
+ for ((data, size) <- warmedPoolMap) {
val tags: Option[Map[String, String]] = Some(Map("namespace" -> data._1, "action" -> data._2))
MetricEmitter.emitHistogramMetric(LoggingMarkers.INVOKER_CONTAINERPOOL_CONTAINER("warmed", tags), size)
}
[openwhisk] 02/08: Add pod creation consume time metric
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit db90668bd46485c468a5f74763dbc7f575c06ca4
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Sun Apr 24 15:40:51 2022 +0800
Add pod creation consume time metric
---
.../containerpool/kubernetes/KubernetesClient.scala | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
index 9dd588eda..5ba09f11d 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/kubernetes/KubernetesClient.scala
@@ -22,7 +22,6 @@ import java.net.SocketTimeoutException
import java.time.format.DateTimeFormatterBuilder
import java.time.temporal.ChronoField
import java.time.{Instant, ZoneId}
-
import akka.actor.ActorSystem
import akka.event.Logging.ErrorLevel
import akka.event.Logging.InfoLevel
@@ -38,11 +37,18 @@ import collection.JavaConverters._
import io.fabric8.kubernetes.api.model._
import io.fabric8.kubernetes.client.utils.Serialization
import io.fabric8.kubernetes.client.{ConfigBuilder, DefaultKubernetesClient}
+import kamon.metric.MeasurementUnit
import okhttp3.{Call, Callback, Request, Response}
import okio.BufferedSource
import org.apache.commons.lang3.exception.ExceptionUtils
-import org.apache.openwhisk.common.LoggingMarkers
-import org.apache.openwhisk.common.{ConfigMapValue, Logging, TransactionId}
+import org.apache.openwhisk.common.{
+ ConfigMapValue,
+ LogMarkerToken,
+ Logging,
+ LoggingMarkers,
+ MetricEmitter,
+ TransactionId
+}
import org.apache.openwhisk.core.ConfigKeys
import org.apache.openwhisk.core.containerpool.docker.ProcessRunner
import org.apache.openwhisk.core.containerpool.{ContainerAddress, ContainerId}
@@ -145,6 +151,7 @@ class KubernetesClient(
log.info(this, s"Pod spec being created\n${Serialization.asYaml(pod)}")
}
val namespace = kubeRestClient.getNamespace
+ val t0 = System.currentTimeMillis()
val start = transid.started(
this,
LoggingMarkers.INVOKER_KUBEAPI_CMD("create"),
@@ -176,6 +183,11 @@ class KubernetesClient(
waitForPod(namespace, createdPod, start.start, config.timeouts.run)
.map { readyPod =>
transid.finished(this, start, logLevel = InfoLevel)
+ val t1 = System.currentTimeMillis()
+ MetricEmitter.emitHistogramMetric(
+ LogMarkerToken("kubeapi", "create", "duration", Some("create"), Map("cmd" -> "create"))(
+ MeasurementUnit.time.milliseconds),
+ t1 - t0)
toContainer(readyPod)
}
.recoverWith {
[openwhisk] 03/08: Add docker container creation consume time metric
Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
ningyougang pushed a commit to branch add-container-count-metric
in repository https://gitbox.apache.org/repos/asf/openwhisk.git
commit df68fc2a51e397dc8bdaed4fc7cc4d45071dfe09
Author: ning.yougang <ni...@navercorp.com>
AuthorDate: Sun Apr 24 15:47:23 2022 +0800
Add docker container creation consume time metric
---
.../openwhisk/core/containerpool/docker/DockerClient.scala | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
index b594f74ef..296c5eb58 100644
--- a/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
+++ b/core/invoker/src/main/scala/org/apache/openwhisk/core/containerpool/docker/DockerClient.scala
@@ -21,7 +21,6 @@ import java.io.FileNotFoundException
import java.nio.file.Files
import java.nio.file.Paths
import java.util.concurrent.Semaphore
-
import akka.actor.ActorSystem
import scala.collection.concurrent.TrieMap
@@ -32,9 +31,10 @@ import scala.util.Failure
import scala.util.Success
import scala.util.Try
import akka.event.Logging.{ErrorLevel, InfoLevel}
+import kamon.metric.MeasurementUnit
import pureconfig._
import pureconfig.generic.auto._
-import org.apache.openwhisk.common.{Logging, LoggingMarkers, MetricEmitter, TransactionId}
+import org.apache.openwhisk.common.{LogMarkerToken, Logging, LoggingMarkers, MetricEmitter, TransactionId}
import org.apache.openwhisk.core.ConfigKeys
import org.apache.openwhisk.core.containerpool.ContainerId
import org.apache.openwhisk.core.containerpool.ContainerAddress
@@ -203,8 +203,15 @@ class DockerClient(dockerHost: Option[String] = None,
LoggingMarkers.INVOKER_DOCKER_CMD(args.head),
s"running ${cmd.mkString(" ")} (timeout: $timeout)",
logLevel = InfoLevel)
+ val t0 = System.currentTimeMillis()
executeProcess(cmd, timeout).andThen {
- case Success(_) => transid.finished(this, start)
+ case Success(_) =>
+ val t1 = System.currentTimeMillis()
+ MetricEmitter.emitHistogramMetric(
+ LogMarkerToken("docker", "runCmd", "duration", Some(args.head), Map("cmd" -> args.head))(
+ MeasurementUnit.time.milliseconds),
+ t1 - t0)
+ transid.finished(this, start)
case Failure(pte: ProcessTimeoutException) =>
transid.failed(this, start, pte.getMessage, ErrorLevel)
MetricEmitter.emitCounterMetric(LoggingMarkers.INVOKER_DOCKER_CMD_TIMEOUT(args.head))