diff --git a/Makefile b/Makefile index 0e3df88be5f6..a259ae805da9 100644 --- a/Makefile +++ b/Makefile @@ -30,14 +30,6 @@ test-e2e: ./openshift/e2e-tests.sh .PHONY: test-e2e -perf-tests: - export ES_DEVELOPMENT=true && \ - export ES_HOST_PORT=search-perfscale-dev-chmf5l4sh66lvxbnadi4bznl3a.us-west-2.es.amazonaws.com && \ - export USE_OPEN_SEARCH=true && \ - export SYSTEM_NAMESPACE=knative-serving && \ - ./openshift/perf-tests.sh -.PHONY: perf-tests - test-e2e-tls: ENABLE_TLS="true" ./openshift/e2e-tests.sh .PHONY: test-e2e-tls diff --git a/openshift/ci-operator/knative-perf-images/dataplane-probe/Dockerfile b/openshift/ci-operator/knative-perf-images/dataplane-probe/Dockerfile old mode 100644 new mode 100755 index b0c8cf79fd03..e64e80e61e23 --- a/openshift/ci-operator/knative-perf-images/dataplane-probe/Dockerfile +++ b/openshift/ci-operator/knative-perf-images/dataplane-probe/Dockerfile @@ -1,13 +1,33 @@ -# Do not edit! This file was generated via Makefile -FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder +# DO NOT EDIT! Generated Dockerfile for test/performance/benchmarks/dataplane-probe. +ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 +ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal + +FROM $GO_BUILDER as builder COPY . . -RUN ./openshift/in-docker-patch.sh -RUN make perf-install +ENV CGO_ENABLED=1 +ENV GOEXPERIMENT=strictfipsruntime + +RUN go build -tags strictfipsruntime -o /usr/bin/main ./test/performance/benchmarks/dataplane-probe + +FROM $GO_RUNTIME + +ARG VERSION=knative-v1.15 + +COPY --from=builder /usr/bin/main /ko-app/dataplane-probe -FROM registry.access.redhat.com/ubi8/ubi-minimal USER 65532 -COPY --from=builder /go/bin/dataplane-probe /ko-app/dataplane-probe +LABEL \ + com.redhat.component="openshift-serverless-1-serving-test-performance-benchmarks-dataplane-probe-rhel8-container" \ + name="openshift-serverless-1/serving-test-performance-benchmarks-dataplane-probe-rhel8" \ + version=$VERSION \ + summary="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Dataplane Probe" \ + maintainer="serverless-support@redhat.com" \ + description="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Dataplane Probe" \ + io.k8s.display-name="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Dataplane Probe" \ + io.k8s.description="Red Hat OpenShift Serverless Serving Test Performance Benchmarks Dataplane Probe" \ + io.openshift.tags="test-performance-benchmarks-dataplane-probe" + ENTRYPOINT ["/ko-app/dataplane-probe"] diff --git a/openshift/ci-operator/knative-perf-images/load-test/Dockerfile b/openshift/ci-operator/knative-perf-images/load-test/Dockerfile old mode 100644 new mode 100755 index 4e83eff90a81..3e264c820f69 --- a/openshift/ci-operator/knative-perf-images/load-test/Dockerfile +++ b/openshift/ci-operator/knative-perf-images/load-test/Dockerfile @@ -1,13 +1,33 @@ -# Do not edit! This file was generated via Makefile -FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder +# DO NOT EDIT! Generated Dockerfile for test/performance/benchmarks/load-test. +ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 +ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal + +FROM $GO_BUILDER as builder COPY . . -RUN ./openshift/in-docker-patch.sh -RUN make perf-install +ENV CGO_ENABLED=1 +ENV GOEXPERIMENT=strictfipsruntime + +RUN go build -tags strictfipsruntime -o /usr/bin/main ./test/performance/benchmarks/load-test + +FROM $GO_RUNTIME + +ARG VERSION=knative-v1.15 + +COPY --from=builder /usr/bin/main /ko-app/load-test -FROM registry.access.redhat.com/ubi8/ubi-minimal USER 65532 -COPY --from=builder /go/bin/load-test /ko-app/load-test +LABEL \ + com.redhat.component="openshift-serverless-1-serving-test-performance-benchmarks-load-test-rhel8-container" \ + name="openshift-serverless-1/serving-test-performance-benchmarks-load-test-rhel8" \ + version=$VERSION \ + summary="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Load Test" \ + maintainer="serverless-support@redhat.com" \ + description="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Load Test" \ + io.k8s.display-name="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Load Test" \ + io.k8s.description="Red Hat OpenShift Serverless Serving Test Performance Benchmarks Load Test" \ + io.openshift.tags="test-performance-benchmarks-load-test" + ENTRYPOINT ["/ko-app/load-test"] diff --git a/openshift/ci-operator/knative-perf-images/real-traffic-test/Dockerfile b/openshift/ci-operator/knative-perf-images/real-traffic-test/Dockerfile old mode 100644 new mode 100755 index 1cab530829b8..fffe272e5ca8 --- a/openshift/ci-operator/knative-perf-images/real-traffic-test/Dockerfile +++ b/openshift/ci-operator/knative-perf-images/real-traffic-test/Dockerfile @@ -1,13 +1,33 @@ -# Do not edit! This file was generated via Makefile -FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder +# DO NOT EDIT! Generated Dockerfile for test/performance/benchmarks/real-traffic-test. +ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 +ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal + +FROM $GO_BUILDER as builder COPY . . -RUN ./openshift/in-docker-patch.sh -RUN make perf-install +ENV CGO_ENABLED=1 +ENV GOEXPERIMENT=strictfipsruntime + +RUN go build -tags strictfipsruntime -o /usr/bin/main ./test/performance/benchmarks/real-traffic-test + +FROM $GO_RUNTIME + +ARG VERSION=knative-v1.15 + +COPY --from=builder /usr/bin/main /ko-app/real-traffic-test -FROM registry.access.redhat.com/ubi8/ubi-minimal USER 65532 -COPY --from=builder /go/bin/real-traffic-test /ko-app/real-traffic-test +LABEL \ + com.redhat.component="openshift-serverless-1-serving-test-performance-benchmarks-real-traffic-test-rhel8-container" \ + name="openshift-serverless-1/serving-test-performance-benchmarks-real-traffic-test-rhel8" \ + version=$VERSION \ + summary="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Real Traffic Test" \ + maintainer="serverless-support@redhat.com" \ + description="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Real Traffic Test" \ + io.k8s.display-name="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Real Traffic Test" \ + io.k8s.description="Red Hat OpenShift Serverless Serving Test Performance Benchmarks Real Traffic Test" \ + io.openshift.tags="test-performance-benchmarks-real-traffic-test" + ENTRYPOINT ["/ko-app/real-traffic-test"] diff --git a/openshift/ci-operator/knative-perf-images/reconciliation-delay/Dockerfile b/openshift/ci-operator/knative-perf-images/reconciliation-delay/Dockerfile old mode 100644 new mode 100755 index eb698472f34f..886e4edf7086 --- a/openshift/ci-operator/knative-perf-images/reconciliation-delay/Dockerfile +++ b/openshift/ci-operator/knative-perf-images/reconciliation-delay/Dockerfile @@ -1,13 +1,33 @@ -# Do not edit! This file was generated via Makefile -FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder +# DO NOT EDIT! Generated Dockerfile for test/performance/benchmarks/reconciliation-delay. +ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 +ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal + +FROM $GO_BUILDER as builder COPY . . -RUN ./openshift/in-docker-patch.sh -RUN make perf-install +ENV CGO_ENABLED=1 +ENV GOEXPERIMENT=strictfipsruntime + +RUN go build -tags strictfipsruntime -o /usr/bin/main ./test/performance/benchmarks/reconciliation-delay + +FROM $GO_RUNTIME + +ARG VERSION=knative-v1.15 + +COPY --from=builder /usr/bin/main /ko-app/reconciliation-delay -FROM registry.access.redhat.com/ubi8/ubi-minimal USER 65532 -COPY --from=builder /go/bin/reconciliation-delay /ko-app/reconciliation-delay +LABEL \ + com.redhat.component="openshift-serverless-1-serving-test-performance-benchmarks-reconciliation-delay-rhel8-container" \ + name="openshift-serverless-1/serving-test-performance-benchmarks-reconciliation-delay-rhel8" \ + version=$VERSION \ + summary="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Reconciliation Delay" \ + maintainer="serverless-support@redhat.com" \ + description="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Reconciliation Delay" \ + io.k8s.display-name="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Reconciliation Delay" \ + io.k8s.description="Red Hat OpenShift Serverless Serving Test Performance Benchmarks Reconciliation Delay" \ + io.openshift.tags="test-performance-benchmarks-reconciliation-delay" + ENTRYPOINT ["/ko-app/reconciliation-delay"] diff --git a/openshift/ci-operator/knative-perf-images/rollout-probe/Dockerfile b/openshift/ci-operator/knative-perf-images/rollout-probe/Dockerfile old mode 100644 new mode 100755 index 1a3bdf23d847..9e2b5dc3a97b --- a/openshift/ci-operator/knative-perf-images/rollout-probe/Dockerfile +++ b/openshift/ci-operator/knative-perf-images/rollout-probe/Dockerfile @@ -1,13 +1,33 @@ -# Do not edit! This file was generated via Makefile -FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder +# DO NOT EDIT! Generated Dockerfile for test/performance/benchmarks/rollout-probe. +ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 +ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal + +FROM $GO_BUILDER as builder COPY . . -RUN ./openshift/in-docker-patch.sh -RUN make perf-install +ENV CGO_ENABLED=1 +ENV GOEXPERIMENT=strictfipsruntime + +RUN go build -tags strictfipsruntime -o /usr/bin/main ./test/performance/benchmarks/rollout-probe + +FROM $GO_RUNTIME + +ARG VERSION=knative-v1.15 + +COPY --from=builder /usr/bin/main /ko-app/rollout-probe -FROM registry.access.redhat.com/ubi8/ubi-minimal USER 65532 -COPY --from=builder /go/bin/rollout-probe /ko-app/rollout-probe +LABEL \ + com.redhat.component="openshift-serverless-1-serving-test-performance-benchmarks-rollout-probe-rhel8-container" \ + name="openshift-serverless-1/serving-test-performance-benchmarks-rollout-probe-rhel8" \ + version=$VERSION \ + summary="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Rollout Probe" \ + maintainer="serverless-support@redhat.com" \ + description="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Rollout Probe" \ + io.k8s.display-name="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Rollout Probe" \ + io.k8s.description="Red Hat OpenShift Serverless Serving Test Performance Benchmarks Rollout Probe" \ + io.openshift.tags="test-performance-benchmarks-rollout-probe" + ENTRYPOINT ["/ko-app/rollout-probe"] diff --git a/openshift/ci-operator/knative-perf-images/scale-from-zero/Dockerfile b/openshift/ci-operator/knative-perf-images/scale-from-zero/Dockerfile old mode 100644 new mode 100755 index 53f1755a01e2..7c2659996cb3 --- a/openshift/ci-operator/knative-perf-images/scale-from-zero/Dockerfile +++ b/openshift/ci-operator/knative-perf-images/scale-from-zero/Dockerfile @@ -1,13 +1,33 @@ -# Do not edit! This file was generated via Makefile -FROM registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 as builder +# DO NOT EDIT! Generated Dockerfile for test/performance/benchmarks/scale-from-zero. +ARG GO_BUILDER=registry.ci.openshift.org/openshift/release:rhel-8-release-golang-1.22-openshift-4.17 +ARG GO_RUNTIME=registry.access.redhat.com/ubi8/ubi-minimal + +FROM $GO_BUILDER as builder COPY . . -RUN ./openshift/in-docker-patch.sh -RUN make perf-install +ENV CGO_ENABLED=1 +ENV GOEXPERIMENT=strictfipsruntime + +RUN go build -tags strictfipsruntime -o /usr/bin/main ./test/performance/benchmarks/scale-from-zero + +FROM $GO_RUNTIME + +ARG VERSION=knative-v1.15 + +COPY --from=builder /usr/bin/main /ko-app/scale-from-zero -FROM registry.access.redhat.com/ubi8/ubi-minimal USER 65532 -COPY --from=builder /go/bin/scale-from-zero /ko-app/scale-from-zero +LABEL \ + com.redhat.component="openshift-serverless-1-serving-test-performance-benchmarks-scale-from-zero-rhel8-container" \ + name="openshift-serverless-1/serving-test-performance-benchmarks-scale-from-zero-rhel8" \ + version=$VERSION \ + summary="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Scale From Zero" \ + maintainer="serverless-support@redhat.com" \ + description="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Scale From Zero" \ + io.k8s.display-name="Red Hat OpenShift Serverless 1 Serving Test Performance Benchmarks Scale From Zero" \ + io.k8s.description="Red Hat OpenShift Serverless Serving Test Performance Benchmarks Scale From Zero" \ + io.openshift.tags="test-performance-benchmarks-scale-from-zero" + ENTRYPOINT ["/ko-app/scale-from-zero"] diff --git a/openshift/generate.sh b/openshift/generate.sh index 7a4cb5b49bb2..179064532087 100755 --- a/openshift/generate.sh +++ b/openshift/generate.sh @@ -16,5 +16,18 @@ rm -rf "$tmp_dir" $(go env GOPATH)/bin/generate \ --root-dir "${repo_root_dir}" \ --generators dockerfile \ + --dockerfile-test-dir "ci-operator/knative-perf-images" \ --app-file-fmt "/ko-app/%s" \ + --includes "test/performance/benchmarks.*" \ --dockerfile-image-builder-fmt "registry.ci.openshift.org/openshift/release:rhel-8-release-golang-%s-openshift-4.17" + +mv "${repo_root_dir}"/openshift/images.yaml "${repo_root_dir}"/openshift/images.yaml.bak + +$(go env GOPATH)/bin/generate \ + --root-dir "${repo_root_dir}" \ + --generators dockerfile \ + --app-file-fmt "/ko-app/%s" \ + --dockerfile-image-builder-fmt "registry.ci.openshift.org/openshift/release:rhel-8-release-golang-%s-openshift-4.17" + +cat "${repo_root_dir}"/openshift/images.yaml.bak >> "${repo_root_dir}"/openshift/images.yaml +rm "${repo_root_dir}"/openshift/images.yaml.bak \ No newline at end of file diff --git a/openshift/images.yaml b/openshift/images.yaml index 742c56a1e120..e8b132da1927 100755 --- a/openshift/images.yaml +++ b/openshift/images.yaml @@ -26,3 +26,9 @@ knative.dev/serving/test/test_images/slowstart: registry.ci.openshift.org/opensh knative.dev/serving/test/test_images/timeout: registry.ci.openshift.org/openshift/knative-serving-test-timeout:knative-v1.15 knative.dev/serving/test/test_images/volumes: registry.ci.openshift.org/openshift/knative-serving-test-volumes:knative-v1.15 knative.dev/serving/test/test_images/wsserver: registry.ci.openshift.org/openshift/knative-serving-test-wsserver:knative-v1.15 +knative.dev/serving/test/performance/benchmarks/dataplane-probe: registry.ci.openshift.org/openshift/knative-serving-test-dataplane-probe:knative-v1.15 +knative.dev/serving/test/performance/benchmarks/load-test: registry.ci.openshift.org/openshift/knative-serving-test-load-test:knative-v1.15 +knative.dev/serving/test/performance/benchmarks/real-traffic-test: registry.ci.openshift.org/openshift/knative-serving-test-real-traffic-test:knative-v1.15 +knative.dev/serving/test/performance/benchmarks/reconciliation-delay: registry.ci.openshift.org/openshift/knative-serving-test-reconciliation-delay:knative-v1.15 +knative.dev/serving/test/performance/benchmarks/rollout-probe: registry.ci.openshift.org/openshift/knative-serving-test-rollout-probe:knative-v1.15 +knative.dev/serving/test/performance/benchmarks/scale-from-zero: registry.ci.openshift.org/openshift/knative-serving-test-scale-from-zero:knative-v1.15 diff --git a/openshift/in-docker-patch.sh b/openshift/in-docker-patch.sh deleted file mode 100755 index a007ecbab437..000000000000 --- a/openshift/in-docker-patch.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -set -x -env - -git apply ./openshift/performance/patches/* - -go get github.com/elastic/go-elasticsearch/v7@v7.17.10 -go get github.com/opensearch-project/opensearch-go@v1.1.0 - -./hack/update-deps.sh - -git add . -git commit -m "openshift perf update" - -git apply ./openshift/patches/001-object.patch -git apply ./openshift/patches/002-mutemetrics.patch -git apply ./openshift/patches/003-routeretry.patch - -git add . -git commit -m "apply reverted patches" \ No newline at end of file diff --git a/openshift/perf-tests.sh b/openshift/perf-tests.sh deleted file mode 100755 index 6339e2424973..000000000000 --- a/openshift/perf-tests.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -# shellcheck disable=SC1090 -source "$(dirname "$0")/e2e-common.sh" - -set -x -env - -failed=0 - -git apply ./openshift/performance/patches/* - -(( !failed )) && install_knative || failed=1 -./openshift/performance/scripts/run-all-performance-tests.sh -(( failed )) && gather_knative_state -(( failed )) && exit $failed - -success \ No newline at end of file diff --git a/openshift/performance/README.md b/openshift/performance/README.md deleted file mode 100644 index 635a1ac272eb..000000000000 --- a/openshift/performance/README.md +++ /dev/null @@ -1,61 +0,0 @@ - -# Example run on OCP - -```bash - -# images are meant to be built on CI, however any user built image can be passed as follows: - -export KNATIVE_SERVING_DATAPLANE_PROBE=docker.io/skonto/dataplane-probe-13daa01eab9bbd0b55b029ef0217990f@sha256:38888e57c2eaba6de9689bde4313904af022161ac659617334e5605b15af4286 -export KNATIVE_SERVING_REAL_TRAFFIC_TEST=docker.io/skonto/real-traffic-test-0d6cfd702f7100116b002498a1c9d449@sha256:7109b39aa4325b0c86a1b4251a672abc0e3dc362d14e32ad1886f762942ab410 -export KNATIVE_SERVING_ROLLOUT_PROBE=docker.io/skonto/rollout-probe-16b878ae522fca2c6d0a486b4be446cd@sha256:224d53bbcf2021c41d25271ae32c41207e2f6fb44a9eb465d074126e3493fb2e -export KNATIVE_SERVING_LOAD_TEST=docker.io/skonto/load-test-16ad8813e1e519c16903611ab3798c1c@sha256:d98d359e8bd1e39615ae6f5226ed0ec90c40d8eb8dec8915da6e87054ea2d32d -export KNATIVE_SERVING_RECONCILIATION_DELAY=docker.io/skonto/reconciliation-delay-6074d88fac79c5d2be9fb1c4ae840488@sha256:6db2558e597a44fa4e735cd8a88c0183cffa18c04b4941ef9dd43687cf0cb5a8 -export KNATIVE_SERVING_SCALE_FROM_ZERO=docker.io/skonto/scale-from-zero-9924dc8c7b18ccca4da8563a28b55a50@sha256:5b8807543da8ef4e43020e61e1cf7e37dfd90747882aeedd3999fbab76da4d04 -export KNATIVE_SERVING_TEST_AUTOSCALE=docker.io/skonto/autoscale-c163c422b72a456bad9aedab6b2d1f13@sha256:02fc725cef343d41d2278322eef4dd697a6a865290f5afd02ff1a39213f4bbcb - -export KNATIVE_SERVING_TEST_RUNTIME=docker.io/skonto/runtime-5fa7cf4c043dfad63fa28de0cfa3b264@sha256:ff5aece839ddec959ed4f2e32c61731ac8ea2550f29a63d73bce100a8a4b004e -export KNATIVE_SERVING_TEST_HELLOWORLD=docker.io/skonto/helloworld-edca531b677458dd5cb687926757a480@sha256:0c9589cde631d33be7548bf54b1e4dbd8e15e486bcd640e0a6c986c5bc1038a6 -export KNATIVE_SERVING_TEST_SLOWSTART=docker.io/skonto/slowstart-754e95e646a3d72ab225ebdf3a77a410@sha256:c89ce2dc03377593cd63827b22d4a2f0406fd78870b8e2fff773936940a7efb1 - -# note that images can be build locally with `ko resolve ./test/performance/benchamrks/` as usual. - -# setup OpenSearch -helm repo add opensearch https://opensearch-project.github.io/helm-charts/ -helm repo update -helm search repo opensearch -helm install my-deployment opensearch/opensearch -helm install dashboards opensearch/opensearch-dashboards - -oc get po -NAME READY STATUS RESTARTS AGE -dashboards-opensearch-dashboards-5977566fb9-p4v9m 1/1 Running 0 105m -opensearch-cluster-master-0 1/1 Running 0 105m -opensearch-cluster-master-1 1/1 Running 0 105m -opensearch-cluster-master-2 1/1 Running 0 105m - -export ES_HOST_PORT=opensearch-cluster-master.default.svc.cluster.local:9200 -export ES_USERNAME=admin -export ES_PASSWORD=admin -export SYSTEM_NAMESPACE=knative-serving -export USE_OPEN_SEARCH=true - -# optional -export SERVING= - -# note if you want to run against an insecure ES instance just export ES_DEVELOPMENT=true -# run the tests -./openshift/performance/scripts/run-all-performance-tests.sh - -# visualization - -# on a separate terminal run -oc port-forward svc/opensearch-cluster-master 9200:9200 - -export ES_URL=https://localhost:9200 - -# Creates an index template for the data -./openshift/performance/visualization/setup-es-index.sh - -# setup grafana in your cluster and import the dashboard under ./openshift/performance/visualization - -``` \ No newline at end of file diff --git a/openshift/performance/patches/baseimage.patch b/openshift/performance/patches/baseimage.patch deleted file mode 100644 index 46bc11d15349..000000000000 --- a/openshift/performance/patches/baseimage.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/.ko.yaml b/.ko.yaml -index bceaa1320..5ab3cdd8c 100644 ---- a/.ko.yaml -+++ b/.ko.yaml -@@ -2,4 +2,10 @@ - defaultBaseImage: registry.access.redhat.com/ubi8/ubi-minimal:latest - baseImageOverrides: - knative.dev/serving/test/test_images/runtime: gcr.io/distroless/static:nonroot -+ knative.dev/serving/test/performance/benchmarks/rollout-probe: gcr.io/distroless/static:nonroot -+ knative.dev/serving/test/performance/benchmarks/dataplane-probe: gcr.io/distroless/static:nonroot -+ knative.dev/serving/test/performance/benchmarks/load-test: gcr.io/distroless/static:nonroot -+ knativedev/serving/test/performance/benchmarks/real-traffic-test: gcr.io/distroless/static:nonroot -+ knative.dev/serving/test/performance/benchmarks/scale-from-zero: gcr.io/distroless/static:nonroot -+ knative.dev/serving/test/performance/benchmarks/reconciliation-delay: gcr.io/distroless/static:nonroot - knative.dev/serving/vendor/github.com/tsenart/vegeta/v12: ubuntu:latest diff --git a/openshift/performance/patches/perf.patch b/openshift/performance/patches/perf.patch deleted file mode 100644 index 7daa69ba3756..000000000000 --- a/openshift/performance/patches/perf.patch +++ /dev/null @@ -1,1767 +0,0 @@ -diff --git a/Makefile b/Makefile -index ccd342372..9b7e0295b 100644 ---- a/Makefile -+++ b/Makefile -@@ -6,6 +6,7 @@ CORE_IMAGES=./cmd/activator ./cmd/autoscaler ./cmd/autoscaler-hpa ./cmd/controll - TEST_IMAGES=$(shell find ./test/test_images ./test/test_images/multicontainer -mindepth 1 -maxdepth 1 -type d) - # Exclude wrapper images like multicontainer and initcontainers as those are just ko convenience wrappers used upstream. The openshift serverless tests use other images to run. - TEST_IMAGES_WITHOUT_WRAPPERS=$(shell find ./test/test_images ./test/test_images/multicontainer -mindepth 1 -maxdepth 1 -type d -not -name multicontainer -not -name initcontainers) -+PERF_IMAGES=$(shell find ./test/performance/benchmarks -mindepth 1 -maxdepth 1) - BRANCH= - TEST= - IMAGE= -@@ -26,6 +27,12 @@ test-install: - done - .PHONY: test-install - -+perf-install: -+ for img in $(PERF_IMAGES); do \ -+ go install $$img ; \ -+ done -+.PHONY: perf-install -+ - test-e2e: - ./openshift/e2e-tests.sh - .PHONY: test-e2e -diff --git a/test/performance/README.md b/test/performance/README.md -index a4906039a..f17f7cffc 100644 ---- a/test/performance/README.md -+++ b/test/performance/README.md -@@ -76,6 +76,52 @@ export INFLUX_TOKEN=$(kubectl get secret local-influx-influxdb2-auth -o "jsonpat - ./visualization/setup-influx-db.sh - ``` - -+### Elastic Search / Opensearch -+ -+```bash -+helm repo add opensearch https://opensearch-project.github.io/helm-charts/ -+helm repo update -+helm search repo opensearch -+helm install my-deployment opensearch/opensearch -+helm install dashboards opensearch/opensearch-dashboards -+ -+export ES_URL=https://localhost:9200 -+oc port-forward svc/opensearch-cluster-master 9200:9200 -+export ES_USERNAME=admin -+export ES_PASSWORD=admin -+ -+# Creates an index template -+./test/performance/visualization/setup-es-index.sh -+ -+# Sample log entry to create: -+ -+curl -u elastic:Y*A_Ce=+0wbsV8C-b+u* -k -X POST "https://localhost:9200/knative-serving-data-plane/_doc" -H 'Content-Type: application/json' -d' -+{ -+ "@timestamp": "2023-09-12T11:23:23+03:00", -+ "_measurement": "Knative Serving dataplane probe", -+ "activator-pod-count": "2", -+ "tags": [{"JOB_NAME": "custom", "t21":"t2"}] -+} -+' -+ -+SYSTEM_NAMESPACE=knative-serving -+JOB_NAME="local" -+BUILD_ID="local" -+USE_OPEN_SEARCH=true -+export ES_URL=https://admin:admin@opensearch-cluster-master.default.svc.cluster.local:9200 -+ -+ -+kubectl create secret generic performance-test-config -n "default" \ -+ --from-literal=esurl="${ES_URL}" \ -+ --from-literal=esusername="${ES_USERNAME}" \ -+ --from-literal=espassword="${ES_PASSWORD}" \ -+ --from-literal=jobname="${JOB_NAME}" \ -+ --from-literal=buildid="${BUILD_ID}" -+ -+ko apply -f ./test/performance/benchmarks/dataplane-probe/dataplane-probe-setup.yaml -+sed "s|@SYSTEM_NAMESPACE@|$SYSTEM_NAMESPACE|g" ./test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml | sed "s|@KO_DOCKER_REPO@|$KO_DOCKER_REPO|g" | sed "s|@USE_OPEN_SEARCH@|\"$USE_OPEN_SEARCH\"|g" | sed "s|@USE_ES@|'false'|g" | ko apply --sbom=none -Bf - -+``` -+ - ### Local grafana dashboards - - Use an existing grafana instance or create one on your cluster, [see docs](https://grafana.com/docs/grafana/latest/setup-grafana/installation/kubernetes/). -diff --git a/test/performance/benchmarks/dataplane-probe/dataplane-probe-activator.yaml b/test/performance/benchmarks/dataplane-probe/dataplane-probe-activator.yaml -index af0d32631..9c2b2da4d 100644 ---- a/test/performance/benchmarks/dataplane-probe/dataplane-probe-activator.yaml -+++ b/test/performance/benchmarks/dataplane-probe/dataplane-probe-activator.yaml -@@ -51,16 +51,40 @@ spec: - env: - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml b/test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml -index dd32a9929..a9fc2ba58 100644 ---- a/test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml -+++ b/test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml -@@ -51,16 +51,40 @@ spec: - env: - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/dataplane-probe/dataplane-probe-queue.yaml b/test/performance/benchmarks/dataplane-probe/dataplane-probe-queue.yaml -index 63737a5df..6fc01ccd6 100644 ---- a/test/performance/benchmarks/dataplane-probe/dataplane-probe-queue.yaml -+++ b/test/performance/benchmarks/dataplane-probe/dataplane-probe-queue.yaml -@@ -51,16 +51,40 @@ spec: - env: - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -@@ -75,6 +99,9 @@ spec: - requests: - cpu: 1000m - memory: 3Gi -+ limits: -+ cpu: 1000m -+ memory: 3Gi - securityContext: - seccompProfile: - type: RuntimeDefault -diff --git a/test/performance/benchmarks/dataplane-probe/main.go b/test/performance/benchmarks/dataplane-probe/main.go -index 58693daa3..ff0a8b37b 100644 ---- a/test/performance/benchmarks/dataplane-probe/main.go -+++ b/test/performance/benchmarks/dataplane-probe/main.go -@@ -118,11 +118,11 @@ func main() { - targeter := vegeta.NewStaticTargeter(t.target) - attacker := vegeta.NewAttacker(vegeta.Timeout(30 * time.Second)) - -- influxReporter, err := performance.NewInfluxReporter(map[string]string{"target": *target}) -+ reporter, err := performance.NewDataPointReporterFactory(map[string]string{"target": *target}, benchmarkName) - if err != nil { -- log.Fatalf("failed to create influx reporter: %v", err.Error()) -+ log.Fatalf("failed to create reporter: %v", err.Error()) - } -- defer influxReporter.FlushAndShutdown() -+ defer reporter.FlushAndShutdown() - - // Start the attack! - results := attacker.Attack(targeter, rate, *duration, "load-test") -@@ -140,7 +140,7 @@ LOOP: - - case ds := <-deploymentStatus: - // Report number of ready activators. -- influxReporter.AddDataPoint(benchmarkName, map[string]interface{}{"activator-pod-count": ds.ReadyReplicas}) -+ reporter.AddDataPoint(benchmarkName, map[string]interface{}{"activator-pod-count": float64(ds.ReadyReplicas)}) - - case res, ok := <-results: - if ok { -@@ -156,12 +156,12 @@ LOOP: - metricResults.Close() - - // Report the results -- influxReporter.AddDataPointsForMetrics(metricResults, benchmarkName) -+ reporter.AddDataPointsForMetrics(metricResults, benchmarkName) - _ = vegeta.NewTextReporter(metricResults).Report(os.Stdout) - - if err := checkSLA(metricResults, t.slaMin, t.slaMax, rate, *duration); err != nil { - // make sure to still write the stats -- influxReporter.FlushAndShutdown() -+ reporter.FlushAndShutdown() - log.Fatalf(err.Error()) - } - -diff --git a/test/performance/benchmarks/load-test/load-test-0-direct.yaml b/test/performance/benchmarks/load-test/load-test-0-direct.yaml -index 30c1a9973..c0190a69f 100644 ---- a/test/performance/benchmarks/load-test/load-test-0-direct.yaml -+++ b/test/performance/benchmarks/load-test/load-test-0-direct.yaml -@@ -53,16 +53,40 @@ spec: - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/load-test/load-test-200-direct.yaml b/test/performance/benchmarks/load-test/load-test-200-direct.yaml -index 9443f62f3..da4f8fb30 100644 ---- a/test/performance/benchmarks/load-test/load-test-200-direct.yaml -+++ b/test/performance/benchmarks/load-test/load-test-200-direct.yaml -@@ -53,16 +53,40 @@ spec: - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/load-test/load-test-always-direct.yaml b/test/performance/benchmarks/load-test/load-test-always-direct.yaml -index 64c1e99a5..2c7b6295d 100644 ---- a/test/performance/benchmarks/load-test/load-test-always-direct.yaml -+++ b/test/performance/benchmarks/load-test/load-test-always-direct.yaml -@@ -53,16 +53,40 @@ spec: - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/load-test/main.go b/test/performance/benchmarks/load-test/main.go -index 4e55b942d..336bb88da 100644 ---- a/test/performance/benchmarks/load-test/main.go -+++ b/test/performance/benchmarks/load-test/main.go -@@ -62,11 +62,11 @@ func main() { - ctx, cancel := context.WithTimeout(ctx, 8*time.Minute) - defer cancel() - -- influxReporter, err := performance.NewInfluxReporter(map[string]string{"flavor": *flavor}) -+ reporter, err := performance.NewDataPointReporterFactory(map[string]string{"flavor": *flavor}, benchmarkName) - if err != nil { -- log.Fatalf("failed to create influx reporter: %v", err.Error()) -+ log.Fatalf("failed to create data point reporter: %v", err.Error()) - } -- defer influxReporter.FlushAndShutdown() -+ defer reporter.FlushAndShutdown() - - log.Print("Starting the load test.") - // Ramp up load from 1k to 3k in 2 minute steps. -@@ -98,22 +98,22 @@ func main() { - log.Fatalf("Error creating the pacer: %v", err) - } - resultsChan := vegeta.NewAttacker().Attack(targeter, pacer, 3*duration, "load-test") -- metricResults := processResults(ctx, resultsChan, influxReporter, selector) -+ metricResults := processResults(ctx, resultsChan, &reporter, selector) - - // Report the results -- influxReporter.AddDataPointsForMetrics(metricResults, benchmarkName) -+ reporter.AddDataPointsForMetrics(metricResults, benchmarkName) - _ = vegeta.NewTextReporter(metricResults).Report(os.Stdout) - - if err := checkSLA(metricResults, pacers, durations); err != nil { - // make sure to still write the stats -- influxReporter.FlushAndShutdown() -+ reporter.FlushAndShutdown() - log.Fatalf(err.Error()) - } - - log.Println("Load test finished") - } - --func processResults(ctx context.Context, results <-chan *vegeta.Result, reporter *performance.InfluxReporter, selector labels.Selector) *vegeta.Metrics { -+func processResults(ctx context.Context, results <-chan *vegeta.Result, reporter *performance.DataPointReporter, selector labels.Selector) *vegeta.Metrics { - ctx, cancel := context.WithCancel(ctx) - deploymentStatus := performance.FetchDeploymentsStatus(ctx, namespace, selector, time.Second) - sksMode := performance.FetchSKSStatus(ctx, namespace, selector, time.Second) -@@ -141,8 +141,8 @@ func processResults(ctx context.Context, results <-chan *vegeta.Result, reporter - - case ds := <-deploymentStatus: - // Add a sample point for the deployment status -- reporter.AddDataPoint(benchmarkName, -- map[string]interface{}{"ready-replicas": ds.ReadyReplicas, "desired-replicas": ds.DesiredReplicas}) -+ (*reporter).AddDataPoint(benchmarkName, -+ map[string]interface{}{"ready-replicas": float64(ds.ReadyReplicas), "desired-replicas": float64(ds.DesiredReplicas)}) - - case sksm := <-sksMode: - // Add a sample point for the serverless service mode -@@ -150,8 +150,8 @@ func processResults(ctx context.Context, results <-chan *vegeta.Result, reporter - if sksm.Mode == netv1alpha1.SKSOperationModeProxy { - mode = 1.0 - } -- reporter.AddDataPoint(benchmarkName, -- map[string]interface{}{"sks": mode, "num-activators": sksm.NumActivators}) -+ (*reporter).AddDataPoint(benchmarkName, -+ map[string]interface{}{"sks": mode, "num-activators": float64(sksm.NumActivators)}) - } - } - } -diff --git a/test/performance/benchmarks/real-traffic-test/main.go b/test/performance/benchmarks/real-traffic-test/main.go -index bad45b394..718831c64 100644 ---- a/test/performance/benchmarks/real-traffic-test/main.go -+++ b/test/performance/benchmarks/real-traffic-test/main.go -@@ -115,11 +115,11 @@ func main() { - log.Fatal("Failed to setup clients: ", err) - } - -- influxReporter, err := performance.NewInfluxReporter(map[string]string{"number-of-services": strconv.Itoa(*numberOfServices)}) -+ reporter, err := performance.NewDataPointReporterFactory(map[string]string{"number-of-services": strconv.Itoa(*numberOfServices)}, benchmarkName) - if err != nil { -- log.Fatalf("failed to create influx reporter: %v", err.Error()) -+ log.Fatalf("failed to create reporter: %v", err.Error()) - } -- defer influxReporter.FlushAndShutdown() -+ defer reporter.FlushAndShutdown() - - log.Printf("Creating %d Knative Services", *numberOfServices) - services, cleanup, err := createServices(clients, *numberOfServices) -@@ -179,12 +179,12 @@ LOOP: - metricResults.Close() - - // Report the results -- influxReporter.AddDataPointsForMetrics(metricResults, benchmarkName) -+ reporter.AddDataPointsForMetrics(metricResults, benchmarkName) - _ = vegeta.NewTextReporter(metricResults).Report(os.Stdout) - - if err := checkSLA(metricResults, rate); err != nil { - cleanup() -- influxReporter.FlushAndShutdown() -+ reporter.FlushAndShutdown() - log.Fatal(err.Error()) - } - -diff --git a/test/performance/benchmarks/real-traffic-test/real-traffic-test.yaml b/test/performance/benchmarks/real-traffic-test/real-traffic-test.yaml -index 5154b38a3..f4f47ec5a 100644 ---- a/test/performance/benchmarks/real-traffic-test/real-traffic-test.yaml -+++ b/test/performance/benchmarks/real-traffic-test/real-traffic-test.yaml -@@ -47,23 +47,48 @@ spec: - - name: load-test - image: ko://knative.dev/serving/test/performance/benchmarks/real-traffic-test - args: -- - "-number-of-services=50" -- - "-requests-per-second=2000" -+ - "-number-of-services=50" -+ - "-requests-per-second=2000" -+ - $IMAGE_TEMPLATE_REPLACE - env: - - name: KO_DOCKER_REPO - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/reconciliation-delay/main.go b/test/performance/benchmarks/reconciliation-delay/main.go -index 1c7f600b4..4c7dcdd91 100644 ---- a/test/performance/benchmarks/reconciliation-delay/main.go -+++ b/test/performance/benchmarks/reconciliation-delay/main.go -@@ -108,28 +108,28 @@ func main() { - fatalf("Unable to watch services: %v", err) - } - defer serviceWI.Stop() -- serviceSeen := sets.Set[string]{} -+ serviceSeen := make(sets.String) - - configurationWI, err := sc.ServingV1().Configurations(namespace).Watch(ctx, lo) - if err != nil { - fatalf("Unable to watch configurations: %v", err) - } - defer configurationWI.Stop() -- configurationSeen := sets.Set[string]{} -+ configurationSeen := make(sets.String) - - routeWI, err := sc.ServingV1().Routes(namespace).Watch(ctx, lo) - if err != nil { - fatalf("Unable to watch routes: %v", err) - } - defer routeWI.Stop() -- routeSeen := sets.Set[string]{} -+ routeSeen := make(sets.String) - - revisionWI, err := sc.ServingV1().Revisions(namespace).Watch(ctx, lo) - if err != nil { - fatalf("Unable to watch revisions: %v", err) - } - defer revisionWI.Stop() -- revisionSeen := sets.Set[string]{} -+ revisionSeen := make(sets.String) - - nc := networkingclient.Get(ctx) - ingressWI, err := nc.NetworkingV1alpha1().Ingresses(namespace).Watch(ctx, lo) -@@ -137,29 +137,29 @@ func main() { - fatalf("Unable to watch ingresss: %v", err) - } - defer ingressWI.Stop() -- ingressSeen := sets.Set[string]{} -+ ingressSeen := make(sets.String) - - sksWI, err := nc.NetworkingV1alpha1().ServerlessServices(namespace).Watch(ctx, lo) - if err != nil { - fatalf("Unable to watch skss: %v", err) - } - defer sksWI.Stop() -- sksSeen := sets.Set[string]{} -+ sksSeen := make(sets.String) - - paWI, err := sc.AutoscalingV1alpha1().PodAutoscalers(namespace).Watch(ctx, lo) - if err != nil { - fatalf("Unable to watch pas: %v", err) - } - defer paWI.Stop() -- paSeen := sets.Set[string]{} -+ paSeen := make(sets.String) - - tick := time.NewTicker(*frequency) - metricResults := func() *vegeta.Metrics { -- influxReporter, err := performance.NewInfluxReporter(map[string]string{}) -+ reporter, err := performance.NewDataPointReporterFactory(map[string]string{}, benchmarkName) - if err != nil { -- fatalf(fmt.Sprintf("failed to create influx reporter: %v", err.Error())) -+ fatalf(fmt.Sprintf("failed to create data point reporter: %v", err.Error())) - } -- defer influxReporter.FlushAndShutdown() -+ defer reporter.FlushAndShutdown() - - // We use vegeta.Metrics here as a metrics collector because it already contains logic to calculate percentiles - mr := &vegeta.Metrics{} -@@ -184,7 +184,7 @@ func main() { - break - } - svc := event.Object.(*v1.Service) -- handleEvent(influxReporter, mr, svc, svc.Status.Status, serviceSeen, "Service") -+ handleEvent(&reporter, mr, svc, svc.Status.Status, serviceSeen, "Service") - - case event := <-configurationWI.ResultChan(): - if event.Type != watch.Modified { -@@ -192,7 +192,7 @@ func main() { - break - } - cfg := event.Object.(*v1.Configuration) -- handleEvent(influxReporter, mr, cfg, cfg.Status.Status, configurationSeen, "Configuration") -+ handleEvent(&reporter, mr, cfg, cfg.Status.Status, configurationSeen, "Configuration") - - case event := <-routeWI.ResultChan(): - if event.Type != watch.Modified { -@@ -200,7 +200,7 @@ func main() { - break - } - rt := event.Object.(*v1.Route) -- handleEvent(influxReporter, mr, rt, rt.Status.Status, routeSeen, "Route") -+ handleEvent(&reporter, mr, rt, rt.Status.Status, routeSeen, "Route") - - case event := <-revisionWI.ResultChan(): - if event.Type != watch.Modified { -@@ -208,7 +208,7 @@ func main() { - break - } - rev := event.Object.(*v1.Revision) -- handleEvent(influxReporter, mr, rev, rev.Status.Status, revisionSeen, "Revision") -+ handleEvent(&reporter, mr, rev, rev.Status.Status, revisionSeen, "Revision") - - case event := <-ingressWI.ResultChan(): - if event.Type != watch.Modified { -@@ -216,7 +216,7 @@ func main() { - break - } - ing := event.Object.(*netv1alpha1.Ingress) -- handleEvent(influxReporter, mr, ing, ing.Status.Status, ingressSeen, "Ingress") -+ handleEvent(&reporter, mr, ing, ing.Status.Status, ingressSeen, "Ingress") - - case event := <-sksWI.ResultChan(): - if event.Type != watch.Modified { -@@ -224,7 +224,7 @@ func main() { - break - } - ing := event.Object.(*netv1alpha1.ServerlessService) -- handleEvent(influxReporter, mr, ing, ing.Status.Status, sksSeen, "ServerlessService") -+ handleEvent(&reporter, mr, ing, ing.Status.Status, sksSeen, "ServerlessService") - - case event := <-paWI.ResultChan(): - if event.Type != watch.Modified { -@@ -232,7 +232,7 @@ func main() { - break - } - pa := event.Object.(*autoscalingv1alpha1.PodAutoscaler) -- handleEvent(influxReporter, mr, pa, pa.Status.Status, paSeen, "PodAutoscaler") -+ handleEvent(&reporter, mr, pa, pa.Status.Status, paSeen, "PodAutoscaler") - } - } - }() -@@ -271,8 +271,8 @@ func getService() *v1.Service { - return v1test.Service(rn, sos...) - } - --func handleEvent(influxReporter *performance.InfluxReporter, metricResults *vegeta.Metrics, svc kmeta.Accessor, -- status duckv1.Status, seen sets.Set[string], metric string) { -+func handleEvent(reporter *performance.DataPointReporter, metricResults *vegeta.Metrics, svc kmeta.Accessor, -+ status duckv1.Status, seen sets.String, metric string) { - if seen.Has(svc.GetName()) { - return - } -@@ -288,7 +288,7 @@ func handleEvent(influxReporter *performance.InfluxReporter, metricResults *vege - elapsed := ready.Sub(created) - - if cc.Status == corev1.ConditionTrue { -- influxReporter.AddDataPoint(benchmarkName, map[string]interface{}{metric: elapsed.Seconds()}) -+ (*reporter).AddDataPoint(benchmarkName, map[string]interface{}{metric: elapsed.Seconds()}) - result := vegeta.Result{ - Latency: elapsed, - } -diff --git a/test/performance/benchmarks/reconciliation-delay/reconciliation-delay.yaml b/test/performance/benchmarks/reconciliation-delay/reconciliation-delay.yaml -index 3f5be345a..a78680542 100644 ---- a/test/performance/benchmarks/reconciliation-delay/reconciliation-delay.yaml -+++ b/test/performance/benchmarks/reconciliation-delay/reconciliation-delay.yaml -@@ -49,21 +49,46 @@ spec: - args: - - "-duration=15m" - - "-frequency=5s" -+ - $IMAGE_TEMPLATE_REPLACE - env: - - name: KO_DOCKER_REPO - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/rollout-probe/main.go b/test/performance/benchmarks/rollout-probe/main.go -index 288125138..8f1144ea0 100644 ---- a/test/performance/benchmarks/rollout-probe/main.go -+++ b/test/performance/benchmarks/rollout-probe/main.go -@@ -114,11 +114,11 @@ func main() { - }) - log.Print("Running rollout probe test with selector: ", selector) - -- influxReporter, err := performance.NewInfluxReporter(map[string]string{"target": *target}) -+ reporter, err := performance.NewDataPointReporterFactory(map[string]string{"target": *target}, benchmarkName) - if err != nil { -- log.Fatalf("failed to create influx reporter: %v", err.Error()) -+ log.Fatalf("failed to create data point reporter: %v", err.Error()) - } -- defer influxReporter.FlushAndShutdown() -+ defer reporter.FlushAndShutdown() - - // Setup background metric processes - deploymentStatus := performance.FetchDeploymentsStatus(ctx, namespace, selector, time.Second) -@@ -175,12 +175,12 @@ LOOP: - // If it is the first one -- report it. - if strings.Contains(ds.DeploymentName, firstRev) { - // Add a sample point for the deployment status. -- influxReporter.AddDataPoint(benchmarkName, -- map[string]interface{}{"desired-pods": ds.DesiredReplicas, "available-pods": ds.ReadyReplicas}) -+ reporter.AddDataPoint(benchmarkName, -+ map[string]interface{}{"desired-pods": float64(ds.DesiredReplicas), "available-pods": float64(ds.ReadyReplicas)}) - } else if secondRev != "" && strings.Contains(ds.DeploymentName, secondRev) { - // Otherwise report the pods for the new deployment. -- influxReporter.AddDataPoint(benchmarkName, -- map[string]interface{}{"desired-pods-new": ds.DesiredReplicas, "available-pods-new": ds.ReadyReplicas}) -+ reporter.AddDataPoint(benchmarkName, -+ map[string]interface{}{"desired-pods-new": float64(ds.DesiredReplicas), "available-pods-new": float64(ds.ReadyReplicas)}) - // Ignore all other revisions' deployments if there are, since - // they are from previous test run iterations, and we don't care about - // their reported scale values (should be 0 & 100 depending on which -@@ -208,12 +208,12 @@ LOOP: - metricResults.Close() - - // Report the results -- influxReporter.AddDataPointsForMetrics(metricResults, benchmarkName) -+ reporter.AddDataPointsForMetrics(metricResults, benchmarkName) - _ = vegeta.NewTextReporter(metricResults).Report(os.Stdout) - - if err := checkSLA(metricResults, rate); err != nil { - // make sure to still write the stats -- influxReporter.FlushAndShutdown() -+ reporter.FlushAndShutdown() - log.Fatalf(err.Error()) - } - -diff --git a/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct-lin.yaml b/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct-lin.yaml -index d926ffd90..f4df6d2b9 100644 ---- a/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct-lin.yaml -+++ b/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct-lin.yaml -@@ -52,16 +52,40 @@ spec: - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct.yaml b/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct.yaml -index f4c2bfbf0..5d31e242c 100644 ---- a/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct.yaml -+++ b/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct.yaml -@@ -52,16 +52,40 @@ spec: - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/rollout-probe/rollout-probe-queue-proxy-direct.yaml b/test/performance/benchmarks/rollout-probe/rollout-probe-queue-proxy-direct.yaml -index 59705f94a..60ef86ae1 100644 ---- a/test/performance/benchmarks/rollout-probe/rollout-probe-queue-proxy-direct.yaml -+++ b/test/performance/benchmarks/rollout-probe/rollout-probe-queue-proxy-direct.yaml -@@ -52,16 +52,40 @@ spec: - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/scale-from-zero/main.go b/test/performance/benchmarks/scale-from-zero/main.go -index 2c527c74b..886847e42 100644 ---- a/test/performance/benchmarks/scale-from-zero/main.go -+++ b/test/performance/benchmarks/scale-from-zero/main.go -@@ -127,11 +127,11 @@ func main() { - log.Fatal("Failed to setup clients: ", err) - } - -- influxReporter, err := performance.NewInfluxReporter(map[string]string{"parallel": strconv.Itoa(*parallelCount)}) -+ reporter, err := performance.NewDataPointReporterFactory(map[string]string{"parallel": strconv.Itoa(*parallelCount)}, benchmarkName) - if err != nil { -- log.Fatalf("Failed to create InfluxReporter: %v", err) -+ log.Fatalf("Failed to create data point reporter: %v", err) - } -- defer influxReporter.FlushAndShutdown() -+ defer reporter.FlushAndShutdown() - - // We use vegeta.Metrics here as a metrics collector because it already contains logic to calculate percentiles - vegetaReporter := performance.NewVegetaReporter() -@@ -155,18 +155,18 @@ func main() { - fatalf("Failed to wait for all services to scale to zero: %v", err) - } - -- parallelScaleFromZero(ctx, clients, services, influxReporter, vegetaReporter) -+ parallelScaleFromZero(ctx, clients, services, &reporter, vegetaReporter) - - metricResults := vegetaReporter.StopAndCollectMetrics() - - // Report the results -- influxReporter.AddDataPointsForMetrics(metricResults, benchmarkName) -+ reporter.AddDataPointsForMetrics(metricResults, benchmarkName) - _ = vegeta.NewTextReporter(metricResults).Report(os.Stdout) - - sla := slas[*parallelCount] - if err := checkSLA(metricResults, sla.p95min, sla.p95max, sla.latencyMax, *parallelCount); err != nil { - // make sure to still write the stats -- influxReporter.FlushAndShutdown() -+ reporter.FlushAndShutdown() - log.Fatalf(err.Error()) - } - -@@ -250,7 +250,7 @@ func waitForScaleToZero(ctx context.Context, objs []*v1test.ResourceObjects) err - return g.Wait() - } - --func parallelScaleFromZero(ctx context.Context, clients *test.Clients, objs []*v1test.ResourceObjects, reporter *performance.InfluxReporter, vegetaReporter *performance.VegetaReporter) { -+func parallelScaleFromZero(ctx context.Context, clients *test.Clients, objs []*v1test.ResourceObjects, reporter *performance.DataPointReporter, vegetaReporter *performance.VegetaReporter) { - count := len(objs) - var wg sync.WaitGroup - wg.Add(count) -@@ -261,16 +261,16 @@ func parallelScaleFromZero(ctx context.Context, clients *test.Clients, objs []*v - serviceReadyDuration, deploymentUpdatedDuration, err := runScaleFromZero(ctx, clients, ndx, objs[ndx]) - if err == nil { - vegetaReporter.AddResult(&vegeta.Result{Latency: serviceReadyDuration}) -- reporter.AddDataPoint(benchmarkName, map[string]interface{}{ -+ (*reporter).AddDataPoint(benchmarkName, map[string]interface{}{ - "service-ready-latency": serviceReadyDuration.Milliseconds(), - }) -- reporter.AddDataPoint(benchmarkName, map[string]interface{}{ -+ (*reporter).AddDataPoint(benchmarkName, map[string]interface{}{ - "deployment-updated-latency": deploymentUpdatedDuration.Milliseconds(), - }) - } else { - // Add 1 to the error metric whenever there is an error. -- reporter.AddDataPoint(benchmarkName, map[string]interface{}{ -- "errors": 1, -+ (*reporter).AddDataPoint(benchmarkName, map[string]interface{}{ -+ "errors": float64(1), - }) - } - }() -diff --git a/test/performance/benchmarks/scale-from-zero/scale-from-zero-1.yaml b/test/performance/benchmarks/scale-from-zero/scale-from-zero-1.yaml -index 2968910ce..887677e05 100644 ---- a/test/performance/benchmarks/scale-from-zero/scale-from-zero-1.yaml -+++ b/test/performance/benchmarks/scale-from-zero/scale-from-zero-1.yaml -@@ -46,22 +46,47 @@ spec: - - name: scale-from-zero - image: ko://knative.dev/serving/test/performance/benchmarks/scale-from-zero - args: -- - "-parallel=1" -+ - "-parallel=1" -+ - $IMAGE_TEMPLATE_REPLACE - env: - - name: KO_DOCKER_REPO - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/scale-from-zero/scale-from-zero-100.yaml b/test/performance/benchmarks/scale-from-zero/scale-from-zero-100.yaml -index eb0c1f9e7..22b7d1ef2 100644 ---- a/test/performance/benchmarks/scale-from-zero/scale-from-zero-100.yaml -+++ b/test/performance/benchmarks/scale-from-zero/scale-from-zero-100.yaml -@@ -47,21 +47,46 @@ spec: - image: ko://knative.dev/serving/test/performance/benchmarks/scale-from-zero - args: - - "-parallel=100" -+ - $IMAGE_TEMPLATE_REPLACE - env: - - name: KO_DOCKER_REPO - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/scale-from-zero/scale-from-zero-25.yaml b/test/performance/benchmarks/scale-from-zero/scale-from-zero-25.yaml -index 33a9d6e90..4dceeb7f7 100644 ---- a/test/performance/benchmarks/scale-from-zero/scale-from-zero-25.yaml -+++ b/test/performance/benchmarks/scale-from-zero/scale-from-zero-25.yaml -@@ -47,21 +47,46 @@ spec: - image: ko://knative.dev/serving/test/performance/benchmarks/scale-from-zero - args: - - "-parallel=25" -+ - $IMAGE_TEMPLATE_REPLACE - env: - - name: KO_DOCKER_REPO - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/benchmarks/scale-from-zero/scale-from-zero-5.yaml b/test/performance/benchmarks/scale-from-zero/scale-from-zero-5.yaml -index 356049086..13457d914 100644 ---- a/test/performance/benchmarks/scale-from-zero/scale-from-zero-5.yaml -+++ b/test/performance/benchmarks/scale-from-zero/scale-from-zero-5.yaml -@@ -47,21 +47,46 @@ spec: - image: ko://knative.dev/serving/test/performance/benchmarks/scale-from-zero - args: - - "-parallel=5" -+ - $IMAGE_TEMPLATE_REPLACE - env: - - name: KO_DOCKER_REPO - value: $KO_DOCKER_REPO - - name: SYSTEM_NAMESPACE - value: $SYSTEM_NAMESPACE -+ - name: USE_OPEN_SEARCH -+ value: $USE_OPEN_SEARCH -+ - name: USE_ES -+ value: $USE_ES - - name: INFLUX_URL - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxurl -+ optional: true - - name: INFLUX_TOKEN - valueFrom: - secretKeyRef: - name: performance-test-config - key: influxtoken -+ optional: true -+ - name: ES_URL -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esurl -+ optional: true -+ - name: ES_USERNAME -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: esusername -+ optional: true -+ - name: ES_PASSWORD -+ valueFrom: -+ secretKeyRef: -+ name: performance-test-config -+ key: espassword -+ optional: true - - name: JOB_NAME - valueFrom: - secretKeyRef: -diff --git a/test/performance/performance/es.go b/test/performance/performance/es.go -new file mode 100644 -index 000000000..6a7794e46 ---- /dev/null -+++ b/test/performance/performance/es.go -@@ -0,0 +1,109 @@ -+package performance -+ -+import ( -+ "log" -+ "os" -+ "strings" -+ "time" -+ -+ vegeta "github.com/tsenart/vegeta/v12/lib" -+ indexers2 "knative.dev/serving/test/performance/performance/indexers" -+) -+ -+const ( -+ ESServerURLSEnv = "ES_URL" -+ UseOpenSearcnEnv = "USE_OPEN_SEARCH" -+ UseESEnv = "USE_ES" -+) -+ -+// ESReporter wraps an ES based indexer -+type ESReporter struct { -+ access *indexers2.Indexer -+ tags map[string]string -+} -+ -+func sanitizeIndex(index string) string { -+ indexRaw := strings.ToLower(index) -+ return strings.Replace(indexRaw, " ", "-", -1) -+} -+ -+func splitServers(envURLS string) []string { -+ var addrs []string -+ list := strings.Split(envURLS, ",") -+ for _, u := range list { -+ addrs = append(addrs, strings.TrimSpace(u)) -+ } -+ return addrs -+} -+ -+func NewESReporter(tags map[string]string, indexerType indexers2.IndexerType, index string) (*ESReporter, error) { -+ var servers []string -+ -+ if v, b := os.LookupEnv(ESServerURLSEnv); b { -+ servers = splitServers(v) -+ } -+ indexer, err := indexers2.NewIndexer(indexers2.IndexerConfig{ -+ Type: indexerType, -+ Index: sanitizeIndex(index), -+ Servers: servers, -+ InsecureSkipVerify: true, -+ }) -+ if err != nil { -+ return nil, err -+ } -+ -+ buildID, found := os.LookupEnv(buildIDKey) -+ if found { -+ tags[buildIDKey] = buildID -+ } -+ jobName, found := os.LookupEnv(jobNameKey) -+ if found { -+ tags[jobNameKey] = jobName -+ } -+ -+ return &ESReporter{ -+ access: indexer, -+ tags: tags, -+ }, nil -+} -+ -+func (esr *ESReporter) AddDataPointsForMetrics(m *vegeta.Metrics, benchmarkName string) { -+ metrics := []map[string]interface{}{ -+ { -+ "requests": float64(m.Requests), -+ "rate": m.Rate, -+ "throughput": m.Throughput, -+ "duration": float64(m.Duration), -+ "latency-mean": float64(m.Latencies.Mean), -+ "latency-min": float64(m.Latencies.Min), -+ "latency-max": float64(m.Latencies.Max), -+ "latency-p95": float64(m.Latencies.P95), -+ "success": m.Success, -+ "errors": float64(len(m.Errors)), -+ "bytes-in": float64(m.BytesIn.Total), -+ "bytes-out": float64(m.BytesOut.Total), -+ }, -+ } -+ -+ for _, m := range metrics { -+ esr.AddDataPoint(benchmarkName, m) -+ } -+} -+ -+func (esr *ESReporter) AddDataPoint(measurement string, fields map[string]interface{}) { -+ p := fields -+ p["_measurement"] = measurement -+ p["tags"] = esr.tags -+ // Use the same format as in influxdb -+ p["@timestamp"] = time.Now().Format(time.RFC3339Nano) -+ docs := []interface{}{p} -+ msg, err := (*esr.access).Index(docs, indexers2.IndexingOpts{}) -+ if err != nil { -+ log.Printf("Indexing failed: %s", err.Error()) -+ } -+ log.Printf("%s\n", msg) -+} -+ -+func (esr *ESReporter) FlushAndShutdown() { -+ -+} -diff --git a/test/performance/performance/indexers/elastic.go b/test/performance/performance/indexers/elastic.go -new file mode 100644 -index 000000000..c7b48726e ---- /dev/null -+++ b/test/performance/performance/indexers/elastic.go -@@ -0,0 +1,132 @@ -+// Copyright 2023 The go-commons Authors. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+ -+package indexers -+ -+import ( -+ "bytes" -+ "context" -+ "crypto/sha256" -+ "crypto/tls" -+ "encoding/hex" -+ "encoding/json" -+ "fmt" -+ "net/http" -+ "runtime" -+ "strings" -+ "sync" -+ "time" -+ -+ elasticsearch "github.com/elastic/go-elasticsearch/v7" -+ "github.com/elastic/go-elasticsearch/v7/esutil" -+) -+ -+const elastic = "elastic" -+ -+// Elastic ElasticSearch instance -+type Elastic struct { -+ index string -+} -+ -+// ESClient elasticsearch client instance -+var ESClient *elasticsearch.Client -+ -+// Init function -+func init() { -+ indexerMap[elastic] = &Elastic{} -+} -+ -+// Returns new indexer for elastic search -+func (esIndexer *Elastic) new(indexerConfig IndexerConfig) error { -+ var err error -+ if indexerConfig.Index == "" { -+ return fmt.Errorf("index name not specified") -+ } -+ esIndex := strings.ToLower(indexerConfig.Index) -+ cfg := elasticsearch.Config{ -+ Addresses: indexerConfig.Servers, -+ Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: indexerConfig.InsecureSkipVerify}}, -+ } -+ ESClient, err = elasticsearch.NewClient(cfg) -+ if err != nil { -+ return fmt.Errorf("error creating the ES client: %s", err) -+ } -+ r, err := ESClient.Cluster.Health() -+ if err != nil { -+ return fmt.Errorf("ES health check failed: %s", err) -+ } -+ if r.StatusCode != 200 { -+ return fmt.Errorf("unexpected ES status code: %d", r.StatusCode) -+ } -+ esIndexer.index = esIndex -+ r, _ = ESClient.Indices.Exists([]string{esIndex}) -+ if r.IsError() { -+ r, _ = ESClient.Indices.Create(esIndex) -+ if r.IsError() { -+ return fmt.Errorf("error creating index %s on ES: %s", esIndex, r.String()) -+ } -+ } -+ return nil -+} -+ -+// Index uses bulkIndexer to index the documents in the given index -+func (esIndexer *Elastic) Index(documents []interface{}, opts IndexingOpts) (string, error) { -+ var statString string -+ var indexerStatsLock sync.Mutex -+ indexerStats := make(map[string]int) -+ hasher := sha256.New() -+ bi, err := esutil.NewBulkIndexer(esutil.BulkIndexerConfig{ -+ Client: ESClient, -+ Index: esIndexer.index, -+ FlushBytes: 5e+6, -+ NumWorkers: runtime.NumCPU(), -+ Timeout: 10 * time.Minute, // TODO: hardcoded -+ }) -+ if err != nil { -+ return "", fmt.Errorf("Error creating the indexer: %s", err) -+ } -+ start := time.Now().UTC() -+ for _, document := range documents { -+ j, err := json.Marshal(document) -+ if err != nil { -+ return "", fmt.Errorf("Cannot encode document %s: %s", document, err) -+ } -+ hasher.Write(j) -+ err = bi.Add( -+ context.Background(), -+ esutil.BulkIndexerItem{ -+ Action: "index", -+ Body: bytes.NewReader(j), -+ DocumentID: hex.EncodeToString(hasher.Sum(nil)), -+ OnSuccess: func(c context.Context, bii esutil.BulkIndexerItem, biri esutil.BulkIndexerResponseItem) { -+ indexerStatsLock.Lock() -+ defer indexerStatsLock.Unlock() -+ indexerStats[biri.Result]++ -+ }, -+ }, -+ ) -+ if err != nil { -+ return "", fmt.Errorf("Unexpected ES indexing error: %s", err) -+ } -+ hasher.Reset() -+ } -+ if err := bi.Close(context.Background()); err != nil { -+ return "", fmt.Errorf("Unexpected ES error: %s", err) -+ } -+ dur := time.Since(start) -+ for stat, val := range indexerStats { -+ statString += fmt.Sprintf(" %s=%d", stat, val) -+ } -+ return fmt.Sprintf("Indexing finished in %v:%v", dur.Truncate(time.Millisecond), statString), nil -+} -diff --git a/test/performance/performance/indexers/opensearch.go b/test/performance/performance/indexers/opensearch.go -new file mode 100644 -index 000000000..d8e17bda9 ---- /dev/null -+++ b/test/performance/performance/indexers/opensearch.go -@@ -0,0 +1,132 @@ -+// Copyright 2023 The go-commons Authors. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+ -+package indexers -+ -+import ( -+ "bytes" -+ "context" -+ "crypto/sha256" -+ "crypto/tls" -+ "encoding/hex" -+ "encoding/json" -+ "fmt" -+ "net/http" -+ "runtime" -+ "strings" -+ "sync" -+ "time" -+ -+ opensearch "github.com/opensearch-project/opensearch-go" -+ opensearchutil "github.com/opensearch-project/opensearch-go/opensearchutil" -+) -+ -+const indexer = "opensearch" -+ -+// OSClient OpenSearch client instance -+var OSClient *opensearch.Client -+ -+// OpenSearch OpenSearch instance -+type OpenSearch struct { -+ index string -+} -+ -+// Init function -+func init() { -+ indexerMap[indexer] = &OpenSearch{} -+} -+ -+// Returns new indexer for OpenSearch -+func (OpenSearchIndexer *OpenSearch) new(indexerConfig IndexerConfig) error { -+ var err error -+ if indexerConfig.Index == "" { -+ return fmt.Errorf("index name not specified") -+ } -+ OpenSearchIndex := strings.ToLower(indexerConfig.Index) -+ cfg := opensearch.Config{ -+ Addresses: indexerConfig.Servers, -+ Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: indexerConfig.InsecureSkipVerify}}, -+ } -+ OSClient, err = opensearch.NewClient(cfg) -+ if err != nil { -+ return fmt.Errorf("error creating the OpenSearch client: %s", err) -+ } -+ r, err := OSClient.Cluster.Health() -+ if err != nil { -+ return fmt.Errorf("OpenSearch health check failed: %s", err) -+ } -+ if r.StatusCode != 200 { -+ return fmt.Errorf("unexpected OpenSearch status code: %d", r.StatusCode) -+ } -+ OpenSearchIndexer.index = OpenSearchIndex -+ r, _ = OSClient.Indices.Exists([]string{OpenSearchIndex}) -+ if r.IsError() { -+ r, _ = OSClient.Indices.Create(OpenSearchIndex) -+ if r.IsError() { -+ return fmt.Errorf("error creating index %s on OpenSearch: %s", OpenSearchIndex, r.String()) -+ } -+ } -+ return nil -+} -+ -+// Index uses bulkIndexer to index the documents in the given index -+func (OpenSearchIndexer *OpenSearch) Index(documents []interface{}, opts IndexingOpts) (string, error) { -+ var statString string -+ var indexerStatsLock sync.Mutex -+ indexerStats := make(map[string]int) -+ hasher := sha256.New() -+ bi, err := opensearchutil.NewBulkIndexer(opensearchutil.BulkIndexerConfig{ -+ Client: OSClient, -+ Index: OpenSearchIndexer.index, -+ FlushBytes: 5e+6, -+ NumWorkers: runtime.NumCPU(), -+ Timeout: 10 * time.Minute, // TODO: hardcoded -+ }) -+ if err != nil { -+ return "", fmt.Errorf("Error creating the indexer: %s", err) -+ } -+ start := time.Now().UTC() -+ for _, document := range documents { -+ j, err := json.Marshal(document) -+ if err != nil { -+ return "", fmt.Errorf("Cannot encode document %s: %s", document, err) -+ } -+ hasher.Write(j) -+ err = bi.Add( -+ context.Background(), -+ opensearchutil.BulkIndexerItem{ -+ Action: "index", -+ Body: bytes.NewReader(j), -+ DocumentID: hex.EncodeToString(hasher.Sum(nil)), -+ OnSuccess: func(c context.Context, bii opensearchutil.BulkIndexerItem, biri opensearchutil.BulkIndexerResponseItem) { -+ indexerStatsLock.Lock() -+ defer indexerStatsLock.Unlock() -+ indexerStats[biri.Result]++ -+ }, -+ }, -+ ) -+ if err != nil { -+ return "", fmt.Errorf("Unexpected OpenSearch indexing error: %s", err) -+ } -+ hasher.Reset() -+ } -+ if err := bi.Close(context.Background()); err != nil { -+ return "", fmt.Errorf("Unexpected OpenSearch error: %s", err) -+ } -+ dur := time.Since(start) -+ for stat, val := range indexerStats { -+ statString += fmt.Sprintf(" %s=%d", stat, val) -+ } -+ return fmt.Sprintf("Indexing finished in %v:%v", dur.Truncate(time.Millisecond), statString), nil -+} -diff --git a/test/performance/performance/indexers/types.go b/test/performance/performance/indexers/types.go -new file mode 100644 -index 000000000..2317c746a ---- /dev/null -+++ b/test/performance/performance/indexers/types.go -@@ -0,0 +1,77 @@ -+// Copyright 2023 The go-commons Authors. -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// http://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+ -+package indexers -+ -+import "fmt" -+ -+// Types of indexers -+const ( -+ // Elastic indexer that sends metrics to the configured ES instance -+ ElasticIndexer IndexerType = "elastic" -+ // OpenSearch indexer that sends metrics to the configured Search Instance -+ OpenSearchIndexer IndexerType = "opensearch" -+ // Local indexer that writes metrics to local directory -+ LocalIndexer IndexerType = "local" -+) -+ -+var indexerMap = make(map[IndexerType]Indexer) -+ -+// Indexer interface -+type Indexer interface { -+ Index([]interface{}, IndexingOpts) (string, error) -+ new(IndexerConfig) error -+} -+ -+// Indexing options -+type IndexingOpts struct { -+ MetricName string // MetricName, required for local indexer -+} -+ -+// IndexerType type of indexer -+type IndexerType string -+ -+// IndexerConfig holds the indexer configuration -+type IndexerConfig struct { -+ // Type type of indexer -+ Type IndexerType `yaml:"type"` -+ // Servers List of ElasticSearch instances -+ Servers []string `yaml:"esServers"` -+ // Index index to send documents to server -+ Index string `yaml:"defaultIndex"` -+ // InsecureSkipVerify disable TLS ceriticate verification -+ InsecureSkipVerify bool `yaml:"insecureSkipVerify"` -+ // Directory to save metrics files in -+ MetricsDirectory string `yaml:"metricsDirectory"` -+ // Create tarball -+ CreateTarball bool `yaml:"createTarball"` -+ // TarBall name -+ TarballName string `yaml:"tarballName"` -+} -+ -+// NewIndexer creates a new Indexer with the specified IndexerConfig -+func NewIndexer(indexerConfig IndexerConfig) (*Indexer, error) { -+ var indexer Indexer -+ var exists bool -+ cfg := indexerConfig -+ if indexer, exists = indexerMap[cfg.Type]; exists { -+ err := indexer.new(indexerConfig) -+ if err != nil { -+ return &indexer, err -+ } -+ } else { -+ return &indexer, fmt.Errorf("Indexer not found: %s", cfg.Type) -+ } -+ return &indexer, nil -+} -diff --git a/test/performance/performance/reporter.go b/test/performance/performance/reporter.go -new file mode 100644 -index 000000000..6a3c41539 ---- /dev/null -+++ b/test/performance/performance/reporter.go -@@ -0,0 +1,55 @@ -+package performance -+ -+import ( -+ "os" -+ "strconv" -+ -+ vegeta "github.com/tsenart/vegeta/v12/lib" -+ "knative.dev/serving/test/performance/performance/indexers" -+) -+ -+type DataPointReporter interface { -+ AddDataPoint(measurement string, fields map[string]interface{}) -+ AddDataPointsForMetrics(m *vegeta.Metrics, benchmarkName string) -+ FlushAndShutdown() -+} -+ -+func NewDataPointReporterFactory(tags map[string]string, index string) (DataPointReporter, error) { -+ var reporter DataPointReporter -+ var err error -+ useDefaultReporter := true -+ -+ if v, b := os.LookupEnv(UseESEnv); b { -+ if b, err = strconv.ParseBool(v); err == nil { -+ if b { -+ useDefaultReporter = false -+ reporter, err = NewESReporter(tags, indexers.ElasticIndexer, index) -+ if err != nil { -+ return nil, err -+ } -+ } -+ } -+ } -+ -+ if v, b := os.LookupEnv(UseOpenSearcnEnv); b { -+ if b, err = strconv.ParseBool(v); err == nil { -+ if b { -+ useDefaultReporter = false -+ reporter, err = NewESReporter(tags, indexers.OpenSearchIndexer, index) -+ if err != nil { -+ return nil, err -+ } -+ } -+ } -+ } -+ -+ if useDefaultReporter { -+ reporter, err = NewInfluxReporter(tags) -+ if err != nil { -+ return nil, err -+ } -+ } -+ -+ rep := interface{}(reporter).(DataPointReporter) -+ return rep, nil -+} diff --git a/openshift/performance/scripts/run-all-performance-tests.sh b/openshift/performance/scripts/run-all-performance-tests.sh deleted file mode 100755 index a04122ecd745..000000000000 --- a/openshift/performance/scripts/run-all-performance-tests.sh +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env bash - -declare ns - -# shellcheck disable=SC1091 -source "$(dirname "$0")/setup.sh" - -set -o errexit -set -o nounset -set -o pipefail - -if [[ "${ISOLATE_SERVERLESS:-false}" == "true" ]]; then - nodes=$(kubectl get nodes -l=node-role.kubernetes.io/worker --no-headers -o custom-columns=":metadata.name") - mapfile -t nodes < <(echo "$nodes") - - # disable scheduling on existing worker nodes - for v in "${nodes[@]}" - do - echo "cordoning node: $v" - oc adm cordon "$v" - done - - header "Scaling cluster" - for name in $(oc get machineset -n openshift-machine-api -o name); do oc scale "$name" -n openshift-machine-api --replicas=4; done - oc wait --for=jsonpath="{.status.availableReplicas}=4" machineset --all -n openshift-machine-api --timeout=-1s - - final_nodes=$(kubectl get nodes -l=node-role.kubernetes.io/worker --no-headers -o custom-columns=":metadata.name") - mapfile -t final_nodes < <(echo "$final_nodes") - mapfile -t new_nodes < <(echo "${final_nodes[@]}" "${nodes[@]}" | tr ' ' '\n' | sort | uniq -u) - - # add taints to specific nodes, activator, gateway should run on a separate node each - # use another two nodes for all the Serverless control plane pods, the rest will be used by ksvcs - # isolate data path - oc adm taint nodes "${new_nodes[0]}" knative-activator=true:NoSchedule - oc label nodes "${new_nodes[0]}" knative-activator=true - without_activator=("${new_nodes[@]:1}") - - oc adm taint nodes "${without_activator[0]}" knative-ingress=true:NoSchedule - oc label nodes "${without_activator[0]}" knative-ingress=true - without_ingress=("${without_activator[@]:1}") - - oc adm taint nodes "${without_ingress[0]}" serverless=true:NoSchedule - oc adm taint nodes "${without_ingress[1]}" serverless=true:NoSchedule - - oc label nodes "${without_ingress[0]}" serverless=true - oc label nodes "${without_ingress[1]}" serverless=true - - oc patch knativeserving knative-serving \ - -n "${SYSTEM_NAMESPACE}" \ - --type merge --patch-file "$(dirname "$0")/serving-patch.json" - - # enforce all pods to be re-scheduled on the new nodes only - oc delete po --all -n knative-serving --force --grace-period=0 - oc delete po --all -n knative-serving-ingress --force --grace-period=0 - - # make sure we are in good shape after re-scheduling and patching worked as expected - oc wait --for=condition=Ready knativeserving.operator.knative.dev knative-serving -n "${SYSTEM_NAMESPACE}" --timeout=900s - -else - header "Scaling cluster" - for name in $(oc get machineset -n openshift-machine-api -o name); do oc scale "$name" -n openshift-machine-api --replicas=4; done - oc wait --for=jsonpath="{.status.availableReplicas}=4" machineset --all -n openshift-machine-api --timeout=-1s - - oc patch knativeserving knative-serving \ - -n "${SYSTEM_NAMESPACE}" \ - --type merge --patch '{"metadata": {"annotations": {"serverless.openshift.io/default-enable-http2": "true" }}}' -fi - -############################################################################################### -header "Real traffic test" -toggle_feature kubernetes.podspec-init-containers Enabled -sed -i "s,image: .*,image: ${KNATIVE_SERVING_REAL_TRAFFIC_TEST}," "${SERVING}/test/performance/benchmarks/real-traffic-test/real-traffic-test.yaml" -run_job real-traffic-test "${SERVING}/test/performance/benchmarks/real-traffic-test/real-traffic-test.yaml" "${KNATIVE_SERVING_REAL_TRAFFIC_TEST%/*}" -sleep 100 # wait a bit for the cleanup to be done -kubectl delete ksvc -n "$ns" --all --wait --now -toggle_feature kubernetes.podspec-init-containers Disabled - -############################################################################################### -header "Dataplane probe: Setup" - -pushd "$SERVING" -sed -i "s,image: .*,image: ${KNATIVE_SERVING_TEST_AUTOSCALE}," "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-setup.yaml" -oc apply -f "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-setup.yaml" -popd -oc wait --timeout=60s --for=condition=ready ksvc -n "$ns" --all -oc wait --timeout=60s --for=condition=available deploy -n "$ns" deployment - -############################################################################################## -header "Dataplane probe: deployment" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_DATAPLANE_PROBE}," "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml" -run_job dataplane-probe-deployment "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-deployment.yaml" "${KNATIVE_SERVING_DATAPLANE_PROBE%/*}" - -# additional clean up -oc delete deploy deployment -n "$ns" --ignore-not-found=true -oc delete svc deployment -n "$ns" --ignore-not-found=true -oc wait --for=delete deploy/deployment --timeout=60s -n "$ns" -oc wait --for=delete svc/deployment --timeout=60s -n "$ns" - -############################################################################################## -header "Dataplane probe: activator" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_DATAPLANE_PROBE}," "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-activator.yaml" -run_job dataplane-probe-activator "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-activator.yaml" "${KNATIVE_SERVING_DATAPLANE_PROBE%/*}" - -# additional clean up -oc delete ksvc activator -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/activator --timeout=60s -n "$ns" - -############################################################################################### -header "Dataplane probe: queue proxy" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_DATAPLANE_PROBE}," "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-queue.yaml" -run_job dataplane-probe-queue "${SERVING}/test/performance/benchmarks/dataplane-probe/dataplane-probe-queue.yaml" "${KNATIVE_SERVING_DATAPLANE_PROBE%/*}" - -# additional clean up -oc delete ksvc queue-proxy -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/queue-proxy --timeout=60s -n "$ns" - -############################################################################################### -header "Reconciliation delay test" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_RECONCILIATION_DELAY}," "${SERVING}/test/performance/benchmarks/reconciliation-delay/reconciliation-delay.yaml" -run_job reconciliation-delay "${SERVING}/test/performance/benchmarks/reconciliation-delay/reconciliation-delay.yaml" "${KNATIVE_SERVING_RECONCILIATION_DELAY%/*}" -############################################################################################### -header "Scale from Zero test" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_SCALE_FROM_ZERO}," "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-1.yaml" -run_job scale-from-zero-1 "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-1.yaml" "${KNATIVE_SERVING_SCALE_FROM_ZERO%/*}" -oc delete ksvc -n "$ns" --all --wait --now -sleep 5 # wait a bit for the cleanup to be done - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_SCALE_FROM_ZERO}," "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-5.yaml" -run_job scale-from-zero-5 "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-5.yaml" "${KNATIVE_SERVING_SCALE_FROM_ZERO%/*}" -oc delete ksvc -n "$ns" --all --wait --now -sleep 25 # wait a bit for the cleanup to be done - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_SCALE_FROM_ZERO}," "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-25.yaml" -run_job scale-from-zero-25 "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-25.yaml" "${KNATIVE_SERVING_SCALE_FROM_ZERO%/*}" -oc delete ksvc -n "$ns" --all --wait --now -sleep 50 # wait a bit for the cleanup to be done - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_SCALE_FROM_ZERO}," "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-100.yaml" -run_job scale-from-zero-100 "${SERVING}/test/performance/benchmarks/scale-from-zero/scale-from-zero-100.yaml" "${KNATIVE_SERVING_SCALE_FROM_ZERO%/*}" -oc delete ksvc -n "$ns" --all --wait --now -sleep 100 # wait a bit for the cleanup to be done - -############################################################################################### -header "Load test: Setup" - -pushd "$SERVING" -sed -i "s,image: .*,image: ${KNATIVE_SERVING_TEST_AUTOSCALE}," "${SERVING}/test/performance/benchmarks/load-test/load-test-setup.yaml" -oc apply -f "${SERVING}/test/performance/benchmarks/load-test/load-test-setup.yaml" -popd -oc wait --timeout=60s --for=condition=ready ksvc -n "$ns" --all - -################################################################################################ -header "Load test: zero" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_LOAD_TEST}," "${SERVING}/test/performance/benchmarks/load-test/load-test-0-direct.yaml" -run_job load-test-zero "${SERVING}/test/performance/benchmarks/load-test/load-test-0-direct.yaml" "${KNATIVE_SERVING_LOAD_TEST%/*}" - -# additional clean up -oc delete ksvc load-test-zero -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/load-test-zero --timeout=60s -n "$ns" - -################################################################################################## -header "Load test: always direct" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_LOAD_TEST}," "${SERVING}/test/performance/benchmarks/load-test/load-test-always-direct.yaml" -run_job load-test-always "${SERVING}/test/performance/benchmarks/load-test/load-test-always-direct.yaml" "${KNATIVE_SERVING_LOAD_TEST%/*}" - -# additional clean up -oc delete ksvc load-test-always -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/load-test-always --timeout=60s -n "$ns" - -################################################################################################# -header "Load test: 200 direct" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_LOAD_TEST}," "${SERVING}/test/performance/benchmarks/load-test/load-test-200-direct.yaml" -run_job load-test-200 "${SERVING}/test/performance/benchmarks/load-test/load-test-200-direct.yaml" "${KNATIVE_SERVING_LOAD_TEST%/*}" - -# additional clean up -oc delete ksvc load-test-200 -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/load-test-200 --timeout=60s -n "$ns" - -############################################################################################### -header "Rollout probe: activator direct" - -pushd "$SERVING" - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_TEST_AUTOSCALE}," "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-setup-activator-direct.yaml" -oc apply -f "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-setup-activator-direct.yaml" -popd -oc wait --timeout=800s --for=condition=ready ksvc -n "$ns" --all - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_ROLLOUT_PROBE}," "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct.yaml" -run_job rollout-probe-activator-direct "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct.yaml" "${KNATIVE_SERVING_ROLLOUT_PROBE%/*}" - -# additional clean up -oc delete ksvc activator-with-cc -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/activator-with-cc --timeout=60s -n "$ns" - -################################################################################################# -header "Rollout probe: activator direct lin" - -pushd "$SERVING" -sed -i "s,image: .*,image: ${KNATIVE_SERVING_TEST_AUTOSCALE}," "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-setup-activator-direct-lin.yaml" -oc apply -f "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-setup-activator-direct-lin.yaml" -popd -oc wait --timeout=800s --for=condition=ready ksvc -n "$ns" --all - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_ROLLOUT_PROBE}," "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct-lin.yaml" -run_job rollout-probe-activator-direct-lin "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-activator-direct-lin.yaml" "${KNATIVE_SERVING_ROLLOUT_PROBE%/*}" - -# additional clean up -oc delete ksvc activator-with-cc-lin -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/activator-with-cc-lin --timeout=60s -n "$ns" - -################################################################################################## -header "Rollout probe: queue-proxy direct" - -pushd "$SERVING" -sed -i "s,image: .*,image: ${KNATIVE_SERVING_TEST_AUTOSCALE}," "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-setup-queue-proxy-direct.yaml" -oc apply -f "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-setup-queue-proxy-direct.yaml" -popd -oc wait --timeout=800s --for=condition=ready ksvc -n "$ns" --all - -sed -i "s,image: .*,image: ${KNATIVE_SERVING_ROLLOUT_PROBE}," "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-queue-proxy-direct.yaml" -run_job rollout-probe-queue-direct "${SERVING}/test/performance/benchmarks/rollout-probe/rollout-probe-queue-proxy-direct.yaml" "${KNATIVE_SERVING_ROLLOUT_PROBE%/*}" - -# additional clean up -oc delete ksvc queue-proxy-with-cc -n "$ns" --ignore-not-found=true -oc wait --for=delete ksvc/queue-proxy-with-cc --timeout=60s -n "$ns" - -success diff --git a/openshift/performance/scripts/serving-patch.json b/openshift/performance/scripts/serving-patch.json deleted file mode 100644 index 13967185a93a..000000000000 --- a/openshift/performance/scripts/serving-patch.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "spec": { - "workloads": [ - { - "name": "activator", - "replicas": 2, - "resources": [ - { - "container": "activator", - "requests": { - "cpu": "500m", - "memory": "1000Mi" - }, - "limits": { - "cpu": "2000m", - "memory": "4000Mi" - } - } - ], - "tolerations": [ - { - "key": "knative-activator", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "knative-activator": "true" - } - }, - { - "name": "controller", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "domain-mapping", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "domainmapping-webhook", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "net-kourier-controller", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "autoscaler", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "webhook", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "autoscaler-hpa", - "tolerations": [ - { - "key": "serverless", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "serverless": "true" - } - }, - { - "name": "3scale-kourier-gateway", - "tolerations": [ - { - "key": "knative-ingress", - "operator": "Equal", - "effect": "NoSchedule", - "value": "true" - } - ], - "nodeSelector": { - "knative-ingress": "true" - } - } - ] - } -} diff --git a/openshift/performance/scripts/setup.sh b/openshift/performance/scripts/setup.sh deleted file mode 100755 index df4471be628a..000000000000 --- a/openshift/performance/scripts/setup.sh +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env bash - -set -x -declare SERVING -if [[ -z "${SERVING}" ]]; then - SERVING="$(dirname "${BASH_SOURCE[0]}")/../../.." -fi - -set -o errexit -set -o pipefail - -# shellcheck disable=SC1090 -# shellcheck disable=SC1091 -source "${SERVING}/test/e2e-common.sh" - -declare JOB_NAME -declare BUILD_ID -declare ARTIFACTS -# shellcheck disable=SC2034 -declare AUTH -declare ES_DEVELOPMENT - -ns="default" - -function run_job() { - local name=$1 - local file=$2 - local REPO=$3 - - TEST_IMAGE_TEMPLATE=$(cat <<-END -{{- with .Name }} -{{- if eq . "helloworld"}}$KNATIVE_SERVING_TEST_HELLOWORLD{{end -}} -{{- if eq . "slowstart"}}$KNATIVE_SERVING_TEST_SLOWSTART{{end -}} -{{- if eq . "runtime"}}$KNATIVE_SERVING_TEST_RUNTIME{{end -}} -{{end -}} -END -) - -# shellcheck disable=SC2086 - TEST_IMAGE_TEMPLATE=$(echo ${TEST_IMAGE_TEMPLATE} | sed -e 's/\\/\\\\/g; s/\//\\\//g; s/&/\\\&/g') - - # cleanup from old runs - oc delete job "$name" -n "$ns" --ignore-not-found=true - - # start the load test and get the logs - pushd "$SERVING" - sed "s|\$SYSTEM_NAMESPACE|$SYSTEM_NAMESPACE|g" "$file" | sed "s|\$IMAGE_TEMPLATE_REPLACE|-imagetemplate=$TEST_IMAGE_TEMPLATE|g" | sed "s|\$KO_DOCKER_REPO|$REPO|g" | sed "s|\$USE_OPEN_SEARCH|\"$USE_OPEN_SEARCH\"|g" | sed "s|\$USE_ES|'false'|g" | oc apply -f - - popd - - sleep 5 - - # Follow logs to wait for job termination - oc wait --for=condition=ready -n "$ns" pod --selector=job-name="$name" --timeout=-1s - oc logs -n "$ns" -f "job.batch/$name" - - # Dump logs to a file to upload it as CI job artifact - oc logs -n "$ns" "job.batch/$name" >"$ARTIFACTS/$name.log" - - # clean up - oc delete "job/$name" -n "$ns" --ignore-not-found=true - oc wait --for=delete "job/$name" --timeout=60s -n "$ns" -} - -# If ES_DEVELOPMENT is specified we run against a non-secured development instance -# with no authentication -if [[ "${ES_DEVELOPMENT:-false}" == "true" ]]; then - export ES_URL="https://${ES_HOST_PORT}" -else - if [[ -z "${ES_USERNAME}" ]]; then - ES_USERNAME=$(cat "/secret/username") - fi - - if [[ -z "${ES_PASSWORD}" ]]; then - ES_PASSWORD=$(cat "/secret/password") - fi - - if [[ -z "${ES_HOST_PORT}" ]]; then - ES_HOST_PORT="search-ocp-qe-perf-scale-test-elk-hcm7wtsqpxy7xogbu72bor4uve.us-east-1.es.amazonaws.com" - fi - export ES_URL="https://${ES_USERNAME}:${ES_PASSWORD}@${ES_HOST_PORT}" -fi - -if [[ -z "${JOB_NAME}" ]]; then - JOB_NAME="local" -fi - -if [[ -z "${BUILD_ID}" ]]; then - BUILD_ID="local" -fi - -echo "Running load test with BUILD_ID: ${BUILD_ID}, JOB_NAME: ${JOB_NAME}, reporting results to: ${ES_HOST_PORT}" - -############################################################################################### -header "Preparing cluster config" - -kubectl delete secret performance-test-config -n "$ns" --ignore-not-found=true - -kubectl create secret generic performance-test-config -n "$ns" \ - --from-literal=esurl="${ES_URL}" \ - --from-literal=jobname="${JOB_NAME}" \ - --from-literal=buildid="${BUILD_ID}" diff --git a/openshift/performance/visualization/grafana-dashboard-es.json b/openshift/performance/visualization/grafana-dashboard-es.json deleted file mode 100644 index f8ec8a613162..000000000000 --- a/openshift/performance/visualization/grafana-dashboard-es.json +++ /dev/null @@ -1,4373 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": { - "type": "datasource", - "uid": "grafana" - }, - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "id": 1, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 0 - }, - "id": 15, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "refId": "A" - } - ], - "title": "Dataplane probe results", - "type": "row" - }, - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 4, - "w": 21, - "x": 0, - "y": 1 - }, - "id": 11, - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "* Deployment = Vanilla k8s Deployment\n* Activator = Always hook the activator in\n* Queue = Only hook the activator in when scaled to zero.\n", - "mode": "markdown" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Dataplane probe results", - "type": "text" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 5 - }, - "id": 17, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^requests$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Requests", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 105 - }, - { - "color": "red", - "value": 115 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 5 - }, - "id": 19, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-min$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: min", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 115 - }, - { - "color": "red", - "value": 120 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 5 - }, - "id": 21, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-mean$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: mean", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 8 - }, - "id": 18, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^errors$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Errors", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA:\ndeployment = 105ms\nactivator = 110ms\nqueue = 110ms", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 105 - }, - { - "color": "red", - "value": 115 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 8 - }, - "id": 20, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-p95$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: p95 ", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 3500 - }, - { - "color": "red", - "value": 5000 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 8 - }, - "id": 22, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-max$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: max", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "displayName": "${__field.labels.target}" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 5, - "w": 21, - "x": 0, - "y": 11 - }, - "hiddenSeries": false, - "id": 30, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "", - "bucketAggs": [ - { - "field": "@timestamp", - "id": "2", - "settings": { - "interval": "auto" - }, - "type": "date_histogram" - } - ], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "field": "activator-pod-count", - "id": "1", - "type": "avg" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving dataplane probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Activator pod count", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:78", - "format": "none", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:79", - "format": "none", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 16 - }, - "id": 2, - "panels": [], - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "refId": "A" - } - ], - "title": "Load test results", - "type": "row" - }, - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 4, - "w": 21, - "x": 0, - "y": 17 - }, - "id": 23, - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "* Zero = Only hook the activator in at zero\n* Always = Always hook the activator in.\n* 200 = Hook the activator in until we reach 200 concurrent requests", - "mode": "markdown" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Load test results", - "type": "text" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 21 - }, - "id": 4, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^requests$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Requests", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 105 - }, - { - "color": "red", - "value": 115 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 21 - }, - "id": 6, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-min$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: min", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 115 - }, - { - "color": "red", - "value": 120 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 21 - }, - "id": 8, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-mean$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: mean", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- 0 errors", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 24 - }, - "id": 5, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^errors$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Errors", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 115ms", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 116 - }, - { - "color": "red", - "value": 120 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 24 - }, - "id": 7, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-p95$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: p95", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 10001 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 24 - }, - "id": 37, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-max$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: max", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": {}, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 21, - "x": 0, - "y": 27 - }, - "hiddenSeries": false, - "id": 31, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "", - "bucketAggs": [ - { - "field": "@timestamp", - "id": "2", - "settings": { - "interval": "auto" - }, - "type": "date_histogram" - } - ], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "field": "ready-replicas", - "id": "1", - "type": "avg" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving load test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Ready pods", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:322", - "format": "none", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:323", - "format": "none", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 34 - }, - "id": 13, - "panels": [], - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "refId": "A" - } - ], - "title": "Rollout probe results", - "type": "row" - }, - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 4, - "w": 21, - "x": 0, - "y": 35 - }, - "id": 16, - "options": { - "code": { - "language": "plaintext", - "showLineNumbers": false, - "showMiniMap": false - }, - "content": "* Activator Direct = Always hook the activator in: weightedExponential\n* Activator Direct Lin = Always hook the activator in: linear\n* Queue = Only hook the activator in when scaled to zero.\n", - "mode": "markdown" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [] - } - ], - "title": "Rollout probe results", - "type": "text" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 39 - }, - "id": 24, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^requests$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Requests", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 105 - }, - { - "color": "red", - "value": 115 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 39 - }, - "id": 26, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-min$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: min", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 115 - }, - { - "color": "red", - "value": 120 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 39 - }, - "id": 28, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-mean$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: mean", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 42 - }, - "id": 25, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^errors$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Errors", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA:\n- max: 110ms", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 110 - }, - { - "color": "red", - "value": 111 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 42 - }, - "id": 27, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-p95$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: p95", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "displayName": "${__field.labels.target}", - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 3500 - }, - { - "color": "red", - "value": 5000 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 42 - }, - "id": 29, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-max$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: max", - "type": "stat" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 7, - "w": 21, - "x": 0, - "y": 45 - }, - "hiddenSeries": false, - "id": 32, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "", - "bucketAggs": [ - { - "field": "@timestamp", - "id": "2", - "settings": { - "interval": "auto" - }, - "type": "date_histogram" - } - ], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "field": "available-pods", - "id": "1", - "type": "avg" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving rollout probe\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Desired/Available pods", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:1632", - "format": "short", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:1633", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 52 - }, - "id": 34, - "panels": [], - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "refId": "A" - } - ], - "title": "Scale from zero results", - "type": "row" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 25s", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "yellow", - "value": 25000 - }, - { - "color": "red", - "value": 25001 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 7, - "x": 0, - "y": 53 - }, - "id": 35, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "min" - ], - "fields": "/^service\\-ready\\-latency$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving scale from zero\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Service ready latency (min)", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 25s", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 25000 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 7, - "x": 7, - "y": 53 - }, - "id": 40, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^service\\-ready\\-latency$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving scale from zero\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Service ready latency (mean)", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 25s", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 25000 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 7, - "x": 14, - "y": 53 - }, - "id": 38, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "max" - ], - "fields": "/^service\\-ready\\-latency$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving scale from zero\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Service ready latency (max)", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 25s", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 25000 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 7, - "x": 0, - "y": 57 - }, - "id": 36, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "min" - ], - "fields": "/^deployment\\-updated\\-latency$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving scale from zero\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Deployment updated latency (min)", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 25s", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 25000 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 7, - "x": 7, - "y": 57 - }, - "id": 41, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^deployment\\-updated\\-latency$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving scale from zero\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Deployment updated latency (mean)", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA\n- max: 25s", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 25000 - } - ] - }, - "unit": "ms" - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 7, - "x": 14, - "y": 57 - }, - "id": 39, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "max" - ], - "fields": "/^deployment\\-updated\\-latency$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "hide": false, - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving scale from zero\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Deployment updated latency (max)", - "type": "stat" - }, - { - "collapsed": false, - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 61 - }, - "id": 43, - "panels": [], - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "refId": "A" - } - ], - "title": "Reconciliation delay", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "SLA:\n- max: 5s", - "fieldConfig": { - "defaults": { - "unit": "s" - }, - "overrides": [] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 8, - "w": 21, - "x": 0, - "y": 62 - }, - "hiddenSeries": false, - "id": 45, - "legend": { - "avg": false, - "current": false, - "max": false, - "min": false, - "show": true, - "total": false, - "values": false - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.1.2", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "alias": "", - "bucketAggs": [ - { - "field": "@timestamp", - "id": "2", - "settings": { - "interval": "auto" - }, - "type": "date_histogram" - } - ], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "field": "Configuration", - "id": "1", - "type": "avg" - }, - { - "field": "Ingress", - "id": "3", - "type": "avg" - }, - { - "field": "Route", - "id": "4", - "type": "avg" - }, - { - "field": "PodAutoscaler", - "id": "5", - "type": "avg" - }, - { - "field": "ServerlessService", - "id": "6", - "type": "avg" - }, - { - "field": "Revision", - "id": "7", - "type": "avg" - }, - { - "field": "Service", - "id": "8", - "type": "avg" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving reconciliation delay\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname ", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "thresholds": [ - { - "$$hashKey": "object:127", - "colorMode": "critical", - "fill": true, - "line": true, - "op": "lt", - "value": 5, - "yaxis": "left" - } - ], - "timeRegions": [], - "title": "Reconciliation delay per CustomResource", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:60", - "format": "s", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:61", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 70 - }, - "id": 47, - "panels": [], - "title": "Real traffic test", - "type": "row" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 71 - }, - "id": 49, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^requests$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving real traffic test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Requests", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 105 - }, - { - "color": "red", - "value": 115 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 71 - }, - "id": 52, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-min$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving real traffic test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: min", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 115 - }, - { - "color": "red", - "value": 120 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 71 - }, - "id": 55, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-mean$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving real traffic test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: mean", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 1 - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 0, - "y": 74 - }, - "id": 50, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^errors$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving real traffic test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Errors", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "description": "", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 105 - }, - { - "color": "red", - "value": 115 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 7, - "y": 74 - }, - "id": 54, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-p95$/", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving real traffic test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: p95 ", - "type": "stat" - }, - { - "datasource": { - "type": "elasticsearch", - "uid": "${ds}" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "#EAB839", - "value": 3500 - }, - { - "color": "red", - "value": 5000 - } - ] - }, - "unit": "ns" - }, - "overrides": [] - }, - "gridPos": { - "h": 3, - "w": 7, - "x": 14, - "y": 74 - }, - "id": 56, - "options": { - "colorMode": "value", - "graphMode": "none", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "mean" - ], - "fields": "/^latency\\-max$/", - "values": false - }, - "text": {}, - "textMode": "value" - }, - "pluginVersion": "10.1.2", - "targets": [ - { - "alias": "", - "bucketAggs": [], - "datasource": { - "type": "influxdb", - "uid": "${ds}" - }, - "groupBy": [ - { - "params": [ - "$__interval" - ], - "type": "time" - }, - { - "params": [ - "null" - ], - "type": "fill" - } - ], - "metrics": [ - { - "id": "1", - "settings": { - "limit": "500" - }, - "type": "logs" - } - ], - "orderByTime": "ASC", - "policy": "default", - "query": "_measurement: \"Knative Serving real traffic test\" AND tags.BUILD_ID:$buildid AND tags.JOB_NAME:$jobname", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - }, - { - "params": [], - "type": "mean" - } - ] - ], - "tags": [], - "timeField": "@timestamp" - } - ], - "title": "Latency: max", - "type": "stat" - } - ], - "refresh": "10s", - "schemaVersion": 38, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "allValue": "*", - "current": { - "selected": true, - "text": "All", - "value": "$__all" - }, - "definition": "{\"find\": \"terms\", \"field\": \"tags.BUILD_ID\"}", - "description": "The builds ID according to https://prow.knative.dev/?repo=knative%2Fserving&job=*perf*", - "hide": 0, - "includeAll": true, - "label": "Build ID", - "multi": false, - "name": "buildid", - "options": [], - "query": "{\"find\": \"terms\", \"field\": \"tags.BUILD_ID\"}", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "allValue": "*", - "current": { - "selected": true, - "text": "All", - "value": "$__all" - }, - "definition": "\t{\"find\": \"terms\", \"field\": \"tags.JOB_NAME\"}", - "description": "The prow jobs name according to https://prow.knative.dev/?repo=knative%2Fserving&job=*perf*", - "hide": 0, - "includeAll": true, - "label": "Job name", - "multi": false, - "name": "jobname", - "options": [], - "query": "\t{\"find\": \"terms\", \"field\": \"tags.JOB_NAME\"}", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "sort": 0, - "type": "query" - }, - { - "current": { - "selected": false, - "text": "Elasticsearch", - "value": "Elasticsearch" - }, - "description": "Data Source", - "hide": 0, - "includeAll": false, - "label": "DataSource", - "multi": false, - "name": "ds", - "options": [], - "query": "elasticsearch", - "queryValue": "", - "refresh": 1, - "regex": "", - "skipUrlSync": false, - "type": "datasource" - } - ] - }, - "time": { - "from": "now-6h", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "Knative Serving Performance Tests", - "uid": "igHJ5-fdk", - "version": 10, - "weekStart": "" -} diff --git a/openshift/performance/visualization/setup-es-index.sh b/openshift/performance/visualization/setup-es-index.sh deleted file mode 100755 index f9eab028cd93..000000000000 --- a/openshift/performance/visualization/setup-es-index.sh +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env bash - -set -o errexit -set -o nounset -set -o pipefail - -declare ES_URL -declare ES_USERNAME -declare ES_PASSWORD -declare AUTH -declare ES_DEVELOPMENT - -if [[ -z "${ES_URL}" ]]; then - echo "env variable 'ES_URL' not specified!" - exit 1 -fi - -if [[ "${ES_DEVELOPMENT}" == "true" ]]; then - AUTH="" -else - if [[ -z "${ES_USERNAME}" ]]; then - echo "env variable 'ES_USERNAME' not specified!" - exit 1 - fi - if [[ -z "${ES_PASSWORD}" ]]; then - echo "env variable 'ES_PASSWORD' not specified!" - exit 1 - fi - AUTH="-u $ES_USERNAME:$ES_PASSWORD" -fi - -# shellcheck disable=SC2086 -curl ${AUTH} -k -X POST ${ES_URL}/_index_template/knative-serving -H 'Content-Type: application/json' -d' -{ - "index_patterns": ["knative-serving*"], - "template": { - "settings": { - "number_of_shards": 1 - }, - "mappings": { - "_source": { - "enabled": true - }, - "properties": { - "@timestamp": { - "type": "date" - }, - "_measurement": { - "type": "keyword" - }, - "tags": { - "properties": { - "flavor": { - "type": "keyword" - }, - "parallel": { - "type": "long" - }, - "target": { - "type": "keyword" - }, - "number-of-services": { - "type": "long" - }, - "BUILD_ID": { - "type": "keyword" - }, - "JOB_NAME": { - "type": "keyword" - } - } - }, - "requests": { - "type": "long" - }, - "rate": { - "type": "double" - }, - "throughput": { - "type": "double" - }, - "duration": { - "type": "long" - }, - "latency-mean": { - "type": "long" - }, - "latency-min": { - "type": "long" - }, - "latency-max": { - "type": "long" - }, - "latency-p95": { - "type": "long" - }, - "success": { - "type": "double" - }, - "errors": { - "type": "long" - }, - "bytes-in": { - "type": "double" - }, - "bytes-out": { - "type": "double" - }, - "activator-pod-count": { - "type": "long" - }, - "desired-replicas": { - "type": "long" - }, - "ready-replicas": { - "type": "long" - }, - "sks": { - "type": "long" - }, - "num-of-activators": { - "type": "long" - }, - "desired-pods": { - "type": "long" - }, - "available-pods": { - "type": "long" - }, - "desired-pods-new": { - "type": "long" - }, - "available-pods-new": { - "type": "long" - }, - "service-ready-latency": { - "type": "long" - }, - "deployment-updated-latency": { - "type": "long" - }, - "Service": { - "type": "double" - }, - "Configuration": { - "type": "double" - }, - "Route": { - "type": "double" - }, - "Revision": { - "type": "double" - }, - "Ingress": { - "type": "double" - }, - "ServerlessService": { - "type": "double" - }, - "PodAutoscaler": { - "type": "double" - } - } - } - }, - "priority": 200, - "version": 1, - "_meta": { - "description": "knative performance" - } -} -' \ No newline at end of file