diff --git a/.github/actions/setup-helm/action.yml b/.github/actions/setup-helm/action.yml new file mode 100644 index 000000000..6ab0218e5 --- /dev/null +++ b/.github/actions/setup-helm/action.yml @@ -0,0 +1,29 @@ +name: Setup Helm +description: Install a SHA-pinned Helm release via the upstream get-helm-3 script + +inputs: + version: + description: Helm CLI release tag (e.g. v4.1.4) + required: false + default: v4.1.4 + sha256: + description: Expected SHA-256 of the upstream get-helm-3 script for the pinned version + required: false + default: 38b65f882d9cae3891755bdb03becc6a01ae6f9cb24826c191f219ddfee70a5d + +runs: + using: composite + steps: + - name: Install Helm (${{ inputs.version }}) + shell: bash + run: | + set -euo pipefail + script=$(mktemp) + curl -fsSL -o "$script" "https://raw.githubusercontent.com/helm/helm/${{ inputs.version }}/scripts/get-helm-3" + actual=$(sha256sum "$script" | cut -d' ' -f1) + if [ "$actual" != "${{ inputs.sha256 }}" ]; then + echo "::error::helm install script hash mismatch (expected ${{ inputs.sha256 }}, got $actual)" + exit 1 + fi + bash "$script" --version "${{ inputs.version }}" + helm version --short diff --git a/.github/workflows/README.md b/.github/workflows/README.md index 23e7642ce..1708535dd 100644 --- a/.github/workflows/README.md +++ b/.github/workflows/README.md @@ -1,5 +1,17 @@ # Workflows +## dependency-checks + +Validates PRs touching `docs-source/site/` or `data-refactoring-advisor/`, including +Dependabot updates. Each project runs only when its files change; changes to the +workflow itself and manual runs validate both projects. + +The docs job uses Node 22 for a locked install, typecheck, and production build. +The advisor job uses Python 3.12 to install requirements, check dependency +compatibility, compile source, and run unit tests covering SQL parsing, community +detection, configuration loading, and the Streamlit landing page. Database and +LLM integration require separate testing with live services. + ## obaas-base-image This workflow takes the GraalVM image from Oracle Container Registry, scans for vulnerabilities, applies the latest OS patches, and stages the new image in ghcr.io for use with the OBaaS Platform. diff --git a/.github/workflows/helm.yml b/.github/workflows/helm.yml new file mode 100644 index 000000000..611adf41f --- /dev/null +++ b/.github/workflows/helm.yml @@ -0,0 +1,181 @@ +# Workflow for validating the Helm chart and its contract tests +# spell-checker: disable +name: Helm Tests + +on: + pull_request: + types: + - opened + - synchronize + - reopened + - ready_for_review + paths: + - "helm/**" + - ".github/actions/setup-helm/**" + - ".github/workflows/helm.yml" + + # Allows running this workflow manually + workflow_dispatch: + +concurrency: + group: helm-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-helm: + if: github.event.pull_request.draft == false || github.event_name != 'pull_request' + runs-on: ubuntu-latest + permissions: + contents: read + env: + CHART_DIR: helm/infra-charts/obaas + PREREQS_CHART_DIR: helm/infra-charts/obaas-prereqs + HELM_KUBE_VERSION: "1.36.0" + + steps: + - name: Checkout Code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0 + with: + python-version: "3.12" + + - name: Install Python tooling + run: pip install yamllint pytest pyyaml requests + + - uses: ./.github/actions/setup-helm + + - name: Run yamllint + run: yamllint helm/ + + # Cache the packaged subchart tarballs in both infrastructure charts. + # Key on Chart.lock so the cache is invalidated exactly when the + # locked dependency version changes (the only time we want a miss). + - name: Cache helm subcharts + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: | + helm/infra-charts/obaas/charts + helm/infra-charts/obaas-prereqs/charts + key: helm-charts-${{ hashFiles('helm/infra-charts/obaas/Chart.lock', 'helm/infra-charts/obaas-prereqs/Chart.lock') }} + + - name: Build chart dependencies + # Pulls subchart tarballs into each chart's charts/ directory. The repo-add is + # required because `helm dependency build` resolves by repository + # URL via `helm repo list`, not by fetching the URL directly. + run: | + helm repo add --force-update ingress-nginx https://kubernetes.github.io/ingress-nginx + helm repo add --force-update signoz https://charts.signoz.io + helm repo add --force-update apisix https://apache.github.io/apisix-helm-chart + helm repo add --force-update ai-optimizer https://oracle.github.io/ai-optimizer/helm + helm repo add --force-update external-secrets https://charts.external-secrets.io + helm repo add --force-update metrics-server https://kubernetes-sigs.github.io/metrics-server/ + helm repo add --force-update prometheus-community https://prometheus-community.github.io/helm-charts + helm repo add --force-update strimzi https://strimzi.io/charts/ + helm repo add --force-update coherence https://oracle.github.io/coherence-operator/charts + helm repo add --force-update opentelemetry https://open-telemetry.github.io/opentelemetry-helm-charts + helm dependency build "$CHART_DIR" + operator_archive="$PREREQS_CHART_DIR/charts/oracle-database-operator-0.2.0.tgz" + if [ ! -f "$operator_archive" ]; then + echo "::error::oracle-database-operator chart archive is missing" + exit 1 + fi + rm -rf "$PREREQS_CHART_DIR/charts/oracle-database-operator" + tar -xzf "$operator_archive" -C "$PREREQS_CHART_DIR/charts" + helm dependency build "$PREREQS_CHART_DIR" + + - name: Run Helm Lint (strict, with required values) + run: >- + helm lint --strict "$CHART_DIR" + --kube-version "$HELM_KUBE_VERSION" + --set global.api.apiKey=test-api-key + --set client.cookieSecret=test-cookie-32-char-test-key-padding + + - name: Run Helm Lint for prerequisites + run: helm lint --strict "$PREREQS_CHART_DIR" --kube-version "$HELM_KUBE_VERSION" + + - name: Run Helm Package (validate chart builds) + run: | + helm package "$CHART_DIR" --destination "$RUNNER_TEMP/helm-package" + helm package "$PREREQS_CHART_DIR" --destination "$RUNNER_TEMP/helm-package" + env: + RUNNER_TEMP: ${{ runner.temp }} + + # Render every example values file. CI overrides make examples that + # document external secrets self-contained for Helm's offline renderer. + - name: helm template against examples + run: | + shopt -s nullglob + failed=0 + for f in "$CHART_DIR"/examples/*.yaml; do + ci_overrides=() + case "$f" in + *values-ai-optimizer.yaml) + ci_overrides=( + --set "ai-optimizer.global.api.secretName=" + --set "ai-optimizer.global.api.secretKey=" + --set "database.type=SIDB-FREE" + --set "database.privAuthN.secretName=" + --set "database.privAuthN.secretNamespace=" + --set "ai-optimizer.server.database.type=SIDB-FREE" + --set "ai-optimizer.server.database.adb.useExisting=false" + --set "ai-optimizer.server.database.privAuthN.secretName=" + ) + ;; + *values-byodb.yaml) + ci_overrides=( + --set "database.type=SIDB-FREE" + --set "database.privAuthN.secretName=" + --set "database.privAuthN.secretNamespace=" + ) + ;; + *values-existing-adb.yaml) + ci_overrides=( + --set "database.type=SIDB-FREE" + --set "database.privAuthN.secretName=" + --set "database.privAuthN.secretNamespace=" + --set "database.image.repository=container-registry.oracle.com/database/free" + --set "database.image.tag=23.26.3.0" + ) + ;; + esac + echo "::group::$f" + if ! helm template ci "$CHART_DIR" \ + --kube-version "$HELM_KUBE_VERSION" \ + --values "$f" \ + --set global.api.apiKey=ci-test \ + --set client.cookieSecret=ci-cookie-32-char-test-key-padding \ + --set server.database.adb.skipCrdCheck=true \ + "${ci_overrides[@]}" >/dev/null; then + failed=1 + fi + echo "::endgroup::" + done + exit "$failed" + + # Render at the supported Kubernetes minimum. + - name: helm template at minimum kubeVersion + run: >- + helm template ci "$CHART_DIR" --kube-version "$HELM_KUBE_VERSION" + --set global.api.apiKey=ci-test + --set client.cookieSecret=ci-cookie-32-char-test-key-padding + + - name: helm template prerequisites at minimum kubeVersion + run: helm template ci "$PREREQS_CHART_DIR" --namespace ci --kube-version "$HELM_KUBE_VERSION" + + # Negative test: the schema must reject an invalid enum value. + # Inverts the exit code so the step passes only when helm fails. + - name: values.schema.json rejects invalid enum + run: | + if helm template ci "$CHART_DIR" \ + --kube-version "$HELM_KUBE_VERSION" \ + --set signozUpgrade.stage=invalid \ + --set global.api.apiKey=ci-test \ + --set client.cookieSecret=ci-cookie-32-char-test-key-padding \ + >/dev/null 2>&1; then + echo "::error::values.schema.json no longer rejects signozUpgrade.stage=invalid" + exit 1 + fi + + - name: Run Helm contract tests + run: pytest helm/tests/ -v diff --git a/.github/workflows/opentofu.yml b/.github/workflows/opentofu.yml new file mode 100644 index 000000000..7edf71e2a --- /dev/null +++ b/.github/workflows/opentofu.yml @@ -0,0 +1,129 @@ +# Workflow for validating Infrastructure as Code +# +# This workflow validates syntax, formatting, schema, and security. +# It does NOT validate infrastructure logic or resource creation. +# Manual testing with real OCI credentials is REQUIRED before merging. +# See opentofu/README.md for instructions. + +name: Validate Infrastructure as Code + +on: + pull_request: + types: + - opened + - synchronize + - reopened + - ready_for_review + paths: + - "opentofu/tests/**" + - "opentofu/**" + - ".github/workflows/opentofu.yml" + + workflow_dispatch: + +# Optimize: Cache terraform providers across all jobs +env: + TF_PLUGIN_CACHE_DIR: ${{ github.workspace }}/.terraform.d/plugin-cache + +jobs: + # Job 1: Static analysis (validation, formatting, schema) + verify-iac-static: + name: Static Analysis + if: github.event.pull_request.draft == false || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + container: + image: ghcr.io/opentofu/opentofu:1.12.6 + permissions: + contents: read + + steps: + - name: Checkout Code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Verify app_version is 0.0.0 + working-directory: ./opentofu + run: | + if ! grep -qE '^\s*app_version\s*=\s*"0\.0\.0"\s*$' versions.tf; then + echo "::error file=opentofu/versions.tf::app_version must be \"0.0.0\" outside of the release workflow" + grep -nE '^\s*app_version\s*=' versions.tf || true + exit 1 + fi + + # Terraform validation steps + - name: Install Cache Dependencies + run: apk add --no-cache tar zstd + + - name: Cache Terraform Providers + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: ${{ env.TF_PLUGIN_CACHE_DIR }} + key: ${{ runner.os }}-terraform-${{ hashFiles('opentofu/provider.tf', 'opentofu/.terraform.lock.hcl') }} + restore-keys: | + ${{ runner.os }}-terraform- + + - name: Create Plugin Cache Directory + run: mkdir -p ${{ env.TF_PLUGIN_CACHE_DIR }} + + - name: Initialize Infrastructure as Code + working-directory: ./opentofu + run: tofu init -backend=false + + - name: Validate Infrastructure as Code + working-directory: ./opentofu + run: tofu validate + + - name: Check Terraform Formatting + working-directory: ./opentofu + run: tofu fmt -recursive -check + + # Schema validation + - name: Install Python and Dependencies + run: | + apk add --no-cache python3 py3-pip + pip3 install --break-system-packages pyyaml jsonschema referencing + + - name: Validate Oracle Resource Manager Schema + working-directory: ./opentofu/tests + run: python3 validate_omr_schema.py OMRMetaSchema.yaml ../schema.yaml + + # Job 2: Security scanning (runs on host for Docker access) + verify-iac-security: + name: Security Scan + if: github.event.pull_request.draft == false || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout Code + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + + - name: Set up Trivy + uses: aquasecurity/setup-trivy@81e514348e19b6112ce2a7e3ecbafe19c1e1f567 # v0.3.1 + with: + cache: true + + - name: Run Trivy Security Scan for IaC + uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0 + with: + scan-type: config + scan-ref: opentofu + format: sarif + output: trivy-results.sarif + exit-code: '0' + cache: false + skip-setup-trivy: true + + verify-iac-summary: + name: Validation Summary + if: github.event.pull_request.draft == false || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + permissions: {} + needs: [verify-iac-static, verify-iac-security] + + steps: + - name: All Validations Passed + run: | + echo "✅ Syntax, formatting, schema, security validated" + echo "⚠️ Does NOT validate infrastructure logic" + echo "📖 See opentofu/README.md for manual testing requirements" diff --git a/.yamllint b/.yamllint new file mode 100644 index 000000000..c39b85002 --- /dev/null +++ b/.yamllint @@ -0,0 +1,52 @@ +extends: default + +ignore: | + .venv/ + .github/ + helm/app-charts/**/templates/ + helm/infra-charts/**/templates/ + helm/infra-charts/**/charts/ + opentofu/modules/*/templates/ + +rules: + line-length: + max: 120 + level: warning + + indentation: + spaces: 2 + indent-sequences: true + + # Helm templates often use truthy values like yes/no, on/off + truthy: + allowed-values: ['true', 'false', 'yes', 'no', 'on', 'off'] + check-keys: false + + # Allow both quoted and unquoted strings + quoted-strings: + quote-type: any + required: false + + # Don't require document start marker (---) + document-start: disable + + # More lenient on comments + comments: + min-spaces-from-content: 1 + + # Disable for commented-out examples in Helm values + comments-indentation: disable + + # Allow empty values (common in Helm templates) + empty-values: + forbid-in-block-mappings: false + forbid-in-flow-mappings: false + + # Brackets and braces (lenient for Helm) + brackets: + min-spaces-inside: 0 + max-spaces-inside: 1 + + braces: + min-spaces-inside: 0 + max-spaces-inside: 1 diff --git a/AGENTS.md b/AGENTS.md index 985aaf215..1f9065aea 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,27 +1,24 @@ -# OBaaS 2.2.0 Installation Guide For AI Agents +# OBaaS 2.1.2 Installation Guide For AI Agents -This guide tells an AI agent how to plan, prepare, install, and verify Oracle Backend for Microservices and AI, commonly called OBaaS, version 2.2.0. In the product documentation, this version is the `next` documentation stream. +This guide tells an AI agent how to plan, prepare, install, and verify Oracle Backend for Microservices and AI, commonly called OBaaS, version 2.1.2. In the product documentation, this version is the `next` documentation stream. -Do not trust a hardcoded version number, including the ones in this guide, over the repository itself. Before relying on any version-specific instruction, confirm the current in-development version with: +## Markdown Formatting -```bash -grep '^appVersion:' helm/infra-charts/obaas/Chart.yaml -grep '^version:' helm/infra-charts/obaas/Chart.yaml -``` - -2.1.1 is now a released, versioned documentation snapshot (`docs-source/site/versioned_docs/version-2.1.1/`), not the in-development target. As of this writing, the `next` docs stream (`docs-source/site/docs/upgrade/index.mdx`, `docs-source/site/docs/rel_notes/index.mdx`) still hardcodes `OBAAS_VERSION = '2.1.1'` even though the chart sources have moved to 2.2.0; the Chart.yaml files, not the docs prose, are the source of truth for the target version number. +- Under `docs-source/`, format tables in Markdown documentation as HTML `` elements. +- Use pipe-delimited Markdown tables in agent instructions and runbooks, including `AGENTS.md`, `TEST-AGENT.md`, and `CBV5-AGENT.md`. ## Source Rules -- Use only the OBaaS `next` documentation and chart sources: +- Use the OBaaS `next` documentation and chart sources for OBaaS behavior: - `docs-source/site/docs` - `helm/infra-charts` +- Use `opentofu/README.md`, its examples, Terraform sources, templates, and `cfgmgt/apply.py` for OCI provisioning and generated Kubernetes configuration. Use `TEST-AGENT.md` for provisioning test coverage, evidence, and reporting. - Do not use documentation for the previous 2.0.0 version. - Do not infer installation behavior from unrelated repository directories. - Treat the public docs entry point as the same content represented locally under `docs-source/site/docs/intro.md` and the setup pages under `docs-source/site/docs/setup/helm/`. - Treat Helm chart defaults and examples under `helm/infra-charts` as the source of truth for chart value names and installable optional components. -- For the currently in-development OBaaS version, install, render, lint, and test with the local chart paths under `helm/infra-charts`, not with public Helm repository references, unless the public Helm repository has already published charts whose `APP VERSION` or `appVersion` matches the target version. -- OBaaS 2.2.0 is currently an in-development target in this repository. Its local charts are `helm/infra-charts/obaas-prereqs` and `helm/infra-charts/obaas`; do not install `obaas/obaas-prereqs` or `obaas/obaas` from the public repository for a 2.2.0 test while the public repository still advertises an older application version. +- For test runs, install, render, and lint using this checkout's `helm/infra-charts/obaas-prereqs` and `helm/infra-charts/obaas` charts. This applies even when matching versions are published. +- For other installations of the in-development OBaaS version, use local charts unless the public Helm repository has published charts whose `APP VERSION` or `appVersion` matches the target version. ## Before You Start @@ -57,7 +54,7 @@ kubectl get nodes ### Kubernetes Cluster -OBaaS 2.2.0 requires a CNCF-compliant Kubernetes cluster. The `next` prerequisites documentation states: +OBaaS 2.1.2 requires a CNCF-compliant Kubernetes cluster. The `next` prerequisites documentation states: - Kubernetes 1.34 or later. - At least 3 worker nodes. @@ -154,9 +151,12 @@ EXECUTE WITH GRANT OPTION on: ### cert-manager -OBaaS requires cert-manager. If cert-manager is not already installed and healthy in the cluster, install it before `obaas-prereqs`. +OBaaS requires healthy cert-manager before `obaas-prereqs`. Verify an existing installation through its owner, or install cert-manager when absent. -An installation is healthy only when both the Kubernetes components are ready and +Record whether cert-manager is owned by a Helm release or the OKE `CertManager` add-on. For an OKE-owned installation, verify the add-on status through OCI, available cert-manager deployments, ready webhook endpoints, and cert-manager CRDs in Kubernetes. Discover its actual namespace and collect add-on diagnostics and namespace events on failure. Keep lifecycle management with OKE; a separate Helm release is not required for this ownership mode. + +For a Helm-owned installation, follow the checks and recovery procedure below. +It is healthy only when both the Kubernetes components are ready and the Helm release reports `STATUS: deployed`. Healthy pods alone are not sufficient: cert-manager uses a post-install startup-check Job, and an interrupted Helm client can leave a release `pending-install` or leave running resources with no release @@ -188,15 +188,15 @@ kubectl wait --for=condition=Available deployment --all \ kubectl get crd | grep cert-manager ``` -Do not continue to `obaas-prereqs` unless `helm status` reports +For Helm ownership, do not continue to `obaas-prereqs` unless `helm status` reports `STATUS: deployed`. -If Helm reports `pending-install` or `release: not found`, stop before installing +For a Helm-owned installation, if Helm reports `pending-install` or `release: not found`, stop before installing OBaaS prerequisites. Collect `helm status`, `helm history`, the cert-manager Job list and relevant Job logs, deployment readiness, and namespace events. Do not delete cert-manager workloads or CRDs merely to clear Helm state. -When workloads are healthy but `helm status` reports `release: not found`, inspect +When Helm-owned workloads are healthy but `helm status` reports `release: not found`, inspect the Helm ownership metadata before retrying `helm upgrade --install`: ```bash @@ -225,13 +225,7 @@ cd helm/infra-charts/tools ./mirror-images.sh myregistry.example.com ``` -Confirm the exact image list filename before mirroring rather than assuming one exists for the current in-development version: - -```bash -ls helm/infra-charts/tools/image_lists/ -``` - -The image list for this version is `k8s_images_2.2.0.txt`; `k8s_images_2.0.0.txt`, `k8s_images_2.1.0.txt`, and `k8s_images_2.1.1.txt` also exist for older versions. If no image list matching the current `appVersion` is present, treat that as a gap: either use the closest prior version's list as a starting point and diff it against `helm/infra-charts/obaas/values.yaml` and `helm/infra-charts/obaas-prereqs/values.yaml` image references, or flag the missing list to the operator before proceeding with an air-gapped install. +The image list for this version is available under `helm/infra-charts/tools/image_lists/k8s_images_2.1.2.txt`. ## Planning The Installation @@ -276,10 +270,6 @@ Use these scenario labels when asking clarifying questions: - AKS-specific install: `obaas-prereqs/examples/values-aks.yaml` and `obaas/examples/values-aks.yaml` together. - AI Optimizer install: `values-ai-optimizer.yaml`. - Custom APISIX plugins: `values-custom-apisix-plugins.yaml`. -- Coherence: `values-coherence.yaml`. -- Kafka: `values-kafka.yaml`. -- Rancher JWT-based access: `values-rancher-jwt.yaml`. -- ARM64/OCI test environments: `values-arm64-oci-test.yaml`. The examples are stored locally under: @@ -288,14 +278,26 @@ helm/infra-charts/obaas-prereqs/examples/ helm/infra-charts/obaas/examples/ ``` -`helm/infra-charts/obaas/examples/README.md` documents these scenarios in more detail than this guide, including current persistence guidance; check it for the freshest per-scenario notes, and re-list the directory contents rather than assuming this file's list is exhaustive: +If the target version has been published and installing from the public Helm repository is appropriate, copy or reference prepared local values files. The `examples/...` paths only work from a checkout or environment where those files exist. -```bash -ls helm/infra-charts/obaas/examples/ -ls helm/infra-charts/obaas-prereqs/examples/ -``` +### OCI Provisioning With OpenTofu Or Terraform -If the target version has been published and installing from the public Helm repository is appropriate, copy or reference prepared local values files. The `examples/...` paths only work from a checkout or environment where those files exist. +Use `opentofu/README.md` for initialization, planning, apply, and infrastructure cleanup. Select the mode in `TEST-AGENT.md` and record the state location and resource ownership before provisioning. + +Read the provisioning Kubernetes default from `opentofu/versions.tf` before each run (currently `1.36.4`), and record the planned and actual control-plane and worker versions. This provisioning default is separate from the documented Kubernetes minimum of 1.34. The CPU and GPU node pools in `opentofu/modules/kubernetes/main.tf` set `node_metadata.areLegacyImdsEndpointsDisabled` to `"true"`. Verify the setting in the plan and resulting worker-instance metadata; tooling on these workers must use IMDSv2. + +With `k8s_run_cfgmgt=true` (the default), apply runs `cfgmgt/apply.py`, which applies the generated Kubernetes manifest and installs `obaas-prereqs` in `obaas-system` and `obaas` in the namespace returned by `app_name`. Verify these releases using the checks below before deploying workloads. Reapply reruns configuration management; use read-only health checks when validating an existing installation. + +For OCI test runs, explicitly set `k8s_use_local_charts=true` in the run's variable file before plan and apply. It selects this checkout's `helm/infra-charts/obaas-prereqs` and `helm/infra-charts/obaas` directories. Prepare dependencies using `opentofu/README.md` and verify both local chart paths exist before apply. Confirm the target versions from their `Chart.yaml` files and verify the installed release metadata; `opentofu/versions.tf` contains a release placeholder. + +With `k8s_run_cfgmgt=false`, apply still creates OCI resources, selected add-ons, and files under `opentofu/cfgmgt/stage/`. From a host with cluster API access, select the generated kubeconfig, review and apply the required namespaces, secrets, and ingress resources from `k8s-manifest.yaml`, and perform the operator setup defined in `cfgmgt/apply.py` when applicable. Then use the generated `obaas-prereqs-values.yaml` and `obaas-values.yaml` as the basis for the Helm steps below. Protect the staged files because the manifest contains credentials and private keys. + +Reconcile add-on ownership with chart values before installation: + +- `k8s_use_cluster_addons=true` creates OKE `CertManager`, `OracleDatabaseOperator`, and `NativeIngressController` add-ons. Verify each selected add-on and its Kubernetes components are healthy. Use the OKE cert-manager checks above. +- The generated prerequisites values disable `oracle-database-operator`. Keep this setting when the OKE operator is healthy; enable the chart-managed operator when required and no existing operator supplies it. +- The generated application values disable Envoy Gateway and ingress-nginx and route APISIX through OCI Native Ingress class `native-ic`. Verify the controller, IngressClass, load balancer, and endpoint. Record TLS configuration or an explicit access-policy waiver for HTTP test endpoints. +- Setting `k8s_use_cluster_addons=false` leaves those template settings unchanged. Use infrastructure-only mode to prepare cert-manager, the required database operator, and the selected ingress controller before Helm installation, with corresponding values overrides. ### AKS-Specific Planning @@ -348,7 +350,7 @@ OBaaS uses two Helm charts. ### Choose And Layer Values Files -Start from the closest example and add only the overrides needed for the environment. For an in-development version such as the current 2.2.0 work, use the local chart path: +Start from the closest example and add only the overrides needed for the environment. For an in-development version such as the current 2.1.2 work, use the local chart path: ```bash helm upgrade --install helm/infra-charts/obaas \ @@ -382,8 +384,7 @@ database: Notes: - Best for development, testing, and standalone evaluation. -- Database data is persisted by default via a PersistentVolumeClaim (`database.persistence.enabled: true`, default `size: 250Gi`, `storageClass` empty to use the cluster default). Confirm a suitable RWX/RWO-capable storage class exists and has enough capacity before installing; set `database.persistence.storageClass` explicitly when the cluster default is unsuitable. -- By default `global.cleanupPVCs: true` deletes this PVC — and its database data — on `helm uninstall`. Set `global.cleanupPVCs: false` if the operator wants database data to survive an uninstall. +- Requires sufficient ephemeral node storage. - Privileged and application credentials can be auto-generated when not supplied. - The database container image defaults to Oracle Database Free. @@ -397,7 +398,7 @@ database: Notes: - Best for development and testing when the operator wants the in-cluster Autonomous Database Free path rather than `SIDB-FREE`. -- Like `SIDB-FREE`, it runs database infrastructure inside the Kubernetes cluster. Data is persisted by default through the same `database.persistence` PVC settings described for `SIDB-FREE` above (default `size: 250Gi`), and `global.cleanupPVCs: true` likewise deletes it on uninstall unless overridden. +- Like `SIDB-FREE`, it runs database infrastructure inside the Kubernetes cluster and needs adequate node storage and capacity. - Privileged and application credentials can be auto-generated when not supplied. - The database container image is controlled by `database.image.repository` and `database.image.tag`, the same value path used by `SIDB-FREE`. - Private registry installs must override `database.image.repository` and `database.image.tag` when the database image is mirrored; see the private registry values section. @@ -486,7 +487,7 @@ Before installing with `database.type: OTHER`, verify the privileged user has th ### Cluster Access Values -OBaaS 2.2.0 supports both Gateway API through Envoy Gateway and Ingress API through ingress-nginx. Envoy Gateway is enabled by default. ingress-nginx is deprecated and disabled by default; enable it only when an environment still requires the legacy Ingress API path. +OBaaS 2.1.2 supports both Gateway API through Envoy Gateway and Ingress API through ingress-nginx. Envoy Gateway is enabled by default. ingress-nginx is deprecated and disabled by default; enable it only when an environment still requires the legacy Ingress API path. Enable Envoy Gateway: @@ -536,14 +537,21 @@ signoz: enabled: true otmm: - enabled: true + coordinator: + enabled: true workflowServer: enabled: false console: enabled: false ``` -The AI Optimizer subchart dependency is currently pinned to `ai-optimizer` chart `version: "2.4.1"` in `helm/infra-charts/obaas/Chart.yaml`; verify this before assuming any other version's values schema applies. +The chart defaults enable both `otmm.coordinator.enabled` and `otmm.workflowServer.enabled`; the example above explicitly disables the workflow server. There is no top-level `otmm.enabled` switch. Disable each unneeded component through its own `enabled` value. Plan at least 2 additional CPUs and 4 GiB RAM per cluster when the workflow server is enabled. The console renders only when requested and at least one of the coordinator or workflow server is enabled. + +### SigNoz Upgrades + +For an existing installation, follow the [SigNoz in-place upgrade procedure](docs-source/site/docs/observability/upgrade/index.md) with the complete values for the installed release. The chart defaults to `signozUpgrade.stage: standard`, which performs the normal in-place upgrade to SigNoz chart/application version 0.142.1 and retains existing data. Do not set `signozUpgrade.mode=destructive-replace` for this patch upgrade. Optional `stage1` and `stage2` profiles are available under `helm/infra-charts/obaas/examples/`; use them only for an existing installation when the operator selects the [protected recovery workflow](docs-source/site/docs/observability/upgrade/index.md) and its backup and validation requirements have been reviewed. Layer the selected profile after the normal values and retain the same release name and namespace for both stages. + +### AI Optimizer And Kafka AI Optimizer requires additional planning. The example expects: @@ -585,18 +593,6 @@ Expected: the operator is configured for all namespaces, or it explicitly includ SigNoz is enabled by default in the OBaaS values. -**Upgrading an existing release with SigNoz enabled is destructive by default and requires explicit confirmation.** There is no non-destructive in-place upgrade path for SigNoz: `helm upgrade` against a release that already has SigNoz installed fails a `fail` guard in the chart templates unless both of the following are set: - -```yaml -signozUpgrade: - mode: "destructive-replace" - confirmDataLoss: true -``` - -Setting these permanently deletes all existing SigNoZ telemetry, dashboards, users, alerts, ClickHouse data, and ZooKeeper data before reinstalling SigNoz fresh. Never set `confirmDataLoss: true` on behalf of an operator without their explicit, informed confirmation that data loss is acceptable — surface this requirement and stop for confirmation rather than assuming it during any `helm upgrade` that touches a namespace with an existing SigNoz install. - -ClickHouse diagnostic logging (`zookeeperLog`, `processorsProfileLog`) defaults to a 1-day TTL (`signoz.clickhouse.clickhouseOperator.zookeeperLog.ttl: 1`, `.processorsProfileLog.ttl: 1` in `helm/infra-charts/obaas/values.yaml`) to avoid high-volume disk usage. Existing installs need a Helm upgrade to pick up this default; increase the TTL values only when longer diagnostic retention is needed for an active investigation. - To use an existing admin credential secret: ```yaml @@ -731,40 +727,36 @@ Install `obaas-prereqs` only once per cluster. ### Step 2: Check Chart Source Availability -For in-development releases, first compare the target local chart `appVersion` with the public Helm repository metadata: +Record the repository checkout or commit and read the target versions from both local charts: ```bash -grep '^appVersion:' helm/infra-charts/obaas/Chart.yaml -grep '^appVersion:' helm/infra-charts/obaas-prereqs/Chart.yaml -helm repo add obaas https://oracle.github.io/microservices-backend/helm -helm repo update -helm search repo obaas/obaas --versions -helm search repo obaas/obaas-prereqs --versions +grep -E '^(version|appVersion):' helm/infra-charts/obaas/Chart.yaml +grep -E '^(version|appVersion):' helm/infra-charts/obaas-prereqs/Chart.yaml ``` -Use the local chart paths when the public repository does not show the target application version: +Test runs use these local paths and continue to Step 3: ```text helm/infra-charts/obaas-prereqs helm/infra-charts/obaas ``` -For the current 2.2.0 development stream, the local charts have `appVersion: 2.2.0` and chart `version: 0.2.0`. Always re-verify these with the `grep` commands above rather than trusting this document, since the chart version bumps ahead of documentation updates. If the public Helm repository does not report `APP VERSION: 2.2.0`, do not install or test with `obaas/obaas-prereqs` or `obaas/obaas`; use the local chart paths above. - -Once the public repository publishes charts whose `APP VERSION` matches the target version, public chart references may be used. Use the chart version that corresponds to the target OBaaS application version. - -For local chart installs, pin the repository checkout or commit and verify the `version` and `appVersion` fields in each local `Chart.yaml`. For public repository installs, where strict pinning is required after the target version has been published, add: +For other installations using published charts, compare repository metadata with the target application version: ```bash ---version 0.2.0 +helm repo add obaas https://oracle.github.io/microservices-backend/helm +helm repo update +helm search repo obaas/obaas --versions +helm search repo obaas/obaas-prereqs --versions ``` -to the public chart install commands. +Use local paths if matching application versions are unavailable. For published charts, pin each selected chart version with `--version `. ### Step 3: Install cert-manager If Needed -Skip this step only if cert-manager is already healthy and -`helm status cert-manager -n cert-manager` reports `STATUS: deployed`. +Verify existing cert-manager using the ownership-specific checks in the prerequisites section. An OKE-owned installation proceeds when the add-on and Kubernetes checks pass. A Helm-owned installation also requires `STATUS: deployed`. + +Install the following Helm release when cert-manager is absent and Helm is the selected owner: ```bash helm install \ @@ -785,11 +777,13 @@ kubectl wait --for=condition=Available deployment --all -n cert-manager --timeou kubectl get crd | grep cert-manager ``` -Do not install `obaas-prereqs` if the Helm release is pending, missing, or failed. +For Helm ownership, do not install `obaas-prereqs` if the release is pending, missing, or failed. Follow the cert-manager recovery guidance above. ### Step 4: Install Cluster Prerequisites Once +If OCI configuration management already installed this release, proceed to the verification commands below. Verify separately managed OKE operators as well as the release-owned components. + Generic install: ```bash @@ -872,6 +866,8 @@ kubectl get secrets -n ### Step 6: Install OBaaS +If OCI configuration management already installed this release, proceed to `Verification And Smoke Tests` and verify its chart version and effective values against the selected target. + Generic install: ```bash @@ -1273,6 +1269,7 @@ Expected: Consider installation successful when: - Helm releases are deployed. +- cert-manager and any selected OKE add-ons pass their ownership-specific readiness checks. - All prerequisite pods are healthy. - All OBaaS pods are `Running` and init jobs are `Completed`. - Persistent volume claims are bound. @@ -1283,7 +1280,7 @@ Consider installation successful when: - APISIX admin API responds when enabled. - Eureka UI works when enabled. - Spring Boot Admin UI works when enabled. -- Envoy Gateway or ingress-nginx reports healthy resources when enabled. +- The selected Envoy Gateway, ingress-nginx, or OCI Native Ingress controller reports healthy resources. - No relevant namespace events show active image pull, scheduling, storage, webhook, or authentication failures. ## Troubleshooting Pointers @@ -1295,6 +1292,5 @@ Consider installation successful when: - Duplicate CRD or operator conflicts: confirm `obaas-prereqs` was installed only once per cluster. - Missing ingress or gateway address: verify the cluster network provider supports the selected access API and that load balancers can be provisioned. - SigNoz setup failures: inspect Signoz, ClickHouse, and `signoz-setup` job logs; verify storage and credentials. -- `helm upgrade` failing with a `signozUpgrade.confirmDataLoss` message: this is the expected guard on an existing SigNoz install, not a bug. Do not set `confirmDataLoss: true` to unblock the upgrade without the operator's explicit confirmation that existing SigNoz telemetry, dashboards, alerts, and ClickHouse/ZooKeeper data may be permanently deleted. - APISIX failures: inspect APISIX, etcd, and custom plugin configuration; verify plugin file mount paths. - Multi-tenant ingress conflicts: verify each tenant's ingress class, controller value, and election ID are unique. diff --git a/CBV5-AGENT.md b/CBV5-AGENT.md index 7547587f9..8f3d1bf83 100644 --- a/CBV5-AGENT.md +++ b/CBV5-AGENT.md @@ -19,6 +19,8 @@ Use these local sources for CloudBank v5 deployment and testing truth: - `cloudbank-v5/5-apisix_create_routes.sh` - `cloudbank-v5/6-smoke_test_secure_services.sh` - `cloudbank-v5/7-test_all_services.sh` +- `cloudbank-v5/8-smoke_test_microtx_jwt.sh` +- `cloudbank-v5/tests/test_secure_services_smoke.py` for mocked smoke-test regression coverage. - `cloudbank-v5/*/values.yaml` - `helm/app-charts/obaas-sample-app` - `docs-source/site/docs/setup/helm` @@ -313,12 +315,47 @@ Expected smoke-test coverage: - protected creditscore API returns `200` with a read token - `/user/api/v1*` is not externally routed - internal account journal route is blocked through APISIX +- the public account list returns `200` with a read token; ownership filtering may return an empty list - account IDs can be discovered - testrunner deposit rejects a read token - testrunner deposit accepts a test token, unless `--read-only` is used - the transfer route rejects a non-owner client-credentials token with `403`, unless `--read-only` is used - successful owner-scoped transfer workflow validation is performed by `7-test_all_services.sh` +Automatic account discovery reads `service-client-secret` from `-azn-server-auth`, requests a `cloudbank.internal` token for `cloudbank-service-client`, and lists accounts through a temporary direct `svc/account` port-forward. The internal token is used only for direct lookup; the public APISIX account-list check uses the read token. No user password is required for discovery. + +Discovery requires at least two accounts, including a source with a balance greater than 1. Its local port defaults to `9081`; use `--discovery-local-port ` to change it. When the script also creates a gateway port-forward, the two local ports must differ. Read-only runs still perform discovery unless both account IDs are supplied. + +Supply both `--from-account ` and `--to-account ` to bypass discovery. IDs must be positive, distinct integers belonging to existing accounts; this bypass does not verify account existence or balance during discovery. When only one ID is supplied, discovery validates that it exists, and a supplied source must have a balance greater than 1. Discovery failures count as test failures and skip deposit and transfer requests. The default test publishes a deposit; use `--read-only` to skip workflow checks. Discovery port-forwards and private temporary files are always removed on exit; `--keep-port-forward` preserves only the gateway port-forward. + +### MicroTx Workflow API JWT Check + +When the workflow server is enabled and configured to validate azn-server JWTs, run: + +```bash +cd cloudbank-v5 +./8-smoke_test_microtx_jwt.sh -n --secret-name -azn-server-auth +``` + +This check requires `kubectl`, `curl`, `jq`, `base64`, and `awk`, healthy `svc/azn-server` and `svc/obaas-otmm-workflow-server`, and an existing OAuth secret containing `microtx-client-secret`. The service names and client ID `microtx-workflow-client` are fixed in the script. If `--secret-name` is omitted, the secret defaults to `obaas-azn-server-auth`. Configure workflow-server security through the platform owner before this check: `otmm.commonConfiguration.security.enabled` defaults to `false`, and the identity-provider settings must match the azn-server issuer, JWKS, audience, scopes, and role policy. This script does not configure the platform or create secrets. + +Temporary port-forwards default to `18080` for azn-server and `19010` for the workflow server; override them with `--azn-port` and `--workflow-port`. The script requests the `microtx.workflow` scope and expects `/workflow-server/api/metadata/workflow` to return `401` without a JWT and `200` with the azn-server JWT. Preserve the script output and exit status. It prints selected claims and signing-key IDs without printing client secrets or bearer tokens, and removes private response files and both port-forwards on exit. Failures identify the stage; startup failures include port-forward logs. + +Successful JWKS access-log entries show that JWKS requests succeeded. They do not conclusively identify a workflow-server callback because the script also requests JWKS directly. Correlate workflow-server logs or request-source evidence when callback attribution is required. If the workflow server is disabled or azn-server JWT integration is outside the selected configuration, record this check as `Not Applicable` with values evidence. If integration is required but not ready, mark the check `Blocked` and identify the failed prerequisite. + +### Mocked Smoke Regression Coverage + +For changes to the secured smoke script, run the existing regression suite: + +```bash +cd cloudbank-v5 +python3 tests/test_secure_services_smoke.py -v +``` + +It requires Python's standard library, Bash, and `jq`; it runs the shell script with mocked `curl` and `kubectl` and needs no cluster or network. Coverage includes internal-token isolation, discovery failures, explicit and partial IDs, invalid arguments, read-only behavior, private temporary files, credential concealment, and port-forward cleanup. Live authorization, database, and deposit behavior still require cluster verification. + +### Full All-Services Validation + Run the full all-services test after the smoke test. This is the authoritative end-to-end CloudBank validation: ```bash @@ -687,7 +724,7 @@ spec: restartPolicy: Never containers: - name: cloudbank-db-cleanup - image: container-registry.oracle.com/database/sqlcl:26.2.0 + image: container-registry.oracle.com/database/sqlcl:26.2.1 command: ["/bin/sh", "-c"] args: - | diff --git a/TEST-AGENT.md b/TEST-AGENT.md index cf23e86f4..8367edf2e 100644 --- a/TEST-AGENT.md +++ b/TEST-AGENT.md @@ -1,8 +1,8 @@ # OBaaS And CloudBank Test Agent Runbook -This guide tells an AI agent how to deploy, test, collect evidence, and report on Oracle Backend for Microservices and AI (OBaaS) 2.2.0 with the CloudBank v5 sample workload. +This guide tells an AI agent how to deploy, test, collect evidence, and report on Oracle Backend for Microservices and AI (OBaaS) 2.1.2 with the CloudBank v5 sample workload. -Do not trust a hardcoded version number, including the ones in this guide, over the repository itself. Before relying on any version-specific instruction, confirm the current in-development version with `grep '^appVersion:' helm/infra-charts/obaas/Chart.yaml` and `grep '^version:' helm/infra-charts/obaas/Chart.yaml`. The `next` docs stream (`OBAAS_VERSION` in `docs-source/site/docs/upgrade/index.mdx` and `docs-source/site/docs/rel_notes/index.mdx`) can lag behind the chart sources; treat `Chart.yaml` as the source of truth for the target version number. +Confirm the target chart and application versions from both local `Chart.yaml` files before each run. The Terraform `app_version` output comes from the release placeholder in `opentofu/versions.tf`; use the chart sources and installed Helm release metadata to identify the OBaaS build under test. The expected output of a test run is a completed report created from the template in this file, plus an evidence directory containing command output, logs, screenshots, and vulnerability scan results. @@ -10,23 +10,54 @@ The expected output of a test run is a completed report created from the templat Use only these sources for installation and test truth: -- `AGENTS.md` for OBaaS 2.2.0 planning, installation, and verification. +- `AGENTS.md` for OBaaS 2.1.2 planning, installation, and verification. - `CBV5-AGENT.md` for CloudBank v5 deployment, testing, and cleanup. - `docs-source/site/docs`, especially `intro.md`, `setup/helm/`, `platform/`, and `observability/`. - `helm/infra-charts/obaas-prereqs` and `helm/infra-charts/obaas`. +- `opentofu/README.md`, `opentofu/examples/`, and the Terraform sources, templates, and `cfgmgt/apply.py` under `opentofu/` for OCI provisioning and its OBaaS installation path. +- `.github/workflows/opentofu.yml` and `opentofu/tests/` for infrastructure static checks. - `cloudbank-v5/README.md`, `cloudbank-v5/cloudbank-v5-install.md`, and `cloudbank-v5/cloudbank-test-doc.md`. +- `cloudbank-v5/8-smoke_test_microtx_jwt.sh` for workflow JWT checks and `cloudbank-v5/tests/test_secure_services_smoke.py` for mocked secured-smoke regression coverage. - `cloudbank-v5/customer-helidon/README.md` when a mixed Spring Boot and Helidon CloudBank workload is required for observability testing. - `cloudbank-v5/helidon-producer/README.md` and `cloudbank-v5/helidon-consumer/README.md` when Kafka observability or Helidon MP messaging telemetry must be validated. - The task list provided with this guide. - The SigNoz Services evidence checklist in this guide. -Use only the OBaaS `next` documentation stream for 2.2.0. Do not use 2.1.1 or older behavior, older CloudBank documentation, or unrelated repository directories. +Use only the OBaaS `next` documentation stream for 2.1.2. Do not use 2.1.0 or older behavior, older CloudBank documentation, or unrelated repository directories. -Do not duplicate command syntax, values-file policy, secrets policy, or cleanup procedure from `AGENTS.md` or `CBV5-AGENT.md` in this file. If those guides conflict with this guide, treat them as canonical for deployment mechanics and treat this guide as canonical for test scope, evidence, and reporting. +Use `opentofu/README.md` and its sources for provisioning mechanics, `AGENTS.md` for OBaaS installation and ownership checks, and `CBV5-AGENT.md` for CloudBank deployment and cleanup. Keep command syntax and deployment procedures in those sources. This guide owns test scope, evidence, and reporting. + +## Deployment Modes + +Select one mode independently of the `Full Validation` or `Local Functional` validation tier. + +| Mode | Configuration | Handoff | +| --- | --- | --- | +| Existing Cluster | Use the selected Kubernetes context. | Follow `AGENTS.md` to install or verify OBaaS. | +| OCI Infrastructure | `k8s_run_cfgmgt=false` | Provision OCI resources and selected OKE add-ons, then prepare Kubernetes resources and install OBaaS using `AGENTS.md`. | +| OCI Infrastructure And OBaaS | `k8s_run_cfgmgt=true`, the default. | Verify the releases installed by `cfgmgt/apply.py`, then continue to CloudBank. | + +Both OCI modes create an OKE cluster. Existing VCN and database options reuse those resources. Use `Existing Cluster` for a cluster already available to the run. ## Required Inputs -Collect and record these values before any mutating command: +### Provisioning Inputs + +Before provisioning, record: + +- Deployment mode, validation tier, evidence directory, and authorized resource scope. +- Selected CLI (`tofu` or `terraform`), version, provider versions, working directory, variable files, and state backend/workspace or local state path. Use the same CLI and state throughout the run. +- OCI authentication profile, tenancy, compartment, region, and `label_prefix`; record credential references only. +- New or existing VCN/subnets, API endpoint reachability and allowed CIDRs, node shape/count/capacity, storage requirements, and load balancer access. +- Database scenario: new ADB (`byo_db_type=""`), existing ADB (`ADB-S`), or existing non-Autonomous database (`OTHER`). Both ADB scenarios map to chart `database.type: ADB-S`. Replace example database placeholders before applying. +- Effective `k8s_run_cfgmgt`, `k8s_use_cluster_addons`, `k8s_use_local_charts`, `k8s_deploy_kafka`, `deploy_optimizer`, and registry settings. +- Resource ownership and the retain/destroy decision, including ownership of resources retained after a failed apply. + +Check OCI access, quotas, supported node images/Kubernetes version, and planned capacity against `AGENTS.md` before apply. For a private API endpoint, follow the execution-location constraints in `opentofu/module_kubernetes.tf`. + +### Deployment Inputs + +Resolve deployment choices before the command that installs OBaaS. For a new cluster, record generated identifiers, context, and values-file paths after provisioning and verify them before further Kubernetes operations. In `OCI Infrastructure And OBaaS` mode, review the template-derived choices before apply because it also installs OBaaS. | Input | Description | | --- | --- | @@ -38,11 +69,11 @@ Collect and record these values before any mutating command: | `` | Helm release for the OBaaS application chart, for example `obaas`. | | `` | Values file for the prerequisites chart, if any. | | `` | Values file for the OBaaS application chart. | -| `` | Expected local chart version, `0.2.0`, recorded from both local `Chart.yaml` files. Reconfirm with `grep` rather than trusting this table, since the chart version can move ahead of documentation updates. | -| `` | Effective `database.persistence.enabled`, `storageClass`, and `size` for `SIDB-FREE`/`ADB-FREE`, plus the effective `global.cleanupPVCs` value. | +| `` | Expected chart version and app version, recorded from both local `Chart.yaml` files. | +| `` | Helm release or OKE `CertManager` add-on; record the actual namespace and owner. | | `` | `SIDB-FREE`, `ADB-FREE`, `ADB-S`, or `OTHER`. | | `` | StorageClass selected for persistent components. | -| `` | Envoy Gateway by default, deprecated ingress-nginx when explicitly enabled, both, existing external access, or port-forward-only. | +| `` | Envoy Gateway by default, deprecated ingress-nginx when explicitly enabled, both, OCI Native Ingress, other existing external access, or port-forward-only. | | `` | Public registries, private registry, air-gapped, OCIR, or local cluster images. | | `` | Database prefix used by CloudBank scripts. | | `` | CloudBank image tag, default `0.0.1-SNAPSHOT`. | @@ -58,7 +89,7 @@ Collect and record these values before any mutating command: | `` | Privileged DB secret, usually `-db-priv-authn` unless customized. | | `` | Directory for all run evidence and reports. | -Do not proceed with installation until these choices are known. Use placeholders in examples, but never install with unresolved placeholders. +Use placeholders in examples, but never install with unresolved configuration inputs. Verify generated identifiers against the selected environment at the provisioning handoff. ## Cluster Policy @@ -79,6 +110,7 @@ Create a fresh evidence directory before running tests: ```bash export EVIDENCE_DIR= mkdir -p \ + "$EVIDENCE_DIR/infrastructure" \ "$EVIDENCE_DIR/cluster" \ "$EVIDENCE_DIR/helm" \ "$EVIDENCE_DIR/obaas" \ @@ -89,7 +121,7 @@ mkdir -p \ "$EVIDENCE_DIR/failures" ``` -Capture stdout and stderr for every command that proves a result: +Capture stdout, stderr, and exit status for every command that proves a result. Use protected storage for output containing secrets and attach sanitized copies to the evidence directory. Keep state, saved plans, credential files, kubeconfig, and generated `cfgmgt/stage/k8s-manifest.yaml` in protected storage outside the shared report bundle. ```bash run_and_capture() { @@ -108,8 +140,8 @@ For failures, also capture: - Current and previous pod logs. - Related jobs and job logs. - For cert-manager install failures, Helm status and history, cert-manager Job - status/logs, deployment readiness, and cert-manager namespace events. Do not - treat healthy pods as a passing result when the Helm release is pending or absent. + status/logs, deployment readiness, and cert-manager namespace events for a Helm-owned install. + For OKE ownership, capture add-on status and diagnostics plus Kubernetes readiness and events. - For MicroTx Workflow Server failures, workflow server logs, health endpoint output, service/endpoints output, Helm values, latest `obaas-run-sql-*` job logs, and database privilege diagnostics for the application user. - Namespace events sorted by time. - Helm release status. @@ -118,37 +150,59 @@ For failures, also capture: ## Execution Flow -This file does not own deployment mechanics. Use it to decide what must be tested and what evidence must be captured. +1. Select the deployment mode and validation tier; prepare the evidence directory and report skeleton. +2. For an OCI mode, complete the infrastructure checks below, review the plan, and apply within the authorized scope using `opentofu/README.md`. Record results after each phase. For `Existing Cluster`, mark `INF-001` through `INF-005` as `Not Applicable` with the mode as the reason. +3. Verify the generated context and deployment inputs, then run cluster preflight using `AGENTS.md`. For an automatic OBaaS install, complete chart-source checks before apply and verify the resulting release versions afterward. +4. Follow the selected mode's handoff. Use `AGENTS.md` to install missing components or verify those already installed. Record all `PRE-*`, `INST-*`, and platform results; successful apply alone is insufficient evidence of OBaaS health. +5. Continue only when required OBaaS health checks pass or are explicitly waived. Use `CBV5-AGENT.md` for CloudBank prerequisite checks, images, secrets, deployment, routes, and functional tests, recording evidence after each phase. +6. Complete the observability, security, lifecycle, and isolation coverage required for the run. +7. Complete infrastructure retention or authorized teardown after workload tests and evidence capture. +8. Finish the report, including failed provisioning, blocked dependent tests, and retained resources. + +### Infrastructure Checks And Handoff -1. Prepare the evidence directory and report skeleton from this file. -2. Use `AGENTS.md` for all OBaaS preflight, chart-source selection, values preparation, cert-manager, `obaas-prereqs`, OBaaS install, uninstall, and reinstall commands. -3. After each OBaaS phase, return to the master test matrix in this file and record status, evidence paths, and failures. -4. Use `CBV5-AGENT.md` for all CloudBank v5 prerequisite checks, image handling, secret creation, service deployment, APISIX route creation, smoke tests, manual endpoint tests, and cleanup commands. -5. After each CloudBank phase, return to the master test matrix in this file and record status, evidence paths, and failures. -6. Use the observability, security, lifecycle, isolation, and report sections in this file for test coverage that is broader than either deployment guide. -7. Do not continue from OBaaS installation to CloudBank deployment until all required OBaaS health checks in the matrix are passing or explicitly waived. -8. Do not mark a test run complete until the report template in this file is filled out and all required evidence has been captured. +Use the static checks in `.github/workflows/opentofu.yml`: backend-free initialization, configuration validation, recursive formatting check, ORM schema validation, and Trivy configuration scanning. Preserve findings and their disposition; the workflow's scanner exit code permits findings. Initialize the selected run backend separately before planning deployment. -The exact commands, flags, values files, secret names, and cleanup procedures must come from `AGENTS.md` and `CBV5-AGENT.md` at execution time. +Review the selected scenario's plan for resource scope, capacity, networking, database ownership, and unexpected replacements or deletions. Preserve the plan identity, sanitized summary, apply output, and exit status in `infrastructure/`. The example `manual-test.sh` supplies planning evidence: it rewrites formatting, sets `TF_VAR_compartment_ocid` to the tenancy root, and plans both examples. Use explicit run inputs for deployment; its successful plans do not satisfy `INF-003` or the application checks. + +All test runs use this checkout's `helm/infra-charts/obaas-prereqs` and `helm/infra-charts/obaas` charts. For OCI test runs, explicitly set `k8s_use_local_charts=true` in the run's variable file before plan and apply. This makes `cfgmgt/apply.py` resolve both charts from the local `helm/` directory. Prepare dependencies as described in `opentofu/README.md`; missing local charts fail preflight rather than falling back to published OBaaS charts. Keep the release placeholder in `opentofu/versions.tf` unchanged. + +At handoff, verify: + +- The planned Kubernetes version from `opentofu/versions.tf` (currently `1.36.4`) matches the provisioned control plane and worker versions, or the report explains an intentional difference. Keep the documented minimum of 1.34 separate from this provisioning default. +- CPU and GPU node pools present in the run have `node_metadata.areLegacyImdsEndpointsDisabled="true"` in the plan, and their worker instances have legacy IMDS endpoints disabled. Preserve sanitized node-pool and instance metadata evidence; do not capture metadata credentials. Verify IMDSv2 compatibility for worker tooling that accesses instance metadata. +- `app_name` matches the application namespace, and the `kubeconfig_cmd` output or generated `cfgmgt/stage/kubeconfig` selects the intended cluster and authentication profile. +- The generated `obaas-prereqs-values.yaml` and `obaas-values.yaml` match the database, secret names, registry, access path, and optional components. Run `PRE-008` on the generated values when available. +- Automatic installation uses release `obaas-prereqs` in `obaas-system` and release `obaas` in the `app_name` namespace. Record those identities and verify them before CloudBank deployment. +- OKE add-on ownership and readiness meet `AGENTS.md`. The templates use OCI Native Ingress (`native-ic`) and disable the bundled Envoy Gateway and ingress-nginx controllers. Verify the native controller, IngressClass, load balancer, and gateway route for this access path. + +Use `OCI Infrastructure` mode when values need adjustment or cluster preflight must complete before the first Helm install. This mode generates the staged files while leaving Kubernetes manifest application and Helm installation to the operator. Follow the OCI provisioning handoff in `AGENTS.md` before installing charts. + +Reapplying with configuration management enabled runs `apply.py` again because its provisioner uses a timestamp trigger. Review the resulting Helm operations and preserve failure evidence before retrying; retries can delete existing Jobs. Verify existing releases at handoff instead of reapplying solely to collect health evidence. ## Master Test Matrix -Use this matrix as the master list for each run. Mark each test `Pass`, `Fail`, `Waived`, or `Not Applicable`. +Use this matrix as the master list for each run. Mark each test `Pass`, `Fail`, `Waived`, `Not Applicable`, or `Blocked`. Use `Blocked` when a failed prerequisite prevents execution, and name that prerequisite in the report. Complete `INF-005` at the end of the run, including after a failed apply. | ID | Category | Test | Expected Result | Evidence | | --- | --- | --- | --- | --- | +| INF-001 | Infrastructure | Validate infrastructure configuration. | Formatting, configuration, and ORM schema checks pass; IaC security findings are triaged. | CLI/provider versions, validation output, scan findings and disposition | +| INF-002 | Infrastructure | Review the deployment plan. | Planned resources match the selected scenario and authorized scope; replacements and deletions are accounted for; Kubernetes version and disabled legacy IMDS settings match the sources. | state reference, input references, sanitized plan summary and identity, version and node metadata settings | +| INF-003 | Infrastructure | Provision OCI resources. | Apply succeeds; cluster, node pools, and selected add-ons are ready; actual Kubernetes versions and worker legacy-IMDS settings match the reviewed plan or documented deviations. | apply output/status, OCI resource and add-on readiness, control-plane/worker versions and sanitized instance metadata | +| INF-004 | Infrastructure | Verify deployment handoff. | Context, namespaces, chart versions, generated values, database references, and component ownership match the run inputs. | sanitized outputs/values, context and release metadata | +| INF-005 | Infrastructure | Verify retention or authorized teardown. | Run-owned resources are retained with an owner or removed as agreed; residual resources and follow-up are recorded. | resource inventory, retention decision or destroy evidence | | PRE-001 | Preflight | Verify current Kubernetes context. | Context equals ``. | `kubectl config current-context` | | PRE-002 | Preflight | Verify cluster API access. | `kubectl get nodes` succeeds. | node list | | PRE-003 | Preflight | Verify Helm access. | `helm version` and `helm list -A` succeed. | Helm output | | PRE-004 | Preflight | Verify cluster capacity policy. | Full validation meets requirements, or local deviations are recorded. | node describe | | PRE-005 | Preflight | Verify storage classes and RWX support decision. | Selected storage class and RWX status are recorded. | storageclass output | -| PRE-006 | Preflight | Verify external access strategy. | Envoy Gateway default, explicit ingress-nginx opt-in, both, or port-forward-only path is documented. | service, ingress, gateway output | -| PRE-007 | Preflight | Verify chart source and version. | Both local charts report chart version `0.2.0` and app version `2.2.0` (reconfirm from `Chart.yaml` rather than assuming this row); local paths are used unless public charts report the matching app version. | Chart.yaml and Helm search output | +| PRE-006 | Preflight | Verify external access strategy. | Envoy Gateway, explicit ingress-nginx opt-in, both, OCI Native Ingress, other existing access, or port-forward-only path is verified. | service, ingress, gateway, controller and load balancer evidence | +| PRE-007 | Preflight | Verify chart source and version. | Both charts are installed from this checkout's `helm/infra-charts/` paths and match the recorded chart and app versions. OCI test inputs set `k8s_use_local_charts=true`. | Chart.yaml, effective test inputs, Helm command/chart-path output and installed release metadata | | PRE-008 | Preflight | Render selected chart values. | `helm lint` and `helm template` succeed for both charts; rendered output reflects selected optional components. | lint and rendered-manifest output | -| INST-001 | Install | Install or verify cert-manager. | Helm reports `deployed`; cert-manager deployments are available; CRDs exist. A pending or missing Helm release is a failure even if pods are running. | Helm status, pod, wait, CRD output; on failure also capture Job logs and events | -| INST-002 | Install | Install `obaas-prereqs` once. | Release deployed and prerequisite pods healthy. | Helm status and pod output | -| INST-003 | Install | Install OBaaS. | Release deployed and OBaaS pods healthy. | Helm status and pod output | -| INST-004 | Install | Verify no unexpected failed jobs or PVC problems. | Jobs succeeded and PVCs bound, including the database data PVC for `SIDB-FREE`/`ADB-FREE` when `database.persistence.enabled` (default `true`). | jobs, PVCs, events | +| INST-001 | Install | Install or verify cert-manager. | Owner-specific checks in AGENTS.md pass: Helm release deployed or OKE CertManager add-on healthy; deployments available and CRDs present. A pending or missing Helm release fails a Helm-owned install. | ownership, Helm or OKE add-on status, readiness and CRDs; failure logs/events | +| INST-002 | Install | Install or verify `obaas-prereqs` once. | Release deployed and prerequisite pods healthy, including separately managed operators. | Helm status, pod and add-on output | +| INST-003 | Install | Install or verify OBaaS. | Release deployed and OBaaS pods healthy. | Helm status and pod output | +| INST-004 | Install | Verify no unexpected failed jobs or PVC problems. | Jobs succeeded and PVCs bound. | jobs, PVCs, events | | PLAT-001 | Platform | Verify APISIX gateway. | Gateway service has external address or working port-forward. | service output, curl result | | PLAT-002 | Platform | Verify APISIX admin API. | Admin routes endpoint responds with valid admin key. | curl output | | PLAT-003 | Platform | Verify Eureka. | Eureka UI/API is reachable. | screenshot and HTTP output | @@ -171,12 +225,13 @@ Use this matrix as the master list for each run. Mark each test `Pass`, `Fail`, | CB-006 | CloudBank | Run secured smoke test. | Smoke test passes. | smoke script output | | CB-007 | CloudBank | Check OAuth metadata and JWKS. | Metadata is public and JWKS exposes a key ID. | curl output | | CB-008 | CloudBank | Check unauthorized access. | Protected endpoint without token returns `401`. | curl output | -| CB-009 | CloudBank | Check read access. | Read token can call account, customer, and creditscore APIs. | curl output | +| CB-009 | CloudBank | Check read access. | Read token returns `200` for creditscore and the public account list, which may be empty after ownership filtering. Owner-sensitive account/customer checks use an owner user token. | HTTP output and sanitized ownership evidence | | CB-010 | CloudBank | Check wrong-scope access. | Wrong token scope returns `403`. | curl output | | CB-011 | CloudBank | Check deposit workflow. | Deposit returns success and check service logs show receipt. | curl and logs | | CB-012 | CloudBank | Check journal and clearance workflow. | Journal moves from pending to deposit after clear. | curl and logs | | CB-013 | CloudBank | Check transfer workflow. | Balances change correctly and transfer logs show LRA lifecycle. | curl and logs | | CB-014 | CloudBank | Run full all-services validation. | `7-test_all_services.sh` passes for `Full Validation`; local-functional runs may mark it `Not Applicable` with tier evidence. | full script output | +| CB-015 | CloudBank | Verify MicroTx Workflow API JWT integration. | When workflow-server azn-server JWT integration is configured, `8-smoke_test_microtx_jwt.sh` passes: unauthenticated `401`, authenticated `200`, and successful JWKS request evidence; otherwise `Not Applicable` with configuration evidence. Required integration with failed prerequisites is `Blocked`. | effective security values, script output and exit status, sanitized claims/key IDs and JWKS logs | | OBS-001 | Observability | Log in to SigNoz. | SigNoz UI login succeeds. | screenshot | | OBS-002 | Observability | Verify SigNoz Services view. | Platform and CloudBank services appear for recent time window. | screenshot | | OBS-003 | Observability | Verify Services table columns. | P99 latency, error rate, and operations per second are populated. | screenshot | @@ -213,6 +268,7 @@ Platform checks: - APISIX gateway must be reachable through the selected access path or a documented local port-forward. - APISIX admin API must show the route set expected after CloudBank route creation. - APISIX OpenTelemetry metadata must be configured by the `apisix-plugin-metadata` sidecar and retrievable from the Admin API before APISIX tracing is marked healthy. +- Check the effective `apisix.apisix.tracing`, OpenTelemetry `set_ngx_var`, and JSON access-log settings against the chart defaults. For a traced CloudBank request, preserve an APISIX access-log entry with populated `trace_id` and `span_id` and correlate its trace ID with a SigNoz trace. Record intentional tracing overrides; do not treat an untraced health request as correlation evidence. - Eureka must show the OBaaS platform services and all selected CloudBank services after deployment. Record the effective `eureka.replicas` value and verify that APISIX lists a numbered StatefulSet-pod host for every replica; changing the replica count without updating that list is a failure. - Config Server must respond. If no test property is seeded, record that the server is reachable and that no config data validation was performed. - Spring Boot Admin must show monitored Spring services and health status. @@ -222,11 +278,13 @@ Platform checks: - The MicroTx Workflow Server uses the OBaaS application database secret and application schema. If Flyway DDL fails, collect the latest `obaas-run-sql-*` job logs and verify the application user has schema DDL privileges and quota before marking the issue as an application failure. - Treat the optional OTMM console as a separate component. The console web UI is served from `/consoleui/` on the `obaas-otmm-console` service, not from the service root. For example, from inside the cluster use `http://obaas-otmm-console..svc.cluster.local:5001/consoleui/`; with a local port-forward use `kubectl -n port-forward svc/obaas-otmm-console 15001:5001` and open `http://127.0.0.1:15001/consoleui/`. The service root `/` may return `404 Endpoint not found` and should not by itself be treated as console failure. Do not use a healthy console screenshot as evidence that the workflow server is installed or that workflow database migrations succeeded. - Coherence is optional and deprecated. When `coherence.enabled=true`, verify the cluster-wide Coherence Operator deployment and CRD before installing, then verify the release-owned Coherence CR, requested member pods, namespace watch scope, and persistence decision. When disabled, mark `PLAT-014` as `Not Applicable` with values evidence. -- For `SIDB-FREE` and `ADB-FREE`, database data is persisted by default (`database.persistence.enabled: true`, default `size: 250Gi`). Verify the database data PVC is `Bound` as part of `INST-004`, and record the effective `storageClass` and size. Record `global.cleanupPVCs` (default `true`), since it determines whether that PVC and its data are deleted on `helm uninstall`. CloudBank checks: - Run the automated secured smoke test from `CBV5-AGENT.md` first and preserve its full output. +- Preserve account-discovery results or the explicit-ID bypass choice. Automatic discovery uses the internal service token directly against `svc/account`, including in read-only mode; a public account-list `200` with no owner-visible accounts does not prove discovery failed. Discovery failures fail the smoke test and skip dependent workflow requests. +- Run `CB-015` using the prerequisites and command in `CBV5-AGENT.md` when the workflow server is configured for azn-server JWT integration. The chart's security default is disabled, so workflow-server readiness alone does not establish JWT integration. JWKS access-log entries prove successful requests but do not conclusively attribute them to the workflow server because the script also fetches JWKS. +- For secured-smoke script changes, use the existing mocked regression suite documented in `CBV5-AGENT.md` and preserve its output separately from live cluster evidence. It covers discovery, argument validation, internal-token isolation, read-only behavior, and cleanup; it does not replace live authorization or workflow validation. - For `Full Validation`, run and preserve the output of `cloudbank-v5/7-test_all_services.sh` after the smoke test. A `Local Functional` run may mark this test `Not Applicable` only when the report records that tier and reason. - For CloudBank all-services tests, account IDs used with `--from-account` and `--to-account` must be accounts visible to the `--owner-username` user token used by the script. Do not guess seeded account IDs across environments. Prefer letting `cloudbank-v5/7-test_all_services.sh` auto-discover accounts, or first run it with `--read-only` and reuse the reported `account discovery from= to=` pair for the full mutating run. - When the run must validate Helidon observability, deploy `customer-helidon` instead of the Spring `customer` service so the workload includes both Spring Boot and Helidon services. @@ -251,8 +309,6 @@ Use the following SigNoz Services checklist as the minimum UI evidence requireme Do not start dashboard screenshot capture until the run has proved that relevant telemetry exists for the selected time window. Empty dashboards are not acceptable evidence for required observability tests unless the dashboard is for an optional component that was not installed or the report includes an explicit waiver. -ClickHouse diagnostic logs (`signoz.clickhouse.clickhouseOperator.zookeeperLog` and `.processorsProfileLog`) default to a 1-day TTL. If a run needs longer-lived diagnostic retention to investigate a failure across multiple days, ask the operator to raise these values before the run rather than assuming default retention covers the full investigation window. - Before UI capture, use curl, SigNoz API calls from an authenticated browser/session, ClickHouse queries, service metrics endpoints, or other direct telemetry checks to prove data is present. Save all command output under `$EVIDENCE_DIR/observability`. Required readiness checks: @@ -572,20 +628,13 @@ Run destructive lifecycle tests only with explicit operator approval and only af 4. Reinstall OBaaS into the same namespace using the same values. 5. Rerun platform and CloudBank smoke tests, plus `7-test_all_services.sh` when the validation tier is `Full Validation`. -Database data survival across this cycle depends on `global.cleanupPVCs` (default `true`), -which deletes the database data PVC on uninstall. Record the effective value before step 2. -When `cleanupPVCs` defaulted to `true`, the reinstalled database starting empty is expected -behavior, not an unexplained data-loss failure; only treat it as a failure if `cleanupPVCs` -was explicitly set to `false` and data still did not survive. - -Do not perform a full uninstall/reinstall to test SigNoz upgrade behavior; instead test the -in-place `helm upgrade` path separately. Re-running `helm upgrade` against a namespace with -an existing SigNoz release fails a `signozUpgrade.confirmDataLoss` guard unless -`signozUpgrade.mode=destructive-replace` and `confirmDataLoss=true` are both set, and setting -them permanently deletes all existing SigNoz telemetry, dashboards, alerts, and -ClickHouse/ZooKeeper data. Treat this the same as any other destructive lifecycle test: do -not set `confirmDataLoss=true` without explicit, recorded operator approval, and record that -approval — along with the resulting data loss — in the report. +### Infrastructure Retention And Teardown + +Finish workload lifecycle tests and export evidence while the cluster is available. For OCI modes, inventory resources owned by the selected state separately from BYO networking, databases, and Kubernetes-created cloud resources. + +For retention, record resource identifiers, the state reference, an owner, and the intended cleanup date. For teardown, obtain explicit approval covering the reviewed destruction scope and database/storage loss; approval for Helm uninstall alone covers only that lifecycle test. Clean up workloads using the deployment guides, then use `opentofu/README.md` with the same CLI, inputs, and state to destroy the approved infrastructure. Verify cloud resources, volumes, and load balancers against the inventory and record residual resources and their owner. + +After a partial apply or failed destroy, preserve state and diagnostics, reconcile the remaining resources, and record their disposition in `INF-005`. Use `Fail` when the agreed cleanup outcome is unmet. ### Multi-OBaaS @@ -613,8 +662,10 @@ Expected: ## Failure Evidence -When any test fails, collect the relevant diagnostics from `AGENTS.md`, `CBV5-AGENT.md`, and the local platform docs, then attach them to the report. At minimum, evidence should cover: +When any test fails, collect the relevant diagnostics from the provisioning sources, `AGENTS.md`, `CBV5-AGENT.md`, and the local platform docs, then attach sanitized evidence to the report. At minimum, evidence should cover: +- For infrastructure failures, CLI/provider versions, input and state references, plan identity, apply or destroy exit status, failing resource addresses, OCI work request diagnostics, and the remaining resource inventory. Include configuration-management output when Helm or manifest application failed. +- For OKE add-on failures, add-on status and work request diagnostics plus the affected Kubernetes workloads and events. - Current namespace workload state. - Relevant Helm release status. - Current and previous logs for failing pods. @@ -651,6 +702,7 @@ Use this template: | End Time | | | Tester / Agent | | | Repository Commit | | +| Deployment Mode | Existing Cluster / OCI Infrastructure / OCI Infrastructure And OBaaS | | Kubernetes Context | | | Cluster Type | | | Validation Tier | Full Validation / Local Functional | @@ -662,6 +714,7 @@ Use this template: | OBaaS App Version | | | Database Type | | | Access Path | | +| cert-manager Owner / Namespace | | | Eureka Replicas | | | Coherence Enabled / Cluster Name / Persistence | | | CloudBank DB Name | | @@ -679,7 +732,7 @@ Overall Status: Pass / Fail Traffic-Light Rating: Green / Amber / Red -Pass Rate: `/` (`%`) +Pass Rate: `/` (`%`), where executed is `Pass` plus `Fail`. Report `N/A` when no tests executed; list blocked tests separately. Summary: @@ -687,9 +740,24 @@ Summary: Rating rules: -- Green: all required tests pass, no unwaived critical/high image findings, no required evidence missing. +- Green: all required tests pass, no unwaived critical/high security findings, no required evidence missing. - Amber: only waived, local-capacity, optional-component, or non-blocking evidence issues remain. -- Red: any required install, platform, CloudBank, observability, isolation, or security test fails. +- Red: any required infrastructure, install, platform, CloudBank, observability, isolation, or security test fails or is blocked. + +## Infrastructure Evidence Summary + +- CLI/version and provider versions: +- OCI profile, tenancy, compartment, and region: +- Working directory, variable-file references, and state backend/workspace or local state path: +- Resource prefix, cluster identity, network and database scenario: +- Configuration-management, local-chart, and OKE add-on settings: +- Local chart paths and chart/app versions: +- Static checks and IaC scan findings/disposition: +- Reviewed plan identity and sanitized evidence: +- Apply outcome and handoff evidence: +- Failed prerequisite and blocked test IDs: +- Retain/destroy decision and destruction approval, when applicable: +- Remaining resources, owner, cleanup date, and follow-up: ## Environment Summary @@ -713,6 +781,11 @@ Known deviations or waivers: | ID | Category | Status | Expected | Actual | Evidence | Notes | | --- | --- | --- | --- | --- | --- | --- | +| INF-001 | Infrastructure | | | | | | +| INF-002 | Infrastructure | | | | | | +| INF-003 | Infrastructure | | | | | | +| INF-004 | Infrastructure | | | | | | +| INF-005 | Infrastructure | | | | | | | PRE-001 | Preflight | | | | | | | PRE-002 | Preflight | | | | | | | PRE-003 | Preflight | | | | | | @@ -753,6 +826,7 @@ Known deviations or waivers: | CB-012 | CloudBank | | | | | | | CB-013 | CloudBank | | | | | | | CB-014 | CloudBank | | | | | | +| CB-015 | CloudBank | | | | | | | OBS-001 | Observability | | | | | | | OBS-002 | Observability | | | | | | | OBS-003 | Observability | | | | | | @@ -787,6 +861,7 @@ Known deviations or waivers: | APISIX Gateway Service | | | | | APISIX Admin API Routes | | | | | APISIX OpenTelemetry Runtime Metadata | | | | +| APISIX Trace And Access-Log Correlation | | | Include a populated access-log trace ID matching a SigNoz trace, or document an intentional tracing override. | | Eureka UI/API | | | | | Eureka/APISIX Replica Alignment | | | | | Config Server | | | | @@ -795,6 +870,7 @@ Known deviations or waivers: | OTMM/MicroTx Runtime | | | Optional; required only when `otmm.coordinator.enabled=true`; include version-specific known failures instead of omitting this row. | | MicroTx Transfer Workflow | | | Optional; required only when `otmm.coordinator.enabled=true`; include CloudBank transfer evidence and failure diagnostics when failing. | | MicroTx Workflow Server | | | Optional; required only when `otmm.workflowServer.enabled=true`; include deployment, pod, service, endpoint, and health evidence. | +| MicroTx Workflow API JWT Integration | | | Conditional `CB-015`; include security configuration and script output. JWKS request logs alone do not establish callback attribution. | | Workflow Server Flyway DB Initialization | | | Optional; required only when workflow server is enabled; include migration logs and any Oracle privilege diagnostics. | | OTMM Console | | | Optional; required only when `otmm.console.enabled=true` and either coordinator or workflow server is enabled; verify `/consoleui/`, not service root `/`; do not use as workflow server evidence. | | Coherence Cluster | | | Optional and deprecated; when enabled, include operator/CRD, CR, member-count, namespace-watch, and persistence evidence. | @@ -867,19 +943,24 @@ Medium finding triage: | Tester | | | | | Reviewer | | | | | Operator Approval For Waivers | | | | +| Operator Approval For Infrastructure Destruction | | | Scope and evidence, when applicable. | ``` ## Completion Criteria A run is complete only when: -- The selected installation tier is explicitly recorded. +- The selected deployment mode and validation tier are explicitly recorded. +- Applicable infrastructure checks have recorded outcomes, and retained or residual resources have an owner and follow-up. - Required install and platform tests are complete. - CloudBank deployment and smoke tests are complete; `7-test_all_services.sh` is also complete for `Full Validation`. +- `CB-015` has a recorded outcome and JWT evidence when workflow-server azn-server integration is configured, or a configuration-backed `Not Applicable` reason; required integration blocked by a failed prerequisite remains `Blocked`. - Observability readiness checks prove required telemetry existed before screenshots were captured, or load generation was run and the checks were repeated. - Collector scrape health is verified, including EndpointSlice discovery and the absence of repeated collector self-scrape or deprecated-v1 warnings. - Observability evidence includes SigNoz Services, traces, logs, metrics, dashboards, dashboard-population screenshots, load-generation output, and dashboard validation metadata that distinguishes populated, partial, empty, zero-only, and not-applicable dashboards. - Screenshot validation guardrails pass for every required UI evidence file. -- Vulnerability scans are complete; medium findings are triaged, and critical/high findings are resolved or explicitly waived by the operator. +- Image scans and applicable IaC scans are complete; medium findings are triaged, and critical/high findings are resolved or explicitly waived by the operator. - Every failure has logs, events, command output, and a recommended next action. - The run report contains an overall pass/fail result, pass rate, traffic-light rating, and evidence links. + +When a failed prerequisite prevents later checks, finalize a failed report with those checks marked `Blocked` and the dependency identified. A failed provisioning run still requires failure evidence and resource disposition. diff --git a/cloudbank-v5/4-deploy_all_services.sh b/cloudbank-v5/4-deploy_all_services.sh index acfc62ad1..455562266 100755 --- a/cloudbank-v5/4-deploy_all_services.sh +++ b/cloudbank-v5/4-deploy_all_services.sh @@ -497,11 +497,11 @@ deploy_service() { fi print_success "Image verified" - print_info "Running: $helm_command --wait --timeout 5m" + print_info "Running: $helm_command" # Suppress NOTES.txt output unless this is the last service if [[ "$is_last_service" == true ]]; then - if $helm_command --wait --timeout 5m; then + if $helm_command; then print_success "$service_name deployed successfully" return 0 else @@ -511,7 +511,7 @@ deploy_service() { return 1 fi else - if $helm_command --wait --timeout 5m > /dev/null; then + if $helm_command > /dev/null; then print_success "$service_name deployed successfully" return 0 else diff --git a/cloudbank-v5/6-smoke_test_secure_services.sh b/cloudbank-v5/6-smoke_test_secure_services.sh index 250d39c55..a92727fae 100755 --- a/cloudbank-v5/6-smoke_test_secure_services.sh +++ b/cloudbank-v5/6-smoke_test_secure_services.sh @@ -24,6 +24,10 @@ OBAAS_RELEASE="" DB_NAME="" GATEWAY_URL="" LOCAL_PORT="9080" +DISCOVERY_LOCAL_PORT="9081" +DISCOVERY_TOKEN="" +DISCOVERY_PORT_FORWARD_PID="" +TMP_DIR="" KEEP_PORT_FORWARD=false READ_ONLY=false FROM_ACCOUNT_ID="" @@ -43,6 +47,14 @@ FAILURES=0 # ============================================================================= parse_args() { while [[ $# -gt 0 ]]; do + case $1 in + -n|--namespace|-o|--obaas-release|-d|--database|--gateway-url|--local-port|--discovery-local-port|--from-account|--to-account) + if [[ $# -lt 2 || -z "$2" || "$2" == -* ]]; then + print_error "Option $1 requires a value" + exit 1 + fi + ;; + esac case $1 in -n|--namespace) NAMESPACE="$2" @@ -64,6 +76,10 @@ parse_args() { LOCAL_PORT="$2" shift 2 ;; + --discovery-local-port) + DISCOVERY_LOCAL_PORT="$2" + shift 2 + ;; --from-account) FROM_ACCOUNT_ID="$2" shift 2 @@ -108,16 +124,26 @@ Options: -d, --database DBNAME OBaaS database name/prefix for azn-server auth secret --gateway-url URL Existing APISIX gateway URL, for example http://example.com --local-port PORT Local port for APISIX port-forward (default: 9080) + --discovery-local-port PORT Local account discovery port (default: 9081) --from-account ACCOUNT_ID Source account for transfer test --to-account ACCOUNT_ID Destination account for deposit/transfer tests --read-only Skip mutating deposit and transfer tests --keep-port-forward Leave the temporary port-forward running -h, --help Show this help message -Examples: - ./6-smoke_test_secure_services.sh -n obaas-dev -o obaas -d obaas - ./6-smoke_test_secure_services.sh -n obaas-dev -d obaas --read-only - ./6-smoke_test_secure_services.sh -n obaas-dev -d obaas --gateway-url http://localhost:9080 +Examples (replace placeholders with your configuration): + ./6-smoke_test_secure_services.sh -n -o -d + ./6-smoke_test_secure_services.sh -n -d --read-only + ./6-smoke_test_secure_services.sh -n -d --gateway-url + ./6-smoke_test_secure_services.sh -n -d --discovery-local-port + ./6-smoke_test_secure_services.sh -n -d --from-account --to-account + +Automatic discovery reads service-client-secret from -azn-server-auth +and uses cloudbank.internal through a temporary direct account-service +port-forward. No user password is required. Discovery needs two accounts, +including one with a balance greater than 1. Supplying both account IDs bypasses +discovery; IDs must be positive, distinct integers belonging to existing accounts. +The full test publishes a test deposit. Use --read-only to skip workflow checks. EOF } @@ -150,6 +176,13 @@ prompt_value() { } cleanup() { + if [[ -n "$DISCOVERY_PORT_FORWARD_PID" ]]; then + kill "$DISCOVERY_PORT_FORWARD_PID" 2>/dev/null || true + wait "$DISCOVERY_PORT_FORWARD_PID" 2>/dev/null || true + fi + if [[ -n "$TMP_DIR" && -d "$TMP_DIR" ]]; then + rm -rf -- "$TMP_DIR" + fi if [[ -n "$PORT_FORWARD_PID" && "$KEEP_PORT_FORWARD" != true ]]; then print_step "Stopping APISIX gateway port-forward..." kill "$PORT_FORWARD_PID" 2>/dev/null || true @@ -161,6 +194,8 @@ cleanup() { } trap cleanup EXIT +trap 'exit 130' INT +trap 'exit 143' TERM check_prerequisites() { print_step "Checking prerequisites..." @@ -245,7 +280,7 @@ get_token() { -d "scope=${scope}" | jq -r '.access_token // empty') if [[ -z "$token" ]]; then - print_error "Could not get token for scope: $scope" + print_error "Could not get token for scope: $scope" >&2 return 1 fi @@ -260,6 +295,43 @@ get_tokens() { print_success "Scoped OAuth tokens issued" } +# Service credentials are used only to discover IDs directly from account. +start_account_discovery() { + local auth_secret_name="${DB_NAME}-azn-server-auth" + local service_secret attempt + local discovery_base="http://127.0.0.1:${DISCOVERY_LOCAL_PORT}" + + print_step "Reading service-client credentials for automatic account discovery..." + service_secret=$(kubectl get secret "$auth_secret_name" -n "$NAMESPACE" \ + -o jsonpath='{.data.service-client-secret}' 2>/dev/null | base64 -d) + if [[ -z "$service_secret" ]]; then + print_error "Could not read service-client-secret from $auth_secret_name; provide both account IDs to bypass discovery" + return 1 + fi + if ! DISCOVERY_TOKEN=$(get_token "cloudbank.internal" "cloudbank-service-client" "$service_secret"); then + return 1 + fi + + print_step "Starting account-service port-forward for discovery on localhost:$DISCOVERY_LOCAL_PORT..." + kubectl port-forward -n "$NAMESPACE" svc/account "${DISCOVERY_LOCAL_PORT}:8080" \ + >"$TMP_DIR/discovery-port-forward.log" 2>&1 & + DISCOVERY_PORT_FORWARD_PID=$! + for ((attempt=0; attempt<60; attempt++)); do + if ! kill -0 "$DISCOVERY_PORT_FORWARD_PID" 2>/dev/null; then + print_error "Account discovery port-forward exited; check svc/account and local port $DISCOVERY_LOCAL_PORT" + return 1 + fi + if grep -Fq "Forwarding from 127.0.0.1:${DISCOVERY_LOCAL_PORT} ->" "$TMP_DIR/discovery-port-forward.log" && \ + curl --noproxy '*' -fsS --max-time 2 "$discovery_base/actuator/health" >/dev/null 2>&1 && \ + kill -0 "$DISCOVERY_PORT_FORWARD_PID" 2>/dev/null; then + return 0 + fi + sleep 1 + done + print_error "Account discovery port-forward did not become ready" + return 1 +} + # ============================================================================= # Test Helpers # ============================================================================= @@ -288,30 +360,62 @@ discover_account_ids() { return 0 fi + if ! start_account_discovery; then + print_error "Account discovery failed: service authentication or port-forward unavailable" + ((++FAILURES)) + return 1 + fi print_step "Discovering valid account IDs..." local status_code - status_code=$(request_status /tmp/cloudbank-smoke-accounts.json \ - -H "Authorization: Bearer ${READ_TOKEN}" \ - "${GATEWAY_URL}/api/v1/accounts") - record_result "Account list with read token" "200" "$status_code" + local accounts_file="$TMP_DIR/accounts.json" + status_code=$(request_status "$accounts_file" \ + -H "Authorization: Bearer ${DISCOVERY_TOKEN}" \ + "http://127.0.0.1:${DISCOVERY_LOCAL_PORT}/api/v1/accounts") || status_code="000" + record_result "Direct account list with internal token" "200" "$status_code" if [[ "$status_code" != "200" ]]; then return 1 fi + if ! jq -e 'type == "array" and all(.[]; + (.accountId | type == "number" and . > 0 and . == floor) and + (.accountBalance | type == "number"))' "$accounts_file" >/dev/null 2>&1; then + print_error "Account discovery failed: expected an array of accounts with numeric IDs and balances" + ((++FAILURES)) + return 1 + fi + if [[ $(jq 'length' "$accounts_file") -lt 2 ]]; then + print_error "Account discovery needs at least two existing accounts; verify account data" + ((++FAILURES)) + return 1 + fi + if [[ -n "$FROM_ACCOUNT_ID" ]] && ! jq -e --argjson id "$FROM_ACCOUNT_ID" \ + 'any(.[]; .accountId == $id and .accountBalance > 1)' "$accounts_file" >/dev/null; then + print_error "Source account $FROM_ACCOUNT_ID is not available in the account service or its balance is not greater than 1" + ((++FAILURES)) + return 1 + fi + if [[ -n "$TO_ACCOUNT_ID" ]] && ! jq -e --argjson id "$TO_ACCOUNT_ID" \ + 'any(.[]; .accountId == $id)' "$accounts_file" >/dev/null; then + print_error "Destination account $TO_ACCOUNT_ID is not available in the account service" + ((++FAILURES)) + return 1 + fi + if [[ -z "$FROM_ACCOUNT_ID" ]]; then - FROM_ACCOUNT_ID=$(jq -r '[.[] | select((.accountBalance // 0) > 1) | .accountId][0] // empty' \ - /tmp/cloudbank-smoke-accounts.json) + FROM_ACCOUNT_ID=$(jq -r --argjson to "${TO_ACCOUNT_ID:-0}" \ + '[.[] | select(.accountBalance > 1 and .accountId != $to) | .accountId][0] // empty' \ + "$accounts_file") fi if [[ -z "$TO_ACCOUNT_ID" ]]; then TO_ACCOUNT_ID=$(jq -r --argjson from "${FROM_ACCOUNT_ID:-0}" \ '[.[] | select(.accountId != $from) | .accountId][0] // empty' \ - /tmp/cloudbank-smoke-accounts.json) + "$accounts_file") fi if [[ -z "$FROM_ACCOUNT_ID" || -z "$TO_ACCOUNT_ID" ]]; then - print_error "Could not discover two valid account IDs" + print_error "Could not discover two distinct accounts, including a source with balance greater than 1" ((++FAILURES)) return 1 fi @@ -324,16 +428,16 @@ run_smoke_tests() { local status_code - status_code=$(request_status /tmp/cloudbank-smoke-metadata.json \ + status_code=$(request_status "$TMP_DIR/metadata.json" \ "${GATEWAY_URL}/.well-known/oauth-authorization-server") record_result "Authorization metadata without token" "200" "$status_code" - status_code=$(request_status /tmp/cloudbank-smoke-jwks.json \ + status_code=$(request_status "$TMP_DIR/jwks.json" \ "${GATEWAY_URL}/oauth2/jwks") record_result "Authorization JWK set without token" "200" "$status_code" if [[ "$status_code" == "200" ]]; then local signing_key_id - signing_key_id=$(jq -r '.keys[0].kid // empty' /tmp/cloudbank-smoke-jwks.json) + signing_key_id=$(jq -r '.keys[0].kid // empty' "$TMP_DIR/jwks.json") if [[ -n "$signing_key_id" ]]; then print_success "Authorization JWK set exposes a signing key id" else @@ -342,20 +446,20 @@ run_smoke_tests() { fi fi - status_code=$(request_status /tmp/cloudbank-smoke-creditscore-anon.json \ + status_code=$(request_status "$TMP_DIR/creditscore-anon.json" \ "${GATEWAY_URL}/api/v1/creditscore") record_result "Creditscore without token" "401" "$status_code" - status_code=$(request_status /tmp/cloudbank-smoke-creditscore-read.json \ + status_code=$(request_status "$TMP_DIR/creditscore-read.json" \ -H "Authorization: Bearer ${READ_TOKEN}" \ "${GATEWAY_URL}/api/v1/creditscore") record_result "Creditscore with read token" "200" "$status_code" - status_code=$(request_status /tmp/cloudbank-smoke-user-api.json \ + status_code=$(request_status "$TMP_DIR/user-api.json" \ "${GATEWAY_URL}/user/api/v1/ping") record_result "Azn-server user API not externally routed" "404" "$status_code" - status_code=$(request_status /tmp/cloudbank-smoke-internal-journal.json \ + status_code=$(request_status "$TMP_DIR/internal-journal.json" \ -X POST \ -H "Authorization: Bearer ${READ_TOKEN}" \ -H "Content-Type: application/json" \ @@ -363,14 +467,22 @@ run_smoke_tests() { "${GATEWAY_URL}/api/v1/account/journal") record_result "Internal account journal route with read token" "403" "$status_code" - discover_account_ids || true + status_code=$(request_status "$TMP_DIR/accounts-public.json" \ + -H "Authorization: Bearer ${READ_TOKEN}" \ + "${GATEWAY_URL}/api/v1/accounts") || status_code="000" + record_result "Public account list with read token" "200" "$status_code" + + if ! discover_account_ids; then + print_warning "Skipping deposit and transfer checks: valid account IDs unavailable" + return 0 + fi if [[ "$READ_ONLY" == true ]]; then print_warning "Read-only mode: skipping deposit and transfer workflow tests" return 0 fi - status_code=$(request_status /tmp/cloudbank-smoke-deposit-read.json \ + status_code=$(request_status "$TMP_DIR/deposit-read.json" \ -X POST \ -H "Authorization: Bearer ${READ_TOKEN}" \ -H "Content-Type: application/json" \ @@ -378,7 +490,7 @@ run_smoke_tests() { "${GATEWAY_URL}/api/v1/testrunner/deposit") record_result "Testrunner deposit with read token" "403" "$status_code" - status_code=$(request_status /tmp/cloudbank-smoke-deposit-test.json \ + status_code=$(request_status "$TMP_DIR/deposit-test.json" \ -X POST \ -H "Authorization: Bearer ${TEST_TOKEN}" \ -H "Content-Type: application/json" \ @@ -386,7 +498,7 @@ run_smoke_tests() { "${GATEWAY_URL}/api/v1/testrunner/deposit") record_result "Testrunner deposit with test token" "201" "$status_code" - status_code=$(request_status /tmp/cloudbank-smoke-transfer.json \ + status_code=$(request_status "$TMP_DIR/transfer.json" \ -X POST \ -H "Authorization: Bearer ${TRANSFER_TOKEN}" \ "${GATEWAY_URL}/transfer?fromAccount=${FROM_ACCOUNT_ID}&toAccount=${TO_ACCOUNT_ID}&amount=1") @@ -401,6 +513,30 @@ main() { parse_args "$@" + local account_id + for account_id in "$FROM_ACCOUNT_ID" "$TO_ACCOUNT_ID"; do + if [[ -n "$account_id" && ! "$account_id" =~ ^[1-9][0-9]*$ ]]; then + print_error "Account IDs must be positive integers" + exit 1 + fi + done + if [[ -n "$FROM_ACCOUNT_ID" && "$FROM_ACCOUNT_ID" == "$TO_ACCOUNT_ID" ]]; then + print_error "Source and destination account IDs must be distinct" + exit 1 + fi + if [[ -z "$FROM_ACCOUNT_ID" || -z "$TO_ACCOUNT_ID" ]]; then + if [[ ! "$DISCOVERY_LOCAL_PORT" =~ ^[1-9][0-9]{0,4}$ ]] || \ + ((DISCOVERY_LOCAL_PORT > 65535)); then + print_error "Account discovery local port must be between 1 and 65535" + exit 1 + fi + if [[ -z "$GATEWAY_URL" && "$DISCOVERY_LOCAL_PORT" == "$LOCAL_PORT" ]]; then + print_error "Gateway and account discovery local ports must be different" + exit 1 + fi + fi + TMP_DIR=$(umask 077; mktemp -d "${TMPDIR:-/tmp}/cloudbank-smoke.XXXXXX") + if [[ -z "$NAMESPACE" || -z "$DB_NAME" ]]; then echo "Please provide the following configuration values." echo "" diff --git a/cloudbank-v5/7-smoke_test_microtx_jwt.sh b/cloudbank-v5/7-smoke_test_microtx_jwt.sh deleted file mode 100755 index 708cf7c2e..000000000 --- a/cloudbank-v5/7-smoke_test_microtx_jwt.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -# Copyright (c) 2026, Oracle and/or its affiliates. -# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. - -# Validates azn-server JWT authentication to the MicroTx Workflow API and -# records evidence that the workflow server can retrieve azn-server JWKS. - -set -euo pipefail - -NAMESPACE="obaas" -AZN_PORT="18080" -WORKFLOW_PORT="19010" -CLIENT_ID="microtx-workflow-client" -CLIENT_SECRET_KEY="microtx-client-secret" -WORKFLOW_PATH="/workflow-server/api/metadata/workflow" - -usage() { - cat <<'EOF' -MicroTx JWT smoke test - -Usage: - ./7-smoke_test_microtx_jwt.sh [-n namespace] [--azn-port port] [--workflow-port port] -EOF -} - -while [[ $# -gt 0 ]]; do - case "$1" in - -n|--namespace) NAMESPACE="$2"; shift 2 ;; - --azn-port) AZN_PORT="$2"; shift 2 ;; - --workflow-port) WORKFLOW_PORT="$2"; shift 2 ;; - -h|--help) usage; exit 0 ;; - *) echo "Unknown option: $1" >&2; usage >&2; exit 1 ;; - esac -done - -AZN_PF_PID="" -WORKFLOW_PF_PID="" -cleanup() { - [[ -n "$AZN_PF_PID" ]] && kill "$AZN_PF_PID" 2>/dev/null || true - [[ -n "$WORKFLOW_PF_PID" ]] && kill "$WORKFLOW_PF_PID" 2>/dev/null || true -} -trap cleanup EXIT - -kubectl port-forward -n "$NAMESPACE" svc/azn-server "${AZN_PORT}:8080" >/tmp/microtx-jwt-azn-port-forward.log 2>&1 & -AZN_PF_PID=$! -kubectl port-forward -n "$NAMESPACE" svc/obaas-otmm-workflow-server "${WORKFLOW_PORT}:9010" \ - >/tmp/microtx-jwt-workflow-port-forward.log 2>&1 & -WORKFLOW_PF_PID=$! - -for attempt in {1..30}; do - if curl --noproxy '*' --silent --fail "http://127.0.0.1:${AZN_PORT}/actuator/health" >/dev/null \ - && curl --noproxy '*' --silent --fail "http://127.0.0.1:${WORKFLOW_PORT}/workflow-server/health" >/dev/null; then - break - fi - sleep 2 -done - -CLIENT_SECRET=$(kubectl get secret obaas-azn-server-auth -n "$NAMESPACE" \ - -o "jsonpath={.data.${CLIENT_SECRET_KEY}}" | base64 -d) -curl --noproxy '*' --silent --show-error --fail \ - -u "${CLIENT_ID}:${CLIENT_SECRET}" \ - -d grant_type=client_credentials \ - -d scope=microtx.workflow \ - "http://127.0.0.1:${AZN_PORT}/oauth2/token" >/tmp/microtx-jwt-token.json - -TOKEN=$(jq -r .access_token /tmp/microtx-jwt-token.json) -test -n "$TOKEN" -a "$TOKEN" != null - -echo "JWT claims:" -printf '%s' "$TOKEN" | awk -F. '{print $2}' | base64 -d 2>/dev/null \ - | jq '{iss,aud,scope,roles}' - -echo "JWKS:" -curl --noproxy '*' --silent --show-error --fail \ - "http://127.0.0.1:${AZN_PORT}/oauth2/jwks" | jq '{keyCount:(.keys|length),kids:[.keys[].kid]}' - -NO_TOKEN_STATUS=$(curl --noproxy '*' --silent --output /tmp/microtx-jwt-no-token.json \ - --write-out '%{http_code}' "http://127.0.0.1:${WORKFLOW_PORT}${WORKFLOW_PATH}") -TOKEN_STATUS=$(curl --noproxy '*' --silent --output /tmp/microtx-jwt-with-token.json \ - --write-out '%{http_code}' -H "Authorization: Bearer ${TOKEN}" \ - "http://127.0.0.1:${WORKFLOW_PORT}${WORKFLOW_PATH}") - -echo "Workflow API without JWT: HTTP ${NO_TOKEN_STATUS}" -echo "Workflow API with azn-server JWT: HTTP ${TOKEN_STATUS}" -[[ "$NO_TOKEN_STATUS" == "401" ]] -[[ "$TOKEN_STATUS" == "200" ]] - -AZN_POD=$(kubectl get pod -n "$NAMESPACE" -l app.kubernetes.io/name=azn-server \ - -o jsonpath='{.items[0].metadata.name}') -echo "JWKS callback evidence:" -kubectl exec -n "$NAMESPACE" "$AZN_POD" -- sh -c \ - 'tail -200 /tmp/tomcat.8080.*/logs/access_log.*' \ - | grep 'GET /oauth2/jwks HTTP/1.1" 200' | tail -5 - -echo "MicroTx JWT smoke test passed." diff --git a/cloudbank-v5/8-smoke_test_microtx_jwt.sh b/cloudbank-v5/8-smoke_test_microtx_jwt.sh new file mode 100755 index 000000000..e0ff1356b --- /dev/null +++ b/cloudbank-v5/8-smoke_test_microtx_jwt.sh @@ -0,0 +1,187 @@ +#!/bin/bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +# Validates azn-server JWT authentication to the MicroTx Workflow API and +# records evidence that the workflow server can retrieve azn-server JWKS. + +set -euo pipefail + +NAMESPACE="obaas" +AZN_PORT="18080" +WORKFLOW_PORT="19010" +CLIENT_ID="microtx-workflow-client" +CLIENT_SECRET_KEY="microtx-client-secret" +SECRET_NAME="obaas-azn-server-auth" +WORKFLOW_PATH="/workflow-server/api/metadata/workflow" + +usage() { + cat <<'EOF' +MicroTx JWT smoke test + +Usage: + ./8-smoke_test_microtx_jwt.sh [-n namespace] [--secret-name name] [--azn-port port] [--workflow-port port] + + --secret-name NAME OAuth client secret resource (default: obaas-azn-server-auth). + Must contain the microtx-client-secret key. + +Example (replace placeholders with your configuration): + ./8-smoke_test_microtx_jwt.sh -n --secret-name +EOF +} + +while [[ $# -gt 0 ]]; do + case "$1" in + -n|--namespace) NAMESPACE="$2"; shift 2 ;; + --secret-name) + if [[ $# -lt 2 || -z "$2" || "$2" == -* ]]; then + echo "Option --secret-name requires a nonempty secret name." >&2 + usage >&2 + exit 1 + fi + SECRET_NAME="$2"; shift 2 ;; + --azn-port) AZN_PORT="$2"; shift 2 ;; + --workflow-port) WORKFLOW_PORT="$2"; shift 2 ;; + -h|--help) usage; exit 0 ;; + *) echo "Unknown option: $1" >&2; usage >&2; exit 1 ;; + esac +done + +AZN_PF_PID="" +WORKFLOW_PF_PID="" +TMP_DIR="" +STAGE="initializing" +PASSED=false +progress() { printf '> %s\n' "$*"; } +success() { printf '+ %s\n' "$*"; } +fail() { printf 'x %s\n' "$*" >&2; exit 1; } +show_forward_logs() { + printf '\nAuthorization server port-forward log:\n' >&2 + tail -20 "$TMP_DIR/azn-port-forward.log" >&2 || true + printf '\nWorkflow server port-forward log:\n' >&2 + tail -20 "$TMP_DIR/workflow-port-forward.log" >&2 || true +} +cleanup() { + local exit_status=$? + if [[ "$PASSED" == true ]]; then + success "MicroTx JWT smoke test passed." + else + printf 'x MicroTx JWT smoke test failed during %s (exit %s).\n' "$STAGE" "$exit_status" >&2 + fi + if [[ -n "$AZN_PF_PID" || -n "$WORKFLOW_PF_PID" ]]; then + progress "Stopping temporary port-forwards..." + [[ -n "$AZN_PF_PID" ]] && kill "$AZN_PF_PID" 2>/dev/null || true + [[ -n "$WORKFLOW_PF_PID" ]] && kill "$WORKFLOW_PF_PID" 2>/dev/null || true + [[ -n "$AZN_PF_PID" ]] && wait "$AZN_PF_PID" 2>/dev/null || true + [[ -n "$WORKFLOW_PF_PID" ]] && wait "$WORKFLOW_PF_PID" 2>/dev/null || true + success "Port-forwards stopped." + fi + [[ -n "$TMP_DIR" ]] && rm -rf "$TMP_DIR" + return "$exit_status" +} +trap cleanup EXIT +trap 'exit 130' INT +trap 'exit 143' TERM + +printf '\n==============================================================================\n' +printf ' MicroTx JWT Smoke Test\n' +printf '==============================================================================\n' +printf 'Namespace: %s | Authorization port: %s | Workflow port: %s\n' "$NAMESPACE" "$AZN_PORT" "$WORKFLOW_PORT" +STAGE="prerequisite checks" +progress "Checking required tools..." +for tool in kubectl curl jq base64 awk; do + command -v "$tool" >/dev/null || fail "Required tool '$tool' is unavailable." +done +TMP_DIR=$(umask 077; mktemp -d "${TMPDIR:-/tmp}/microtx-jwt.XXXXXX") +success "Required tools are available." + +STAGE="port-forward startup" +progress "Starting svc/azn-server port-forward on localhost:${AZN_PORT}..." +kubectl port-forward -n "$NAMESPACE" svc/azn-server "${AZN_PORT}:8080" >"$TMP_DIR/azn-port-forward.log" 2>&1 & +AZN_PF_PID=$! +progress "Starting svc/obaas-otmm-workflow-server port-forward on localhost:${WORKFLOW_PORT}..." +kubectl port-forward -n "$NAMESPACE" svc/obaas-otmm-workflow-server "${WORKFLOW_PORT}:9010" \ + >"$TMP_DIR/workflow-port-forward.log" 2>&1 & +WORKFLOW_PF_PID=$! + +STAGE="service readiness checks" +progress "Waiting for authorization and workflow health endpoints..." +READY=false +for attempt in {1..30}; do + if ! kill -0 "$AZN_PF_PID" 2>/dev/null || ! kill -0 "$WORKFLOW_PF_PID" 2>/dev/null; then + show_forward_logs + fail "A port-forward exited before the services became ready." + fi + if curl --noproxy '*' --silent --fail --max-time 2 "http://127.0.0.1:${AZN_PORT}/actuator/health" >/dev/null \ + && curl --noproxy '*' --silent --fail --max-time 2 "http://127.0.0.1:${WORKFLOW_PORT}/workflow-server/health" >/dev/null; then + READY=true + break + fi + if (( attempt % 5 == 0 )); then + progress "Still waiting for healthy services (attempt ${attempt}/30)..." + fi + sleep 2 +done +if [[ "$READY" != true ]]; then + show_forward_logs + fail "Services did not become healthy after 30 readiness attempts." +fi +success "Authorization and workflow services are reachable." + +STAGE="OAuth client secret lookup" +progress "Reading '${CLIENT_SECRET_KEY}' from ${SECRET_NAME}..." +if ! CLIENT_SECRET=$(kubectl get secret "$SECRET_NAME" -n "$NAMESPACE" \ + -o "jsonpath={.data.${CLIENT_SECRET_KEY}}" | base64 -d); then + fail "Could not read '${CLIENT_SECRET_KEY}' from secret '${SECRET_NAME}' in namespace '${NAMESPACE}'." +fi +[[ -n "$CLIENT_SECRET" ]] || fail "Secret ${SECRET_NAME} has no '${CLIENT_SECRET_KEY}' value." +success "OAuth client secret is available." +STAGE="OAuth token request" +progress "Requesting a ${CLIENT_ID} token with microtx.workflow scope..." +curl --noproxy '*' --silent --show-error --fail \ + -u "${CLIENT_ID}:${CLIENT_SECRET}" \ + -d grant_type=client_credentials \ + -d scope=microtx.workflow \ + "http://127.0.0.1:${AZN_PORT}/oauth2/token" >"$TMP_DIR/token.json" + +TOKEN=$(jq -r .access_token "$TMP_DIR/token.json") +[[ -n "$TOKEN" && "$TOKEN" != null ]] || fail "Token response did not contain an access token." +success "Scoped OAuth token issued." + +STAGE="JWT claims inspection" +echo "JWT claims:" +printf '%s' "$TOKEN" | awk -F. '{print $2}' | base64 -d 2>/dev/null \ + | jq '{iss,aud,scope,roles}' + +STAGE="JWKS retrieval" +progress "Retrieving the authorization server signing keys..." +echo "JWKS:" +curl --noproxy '*' --silent --show-error --fail \ + "http://127.0.0.1:${AZN_PORT}/oauth2/jwks" | jq '{keyCount:(.keys|length),kids:[.keys[].kid]}' + +STAGE="Workflow API checks" +progress "Checking Workflow API without a JWT (expected HTTP 401)..." +NO_TOKEN_STATUS=$(curl --noproxy '*' --silent --show-error --output "$TMP_DIR/no-token.json" \ + --write-out '%{http_code}' "http://127.0.0.1:${WORKFLOW_PORT}${WORKFLOW_PATH}") +echo "Workflow API without JWT: HTTP ${NO_TOKEN_STATUS}" +[[ "$NO_TOKEN_STATUS" == "401" ]] || fail "Workflow API without JWT returned HTTP ${NO_TOKEN_STATUS}, expected 401." +progress "Checking Workflow API with azn-server JWT (expected HTTP 200)..." +TOKEN_STATUS=$(curl --noproxy '*' --silent --show-error --output "$TMP_DIR/with-token.json" \ + --write-out '%{http_code}' -H "Authorization: Bearer ${TOKEN}" \ + "http://127.0.0.1:${WORKFLOW_PORT}${WORKFLOW_PATH}") + +echo "Workflow API with azn-server JWT: HTTP ${TOKEN_STATUS}" +[[ "$TOKEN_STATUS" == "200" ]] || fail "Workflow API with azn-server JWT returned HTTP ${TOKEN_STATUS}, expected 200." + +STAGE="JWKS callback evidence collection" +progress "Locating the authorization server pod and collecting JWKS access-log evidence..." +AZN_POD=$(kubectl get pod -n "$NAMESPACE" -l app.kubernetes.io/name=azn-server \ + -o jsonpath='{.items[0].metadata.name}') +[[ -n "$AZN_POD" ]] || fail "No authorization server pod was found." +echo "JWKS callback evidence:" +kubectl exec -n "$NAMESPACE" "$AZN_POD" -- sh -c \ + 'tail -200 /tmp/tomcat.8080.*/logs/access_log.*' \ + | grep 'GET /oauth2/jwks HTTP/1.1" 200' | tail -5 \ + || fail "Could not collect successful JWKS requests from the authorization server access log." + +PASSED=true diff --git a/cloudbank-v5/README.md b/cloudbank-v5/README.md index d9695e1af..66c154208 100644 --- a/cloudbank-v5/README.md +++ b/cloudbank-v5/README.md @@ -25,6 +25,7 @@ For comprehensive testing procedures, see **[cloudbank-test-doc.md](cloudbank-te This guide covers: - Getting OAuth2 access tokens from `azn-server` - Running the automated secured smoke test with `6-smoke_test_secure_services.sh` +- Checking MicroTx Workflow API JWT authentication with `8-smoke_test_microtx_jwt.sh` - Testing individual microservices with bearer tokens (account, customer, creditscore etc.) - Check deposit and clearance workflow - LRA distributed transaction testing (transfer service) diff --git a/cloudbank-v5/cloudbank-test-doc.md b/cloudbank-v5/cloudbank-test-doc.md index 7e6a954d1..ae50d9f86 100644 --- a/cloudbank-v5/cloudbank-test-doc.md +++ b/cloudbank-v5/cloudbank-test-doc.md @@ -16,6 +16,20 @@ Before beginning these tests, ensure you have: - Access to the CloudBank OAuth client secrets created by `3-k8s_db_secrets.sh` - The azn-server signing-key secret created by `3-k8s_db_secrets.sh` +## MicroTx JWT Smoke Test + +When the MicroTx workflow server is deployed, run: + +```bash +./8-smoke_test_microtx_jwt.sh -n --secret-name +``` + +The script checks that the Workflow API returns `401` without a token and `200` with an azn-server JWT, and shows evidence of JWKS retrieval. It requires `svc/azn-server`, `svc/obaas-otmm-workflow-server`, and the `microtx-client-secret` key in the selected secret. The service names and OAuth client ID `microtx-workflow-client` are fixed in the script. Use `--secret-name` to select your existing OAuth secret (typically `-azn-server-auth`); omitting it retains the default `obaas-azn-server-auth`. The script does not create or modify secrets. + +Temporary port-forwards use local ports `18080` and `19010`; override them with `--azn-port` and `--workflow-port`. Both port-forwards are stopped on exit. + +The script prints progress by default, including startup settings, readiness updates every five attempts, secret lookup, token issuance, API checks, and cleanup. Failures identify the stage and report expected versus actual HTTP status for API checks; startup failures also show port-forward logs. Client secrets and bearer tokens are not printed, and temporary response files are private and removed on exit. + ## Step 1: Getting Started ### 1.1 Set Environment Variables diff --git a/cloudbank-v5/cloudbank-v5-install.md b/cloudbank-v5/cloudbank-v5-install.md index 389a16fc4..0dc51f6ad 100644 --- a/cloudbank-v5/cloudbank-v5-install.md +++ b/cloudbank-v5/cloudbank-v5-install.md @@ -357,12 +357,36 @@ The `azn-server` user-management API (`/user/api/v1*`) is intentionally not rout Run the secured smoke-test script first. It verifies public authorization metadata/JWKs, token issuance, protected-route authentication, scope-based authorization, account lookup, check deposit, and that the transfer route rejects a non-owner client-credentials token through APISIX. Successful owner-scoped transfer workflow validation is performed by `7-test_all_services.sh`. +Replace the placeholders in these commands with your configuration before running them. + ```bash ./6-smoke_test_secure_services.sh -n -d ``` Use `--read-only` to skip the mutating deposit and transfer checks. +Automatic account discovery reads `service-client-secret` from `-azn-server-auth` and obtains a `cloudbank.internal` token for `cloudbank-service-client`. It reads accounts through a temporary direct `svc/account` port-forward, because the public APISIX account route requires `cloudbank.read`. The public account-list check still uses the normal read token and accepts `200` even when ownership filtering returns an empty list. No user password is required. + +Discovery needs at least two accounts, including one with a balance greater than 1. The account-service port-forward uses local port `9081`, configurable with `--discovery-local-port`. It is always stopped on exit, including when `--keep-port-forward` retains the gateway forward, and private temporary response files are deleted. Failed discovery reports one failure and skips requests that require account IDs. +Alternatively, supply two known, distinct, positive account IDs to bypass owner login. Replace the account ID placeholders below with existing accounts in your database: + +```bash +./6-smoke_test_secure_services.sh -n -d \ + --from-account --to-account +``` + +When discovery is used with only one supplied account ID, that account must exist in the account service; a supplied source account must also have a balance greater than 1. Full workflow checks publish a test deposit; append `--read-only` to skip them. + +### MicroTx JWT Smoke Test + +If the MicroTx workflow server is deployed, run `8-smoke_test_microtx_jwt.sh` to check Workflow API JWT authentication and JWKS retrieval: + +```bash +./8-smoke_test_microtx_jwt.sh -n --secret-name +``` + +Select the existing secret containing `microtx-client-secret`, typically `-azn-server-auth`. If `--secret-name` is omitted, the script uses `obaas-azn-server-auth`. See the [MicroTx JWT smoke test prerequisites and port options](cloudbank-test-doc.md#microtx-jwt-smoke-test). + ### Get Gateway Address ```bash @@ -593,7 +617,7 @@ spec: restartPolicy: Never containers: - name: cloudbank-db-cleanup - image: container-registry.oracle.com/database/sqlcl:26.2.0 + image: container-registry.oracle.com/database/sqlcl:26.2.1 command: ["/bin/sh", "-c"] args: - | diff --git a/cloudbank-v5/customer-helidon/README.md b/cloudbank-v5/customer-helidon/README.md index 4e212f6f5..d96cb9399 100644 --- a/cloudbank-v5/customer-helidon/README.md +++ b/cloudbank-v5/customer-helidon/README.md @@ -89,7 +89,7 @@ To run against a local Oracle Docker container, simply: ```bash docker run -d --name oracle-db -p 1521:1521 \ -e ORACLE_PWD=Welcome12345 \ - container-registry.oracle.com/database/free:23.26.2.0 + container-registry.oracle.com/database/free:23.26.3.0 ``` 2. **Uncomment database configuration** in `src/main/resources/application.yaml`: diff --git a/cloudbank-v5/customer-helidon/test-endpoints.sh b/cloudbank-v5/customer-helidon/test-endpoints.sh index d727b3493..94e5813f7 100755 --- a/cloudbank-v5/customer-helidon/test-endpoints.sh +++ b/cloudbank-v5/customer-helidon/test-endpoints.sh @@ -1,4 +1,6 @@ #!/bin/bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. # Base URL for the Customer Helidon Service BASE_URL="http://localhost:8080/api/v1/customer" diff --git a/cloudbank-v5/helidon-producer/test-endpoints.sh b/cloudbank-v5/helidon-producer/test-endpoints.sh index 2365b6ebb..bd7025b05 100755 --- a/cloudbank-v5/helidon-producer/test-endpoints.sh +++ b/cloudbank-v5/helidon-producer/test-endpoints.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + # Authenticated endpoint test for helidon-producer. set -euo pipefail diff --git a/cloudbank-v5/pom.xml b/cloudbank-v5/pom.xml index c4261769b..c46705e36 100644 --- a/cloudbank-v5/pom.xml +++ b/cloudbank-v5/pom.xml @@ -38,7 +38,7 @@ UTF-8 21 2025.0.3 - 2.4.0 + 2.8.17 1.18.48 1.86 26.2.0 @@ -55,7 +55,7 @@ 3.6.0 - 14.1.0 + 14.3.0 ${project.basedir}/checkstyle/checkstyle.xml 9.0.9 diff --git a/cloudbank-v5/tests/test_secure_services_smoke.py b/cloudbank-v5/tests/test_secure_services_smoke.py new file mode 100644 index 000000000..26cc0c1e2 --- /dev/null +++ b/cloudbank-v5/tests/test_secure_services_smoke.py @@ -0,0 +1,239 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at https://oss.oracle.com/licenses/upl. +"""Regression tests for 6-smoke_test_secure_services.sh. +Protects automatic service-token discovery and prevents requests with missing IDs. +Runs the real shell script with mocked curl and kubectl commands. +Simulates client-credentials tokens, account discovery, and API responses. +Checks failed discovery, explicit account IDs, and read-only behavior. +Verifies private temporary files, port-forward cleanup, and secret concealment. +Uses synthetic credentials and responses; requires no cluster or network access. +Run: python3 tests/test_secure_services_smoke.py [-v] +Requires Python's standard library, bash, and jq. +Live authorization, database, and deposit behavior still need cluster verification. +""" + +import base64 +import json +import os +from pathlib import Path +import shlex +import subprocess +import sys +import tempfile +import time +import unittest +from urllib.parse import parse_qs, urlsplit + + +SCRIPT = Path(__file__).resolve().parents[1] / "6-smoke_test_secure_services.sh" +ACCOUNTS = [ + {"accountId": 11, "accountBalance": -20}, + {"accountId": 12, "accountBalance": 1035}, + {"accountId": 13, "accountBalance": 500}, +] + + +def trace(entry): + """Record a synthetic tool call for later request and cleanup assertions.""" + with open(os.environ["SMOKE_TRACE"], "a") as stream: + stream.write(json.dumps(entry) + "\n") + + +def mock_kubectl(args): + """Stand in for cluster reads and a terminable port-forward process.""" + trace({"tool": "kubectl", "args": args, "pid": os.getpid()}) + if "port-forward" in args: + if os.environ.get("SMOKE_SCENARIO") == "forward-failure": + return 1 + print(f"Forwarding from 127.0.0.1:{args[-1].split(':')[0]} -> 8080", flush=True) + while True: + time.sleep(60) + if args[:2] == ["config", "current-context"]: + print("mock-cluster") + elif args[:2] == ["get", "secret"]: + if os.environ.get("SMOKE_SCENARIO") == "missing-secret" and "service-client-secret" in args[-1]: + return 0 + print(base64.b64encode(b"mock-client-secret").decode(), end="") + elif args[0] not in ("cluster-info", "get"): + raise AssertionError(f"Unexpected Kubernetes operation: {args}") + return 0 + + +def mock_curl(args): + """Emulate curl's response files, headers, and status output for each scenario.""" + def option(name): + return args[args.index(name) + 1] if name in args else None + + url = next(arg for arg in args if arg.startswith(("http://", "https://"))) + parsed = urlsplit(url) + query = parse_qs(parsed.query) + scenario = os.environ.get("SMOKE_SCENARIO", "success") + data = "&".join(args[i + 1] for i, arg in enumerate(args) if arg == "-d") + headers = [args[i + 1] for i, arg in enumerate(args) if arg == "-H"] + trace({"tool": "curl", "url": url, "headers": headers, "data": data}) + status, body = 200, {} + if "Authorization: Bearer internal-token" in headers: + assert parsed.hostname == "127.0.0.1" and parsed.path == "/api/v1/accounts" + + if parsed.path == "/oauth2/token": + fields = parse_qs(data) + assert fields["grant_type"] == ["client_credentials"] + scope = fields["scope"][0].split(".")[-1] + if scope == "internal": + assert option("-u") == "cloudbank-service-client:mock-client-secret" + body = {"access_token": f"{scope}-token"} + if scope == "internal" and scenario == "token-failure": + status, body = 400, {"error": "invalid_scope"} + elif parsed.path == "/actuator/health": + assert parsed.hostname == "127.0.0.1" + body = {"status": "UP"} + elif parsed.path == "/oauth2/jwks": + body = {"keys": [{"kid": "mock-signing-key"}]} + elif parsed.path == "/api/v1/creditscore": + status = 200 if "Authorization: Bearer read-token" in headers else 401 + elif parsed.path == "/user/api/v1/ping": + status = 404 + elif parsed.path == "/api/v1/account/journal": + status = 403 + elif parsed.path == "/api/v1/accounts": + if parsed.hostname == "mock-gateway.invalid": + assert "Authorization: Bearer read-token" in headers + body = [] # Ownership filtering is valid for the public client. + else: + assert parsed.hostname == "127.0.0.1" + assert "Authorization: Bearer internal-token" in headers + body = ACCOUNTS + if scenario == "empty-accounts": + body = [] + elif scenario == "invalid-accounts": + body = {"error": "unexpected payload"} + elif scenario == "no-funded-account": + body = [{"accountId": 11, "accountBalance": 0}, {"accountId": 12, "accountBalance": 1}] + elif scenario == "account-error": + status = 500 + elif parsed.path == "/api/v1/testrunner/deposit": + payload = json.loads(data) + assert payload["accountId"] in (11, 12, 13) + assert payload["amount"] == 1 + status = 201 if "Authorization: Bearer test-token" in headers else 403 + elif parsed.path == "/transfer": + assert "Authorization: Bearer transfer-token" in headers + assert int(query["fromAccount"][0]) != int(query["toAccount"][0]) + status = 403 + elif parsed.path != "/.well-known/oauth-authorization-server": + raise AssertionError(f"Unexpected HTTP request: {url}") + + output = body if isinstance(body, str) else json.dumps(body) + if option("-o"): + assert Path(option("-o")).parent.stat().st_mode & 0o077 == 0 + Path(option("-o")).write_text(output) + elif "-w" not in args: + print(output, end="") + if "-w" in args: + print(status, end="") + return 0 + + +class SecureServicesSmokeTest(unittest.TestCase): + """Run the actual shell script with isolated, deterministic tool replacements.""" + + def run_smoke(self, scenario="success", options=()): + """Execute one scenario, verify cleanup, and return its output and call trace.""" + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + binaries = root / "bin" + binaries.mkdir() + for name in ("curl", "kubectl"): + wrapper = binaries / name + wrapper.write_text(f"#!/bin/sh\nexec {shlex.quote(sys.executable)} {shlex.quote(str(Path(__file__).resolve()))} --mock-{name} \"$@\"\n") + wrapper.chmod(0o700) + env = os.environ.copy() + env.update(PATH=f"{binaries}:{env['PATH']}", TMPDIR=str(root), + SMOKE_TRACE=str(root / "trace.jsonl"), + SMOKE_SCENARIO=scenario) + env.pop("CLOUDBANK_OWNER_PASSWORD", None) + result = subprocess.run(["bash", str(SCRIPT), "-n", "mock", "-d", "demo", "-o", "obaas", + "--gateway-url", "http://mock-gateway.invalid", *options], + env=env, input="", text=True, capture_output=True, timeout=20) + events = [json.loads(line) for line in (root / "trace.jsonl").read_text().splitlines()] if (root / "trace.jsonl").exists() else [] + self.assertEqual(list(root.glob("cloudbank-smoke.*")), [], "temporary response files were not cleaned") + for event in events: + if event["tool"] == "kubectl" and "port-forward" in event["args"]: + with self.assertRaises(ProcessLookupError, msg="discovery port-forward survived cleanup"): + os.kill(event["pid"], 0) + if event["tool"] == "kubectl": + self.assertNotIn(event["args"][0], ("apply", "patch", "delete", "create")) + self.assertNotIn("mock-client-secret", result.stdout + result.stderr) + self.assertNotIn("Password for", result.stdout + result.stderr) + return result, events + + @staticmethod + def workflow_requests(events): + return [e for e in events if e["tool"] == "curl" and urlsplit(e["url"]).path in ("/api/v1/testrunner/deposit", "/transfer")] + + def test_service_discovery_and_original_authorization_checks(self): + result, events = self.run_smoke() + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertIn("from=12 to=11", result.stdout) + self.assertEqual(len(self.workflow_requests(events)), 3) + + def test_discovery_failures_skip_dependent_requests(self): + for scenario in ("missing-secret", "forward-failure", "token-failure", "empty-accounts", "invalid-accounts", "no-funded-account", "account-error"): + with self.subTest(scenario=scenario): + result, events = self.run_smoke(scenario) + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + self.assertIn("1 failure(s)", result.stdout) + self.assertEqual(self.workflow_requests(events), []) + self.assertIn("Skipping deposit and transfer checks", result.stdout) + + def test_explicit_ids_bypass_service_discovery(self): + result, events = self.run_smoke("missing-secret", options=("--from-account", "12", "--to-account", "11")) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertFalse(any(e["tool"] == "kubectl" and ("port-forward" in e["args"] or "service-client-secret" in e["args"][-1]) for e in events)) + self.assertFalse(any(e["tool"] == "curl" and "cloudbank.internal" in e["data"] for e in events)) + + def test_internal_token_is_only_used_for_direct_lookup(self): + result, events = self.run_smoke() + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + internal = [e for e in events if e["tool"] == "curl" and "Authorization: Bearer internal-token" in e["headers"]] + self.assertEqual(len(internal), 1) + self.assertEqual(internal[0]["url"], "http://127.0.0.1:9081/api/v1/accounts") + public = [e for e in events if e["tool"] == "curl" and e["url"] == "http://mock-gateway.invalid/api/v1/accounts"] + self.assertEqual(len(public), 1) + self.assertIn("Authorization: Bearer read-token", public[0]["headers"]) + + def test_partial_id_selection_and_validation(self): + result, _ = self.run_smoke(options=("--to-account", "12")) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertIn("from=13 to=12", result.stdout) + for option, value in (("--from-account", "999"), ("--from-account", "11"), ("--to-account", "999")): + with self.subTest(option=option, value=value): + result, events = self.run_smoke(options=(option, value)) + self.assertEqual(result.returncode, 1, result.stdout + result.stderr) + self.assertEqual(self.workflow_requests(events), []) + + def test_invalid_ids_fail_before_network_requests(self): + for options in (("--from-account", "abc"), ("--to-account", "0"), ("--from-account", "12", "--to-account", "12"), ("--discovery-local-port",)): + with self.subTest(options=options): + result, events = self.run_smoke(options=options) + self.assertEqual(result.returncode, 1) + self.assertEqual(events, []) + + def test_read_only_still_discovers_accounts(self): + result, events = self.run_smoke(options=("--read-only",)) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + self.assertIn("from=12 to=11", result.stdout) + self.assertEqual(self.workflow_requests(events), []) + + def test_keep_gateway_forward_does_not_keep_discovery_forward(self): + result, _ = self.run_smoke(options=("--keep-port-forward", "--read-only")) + self.assertEqual(result.returncode, 0, result.stdout + result.stderr) + + +if __name__ == "__main__": + if len(sys.argv) > 1 and sys.argv[1] == "--mock-curl": + sys.exit(mock_curl(sys.argv[2:])) + if len(sys.argv) > 1 and sys.argv[1] == "--mock-kubectl": + sys.exit(mock_kubectl(sys.argv[2:])) + unittest.main() diff --git a/data-refactoring-advisor/schema-graphrag-demo/README.md b/data-refactoring-advisor/schema-graphrag-demo/README.md index 0fe560cf9..4767f862f 100644 --- a/data-refactoring-advisor/schema-graphrag-demo/README.md +++ b/data-refactoring-advisor/schema-graphrag-demo/README.md @@ -1110,7 +1110,7 @@ The following improvements have been identified for future development: 8. **Jupyter notebooks** — Six explainer notebooks (`notebooks/01` through `06`) are planned but not yet written. They cover: ADB connection and schema verification, workload STS contents and affinity heatmap, graph construction and community visualisation, annotation generation diff viewer, embedding pipeline and cosine similarity matrix, and the NL2SQL demo with results in pandas DataFrames. These are the step-by-step walkthrough layer for anyone wanting to understand the pipeline rather than just run it. -9. **Test suite** — Unit tests for `affinity_calculator`, `annotation_generator`, `join_path_extractor`, and `community_detector` are planned in `tests/unit/`. An integration test (`tests/integration/test_nl2sql.py`) that runs the end-to-end Scenario 1 comparison against a live ADB connection is also planned. None have been written yet. +9. **Test suite** — Run `python -m pytest tests/unit -v` for dependency compatibility checks covering SQL parsing, community detection, configuration loading, and the Streamlit landing page. Further tests for `affinity_calculator`, `annotation_generator`, and `join_path_extractor`, plus an end-to-end Scenario 1 integration test against a live ADB connection, are planned. 12. **Annotation-driven token reduction** — Annotations and DDL currently overlap: FK constraints in DDL encode the same structural relationships already expressed in `JOINS_WITH` and `JOINS_PATH` annotations. Two complementary optimisations follow from this. First, in annotated mode, strip FK constraint declarations from the DDL sent to Opus — the join structure is fully covered by annotations, making FK lines redundant noise that consumes tokens without adding information. Second, distinguish *bridge* tables (tables that appear only as connectors in a JOIN chain, never in the SELECT list or WHERE clause) from *primary* tables in the Haiku-selected set; send full DDL only for primary tables and annotation-only context for bridge tables. Together these reduce Opus input by roughly the DDL cost of 2–3 bridge tables per query — a ~30% reduction in generation-step tokens — while tightening context and reducing the chance of the LLM generating SQL against irrelevant columns. Requires changes to `src/nl2sql/claude_client_ai.py` (DDL assembly) and `src/nl2sql/query_retriever.py` (bridge vs. primary table classification). Enhancement 11 (join column pairs) is a prerequisite for the bridge-table optimisation to work safely. diff --git a/docs-source/site/docs/deploy/deploy.md b/docs-source/site/docs/deploy/deploy.md index f715a34a3..1f7f0316d 100644 --- a/docs-source/site/docs/deploy/deploy.md +++ b/docs-source/site/docs/deploy/deploy.md @@ -11,14 +11,47 @@ The steps below are generic — replace placeholder values like `my-app`, `my-se Before you begin, ensure the following tools are installed and configured: -| Tool | Purpose | Verify | -|------|---------|--------| -| **Java** | Build application JARs | `java -version` | -| **Maven** | Build and package | `mvn --version` | -| **Docker** | Build and push container images | `docker ps` | -| **kubectl** | Interact with Kubernetes cluster | `kubectl cluster-info` | -| **Helm** | Deploy applications to Kubernetes | `helm version` | -| **OCI CLI** | Manage OCI resources (if using OCIR) | `oci --version` | +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToolPurposeVerify
JavaBuild application JARsjava -version
MavenBuild and packagemvn --version
DockerBuild and push container imagesdocker ps
kubectlInteract with Kubernetes clusterkubectl cluster-info
HelmDeploy applications to Kuberneteshelm version
OCI CLIManage OCI resources (if using OCIR)oci --version
Additional requirements: @@ -164,10 +197,27 @@ If your application connects to an Oracle database, you need to create Kubernete The Helm chart expects secrets following this naming pattern: -| Secret | Purpose | Keys | -|--------|---------|------| -| `{dbname}-db-priv-authn` | Privileged credentials (for creating users, Liquibase) | `username`, `password`, `service` | -| `{dbname}-{service}-db-authn` | Application credentials (per service) | `username`, `password`, `service` | + + + + + + + + + + + + + + + + + + + + +
SecretPurposeKeys
{dbname}-db-priv-authnPrivileged credentials (for creating users, Liquibase)username, password, service
{dbname}-{service}-db-authnApplication credentials (per service)username, password, service
### Create the Privileged Secret @@ -288,20 +338,77 @@ helidon: ### Helm Values Reference -| Value | Required | Description | -|-------|----------|-------------| -| `image.repository` | Yes | Full image path (without tag) | -| `image.tag` | Yes | Image tag | -| `obaas.releaseName` | Yes | OBaaS platform Helm release name | -| `obaas.framework` | Yes | `SPRING_BOOT` or `HELIDON` | -| `database.name` | If using DB | Database name (derives secret names and wallet) | -| `database.authN.secretName` | No | Override derived secret name `{dbname}-{release}-db-authn` | -| `database.aq.enabled` | No | Grant Advanced Queuing (AQ/JMS) permissions (default: `false`) | -| `eureka.enabled` | No | Register with Eureka service discovery (default: `true`) | -| `otel.enabled` | No | Enable OpenTelemetry integration (default: `true`) | -| `otmm.enabled` | No | Enable MicroTx LRA distributed transactions (default: `false`) | -| `service.port` | No | Container and service port (default: `8080`) | -| `replicaCount` | No | Number of pod replicas (default: `1`) | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueRequiredDescription
image.repositoryYesFull image path (without tag)
image.tagYesImage tag
obaas.releaseNameYesOBaaS platform Helm release name
obaas.frameworkYesSPRING_BOOT or HELIDON
database.nameIf using DBDatabase name (derives secret names and wallet)
database.authN.secretNameNoOverride derived secret name {dbname}-{release}-db-authn
database.aq.enabledNoGrant Advanced Queuing (AQ/JMS) permissions (default: false)
eureka.enabledNoRegister with Eureka service discovery (default: true)
otel.enabledNoEnable OpenTelemetry integration (default: true)
otmm.enabledNoEnable MicroTx LRA distributed transactions (default: false)
service.portNoContainer and service port (default: 8080)
replicaCountNoNumber of pod replicas (default: 1)
### Deploy a Service @@ -419,13 +526,36 @@ curl http://localhost:9180/apisix/admin/routes/1 \ Key fields: -| Field | Description | -|-------|-------------| -| `uri` | The URL pattern to match. Use a wildcard suffix (e.g., `/api/v1/my-service*`). | -| `upstream.service_name` | The Eureka-registered service name (uppercase by default for Spring Boot). | -| `upstream.discovery_type` | Set to `eureka` so APISIX resolves service instances from the Eureka registry. | -| `plugins.opentelemetry` | Enables distributed tracing through the gateway. | -| `plugins.prometheus` | Enables Prometheus metrics collection for the route. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
uriThe URL pattern to match. Use a wildcard suffix (e.g., /api/v1/my-service*).
upstream.service_nameThe Eureka-registered service name (uppercase by default for Spring Boot).
upstream.discovery_typeSet to eureka so APISIX resolves service instances from the Eureka registry.
plugins.opentelemetryEnables distributed tracing through the gateway.
plugins.prometheusEnables Prometheus metrics collection for the route.
### Verify the Route @@ -450,12 +580,41 @@ kill %1 The full deployment flow: -| Step | What | How | -|------|------|-----| -| 1 | Create container repositories | OCI CLI or registry UI | -| 2 | Build and push images | Maven + JKube (`k8s:build` + `k8s:push`) | -| 3 | Create database secrets | `kubectl create secret` | -| 4 | Deploy with Helm | `helm upgrade --install` with `obaas-sample-app` chart | -| 5 | Create API gateway routes | APISIX Admin API via `curl` | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepWhatHow
1Create container repositoriesOCI CLI or registry UI
2Build and push imagesMaven + JKube (k8s:build + k8s:push)
3Create database secretskubectl create secret
4Deploy with Helmhelm upgrade --install with obaas-sample-app chart
5Create API gateway routesAPISIX Admin API via curl
After all steps are complete, your application is accessible through the APISIX gateway at the URI patterns you configured. diff --git a/docs-source/site/docs/deploy/overview.md b/docs-source/site/docs/deploy/overview.md index c8409973e..6ddc23264 100644 --- a/docs-source/site/docs/deploy/overview.md +++ b/docs-source/site/docs/deploy/overview.md @@ -9,13 +9,42 @@ This guide outlines the steps to build, deploy, and expose an application on Ora ### Deployment Steps -| Step | Description | Details | -|------|-------------|---------| -| 1 | **Create container repositories** | Set up a repository per microservice in your container registry (OCIR, ECR, ACR, etc.). | -| 2 | **Build and push images** | Use Maven and Eclipse JKube to build JARs, create container images, and push to the registry. | -| 3 | **Create database secrets** | Create Kubernetes secrets with privileged and per-service database credentials. | -| 4 | **Deploy with Helm** | Install each service using the `obaas-sample-app` Helm chart with a per-service `values.yaml`. | -| 5 | **Create API gateway routes** | Configure Apache APISIX routes to expose services externally via Eureka discovery. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionDetails
1Create container repositoriesSet up a repository per microservice in your container registry (OCIR, ECR, ACR, etc.).
2Build and push imagesUse Maven and Eclipse JKube to build JARs, create container images, and push to the registry.
3Create database secretsCreate Kubernetes secrets with privileged and per-service database credentials.
4Deploy with HelmInstall each service using the obaas-sample-app Helm chart with a per-service values.yaml.
5Create API gateway routesConfigure Apache APISIX routes to expose services externally via Eureka discovery.
### Detailed Guide diff --git a/docs-source/site/docs/observability/custom-dashboards.md b/docs-source/site/docs/observability/custom-dashboards.md new file mode 100644 index 000000000..17d5271ab --- /dev/null +++ b/docs-source/site/docs/observability/custom-dashboards.md @@ -0,0 +1,155 @@ +--- +title: Custom dashboards +sidebar_position: 5.5 +--- + +Use the `helm/app-charts/signoz-dashboards` sample chart to install your own +dashboards into SigNoz and repeat the import with Helm upgrades. Keep your JSON +dashboard definitions with the chart in your application's source control. +Install it as a separate Helm release from the OBaaS platform release. + +## Prerequisites + +- A healthy OBaaS SigNoz instance, including its ClickHouse connection. +- Helm and `kubectl` configured for the target cluster. +- The namespace and Helm release name of your OBaaS instance. +- An existing SigNoz credential Secret containing `email` and `password`. + +Install the dashboard chart in the same namespace as OBaaS. The default credential +Secret is `signoz-authn`; use the Secret configured for your instance if it has a +different name. See [Access SigNoz](./access.md) for connection and credential +instructions. + +## Add your dashboard files + +1. Export each custom dashboard as JSON from SigNoz. +2. Place each file directly in `helm/app-charts/signoz-dashboards/dashboards/`. +3. Remove `sample-application.json` when replacing the empty sample dashboard. +4. Give each dashboard a unique, application-specific title. + +The chart includes only `dashboards/*.json`; it does not include subdirectories. +Each JSON file becomes a ConfigMap. For example, `orders.json` creates the +ConfigMap `orders`. Names are normalized when needed and shortened to at most +63 characters, with a hash suffix to distinguish changed names. Use distinct +filenames across dashboard releases in the same namespace because ConfigMap +names are based on filenames rather than Helm release names. + +Each JSON file must fit within Kubernetes' 1 MiB ConfigMap data limit. The complete +chart must also fit within Helm's release storage limits; splitting files into +individual ConfigMaps does not remove the aggregate limit. + +### Dashboard formats + +The importer detects the dashboard API supported by the deployed SigNoz instance: + +- Older instances, including OBaaS 2.1.0's SigNoz, use the V1 dashboard API and + JSON exports with `version: "v4"` or `"v5"`. The dashboard title is `title`. +- Newer instances use the V2 API and Perses exports with `schemaVersion: "v6"`. + The dashboard title is `spec.display.name`. + +Use V1 exports when the same definitions need to run on both older and newer +instances. Newer SigNoz can convert V1 payloads submitted to its V2 create +endpoint. This compatibility is transitional; for future SigNoz upgrades, +re-export dashboards in the supported format. V2 files cannot be imported into a +V1 instance and are rejected before any dashboards are deleted. + +## Configure the chart + +Create a values file, for example `my-dashboards-values.yaml`, containing the +OBaaS release name and credential Secret reference: + +```yaml +signoz: + releaseName: obaas + auth: + existingSecret: signoz-authn +``` + +Replace `obaas` with your actual OBaaS platform release name, not the release name +you will use for the dashboard chart. Keep passwords out of the values file. + +The Job runs a Python standard-library importer on +`container-registry.oracle.com/os/oraclelinux:9`. It waits for SigNoz, discovers +the organization through `/api/v2/sessions/context` using the credential Secret's +`email`, logs in, and imports dashboards through the detected dashboard API. + +If the Secret contains a non-empty `orgID` key, that value takes precedence over +discovery. Accounts belonging to multiple organizations must supply this key to +select an organization explicitly. The Secret must contain `email` and `password` +in either case. + +For private registries, configure `image.repository`, `image.tag`, and +`imagePullSecrets`. Replacement images must provide Python 3 and its standard +library. No runtime package installation is needed. + +## Install and update dashboards + +Run from the repository root. Use the same values file for rendering and installing: + +```bash +helm lint helm/app-charts/signoz-dashboards \ + -f my-dashboards-values.yaml + +helm template my-dashboards helm/app-charts/signoz-dashboards \ + -n -f my-dashboards-values.yaml \ + > /tmp/my-dashboards-rendered.yaml + +helm upgrade --install my-dashboards helm/app-charts/signoz-dashboards \ + -n -f my-dashboards-values.yaml \ + --timeout 15m +``` + +The ConfigMaps are ordinary Helm resources. A `post-install,post-upgrade` hook Job +imports them after they are created or updated. Helm waits for the Job and reports +an error if it fails. Successful and failed Jobs remain available for inspection; +the next install or upgrade replaces the previous hook Job. + +To apply dashboard changes, edit or replace the JSON files and run the same +`helm upgrade --install` command again. This upgrades the dashboard release; it +does not upgrade the OBaaS platform or replace the SigNoz installation. + +## Replacement and removal behavior + +On every install or upgrade, the importer deletes all existing dashboards whose +titles exactly match the bundled titles, then creates dashboards from the JSON +files. Other titles are preserved. Local JSON and duplicate titles are checked +before deletion, but creation can still fail server-side if a payload is invalid. +Replacement is not transactional; fix any failed import and rerun the upgrade. + +:::important +A title match replaces the dashboard regardless of who created it. Avoid titles +used by [OBaaS system dashboards](./dashboards.md) or other users. Replacement +creates new dashboard IDs, which can break links, and overwrites UI edits to the +matching dashboards. +::: + +If you remove a JSON file and upgrade the chart, Helm removes its ConfigMap, but +the dashboard remains in SigNoz. **Delete that dashboard manually in the SigNoz +UI when you no longer need it.** Changing a dashboard's title also leaves the old +dashboard for manual cleanup. + +Uninstalling the dashboard chart removes its ConfigMaps but leaves the imported +dashboards in SigNoz. The retained hook Job can be deleted separately: + +```bash +helm uninstall my-dashboards -n +kubectl delete job my-dashboards-signoz-setup -n \ + --ignore-not-found +``` + +## Verify and troubleshoot + +```bash +helm status my-dashboards -n +kubectl get jobs -n \ + -l app.kubernetes.io/instance=my-dashboards +kubectl logs -n job/my-dashboards-signoz-setup \ + -c signoz-setup +``` + +Open SigNoz and confirm your dashboard titles appear. If the Job does not start, +inspect its pod events and the `signoz-setup` container logs. Check image pulls, +SigNoz and ClickHouse health, the service URL, the credential Secret, and any +explicit `orgID` selection. HTTP 400 during +creation indicates the exported JSON needs checking against the deployed schema; +HTTP 401 or 403 indicates a credential or permission problem. diff --git a/docs-source/site/docs/observability/customizations.md b/docs-source/site/docs/observability/customizations.md index 9fa956322..74705236c 100644 --- a/docs-source/site/docs/observability/customizations.md +++ b/docs-source/site/docs/observability/customizations.md @@ -38,17 +38,62 @@ SigNoZ stores recent ClickHouse data on the local persistent volume as hot stora ### Configuration Summary -| Key | Value | Description | -|---|---|---| -| `signoz.enabled` | `true` | Enables the SigNoz deployment. | -| `signoz.clickhouse.coldStorage.enabled` | `true` | Enables ClickHouse cold storage. | -| `signoz.clickhouse.coldStorage.defaultKeepFreeSpaceBytes` | `"10485760"` | Keeps at least 10 MiB of local disk space free before moving older data to cold storage. Set value to reflect your environment | -| `signoz.clickhouse.coldStorage.type` | `s3` | Uses an S3-compatible object storage API. | -| `signoz.clickhouse.coldStorage.endpoint` | `` | Object storage endpoint URL. | -| `signoz.clickhouse.coldStorage.accessKey` | `` | Access key for the object storage service. | -| `signoz.clickhouse.coldStorage.secretAccess` | `` | Secret key for the object storage service. | -| `signoz.clickhouse.persistence.enabled` | `true` | Enables persistent local storage for ClickHouse hot data. | -| `signoz.clickhouse.persistence.size` | `100Gi` | Size of the local persistent volume used for hot storage. Set value to reflect your environment | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyValueDescription
signoz.enabledtrueEnables the SigNoz deployment.
signoz.clickhouse.coldStorage.enabledtrueEnables ClickHouse cold storage.
signoz.clickhouse.coldStorage.defaultKeepFreeSpaceBytes"10485760"Keeps at least 10 MiB of local disk space free before moving older data to cold storage. Set value to reflect your environment
signoz.clickhouse.coldStorage.types3Uses an S3-compatible object storage API.
signoz.clickhouse.coldStorage.endpoint<END-POINT>Object storage endpoint URL.
signoz.clickhouse.coldStorage.accessKey<YOUR-ACCESS-KEY>Access key for the object storage service.
signoz.clickhouse.coldStorage.secretAccess<YOUR-SECRET-ACCESS-KEY>Secret key for the object storage service.
signoz.clickhouse.persistence.enabledtrueEnables persistent local storage for ClickHouse hot data.
signoz.clickhouse.persistence.size100GiSize of the local persistent volume used for hot storage. Set value to reflect your environment
### Installation diff --git a/docs-source/site/docs/observability/dashboards.md b/docs-source/site/docs/observability/dashboards.md index cba8066e9..e864776ba 100644 --- a/docs-source/site/docs/observability/dashboards.md +++ b/docs-source/site/docs/observability/dashboards.md @@ -6,6 +6,49 @@ sidebar_position: 5 More details can be found in the [SigNoz Documentation](https://signoz.io/docs/introduction/). ::: +:::warning[SigNoz dashboard migration] +SigNoz v0.135.0 deprecates the Dashboards V1 schema and retires the V1 dashboard API endpoints. User-supplied dashboards that use the V1 format must be migrated to the Dashboards V2/Perses-compatible schema before upgrading. Dashboards managed only through the SigNoz UI are migrated automatically, but verify that none remain marked `Legacy`. See the [SigNoz v0.135.0 upgrade guide](https://signoz.io/docs/operate/migration/upgrade-0-135/) for migration details. +::: + +To install your own dashboards with Helm, see [Custom dashboards](./custom-dashboards.md). + +## Dashboard setup Job + +The OBaaS chart runs `-signoz-setup` after installation and upgrade +when `signoz.setup.enabled` is `true` (the default). The Job runs Python 3 on +`container-registry.oracle.com/os/oraclelinux:9`, using a script mounted from a +ConfigMap. It waits for SigNoz to become healthy, then signs in with the `email` +and `password` from the Secret selected by `signoz.auth.existingSecret`, or +`signoz-authn` when no existing Secret is configured. + +The Job discovers the organization through `/api/v2/sessions/context`. If the +account belongs to multiple organizations, add an `orgID` key containing the +selected organization's UUID to the credential Secret. A non-empty `orgID` takes +precedence over discovery. This setup uses the SigNoz API and does not mount the +SigNoz metadata database PVC, so it also works with PostgreSQL metadata storage. + +On each run, the Job deletes existing dashboards whose names exactly match the +bundled system dashboards, including matching legacy records, then recreates +them through the V2 API. Their IDs change and edits to these system dashboards +are replaced. Dashboards with other names are left alone. Save customized copies +under distinct names. Bundled V1 payloads are skipped; imported system dashboards +use the V2/Perses `schemaVersion: v6` format. + +Check completion and logs with: + +```bash +kubectl -n wait --for=condition=complete \ + job/-signoz-setup --timeout=5m +kubectl -n logs job/-signoz-setup \ + -c signoz-setup +``` + +Successful logs end with `SigNoz setup complete`. For private registries, override +`signoz.setup.image.registry`, `signoz.setup.image.repository`, and +`signoz.setup.image.tag`; see the [private registry configuration](../setup/helm/install.md#private-registry-configuration-values-private-registryyaml). + +## Included dashboards + There are several dashboards that are pre-installed in SigNoz, for example: - [Spring Boot Observability](#spring-boot-observability) diff --git a/docs-source/site/docs/observability/index.md b/docs-source/site/docs/observability/index.md index 5354773d9..4fe521366 100644 --- a/docs-source/site/docs/observability/index.md +++ b/docs-source/site/docs/observability/index.md @@ -15,15 +15,69 @@ Oracle Backend for Microservices and AI ships with a fully integrated observabil ### Guides -| Guide | Description | -|-------|-------------| -| [Introduction and Overview](./overview.md) | Architecture and how the observability stack fits together | -| [Access SigNoz](./access.md) | Retrieve credentials and connect to the SigNoz UI | -| [Metrics, Logs and Traces](./metricslogstraces.md) | Navigate metrics, logs, and traces in the SigNoz dashboard | -| [Pre-installed Dashboards](./dashboards.md) | Catalog of 20+ ready-to-use dashboards (Spring Boot, Kafka, Kubernetes, Oracle DB, and more) | -| [Configure Applications for SigNoz](./configure.md) | Add OpenTelemetry and Micrometer dependencies to your application | -| [Kafka Observability](./kafka.md) | Monitor Kafka clusters, producers, and consumers | -| [Customize Java Instrumentation](./java-instrumentation) | Pass custom environment variables to the OpenTelemetry Java agent through Helm values or CLI overrides | -| [Oracle Database Metrics Exporter](./dbexporter.md) | Database-level metrics collection and configuration guidance | -| [Common Customizations](./customizations.md) | Configure Online and Cold Storage | -| [Replace SigNoZ during upgrade](./upgrade/index.md) | Replace SigNoZ during an optional OBaaS 2.1.1 upgrade; existing observability data is permanently deleted | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuideDescription
Introduction and OverviewArchitecture and how the observability stack fits together
Access SigNozRetrieve credentials and connect to the SigNoz UI
Metrics, Logs and TracesNavigate metrics, logs, and traces in the SigNoz dashboard
Pre-installed DashboardsCatalog of 20+ ready-to-use dashboards (Spring Boot, Kafka, Kubernetes, Oracle DB, and more)
Custom DashboardsInstall and update your own SigNoz dashboards with a separate Helm chart
Configure Applications for SigNozAdd OpenTelemetry and Micrometer dependencies to your application
SigNoz Resource ProfilesDraft small, medium and distributed allocations, storage planning and validation boundaries
Persistent Collector QueuesConfigure a dedicated queue PVC for a single small or medium collector
SigNoz SQLStoreChoose a metadata store, use the bundled PostgreSQL example, or connect to managed PostgreSQL
Kafka ObservabilityMonitor Kafka clusters, producers, and consumers
Customize Java InstrumentationPass custom environment variables to the OpenTelemetry Java agent through Helm values or CLI overrides
Oracle Database Metrics ExporterDatabase-level metrics collection and configuration guidance
Common CustomizationsConfigure Online and Cold Storage
Upgrade SigNoZ in placeUpgrade SigNoZ in place during an optional OBaaS 2.1.2 patch release
diff --git a/docs-source/site/docs/observability/kafka.md b/docs-source/site/docs/observability/kafka.md index 70075f78e..60d633b75 100644 --- a/docs-source/site/docs/observability/kafka.md +++ b/docs-source/site/docs/observability/kafka.md @@ -77,13 +77,36 @@ When you deploy a microservice using the OBaaS sample app chart, the platform ha The following metrics are exported by the agent and available in the SigNoz Metrics Explorer: -| Metric Name | Description | -| :--- | :--- | -| `kafka.producer.record_send_rate` | Average records sent per second. | -| `kafka.producer.request_latency_max` | Maximum acknowledgment time from the broker. | -| `kafka.producer.outgoing_byte_rate` | Data throughput in bytes per second. | -| `kafka.consumer.fetch_manager_records_lag_max` | Maximum lag across all assigned partitions. | -| `kafka.consumer.bytes_consumed_total` | Total volume of data processed by the consumer. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Metric NameDescription
kafka.producer.record_send_rateAverage records sent per second.
kafka.producer.request_latency_maxMaximum acknowledgment time from the broker.
kafka.producer.outgoing_byte_rateData throughput in bytes per second.
kafka.consumer.fetch_manager_records_lag_maxMaximum lag across all assigned partitions.
kafka.consumer.bytes_consumed_totalTotal volume of data processed by the consumer.
## Distributed Tracing & Logging diff --git a/docs-source/site/docs/observability/signoz-persistent-queue.md b/docs-source/site/docs/observability/signoz-persistent-queue.md new file mode 100644 index 000000000..b32de051c --- /dev/null +++ b/docs-source/site/docs/observability/signoz-persistent-queue.md @@ -0,0 +1,154 @@ +--- +title: Persistent SigNoz collector queues +sidebar_position: 6.2 +--- + +The [persistent queue example](https://github.com/oracle/microservices-datadriven/blob/main/helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml) +configures queuing and backpressure in the SigNoz collector to help mitigate +telemetry bursts overwhelming ClickHouse. It buffers pending exports on disk, +bounds concurrent export requests and blocks enqueueing when a queue is full. +This gives ClickHouse time to recover from temporary ingestion pressure or +backend interruptions. + +Layer this example after a +[small or medium sizing profile](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles). +It uses one collector with a dedicated PVC. The distributed profile requires +independent storage for each collector and cannot share this queue directory. + +## What the example configures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingExample configurationPurpose
Collector deployment1 replica, autoscaling disabled, Recreate rolloutsKeep one collector attached to the queue volume and avoid overlapping pods during upgrades.
Exporter coverageTraces, metrics, logs, metadata and meter dataEnable persistent queues on all five ClickHouse exporters.
Queue storageSeparate signoz-collector-queue PVC, requesting 20Gi with ReadWriteOncePodRetain queued exports across pod replacement and restrict the claim to one pod.
Storage extensionfile_storage/queue, mounted under /var/lib/otelcol/queueStore exporter queues on the PVC using stable exporter and extension IDs.
Queue capacity1,000 requests/batches per exporter queueBound the pending backlog. Capacity is measured in requests, not records or bytes.
Export concurrency2 consumers per exporter queueLimit concurrent exports from each queue to ClickHouse.
Backpressureblock_on_overflow: trueBlock enqueueing until space becomes available, allowing pressure to propagate through the collector pipeline.
Retry policy5-second initial backoff, 30-second maximum backoff, unlimited elapsed retry timeKeep retrying retryable export failures while the backend recovers.
Export timeout30 seconds per attemptBound the duration of individual export attempts.
File storageDirectory creation, fsync and rebound compaction enabledPersist writes and reclaim file space after queues drain, with additional I/O and temporary disk-space requirements.
Volume permissionsUID/GID and volume group 10001Run the collector as a non-root user with write access to the queue volume.
Existing collector configurationPreserved signal pipelines and diagnostic extensions; memory limiting and batching inherited from the sizing profileAdd persistence alongside the profile's processing and memory controls.
+ +The request counts, concurrency and storage capacity are starting values. Size +them against your telemetry volume, payload sizes, storage performance and target +buffering duration. Queuing absorbs temporary excess; sustained ingestion must +remain below ClickHouse's processing capacity, with enough headroom to drain the +backlog. The consumer count bounds concurrency rather than imposing a fixed +telemetry rate. + +## Use the example + +Copy [signoz-collector-queue-pvc.yaml](https://github.com/oracle/microservices-datadriven/blob/main/helm/infra-charts/obaas/examples/signoz-collector-queue-pvc.yaml) +to a site-specific manifest. Select a durable CSI StorageClass supporting +`ReadWriteOncePod`, file locking and write permissions through `fsGroup`. The +manifest uses the default StorageClass unless you set `storageClassName`. Check +the allocated capacity: providers may provision more than the requested size. + +From the repository root, apply the PVC in the release namespace and layer the +queue values after your environment and sizing values: + +```bash +kubectl create namespace +kubectl -n apply -f + +helm template helm/infra-charts/obaas -n \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml \ + > /tmp/obaas-persistent-queue-rendered.yaml + +helm install helm/infra-charts/obaas -n \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml +``` + +These commands illustrate a fresh installation after preparing OBaaS +prerequisites. Use medium in place of small if appropriate, and skip namespace +creation when it already exists. With `WaitForFirstConsumer`, the PVC can remain +Pending until the collector is scheduled. Review the rendered configuration +before installing; Helm replaces lists such as volumes, mounts and extensions. +Protect rendered files containing credentials. + +For an existing collector, drain its memory queues before enabling persistence; +the rollout does not copy them to disk. Keep the same PVC and exporter/extension +IDs for replay. The PVC is managed separately from Helm and survives release +uninstallation. Drain persistent queues before removing the overlay. + +## Operational considerations + +Persistence covers data successfully enqueued at the exporter. Receiver, batch +and processor state can still be in memory. Permanent export errors, disk +exhaustion, upstream retry expiry and storage loss can still lose data; replay +can produce duplicates. Single-collector restarts also interrupt ingestion. + +Monitor queue size/capacity, enqueue/send failures, PVC free space, memory and +telemetry freshness. Leave disk space for compaction and account for file-backed +memory usage. Validate recovery by interrupting a test collector's backend path, +sending identifiable telemetry, replacing its pod with backlog present, and +confirming replay and queue drainage after connectivity returns. Reconcile total +and distinct-record counts without resending the test records. + +See [OpenTelemetry exporter queues and retries](https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/v0.144.0/exporter/exporterhelper/README.md) +and [file storage and compaction](https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector-contrib/v0.144.0/extension/storage/filestorage/README.md) +for the underlying collector behavior. diff --git a/docs-source/site/docs/observability/signoz-profiles.md b/docs-source/site/docs/observability/signoz-profiles.md new file mode 100644 index 000000000..25a02fcf2 --- /dev/null +++ b/docs-source/site/docs/observability/signoz-profiles.md @@ -0,0 +1,290 @@ +--- +title: SigNoz resource profiles +sidebar_position: 6.1 +--- + +These SigNoz sizing overlays provide example configurations to size the bundled SigNoz chart. Use them as starting allocations for workload assessment. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProfileClickHouse layoutSigNoz collectorsMetadata storeIntended use
Small1 shard, 1 replica1SQLite by default; PostgreSQL optionalEvaluation
Medium1 shard, 1 replica1SQLite by default; PostgreSQL optionalCustom deployment with larger vertical allocations
Distributed2 shards, 1 replica per shard3SQLite by default; PostgreSQL optionalAdaptation of the upstream Community resource reference
+ +The distributed profile follows the component counts and CPU/memory allocations +in [SigNoz Community resource planning](https://signoz.io/docs/setup/capacity-planning/community/resources-planning/). +The example sets both requests and limits to the reference allocation for those +components. Small and medium provide lower resource starting points for OBaaS; +validate their suitability against your workload. + +## Distributed availability and routing + +The distributed example spreads data over two ClickHouse shards with one replica +per shard. It provides horizontal capacity, **no ClickHouse replica redundancy**. +Loss of either shard can interrupt ingestion and complete queries; permanent +volume loss can lose that shard's data. Three ZooKeeper instances provide +coordination quorum, not additional copies of ClickHouse data. The SigNoz server +and its default SQLite metadata store also remain single instances. This profile +is not a highly available deployment. + +[SigNoz distributed ClickHouse guidance](https://signoz.io/docs/manage/administrator-guide/clickhouse/distributed-clickhouse/kubernetes/) +illustrates two replicas per shard plus three ZooKeeper instances. Treat that as +a separate availability design: budget resources and storage per replica, place +replicas across failure domains, verify backup/restore and failover, and plan +migration before changing an existing layout. That upstream page uses an older +`schemaMigrator` key; this bundled chart uses `telemetryStoreMigrator`. + +The example moves Prometheus scraping and Kubernetes events to the singleton +`k8s-infra.otelDeployment`. Its outage creates a collection gap even if all three +central collectors are healthy. Do not increase this singleton's replica count +without assigning disjoint scrape targets and event collection ownership; +otherwise telemetry can be duplicated. Central collector replication does not +replicate its work. + +Three central collector replicas also do not guarantee balanced ingestion. A +Kubernetes Service balances connections, and long-lived OTLP/gRPC connections +can remain pinned to one pod. Measure accepted telemetry, queues, memory and CPU +**per pod**. +Consider client-side gRPC balancing or a gRPC-aware proxy only after testing the +client, discovery, connection churn and failure behavior. See +[OpenTelemetry scaling guidance](https://opentelemetry.io/docs/collector/scaling/). + +The pinned SigNoz collector v0.144.10 +[span-metrics implementation](https://github.com/SigNoz/signoz-otel-collector/blob/v0.144.10/processor/signozspanmetricsprocessor/processor.go) +aggregates individual spans in local maps, resets aggregates for delta export, +and adds `signoz.collector.id` to dimensions. The bundled configuration selects +`AGGREGATION_TEMPORALITY_DELTA` and retains that collector dimension. This source +check supports keeping the current settings; it is not an end-to-end validation +of multi-replica queries. Do not remove collector identity, switch temporality, +or prescribe trace-ID affinity from generic stateful-processor advice alone. +Before changing routing, distribute known spans across replicas and compare +service/operation call counts, errors and merged histogram counts/buckets with a +single-collector baseline, aggregating across collector IDs. Exercise reconnects +and pod replacement. Verify metrics routing separately, especially cumulative +streams, and avoid replaying the same spans to multiple collectors. + +## Resource allocations + +Each cell shows CPU cores / memory GiB, as **request → limit**, per instance. +Memory expressed in MiB in YAML is shown as fractional GiB here. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentSmall (Requests → Limits)Medium (Requests → Limits)Distributed (Requests → Limits)
ClickHouse, per shard2 / 8 → 4 / 164 / 16 → 8 / 3216 / 32 → 16 / 32
SigNoz collector, each0.25 / 0.5 → 1 / 21 / 2 → 2 / 44 / 16 → 4 / 16
SigNoz server0.25 / 0.5 → 1 / 10.5 / 1 → 2 / 24 / 8 → 4 / 8
ZooKeeper, each0.25 / 2 → 1 / 40.25 / 2 → 1 / 42 / 8 → 2 / 8
Node agent, per node0.1 / 0.25 → 0.5 / 0.50.25 / 0.5 → 1 / 10.25 / 0.5 → 1 / 1
Cluster collector, singleton0.25 / 0.5 → 1 / 10.5 / 1 → 2 / 21 / 2 → 2 / 4
+ +### Totals + +These totals include all ClickHouse, SigNoz collector, SigNoz server and ZooKeeper +instances, the ClickHouse operator and its metrics exporter, and the singleton +cluster collector. Each cell shows **requests → limits**. + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProfileCPU coresMemory (GiB)
Small3.2 → 911.875 → 24.75
Medium6.45 → 1622.375 → 44.75
Distributed55.2 → 57146.375 → 148.75
+ +## Configuring your cluster + +Run from the repository root after preparing OBaaS prerequisites, database, +access, secrets and cluster capacity. Replace the release, namespace and values +placeholders with the settings for your installation. + +```bash +helm lint helm/infra-charts/obaas \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f + +helm template helm/infra-charts/obaas -n \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f > /tmp/obaas-rendered.yaml + +helm install helm/infra-charts/obaas \ + -n --create-namespace \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f +``` + +Substitute medium or distributed as appropriate. Inspect rendered files securely: +Later files override earlier ones, and YAML lists replace entire lists. Merge custom receivers, processors and RBAC deliberately. + +## Storage, retention and buffering + +Illustrative ClickHouse PVC capacities are 200Gi (small), 500Gi (medium) and 1Ti +**per shard** (distributed). ZooKeeper uses 20Gi per instance. SQLite, when used, +has 10Gi. Select storage +classes, volume performance and capacity in an overlay. For example: + +```yaml +signoz: + clickhouse: + persistence: + storageClass: + size: + zookeeper: + persistence: + storageClass: + signoz: + persistence: + storageClass: +``` + +Use measured compressed storage growth across telemetry and dependent tables, +desired retention, shard distribution and replication to estimate capacity. +Allow additional room for merges, diagnostics, delayed TTL cleanup and recovery. +Separate PVCs on the same exhausted backing filesystem do not isolate failures. +Shrinking PVCs is not a supported way to move down a size profile. + +The included diagnostic TTL settings do not configure application retention. +Choose application logs, traces and metrics retention independently (for example, +2, 7 or 15 days) using the version-appropriate +[SigNoz retention controls](https://signoz.io/docs/userguide/retention-period/). +Verify dependent-table TTLs, existing-data behavior and disk reclamation before +claiming that a retention policy bounds storage. + +All three collector tiers set `GOMEMLIMIT` and a `memory_limiter`, with +headroom below their container limits. The central collector also bounds batch +sizes. Starting values for the additional tiers are: + + + + + + + + + + +
Tier / profileContainer limit (MiB)GOMEMLIMITLimiter hard / spike (MiB)
Node / small512300MiB384 / 64
Node / medium or distributed1024600MiB768 / 128
Cluster / small1024600MiB768 / 128
Cluster / medium20481200MiB1536 / 256
Cluster / distributed40962400MiB3072 / 512
+ +The soft refusal threshold is hard limit minus spike allowance. The Go runtime +limit is a soft target, not a cap on total process RSS. Tune all three settings +together under load. + +Memory pressure can refuse or lose telemetry at the agents and singleton before +it reaches a central persistent queue. Pull receivers and file readers have +different retry/checkpoint behavior; memory limiting cannot guarantee delivery. +SDK/agent retries can expire. + +Exporter queues and retries retain chart defaults. These examples do not add +persistent queue storage or promise restart-surviving buffering. For small or +medium, the optional [persistent queue overlay](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-persistent-queue) +provides a dedicated PVC for a single collector. + +## Existing releases and validation + +These examples describe fresh installations. Before +changing an existing release, preserve its effective values, inventory versions +and topology, back up telemetry and metadata, and test restoration. Establish +data placement, distributed query coverage, schema compatibility, downtime and +recovery before changing shards or replicas. Enabling PostgreSQL does not copy +SQLite metadata. A Helm rollback alone does not reverse database migrations. +Review the [OBaaS upgrade guidance](https://oracle.github.io/microservices-backend/obaas/docs/observability/upgrade/) +and the upstream procedures for the installed versions. + +Helm linting and rendering validate chart compatibility only. Before using a +profile operationally, measure sustained/burst ingestion with representative +payloads, cardinality and concurrent queries; reconcile generated and queryable +telemetry; measure freshness, queue drainage, memory peaks, throttling, query +latency and disk growth. Exercise backend slowdown, collector restart, disk +pressure and recovery. Use those measurements to choose resources, storage and +operational targets for your environment. Kafka is separate and is not enabled +by these overlays. diff --git a/docs-source/site/docs/observability/signoz-sqlstore.md b/docs-source/site/docs/observability/signoz-sqlstore.md new file mode 100644 index 000000000..3c3e7170a --- /dev/null +++ b/docs-source/site/docs/observability/signoz-sqlstore.md @@ -0,0 +1,65 @@ +--- +title: SigNoz SQLStore +sidebar_position: 6.3 +--- + +SigNoz uses a SQL store for metadata such as organizations, users, dashboards, +alerts and configuration, separate from the Clickhouse telemetry store. SQLite is the default for quick setups. PostgreSQL is the recommended alternative metadata store; see [SigNoz relational database configuration](https://signoz.io/docs/manage/administrator-guide/configuration/relational-database/). + +## Bundled PostgreSQL example + +The [values-signoz-postgres.yaml example](https://github.com/oracle/microservices-datadriven/blob/main/helm/infra-charts/obaas/examples/values-signoz-postgres.yaml) +enables **SigNoz's bundled PostgreSQL subchart**. It deploys a single PostgreSQL +instance inside Kubernetes with a persistent volume. The parent SigNoz chart +configures the SQLStore provider, connection string and credential environment +from those values. + +Layer the example after your normal OBaaS values and optional +[SigNoz sizing profile](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles). +Follow its instructions to create the password Secret and select a suitable +StorageClass. PostgreSQL resources and storage are configured separately from +the sizing profiles. + +Use this example for evaluation or deployments where you operate PostgreSQL +yourself. The bundled chart does not configure replication, automatic failover +or backups. Increasing its replica count does not establish a replicated +PostgreSQL service. + +## Managed PostgreSQL + +For production, it is recommended to **use a managed PostgreSQL service** or similarly configured PostgreSQL server with appropriate availability, +backup, point-in-time recovery and maintenance settings. This follows +[SigNoz's resource-planning recommendation](https://signoz.io/docs/setup/capacity-planning/community/resources-planning/) +and reduces the database operations you must manage inside the OBaaS cluster. + +For an external managed database, leave the bundled PostgreSQL chart disabled +and configure SQLStore on the SigNoz server. For example: + +```yaml +signoz: + postgresql: + enabled: false + signoz: + env: + SIGNOZ_SQLSTORE_PROVIDER: postgres + SIGNOZ_SQLSTORE_POSTGRES_DSN: + valueFrom: + secretKeyRef: + name: signoz-sqlstore + key: dsn +``` + +Create `signoz-sqlstore` in the release namespace with a `dsn` key containing +the complete PostgreSQL connection URI. Keep credentials in a Secret, encode +URI credentials correctly, and apply the provider's TLS and CA requirements. +The database must already exist, the SigNoz pods must be able to reach it, and +the database user needs permission to create and migrate SigNoz's metadata +tables. Size and monitor the database for metadata volume and query load. + +## Existing installations + +Switching SQLStore providers does not copy existing SQLite metadata into +PostgreSQL. Back up the current metadata store and validate a migration and +restore procedure before changing providers. Confirm users, dashboards, alerts +and other configuration after migration, and test recovery independently of +ClickHouse backups. A Helm rollback alone does not reverse database migrations. diff --git a/docs-source/site/docs/observability/upgrade/index.md b/docs-source/site/docs/observability/upgrade/index.md index b3fb6f770..deb844f0b 100644 --- a/docs-source/site/docs/observability/upgrade/index.md +++ b/docs-source/site/docs/observability/upgrade/index.md @@ -1,38 +1,18 @@ --- -title: Replace SigNoZ during upgrade +title: Upgrade SigNoZ in place sidebar_position: 9 --- -# Replace SigNoZ during upgrade +# Upgrade SigNoZ in place -## Warning: This permanently deletes observability data +OBaaS 2.1.2 requires ClickHouse `25.12.5` before its new telemetry-store +migrations run. The migrator is a Helm `pre-upgrade` hook, so a single application +upgrade from an older ClickHouse version can fail before the database is updated. -Upgrading an existing OBaaS release to this optional 2.1.1 patch release -replaces SigNoZ rather than migrating it. -The procedure permanently deletes all existing SigNoZ telemetry, dashboards, -users, alerts, ClickHouse data, and ZooKeeper data. It does not affect the -application database or other OBaaS services. +Follow the [two-step ClickHouse and SigNoZ upgrade procedure](../../upgrade/index.mdx#upgrade-signoz-and-clickhouse-in-two-steps) +after applying the required operator and Gateway API CRD updates. That procedure +is for installations where data loss is acceptable and does not create backups. -This release has no in-place or data-preserving SigNoZ upgrade path. - -If the destructive-replace settings are omitted from an existing-release -upgrade, Helm fails before changing any OBaaS resources. Users who require -a data-preserving upgrade are encouraged to follow SigNoZ's own documentation; -that path is -not supported by OBaaS 2.1.1. - -## Upgrade command - -Use the complete values file for the installed release and explicitly acknowledge -data loss: - -```bash -helm upgrade helm/infra-charts/obaas \ - -n \ - --timeout 30m \ - -f \ - --set signozUpgrade.mode=destructive-replace \ - --set signozUpgrade.confirmDataLoss=true -``` - -Fresh installations do not need these settings. +If existing data must be preserved, follow [SigNoZ's ClickHouse upgrade and backup guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/) +and validate your recovery point before upgrading. Do not select +`signozUpgrade.mode=destructive-replace` for this in-place upgrade. diff --git a/docs-source/site/docs/platform/apacheapisix.md b/docs-source/site/docs/platform/apacheapisix.md index e82147c2b..8b7236900 100644 --- a/docs-source/site/docs/platform/apacheapisix.md +++ b/docs-source/site/docs/platform/apacheapisix.md @@ -107,6 +107,79 @@ APISIX has an embedded dashboard that can be accessed after a tunnel is establis You can configure and update the APISIX gateway using the provided APIs. Pleas refer to the [API Documentation](https://apisix.apache.org/docs/apisix/getting-started/README/) for detailed information. +## Tracing requests through APISIX + +When SigNoz and APISIX are enabled, OBaaS configures APISIX with the built-in +`opentelemetry` plugin and exports spans to the in-cluster SigNoz OpenTelemetry +collector. APISIX uses the service name `APISIX`, writes its trace context to +JSON access logs, and propagates W3C `traceparent` headers to upstream services. + +This makes the plugin available, but it does **not** enable tracing on every +route. Add the plugin to each route that you want to trace, or attach it through +an APISIX GlobalRule when every route should be traced. The OBaaS chart does not +create a tracing route or GlobalRule for you. + +For a short validation window, configure an existing or new route with an +always-on sampler: + +```yaml +plugins: + opentelemetry: + sampler: + name: always_on +``` + +For production, use parent-based sampling and sample a fraction of new traces. +This preserves the sampling decision of an incoming trace while reducing the +volume of traces that originate at the gateway: + +```yaml +plugins: + opentelemetry: + sampler: + name: parent_base + options: + root: + name: trace_id_ratio + options: + fraction: 0.1 +``` + +Apply the route or GlobalRule through your normal APISIX configuration workflow. +If you use the Admin API, retrieve the current object first and preserve its +matching rules, upstream, authentication, and other plugins when adding the +`opentelemetry` block. + +The APISIX span is the gateway portion of the trace. To continue the same trace +in an upstream Java service, the service must be OpenTelemetry-instrumented and +configured to export to SigNoz. Instrumentation is described in +[Configure Applications for SigNoz](../observability/configure.md). Kafka and +database spans likewise depend on instrumentation in the backend service; an +APISIX span alone is not proof of a complete end-to-end trace. + +### Find APISIX spans and correlated logs in SigNoz + +Port-forward the SigNoz UI service, then open [http://localhost:8080](http://localhost:8080): + +```shell +kubectl -n port-forward \ + svc/-signoz 8080:8080 +``` + +The OpenTelemetry collector's port `8888` exposes Prometheus metrics. It is not +the SigNoz UI and cannot be used to browse traces. + +In **Traces** > **Trace Explorer**, select a recent time range and filter on +service name `APISIX`. To locate one request, filter on its trace ID, for example +the `trace_id` from the APISIX access log. Open a matching trace to inspect the +gateway span and any child spans from instrumented services. + +APISIX access logs include `trace_id`, `span_id`, and `traceparent`. In **Logs +Explorer**, filter on the `trace_id` field to find the matching gateway log +entry. This requires the deployed file-log receiver and parser to preserve the +JSON `trace_id` field; if the trace is present but the log is not, verify that +collector configuration separately. + ## Using custom plugins You can install custom plugins in APISIS using the Helm charts. diff --git a/docs-source/site/docs/platform/configserver.md b/docs-source/site/docs/platform/configserver.md index 3507fa012..418eacee9 100644 --- a/docs-source/site/docs/platform/configserver.md +++ b/docs-source/site/docs/platform/configserver.md @@ -57,25 +57,25 @@ kubectl apply -f your-sqlcl-pod.yaml -n obaas Check the pod output to confirm it was successful, using a command like this: +The example output below was captured with the SQLcl `26.2.2` container image against an Oracle Database Free test schema; your database version, user, and timestamps will differ. + ```bash kubectl -n obaas logs sqlcl -SQLcl: Release 25.4 Production on Mon Mar 23 16:51:50 2026 +SQLcl: Release 26.2 Production on Mon Sep 28 20:11:05 2026 Copyright (c) 1982, 2026, Oracle. All rights reserved. -Connected to: -Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free -Version 23.26.1.0.0 +Connected. - ID APPLICATION PROFILE LABEL PROP_KEY VALUE CREATED_ON CREATED_BY UPDATED_ON UPDATED_BY -_____ ______________ __________ _________ _______________ _________ __________________________________ _____________ _____________ _____________ - 1 billing default latest apikey abc123 23-MAR-26 04.49.53.000000000 PM OBAAS_USER - 2 billing default latest subscription xyz456 23-MAR-26 04.49.53.000000000 PM OBAAS_USER + ID APPLICATION PROFILE LABEL PROP_KEY VALUE CREATED_ON CREATED_BY UPDATED_ON UPDATED_BY +_____ ______________ __________ _________ _______________ _________ __________________________________ _________________ _____________ _____________ + 1 billing default latest apikey abc123 28-SEP-26 08.10.32.118082000 PM SQLCL_DOC_TEST + 2 billing default latest subscription xyz456 28-SEP-26 08.10.32.118082000 PM SQLCL_DOC_TEST -Disconnected from Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free -Version 23.26.1.0.0 +Disconnected from Oracle AI Database 26ai Free Release 23.26.3.0.0 - Develop, Learn, and Run for Free +Version 23.26.3.0.0 ``` Remember to remove your pod when you are finished, using a command like this: @@ -102,4 +102,4 @@ and will therefore allow you to refer to and use configuration properties in you Please refer to the [Spring Cloud Config Client documentation](https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_spring_cloud_config_client) for detailed information about how to use Spring Cloud Config in your applications, in particular to learn how application name, -profile and labels are used to lookup configuration properties. \ No newline at end of file +profile and labels are used to lookup configuration properties. diff --git a/docs-source/site/docs/platform/dboperator.md b/docs-source/site/docs/platform/dboperator.md index 22444c8f4..5158a36c7 100644 --- a/docs-source/site/docs/platform/dboperator.md +++ b/docs-source/site/docs/platform/dboperator.md @@ -45,11 +45,32 @@ unset ORDS_RUNTIME_PASSWORD Use the connection settings that match the OBaaS database type. -| OBaaS database type | ORDS connection type | Required connection details | -| --- | --- | --- | -| `ADB-S` | `tns` | ADB wallet Secret and TNS alias | -| `SIDB-FREE` | `basic` | In-cluster database service, port `1521`, service `FREEPDB1` | -| `OTHER` | `basic` or `customurl` | External host, port, service name, or JDBC URL | + + + + + + + + + + + + + + + + + + + + + + + + + +
OBaaS database typeORDS connection typeRequired connection details
ADB-StnsADB wallet Secret and TNS alias
SIDB-FREEbasicIn-cluster database service, port 1521, service FREEPDB1
OTHERbasic or customurlExternal host, port, service name, or JDBC URL
### Create the ORDS resource @@ -165,12 +186,32 @@ If your APISIX gateway is exposed outside the cluster, this route can make ORDS The examples below use these service name patterns: -| Service | Name | -| --- | --- | -| APISIX admin API | `-apisix-admin` | -| APISIX gateway | `-apisix-gateway` | -| ORDS | `` | -| SigNoz OpenTelemetry collector alias | `signoz-otel-collector` | + + + + + + + + + + + + + + + + + + + + + + + + + +
ServiceName
APISIX admin API<app-release>-apisix-admin
APISIX gateway<app-release>-apisix-gateway
ORDS<ords-resource-name>
SigNoz OpenTelemetry collector aliassignoz-otel-collector
Confirm the services exist: diff --git a/docs-source/site/docs/platform/index.md b/docs-source/site/docs/platform/index.md index f12661b0e..73fb4342b 100644 --- a/docs-source/site/docs/platform/index.md +++ b/docs-source/site/docs/platform/index.md @@ -7,34 +7,99 @@ Oracle Backend for Microservices and AI includes a set of pre-integrated platfor ## API Gateway & Networking -| Service | Description | -|---------|-------------| -| [Apache APISIX](./apacheapisix.md) | Cloud-native API gateway for routing, traffic management, and rate limiting | -| [Spring Boot Eureka Server](./eureka.md) | Service registry for automatic discovery between microservices | -| [Envoy Gateway](./envoygateway.md) | CNCF graduated implementation of the Kubernetes Gateway API | + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
Apache APISIXCloud-native API gateway for routing, traffic management, and rate limiting
Spring Boot Eureka ServerService registry for automatic discovery between microservices
Envoy GatewayCNCF graduated implementation of the Kubernetes Gateway API
## Messaging & Event Streaming -| Service | Description | -|---------|-------------| -| [Strimzi Kafka Operator](./strimzi_operator.md) | Kubernetes operator for deploying and managing Apache Kafka clusters | + + + + + + + + + + + + + +
ServiceDescription
Strimzi Kafka OperatorKubernetes operator for deploying and managing Apache Kafka clusters
## Data & Transactions -| Service | Description | -|---------|-------------| -| [Oracle Transaction Manager for Microservices](./otmm.md) | Distributed transaction coordinator supporting XA, LRA, and TCC consistency models | -| [Oracle Database Operator](./dboperator.md) | Kubernetes operator for provisioning and managing Oracle Database instances | -| [Coherence Operator](./coherence.md) | In-memory data grid for caching, data distribution, and compute | + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
Oracle Transaction Manager for MicroservicesDistributed transaction coordinator supporting XA, LRA, and TCC consistency models
Oracle Database OperatorKubernetes operator for provisioning and managing Oracle Database instances
Coherence OperatorIn-memory data grid for caching, data distribution, and compute
## Operations & Security -| Service | Description | -|---------|-------------| -| [Oracle Database Metrics Exporter](./dbexporter.md) | Exposes Oracle Database metrics for monitoring and alerting | -| [External Secrets Operator](./esooperator.md) | Syncs secrets from external stores (OCI Vault, AWS, HashiCorp Vault) into Kubernetes | -| [Spring Boot Admin Server](./sbadminserver.md) | Web dashboard for monitoring and managing Spring Boot applications | -| [MicroTx Workflow Orchestration](./conductor.md) | Workflow orchestration engine for multi-step service choreography | + + + + + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
Oracle Database Metrics ExporterExposes Oracle Database metrics for monitoring and alerting
External Secrets OperatorSyncs secrets from external stores (OCI Vault, AWS, HashiCorp Vault) into Kubernetes
Spring Boot Admin ServerWeb dashboard for monitoring and managing Spring Boot applications
MicroTx Workflow OrchestrationWorkflow orchestration engine for multi-step service choreography
## Architecture diff --git a/docs-source/site/docs/platform/otmm.md b/docs-source/site/docs/platform/otmm.md index dfe76327d..82eb63199 100644 --- a/docs-source/site/docs/platform/otmm.md +++ b/docs-source/site/docs/platform/otmm.md @@ -61,6 +61,202 @@ otmm: The console exists only to front the coordinator and workflow server, so it is deployed only when at least one of those two components is enabled. If both `otmm.coordinator.enabled` and `otmm.workflowServer.enabled` are `false`, the console is not deployed even if `otmm.console.enabled` is `true`. When deployed, the console is connected only to the backends that are enabled, so a coordinator-only or workflow-only install does not leave the console pointing at a service that was not deployed. +## Identity provider and JWT security + +Configure MicroTx security under `otmm.commonConfiguration.security`. The +identity-provider fields follow the [MicroTx 26.1 identity-provider +properties](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/identity-provider-properties.html). +Use `serverType: idcs` for Oracle IDCS and `other` for other supported providers. +Copy `issuer` and `jwksUri` from the provider's discovery document. Leave `scopes` +empty for non-IDCS providers; IDCS defaults to `openid groups`. + +For example, a Keycloak configuration with console access is: + +```yaml +otmm: + commonConfiguration: + externalURL: + protocol: https + host: microtx.example.com + security: + enabled: true + clientSecretName: microtx-client + identityProvider: + serverType: other + issuer: https://idp.example.com/realms/obaas + jwksUri: https://idp.example.com/realms/obaas/protocol/openid-connect/certs + identityProviderUrl: https://idp.example.com/realms/obaas + audience: microtx + scopes: "" + roleMappings: + coordinator: + adminUserRoles: microtx-admin + adminUserRolesPath: "realm_access, roles" + workflow: + claimsRolePaths: realm_access.roles + roles: + admin: microtx-workflow-admin + coordinator: + authentication: + requestsWithNoJWT: DENY + console: + cookieEncryptionPasswordSecretName: microtx-console-cookie +``` + +Prepare namespace-local Secrets: `microtx-client` with `clientId` and +`clientPassword`, and `microtx-console-cookie` with `secret`. Register the console +redirect URI `https://microtx.example.com/console/oidc/redirect` with the IdP, +and configure the audience and roles in the tokens. The IdP must be reachable by +MicroTx pods and by users' browsers. Set up the corresponding HTTPS route; +`externalURL` alone does not provision it. + +Console cookie encryption is configured separately through +`otmm.console.cookieEncryption.enabled`. It defaults to `false` to preserve +existing console behavior. Set it to `true` to enable the console's cookie +encryption setting and verify browser login with your encryption-password Secret. +When common security and the console are enabled, the chart still requires +`cookieEncryptionPasswordSecretName`, regardless of this setting. + +Common security enables coordinator RBAC, workflow JWT validation, and console +OIDC. An empty `coordinator.authentication.requestsWithNoJWT` derives `DENY` when +security is enabled and `ALLOW` otherwise. `ALLOW` with coordinator RBAC enabled +is rejected. For JWT authentication without common RBAC, explicitly set `DENY` +and provide issuer/JWKS details and the expected access-token audience. The chart +exports `identityProvider.audience` as the coordinator's `JWT_AUDIENCES` setting. +API-only installations can disable the console and omit its client Secret, URL, +and administrator role settings; coordinator JWT authentication still requires +the audience. +The evaluation defaults leave security disabled; enable security and require +JWTs in production, as described in [MicroTx authentication +properties](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/authentication-properties.html). + +Use `identityProvider.roleMappings.coordinator` for administrator roles and +`identityProvider.roleMappings.workflow` for workflow roles. Coordinator role +paths use commas; workflow paths use dots. Older OBaaS overrides under +`identityProvider.adminUserRoles`, `identityProvider.adminUserRolesPath`, +`identityProvider.policy`, and `workflowServer.security.identityProvider.policy` +remain supported and take precedence. Remove those overrides when migrating to +the documented `roleMappings` paths. + +JWT validation and RBAC do not enable token propagation to participant callbacks. +The chart keeps token propagation disabled; enabling it requires additional +encryption-key and callback configuration. After deployment, verify that missing, +expired, incorrectly signed, and wrong-issuer tokens are rejected, and that +administrator APIs enforce the configured roles. Helm render checks do not +establish runtime IdP compatibility. + +## Coordinator database storage + +The coordinator defaults to `otmm.coordinator.storage.type: memory`. To persist +transaction state across coordinator restarts, use `db` with a MicroTx Enterprise +Edition image. The Free coordinator image does not support database storage. +Database storage does not require a coordinator PVC and does not migrate +transactions previously held in memory. + +Before installing, prepare a reachable Oracle Database and grant the storage user +MicroTx's [required privileges and tablespace quota](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/grant-privileges-create-and-run-stored-procedures.html). +Follow the [database setup prerequisites](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/create-data-store.html), +including separate schemas for the coordinator and workflow server when both use +Oracle Database. Accept the applicable Enterprise Edition image terms and provide +an image pull secret if required by Oracle Container Registry. + +### Reuse the OBaaS database credentials + +For a coordinator-only installation, layer these overrides after your normal +OBaaS values: + +```yaml +otmm: + coordinator: + image: + repository: container-registry.oracle.com/database/microtx-ee-coordinator + tag: "26.1.2" + storage: + type: db + db: + credentialSecretName: "" + workflowServer: + enabled: false +``` + +With `credentialSecretName` empty, the coordinator uses the same application +credential secret as the database metrics exporter. This includes custom secret +names and keys configured through `database.authN`. The application secret's +service key supplies the connection string; optionally override it with +`otmm.coordinator.storage.db.connectionString`. + +The chart also reuses the exporter's database wallet and mounts it at +`/etc/config/dbwallet`. It overlays `sqlnet.ora` to point to that directory without +changing the shared Secret. No separate JSON credential Secret is needed: the +chart serializes the application username and password at startup. Custom +coordinator images using this path must provide Python 3 and `/app/tcs`. + +### Use a separate coordinator schema + +When the workflow server is enabled, keep its OBaaS application schema separate +from the coordinator's transaction-store schema. Create a Secret in the OBaaS +application namespace for the coordinator user. Its `secret` key must contain JSON +in this format: + +```json +{"username":"","password":""} +``` + +Create it from a protected local file rather than placing credentials in a +committed values file: + +```bash +kubectl -n create secret generic microtx-coordinator-db \ + --from-file=secret= +``` + +Keep the Enterprise Edition image override above and configure: + +```yaml +otmm: + coordinator: + storage: + type: db + db: + credentialSecretName: microtx-coordinator-db + credentialSecretKey: secret + connectionString: "" + # Set one of these when the connection requires a wallet: + # walletSecretName: "" + # walletConfigMapName: "" +``` + +A separate credential Secret requires an explicit connection string. It does not +implicitly select the shared OBaaS wallet: supply `walletSecretName` or +`walletConfigMapName` when needed, in the application namespace. The wallet is +mounted at `/etc/config/dbwallet`; its `sqlnet.ora` must use that wallet directory. +The chart does not rewrite custom wallet configuration. + +### Schema initialization and verification + +For database storage, `otmm.coordinator.storage.db.initializeSchema` defaults to +`true`. The `initialize-coordinator-schema` init container runs the selected image +in MicroTx initialization mode with the same credentials and wallet as the +service. The coordinator starts only after initialization succeeds. This step can +create or upgrade database objects; review MicroTx's migration requirements and +back up an existing transaction store before upgrading its image. + +If a DBA provisions and upgrades the schema separately, set +`otmm.coordinator.storage.db.initializeSchema: false`. + +After the Helm installation or upgrade, check both containers: + +```bash +kubectl -n logs -otmm-tcs-0 \ + -c initialize-coordinator-schema +kubectl -n logs -otmm-tcs-0 -c otmm-tcs +``` + +Initialization should complete successfully and the coordinator should report +`serving...`. If startup reports `ORA-00942` for `OMTM_STATS`, check schema +initialization and the storage user's privileges. For `ORA-28759`, check that the +wallet files are readable and `sqlnet.ora` points to their mounted directory. + ## MicroTx Workflow Server The MicroTx Workflow Server extends transaction coordinator with advanced workflow capabilities. @@ -77,4 +273,8 @@ When the workflow server is enabled, it uses the OBaaS application database secr ## Upgrading to the commercial version -If you have licensed Oracle Transaction Manager for Microservices Enterprise Edition, please see the [documentation](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/index.html) for details of how to install and configure MicroTx. Oracle recommends that you perform a new installation rather than attempting to upgrade the provided MicroTx Free installation to the commercial version. +If you have licensed Oracle Transaction Manager for Microservices Enterprise Edition (EE), upgrade the MicroTx components as follows: + +- **Transaction Coordinator:** Replace the Free container image with the EE container image from [Oracle Container Registry](https://container-registry.oracle.com/ords/ocr/ba/database/microtx-ee-coordinator). You must also configure persistence when upgrading to EE. Follow the [Set Up Oracle Database as Data Store](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/create-data-store.html) instructions. +- **Workflow Server:** Replace the Free container image with the EE container image from [Oracle Container Registry](https://container-registry.oracle.com/ords/ocr/ba/database/microtx-ee-workflow). +- **Console:** Replace the Free container image with the EE container image from [Oracle Container Registry](https://container-registry.oracle.com/ords/ocr/ba/database/microtx-ee-console). diff --git a/docs-source/site/docs/platform/strimzi_operator.md b/docs-source/site/docs/platform/strimzi_operator.md index 874c8f46e..df22d64d9 100644 --- a/docs-source/site/docs/platform/strimzi_operator.md +++ b/docs-source/site/docs/platform/strimzi_operator.md @@ -280,14 +280,40 @@ Strimzi also supports mTLS and custom CA certificates. For additional Strimzi ce ## Strimzi Custom Resources Reference -| Resource | Purpose | -|----------|---------| -| `Kafka` | Defines the Kafka cluster configuration | -| `KafkaNodePool` | Manages groups of Kafka nodes with specific roles | -| `KafkaTopic` | Declaratively manages Kafka topics | -| `KafkaUser` | Manages user authentication and authorization | -| `KafkaConnect` | Deploys Kafka Connect for data integration | -| `KafkaBridge` | Provides HTTP API access to Kafka | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourcePurpose
KafkaDefines the Kafka cluster configuration
KafkaNodePoolManages groups of Kafka nodes with specific roles
KafkaTopicDeclaratively manages Kafka topics
KafkaUserManages user authentication and authorization
KafkaConnectDeploys Kafka Connect for data integration
KafkaBridgeProvides HTTP API access to Kafka
For the full custom resource reference, see the [Strimzi documentation](https://strimzi.io/docs/operators/latest/configuring). diff --git a/docs-source/site/docs/rel_notes/index.mdx b/docs-source/site/docs/rel_notes/index.mdx index 8d4e1de37..8dca9b481 100644 --- a/docs-source/site/docs/rel_notes/index.mdx +++ b/docs-source/site/docs/rel_notes/index.mdx @@ -3,7 +3,7 @@ title: Release Notes sidebar_position: 0 --- -export const OBAAS_VERSION = '2.1.1'; +export const OBAAS_VERSION = '27.1.0'; ## Release Notes for Oracle Backend for Microservices and AI (OBaaS) @@ -17,18 +17,36 @@ Platform services use Java 25, Spring Boot 4.0.6, and Spring Cloud 2025.1.1. The OBaaS {OBAAS_VERSION} Helm charts use the following chart and application versions: -| Chart | Chart Version | App Version | Kubernetes Version | -|-------|---------------|-------------|--------------------| -| `obaas-prereqs` | 0.1.1 | {OBAAS_VERSION} | 1.34 or later | -| `obaas` | 0.1.1 | {OBAAS_VERSION} | 1.34 or later | + + + + + + + + + + + + + + + + + + + + + + + +
ChartChart VersionApp VersionKubernetes Version
obaas-prereqs0.1.1{OBAAS_VERSION}1.34 or later
obaas0.1.1{OBAAS_VERSION}1.34 or later
-> **Optional upgrade and SigNoz data loss** +> **SigNoz patch upgrade** > -> OBaaS 2.1.1 is an optional patch release. Upgrading an existing OBaaS installation replaces the existing SigNoz deployment; it does not migrate or preserve SigNoz data. Users who need to preserve historical observability data must follow SigNoZ's own migration documentation; that migration path is not provided by OBaaS +> OBaaS 2.1.2 is an optional patch release. Upgrading an existing OBaaS installation upgrades SigNoz in place and preserves existing telemetry, dashboards, users, alerts, ClickHouse data, and ZooKeeper data. > -> The upgrade permanently deletes all existing SigNoz telemetry, dashboards, users, alerts, ClickHouse data, and ZooKeeper data. It does not affect the application database or other OBaaS services. -> -> This release does not provide an in-place or data-preserving SigNoz upgrade path. Back up any required observability data before upgrading. +> Use the standard Helm upgrade command with the complete values file for the installed release. ### Additions in this Release @@ -40,7 +58,7 @@ The OBaaS {OBAAS_VERSION} Helm charts use the following chart and application ve * Kafka cluster resources can be enabled in the OBaaS application chart and are reconciled by Strimzi from the prerequisite chart. * AI Optimizer is available as an optional component through the `ai-optimizer` subchart. * APISIX custom plugins can be supplied through `extraConfigMaps` and `apisix.apisix.customPlugins`. -* SigNoz is upgraded to chart/application version 0.134.0. Existing SigNoz data is not preserved during the upgrade; see the upgrade warning above. +* SigNoz is upgraded to chart/application version 0.142.1 in place. ### Deprecations in this Release @@ -57,45 +75,214 @@ Components that are deprecated in this release may be removed in a future releas The following table lists container images for OBaaS {OBAAS_VERSION} (sorted alphabetically): -| Component | Image | Version | -|-----------|-------|---------| -| Alpine Kubernetes Tools | `docker.io/alpine/k8s` | 1.36.2 | -| Apache APISIX | `docker.io/apache/apisix` | 3.17.0-ubuntu | -| BusyBox | `docker.io/busybox` | 1.37 | -| Cert Manager (CA Injector) | `quay.io/jetstack/cert-manager-cainjector` | v1.21.1 | -| Cert Manager (Controller) | `quay.io/jetstack/cert-manager-controller` | v1.21.1 | -| Cert Manager (Startup API Check) | `quay.io/jetstack/cert-manager-startupapicheck` | v1.21.1 | -| Cert Manager (Webhook) | `quay.io/jetstack/cert-manager-webhook` | v1.21.1 | -| ClickHouse Metrics Exporter | `docker.io/altinity/metrics-exporter` | 0.21.2 | -| ClickHouse Operator | `docker.io/altinity/clickhouse-operator` | 0.21.2 | -| ClickHouse Server | `docker.io/clickhouse/clickhouse-server` | 25.12.5 | -| Coherence CE | `container-registry.oracle.com/middleware/coherence-ce` | 22.06.13 | -| Coherence Operator | `container-registry.oracle.com/middleware/coherence-operator` | 3.5.14 | -| Config Server | `container-registry.oracle.com/obaas/config-server` | 2.1.0 | -| Curl | `docker.io/curlimages/curl` | 8.20.0 | -| Dashboards | `container-registry.oracle.com/obaas/dashboards` | 2.1.0 | -| Envoy | `docker.io/envoyproxy/envoy` | distroless-v1.38.3 | -| Envoy Gateway | `docker.io/envoyproxy/gateway` | v1.8.2 | -| Envoy Ratelimit | `docker.io/envoyproxy/ratelimit` | master | -| etcd | `docker.io/bitnamilegacy/etcd` | 3.6.1 | -| Eureka | `container-registry.oracle.com/obaas/service-registry` | 2.1.0 | -| External Secrets | `ghcr.io/external-secrets/external-secrets` | v2.8.0 | -| Ingress NGINX Controller | `registry.k8s.io/ingress-nginx/controller` | v1.15.1 | -| Kafka | `quay.io/strimzi/kafka` | 1.1.0-kafka-4.2.0 | -| Kube State Metrics | `registry.k8s.io/kube-state-metrics/kube-state-metrics` | v2.17.0 | -| Metrics Server | `registry.k8s.io/metrics-server/metrics-server` | v0.8.1 | -| MicroTx Console | `container-registry.oracle.com/database/microtx-console` | 26.1.1 | -| MicroTx Coordinator | `container-registry.oracle.com/database/microtx-coordinator` | 26.1.1 | -| MicroTx Workflow | `container-registry.oracle.com/database/microtx-workflow` | 26.1.1 | -| OBaaS Admin Server | `container-registry.oracle.com/obaas/admin-server` | 2.1.0 | -| Observability Exporter | `container-registry.oracle.com/database/observability-exporter` | 2.4.2 | -| OpenTelemetry Collector Contrib | `docker.io/otel/opentelemetry-collector-contrib` | 0.139.0 | -| OpenTelemetry Java Autoinstrumentation | `ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java` | 2.28.1 | -| OpenTelemetry Operator | `ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator` | 0.154.0 | -| Oracle Database Free | `container-registry.oracle.com/database/free` | 23.26.2.0 | -| Oracle Database Operator | `container-registry.oracle.com/database/operator` | 2.1.0 | -| Signoz | `docker.io/signoz/signoz` | v0.134.0 | -| Signoz OpenTelemetry Collector | `docker.io/signoz/signoz-otel-collector` | v0.144.6 | -| SQLcl | `container-registry.oracle.com/database/sqlcl` | 26.2.0 | -| Strimzi Operator | `quay.io/strimzi/operator` | 1.1.0 | -| Zookeeper | `docker.io/signoz/zookeeper` | 3.7.1 | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentImageVersion
Alpine Kubernetes Toolsdocker.io/alpine/k8s1.36.2
Apache APISIXdocker.io/apache/apisix3.18.0-ubuntu
BusyBoxdocker.io/busybox1.37
Cert Manager (CA Injector)quay.io/jetstack/cert-manager-cainjectorv1.21.1
Cert Manager (Controller)quay.io/jetstack/cert-manager-controllerv1.21.1
Cert Manager (Startup API Check)quay.io/jetstack/cert-manager-startupapicheckv1.21.1
Cert Manager (Webhook)quay.io/jetstack/cert-manager-webhookv1.21.1
ClickHouse Metrics Exporterdocker.io/altinity/metrics-exporter0.21.2
ClickHouse Operatordocker.io/altinity/clickhouse-operator0.21.2
ClickHouse Serverdocker.io/clickhouse/clickhouse-server25.12.5
Coherence CEcontainer-registry.oracle.com/middleware/coherence-ce22.06.13
Coherence Operatorcontainer-registry.oracle.com/middleware/coherence-operator3.5.17
Config Servercontainer-registry.oracle.com/obaas/config-server2.1.0
Dashboardscontainer-registry.oracle.com/obaas/dashboards2.1.0
Envoydocker.io/envoyproxy/envoydistroless-v1.38.3
Envoy Gatewaydocker.io/envoyproxy/gatewayv1.8.2
Envoy Ratelimitdocker.io/envoyproxy/ratelimitmaster
etcddocker.io/bitnamilegacy/etcd3.6.1
Eurekacontainer-registry.oracle.com/obaas/service-registry2.1.0
External Secretsghcr.io/external-secrets/external-secrets2.10.0
Ingress NGINX Controllerregistry.k8s.io/ingress-nginx/controllerv1.15.1
Kafkaquay.io/strimzi/kafka1.1.0-kafka-4.2.0
Kube State Metricsregistry.k8s.io/kube-state-metrics/kube-state-metricsv2.20.0
Metrics Serverregistry.k8s.io/metrics-server/metrics-serverv0.9.0
MicroTx Consolecontainer-registry.oracle.com/database/microtx-console26.1.2
MicroTx Coordinatorcontainer-registry.oracle.com/database/microtx-coordinator26.1.2
MicroTx Workflowcontainer-registry.oracle.com/database/microtx-workflow26.1.2
OBaaS Admin Servercontainer-registry.oracle.com/obaas/admin-server2.1.0
Observability Exportercontainer-registry.oracle.com/database/observability-exporter2.4.2
OpenTelemetry Collector Contribdocker.io/otel/opentelemetry-collector-contrib0.160.0
OpenTelemetry Java Autoinstrumentationghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java2.30.0
OpenTelemetry Operatorghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator0.158.0
Oracle Database Freecontainer-registry.oracle.com/database/free23.26.2.0
Oracle Database Operatorcontainer-registry.oracle.com/database/operator2.1.0
Oracle Linux (SigNoz setup)container-registry.oracle.com/os/oraclelinux9
Signozdocker.io/signoz/signozv0.142.1
Signoz OpenTelemetry Collectordocker.io/signoz/signoz-otel-collectorv0.144.10
SQLclcontainer-registry.oracle.com/database/sqlcl26.2.2
Strimzi Operatorquay.io/strimzi/operator1.1.0
Zookeeperdocker.io/signoz/zookeeper3.8.4
diff --git a/docs-source/site/docs/setup/helm/chart-references.md b/docs-source/site/docs/setup/helm/chart-references.md index 3ef0f4e98..5dfe22e03 100644 --- a/docs-source/site/docs/setup/helm/chart-references.md +++ b/docs-source/site/docs/setup/helm/chart-references.md @@ -8,21 +8,96 @@ chart release bundled with this OBaaS release and opens the upstream chart's rendered README or values file. Use these references when customizing a component; do not copy the complete dependency values into OBaaS documentation. -| Chart | Version | Chart README | Values reference | -| --- | --- | --- | --- | -| `ai-optimizer` | 2.4.1 | [README](https://github.com/oracle/ai-optimizer/blob/v2.4.1/helm/README.md) | [values.yaml](https://github.com/oracle/ai-optimizer/blob/v2.4.1/helm/values.yaml) | -| `apisix` | 2.16.0 | [README](https://github.com/apache/apisix-helm-chart/blob/apisix-2.16.0/charts/apisix/README.md) | [values.yaml](https://github.com/apache/apisix-helm-chart/blob/apisix-2.16.0/charts/apisix/values.yaml) | -| `cert-manager` | v1.21.1 | [README template](https://github.com/cert-manager/cert-manager/blob/v1.21.1/deploy/charts/cert-manager/README.template.md) | [values.yaml](https://github.com/cert-manager/cert-manager/blob/v1.21.1/deploy/charts/cert-manager/values.yaml) | -| `coherence-operator` | 3.5.14 | [README](https://github.com/oracle/coherence-operator/blob/v3.5.14/helm-charts/coherence-operator/README.md) | [values.yaml](https://github.com/oracle/coherence-operator/blob/v3.5.14/helm-charts/coherence-operator/values.yaml) | -| `external-secrets` | 2.8.0 | [README](https://github.com/external-secrets/external-secrets/blob/helm-chart-2.8.0/deploy/charts/external-secrets/README.md) | [values.yaml](https://github.com/external-secrets/external-secrets/blob/helm-chart-2.8.0/deploy/charts/external-secrets/values.yaml) | -| `gateway-helm` | 1.8.2 | [README](https://github.com/envoyproxy/gateway/blob/6c2e80d5158926749b95e948d7aae36b9ae67669/charts/gateway-helm/README.md) | [values template](https://github.com/envoyproxy/gateway/blob/6c2e80d5158926749b95e948d7aae36b9ae67669/charts/gateway-helm/values.tmpl.yaml) | -| `ingress-nginx` | 4.15.1 | [README](https://github.com/kubernetes/ingress-nginx/blob/controller-v1.15.1/charts/ingress-nginx/README.md) | [values.yaml](https://github.com/kubernetes/ingress-nginx/blob/controller-v1.15.1/charts/ingress-nginx/values.yaml) | -| `k8s-infra` | 0.15.0 | [README](https://github.com/SigNoz/charts/blob/signoz-0.134.0/charts/k8s-infra/README.md) | [values.yaml](https://github.com/SigNoz/charts/blob/signoz-0.134.0/charts/k8s-infra/values.yaml) | -| `kube-state-metrics` | 6.4.1 | [README](https://github.com/prometheus-community/helm-charts/blob/kube-state-metrics-6.4.1/charts/kube-state-metrics/README.md) | [values.yaml](https://github.com/prometheus-community/helm-charts/blob/kube-state-metrics-6.4.1/charts/kube-state-metrics/values.yaml) | -| `metrics-server` | 3.13.1 | [README](https://github.com/kubernetes-sigs/metrics-server/blob/metrics-server-helm-chart-3.13.1/charts/metrics-server/README.md) | [values.yaml](https://github.com/kubernetes-sigs/metrics-server/blob/metrics-server-helm-chart-3.13.1/charts/metrics-server/values.yaml) | -| `opentelemetry-operator` | 0.119.0 | [README](https://github.com/open-telemetry/opentelemetry-helm-charts/blob/opentelemetry-operator-0.119.0/charts/opentelemetry-operator/README.md) | [values.yaml](https://github.com/open-telemetry/opentelemetry-helm-charts/blob/opentelemetry-operator-0.119.0/charts/opentelemetry-operator/values.yaml) | -| `signoz` | 0.134.0 | [README](https://github.com/SigNoz/charts/blob/signoz-0.134.0/charts/signoz/README.md) | [values.yaml](https://github.com/SigNoz/charts/blob/signoz-0.134.0/charts/signoz/values.yaml) | -| `strimzi-kafka-operator` | 1.1.0 | [README](https://github.com/strimzi/strimzi-kafka-operator/blob/1.1.0/packaging/helm-charts/helm3/strimzi-kafka-operator/README.md) | [values.yaml](https://github.com/strimzi/strimzi-kafka-operator/blob/1.1.0/packaging/helm-charts/helm3/strimzi-kafka-operator/values.yaml) | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ChartVersionChart READMEValues reference
ai-optimizer2.0.3READMEvalues.yaml
apisix2.17.0READMEvalues.yaml
cert-managerv1.21.1README templatevalues.yaml
coherence-operator3.5.17READMEvalues.yaml
external-secrets2.10.0READMEvalues.yaml
gateway-helm1.9.1READMEvalues template
ingress-nginx4.15.1READMEvalues.yaml
k8s-infra0.15.0READMEvalues.yaml
kube-state-metrics8.4.2READMEvalues.yaml
metrics-server3.14.0READMEvalues.yaml
opentelemetry-operator0.122.0READMEvalues.yaml
signoz0.142.1READMEvalues.yaml
strimzi-kafka-operator1.1.0READMEvalues.yaml
## Vendored Oracle Database Operator diff --git a/docs-source/site/docs/setup/helm/index.md b/docs-source/site/docs/setup/helm/index.md index 16db23bf8..0f967b22e 100644 --- a/docs-source/site/docs/setup/helm/index.md +++ b/docs-source/site/docs/setup/helm/index.md @@ -9,12 +9,37 @@ This guide outlines the steps to deploy Oracle Backend for Microservices and AI ### Installation Steps -| Step | Description | Details | -|------|-------------|---------| -| 1 | **Verify prerequisites** | Confirm your Kubernetes cluster, database, and tooling meet the requirements. | -| 2 | **Install prerequisites chart** | Install the cluster-scoped operators and CRDs (once per cluster). | -| 3 | **Install OBaaS chart** | Install the OBaaS application chart into one or more namespaces. | -| 4 | **Verify installation** | Confirm all pods are running and services are accessible. | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionDetails
1Verify prerequisitesConfirm your Kubernetes cluster, database, and tooling meet the requirements.
2Install prerequisites chartInstall the cluster-scoped operators and CRDs (once per cluster).
3Install OBaaS chartInstall the OBaaS application chart into one or more namespaces.
4Verify installationConfirm all pods are running and services are accessible.
### Detailed Guides diff --git a/docs-source/site/docs/setup/helm/install.md b/docs-source/site/docs/setup/helm/install.md index 04c4d8aa4..f60fd472f 100644 --- a/docs-source/site/docs/setup/helm/install.md +++ b/docs-source/site/docs/setup/helm/install.md @@ -120,10 +120,27 @@ helm/infra-charts/ During installation, the Helm chart sets up two database users with different privilege levels: -| User | Purpose | Created by | -|------|---------|------------| -| **SYSTEM** (non-ADB) or **ADMIN** (ADB) | Privileged user for one-time database initialization | Pre-exists (external DBs) or auto-generated (container DBs) | -| **OBAAS_USER** | Application-level user for runtime platform operations | Created by the init script during first install | + + + + + + + + + + + + + + + + + + + + +
UserPurposeCreated by
SYSTEM (non-ADB) or ADMIN (ADB)Privileged user for one-time database initializationPre-exists (external DBs) or auto-generated (container DBs)
OBAAS_USERApplication-level user for runtime platform operationsCreated by the init script during first install
**OBAAS_USER** is the unprivileged database identity used by OBaaS components at runtime. The privileged user is only used once — to create OBAAS_USER and grant it the minimum permissions the platform needs. @@ -240,6 +257,19 @@ kubectl get pods -n All pods should reach `Running` status within 2-3 minutes. +To verify that Metrics Server is serving resource metrics, check its aggregated +APIService and query node or pod usage: + +```bash +kubectl get apiservice v1beta1.metrics.k8s.io +kubectl top nodes +kubectl top pods -n +``` + +The APIService should report `Available=True`. A temporarily empty `kubectl +top` result can be normal immediately after startup while the first scrape +completes. + #### Step 3: Choose a Values File and Install OBaaS Choose an example configuration that matches your deployment scenario and install: @@ -278,19 +308,84 @@ kubectl get pods -A Several example configurations are provided for comparison. -| Values file | Best for | External DB required | Notes | -|---|---|---|---| -| `values-default.yaml` | Minimal evaluation | No | Uses chart defaults | -| `values-sidb-free.yaml` | Development and testing | No | Runs Oracle Database Free in the cluster | -| `values-existing-adb.yaml` | OCI production | Yes | Uses Autonomous Database | -| `values-byodb.yaml` | Existing Oracle Database | Yes | Non-Autonomous Oracle Database only | -| `values-tenant1.yaml`, `values-tenant2.yaml` | Multi-tenant setups | Depends | Requires unique ingress settings per tenant | -| `values-namespace-override.yaml` | Namespace watch tuning | Depends | Adjusts ingress scope | -| `values-signoz-existing-secret.yaml` | GitOps and pre-created credentials | Depends | Uses an existing SigNoz secret | -| `values-signoz-cold-storage.yaml` | Long-term observability retention | Depends | Uses S3-compatible object storage | -| `values-kafka.yaml` | Kafka workloads and observability testing | Depends | Creates a Strimzi-managed Kafka cluster | -| `values-coherence.yaml` | Coherence integration and distributed-cache testing | Depends | Creates a Coherence Operator-managed cluster | -| `values-private-registry.yaml` | Air-gapped and private registry installs | Depends | Mirrors images to a private registry | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Values fileBest forExternal DB requiredNotes
values-default.yamlMinimal evaluationNoUses chart defaults
values-sidb-free.yamlDevelopment and testingNoRuns Oracle Database Free in the cluster
values-existing-adb.yamlOCI productionYesUses Autonomous Database
values-byodb.yamlExisting Oracle DatabaseYesNon-Autonomous Oracle Database only
values-tenant1.yaml, values-tenant2.yamlMulti-tenant setupsDependsRequires unique ingress settings per tenant
values-namespace-override.yamlNamespace watch tuningDependsAdjusts ingress scope
values-signoz-existing-secret.yamlGitOps and pre-created credentialsDependsUses an existing SigNoz secret
values-signoz-cold-storage.yamlLong-term observability retentionDependsUses S3-compatible object storage
values-kafka.yamlKafka workloads and observability testingDependsCreates a Strimzi-managed Kafka cluster
values-coherence.yamlCoherence integration and distributed-cache testingDependsCreates a Coherence Operator-managed cluster
values-private-registry.yamlAir-gapped and private registry installsDependsMirrors images to a private registry
The OBaaS chart selects the database mode with `database.type`. The supported values are `SIDB-FREE`, `ADB-FREE`, `ADB-S`, and `OTHER`; choose the example values file that matches the database deployment you plan to use. @@ -309,7 +404,7 @@ helm upgrade --install obaas/obaas -f examples/values-default.yaml #### SIDB-FREE Database (`values-sidb-free.yaml`) :::warning[Important] -Persistent storage is enabled by default for SIDB-FREE and ADB-FREE. Please refer to [prerequisites](./prereqs.md) for capacity requirements. +If you use SIDB, you may need more ephemeral storage on your nodes. Please refer to [prerequisites](./prereqs.md) for details. ::: Uses Oracle Database Free as an in-cluster container. This is the default database type. @@ -322,22 +417,6 @@ Uses Oracle Database Free as an in-cluster container. This is the default databa helm upgrade --install obaas/obaas -f examples/values-sidb-free.yaml -n --create-namespace [--debug] ``` -In-cluster database data is retained when the database Pod is replaced. The same `database.persistence` settings apply to `SIDB-FREE` and `ADB-FREE`: - -```yaml -database: - persistence: - enabled: true - storageClass: "fast-ssd" - size: 250Gi - accessModes: - - ReadWriteOnce -``` - -Leave `storageClass` empty to use the cluster default. Set `database.persistence.enabled: false` only when ephemeral database data is acceptable. - -OBaaS deletes PVCs during Helm uninstall by default (`global.cleanupPVCs: true`). To retain the database PVC after an uninstall, set `global.cleanupPVCs: false`. - #### Existing Oracle AI Autonomous Database Configuration (`values-existing-adb.yaml`) Connects to an existing OCI Autonomous Database (ADB-S) instead of deploying a database container. @@ -394,13 +473,36 @@ tools/get-adb-ocid.sh -r (-c | --compartment-ocid ` | OCI region where the Oracle AI Autonomous Database is deployed | -| `-c ` | Name of the OCI compartment containing the database | -| `--compartment-ocid ` | OCID of the OCI compartment containing the database | -| `-dbname ` | Display name of the existing Oracle AI Autonomous Database | -| `[options]` | Additional optional parameters supported by the script | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
-r <region>OCI region where the Oracle AI Autonomous Database is deployed
-c <compartment-name>Name of the OCI compartment containing the database
--compartment-ocid <ocid>OCID of the OCI compartment containing the database
-dbname <adb-display-name>Display name of the existing Oracle AI Autonomous Database
[options]Additional optional parameters supported by the script
##### Example @@ -535,51 +637,22 @@ kubectl create secret generic my-signoz-secret \ helm upgrade --install obaas/obaas -f examples/values-signoz-existing-secret.yaml -n [--debug] ``` -#### Replace SigNoZ during an existing-release upgrade - -OBaaS 2.1.1 replaces SigNoZ rather than migrating it when upgrading an -existing release. The procedure permanently deletes all existing SigNoZ -telemetry, dashboards, users, alerts, ClickHouse data, and ZooKeeper data. It -does not affect the application database or other OBaaS services. +The setup Job discovers the organization associated with the Secret's `email` +through the SigNoz API. If that account belongs to multiple organizations, include +an `orgID` key containing the selected organization's UUID in the same Secret. +See [dashboard setup](../../observability/dashboards.md#dashboard-setup-job) for +reconciliation behavior and verification commands. -This release has no in-place or data-preserving SigNoZ upgrade path. Back up any -observability data that must be retained before proceeding. A data-preserving -migration using SigNoZ's own documentation is not supported by OBaaS 2.1.1. +#### Upgrade SigNoZ during an existing-release upgrade -Use the complete values file for the installed release and explicitly -acknowledge the data loss: - -```bash -helm upgrade helm/infra-charts/obaas \ - -n \ - --timeout 30m \ - -f \ - --set signozUpgrade.mode=destructive-replace \ - --set signozUpgrade.confirmDataLoss=true -``` +Follow the [OBaaS upgrade guide](../../upgrade/index.mdx) for prerequisite and +Envoy Gateway CRD updates and the two-step ClickHouse/SigNoZ upgrade. Older +ClickHouse versions must be upgraded before the new pre-upgrade migration runs. -If these settings are omitted when upgrading an existing release, Helm fails -before changing any OBaaS resources. Fresh installations do not require these -settings. - -See [Replace SigNoZ during upgrade](../../observability/upgrade/index.md) for -the complete procedure. - -#### ClickHouse Internal Diagnostic Retention - -OBaaS retains the high-volume ClickHouse `zookeeper_log` and -`processors_profile_log` diagnostic tables for one day. These tables are useful -for short-lived ClickHouse or ZooKeeper investigations, but longer retention can -create substantial ClickHouse write, merge, and storage pressure under sustained -telemetry load. - -The one-day retention is set in the OBaaS chart defaults. An operator can -temporarily increase either retention period through -`signoz.clickhouse.clickhouseOperator.zookeeperLog.ttl` or -`signoz.clickhouse.clickhouseOperator.processorsProfileLog.ttl`; return it to -one day after the investigation. Existing installations need a Helm upgrade to -receive the new configuration. This configuration does not immediately delete -diagnostic rows already stored in ClickHouse. +The two-step procedure without protected recovery is for installations where +observability data loss is acceptable. For backup and preservation, follow +[SigNoZ's ClickHouse upgrade and backup guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/). +Do not set `signozUpgrade.mode=destructive-replace` for the in-place upgrade. #### SigNoz Cold Storage (`values-signoz-cold-storage.yaml`) @@ -624,12 +697,19 @@ Creates a Strimzi-managed Kafka cluster in the OBaaS release namespace. This is **Installation:** -This example includes full Kafka observability in SigNoz (the "Kafka Server Monitoring -Dashboard") by default — no separate extension file needed. +```bash +helm upgrade --install obaas/obaas \ + -f examples/values-kafka.yaml \ + -n \ + --create-namespace [--debug] +``` + +**Optional Kafka metrics in SigNoz:** ```bash helm upgrade --install obaas/obaas \ -f examples/values-kafka.yaml \ + -f extensions/kafka-metrics.yaml \ -n \ --create-namespace [--debug] ``` @@ -664,6 +744,50 @@ kubectl get pods -n The example does not create persistent storage. Configure `coherence.coherence.persistence` with a suitable StorageClass and volume size when durable Coherence data is required. +#### MicroTx Coordinator Database Storage + +To persist coordinator transaction state in the OBaaS database, configure: + +```yaml +otmm: + coordinator: + storage: + type: db +``` + +With `storage.db.credentialSecretName` empty, the coordinator reuses the application +credential secret and database wallet used by the metrics exporter, including +custom `database.authN` secret names and keys. At startup, Python 3 in the +coordinator image serializes the username and password into MicroTx's JSON +credential format, then starts `/app/tcs`. The default `26.1.2` image contains this +runtime; custom images must provide it too. Coordinator settings are loaded through +`envFrom` from the chart's ConfigMap, allowing the secret-backed connection string +to take effect. The connection string defaults to the +application secret's service key; set `storage.db.connectionString` to override it. +For the shared wallet, the chart overlays `sqlnet.ora` with an explicit wallet +directory of `/etc/config/dbwallet`. This avoids the downloaded wallet's +`?/network/admin` path, which does not point to the coordinator's mount. The wallet +Secret itself is unchanged. Custom wallet secrets and ConfigMaps must supply a +`sqlnet.ora` that matches this mount path. + +If an existing values file sets `storage.db.credentialSecretName` to +`microtx-coordinator-db`, remove that override or set it to `""` to use the shared +application secret. A nonempty value still selects a pre-existing, separate secret +whose `storage.db.credentialSecretKey` (default `secret`) contains +`{"username":"...","password":"..."}`; this mode requires an explicit connection +string. Custom wallet secrets or ConfigMaps can also be selected under `storage.db`. + +Database persistence requires MicroTx Enterprise Edition, which enables durable storage and +the database schema and privileges required by that edition. For `storage.type: db`, +the chart runs the coordinator image in `INIT_CONTAINER_ENABLED=true` mode before +starting the service, using the same credentials and wallet. This initializes or +upgrades the MicroTx schema; the user needs its documented schema-creation +privileges and tablespace quota. Check `initialize-coordinator-schema` container +logs if initialization fails. Set `storage.db.initializeSchema: false` when a DBA +provisions and upgrades these objects separately. Review the MicroTx migration and +backup requirements before upgrading an existing transaction store. The chart +defaults to coordinator memory storage. + #### Private Registry Configuration (`values-private-registry.yaml`) Uses a private container registry for all images with authentication. @@ -712,6 +836,13 @@ Each subchart has its own image configuration that must be set explicitly. - **ingress-nginx**: `controller.image.registry` when deprecated ingress-nginx is explicitly enabled - **signoz**: `global.imageRegistry` +- **SigNoz setup Job**: `signoz.setup.image.registry`, with separate + `signoz.setup.image.repository` and `signoz.setup.image.tag` values. The default + is `container-registry.oracle.com/os/oraclelinux:9`; this Job does not use + `signoz.global.imageRegistry`. The private registry example mirrors it as + `myregistry.example.com/os/oraclelinux:9`. Replacement images must provide + `python3` and its standard library; no packages are installed at runtime. + The former `signoz.utilities.curlJq.image` override is no longer used. - **apisix etcd**: `apisix.etcd.image.registry` **OBaaS components requiring the full repository path** (include registry in `image.repository`): diff --git a/docs-source/site/docs/setup/helm/planning.md b/docs-source/site/docs/setup/helm/planning.md index 787b504ab..b7fdc0025 100644 --- a/docs-source/site/docs/setup/helm/planning.md +++ b/docs-source/site/docs/setup/helm/planning.md @@ -30,11 +30,28 @@ You will need to provide various configuration information to the Helm charts du Select the database mode by setting `database.type` to one of the supported values: `SIDB-FREE`, `ADB-FREE`, `ADB-S`, or `OTHER`. Use `SIDB-FREE` or `ADB-FREE` for in-cluster database deployments, `ADB-S` for Autonomous Database deployments, and `OTHER` for non-Autonomous Oracle Database deployments. -| Type of deployment | Information you will need | -| --- | --- | -| Autonomous AI Database (including Globally Distributed) | The OCID of your database, your OCI CLI or SDK configuration details, including your private key, and the password for your `ADMIN` user. | -| In-cluster (Single Instance) deployment | The username and password for both an admin user, e.g., `SYSTEM`, and a user for OBaaS, e.g., `OBAAS_USER`. | -| Any other type of deployment | The username and password for both an admin user, e.g., `SYSTEM`, and a user for OBaaS, e.g., `OBAAS_USER`, and the connection details for your database (host, port, service name). | + + + + + + + + + + + + + + + + + + + + + +
Type of deploymentInformation you will need
Autonomous AI Database (including Globally Distributed)The OCID of your database, your OCI CLI or SDK configuration details, including your private key, and the password for your ADMIN user.
In-cluster (Single Instance) deploymentThe username and password for both an admin user, e.g., SYSTEM, and a user for OBaaS, e.g., OBAAS_USER.
Any other type of deploymentThe username and password for both an admin user, e.g., SYSTEM, and a user for OBaaS, e.g., OBAAS_USER, and the connection details for your database (host, port, service name).
Ensure that you review the installation documentation and the instructions in the example `values.yaml` file provided for your specific type of database deployment and provide the necessary configuration information. Also, ensure that you create Kubernetes secrets with your database credentials if required for your chosen deployment option. @@ -96,7 +113,7 @@ Note that most components also have additional configuration, and some have opti The OBaaS Helm charts include most components by depending on those components' public Helm charts. This means that any customization option provided in those charts is available for your use. See the [version-pinned dependent Helm chart references](./chart-references.md) for the README and complete values file for each dependency bundled with OBaaS 2.1.1. -For example, the [APISIX Helm chart README](https://github.com/apache/apisix-helm-chart/blob/apisix-2.16.0/charts/apisix/README.md) and [values.yaml](https://github.com/apache/apisix-helm-chart/blob/apisix-2.16.0/charts/apisix/values.yaml) provide the configuration options for the APISIX version bundled with this release. +For example, the [APISIX Helm chart README](https://github.com/apache/apisix-helm-chart/blob/apisix-2.17.0/charts/apisix/README.md) and [values.yaml](https://github.com/apache/apisix-helm-chart/blob/apisix-2.17.0/charts/apisix/values.yaml) provide the configuration options for the APISIX version bundled with this release. If you wish to use a customization option from a dependent chart, you may specify it under the key/section for that chart in the appropriate `values.yaml`. For example, suppose you wanted to change the admin port for APISIX. In the documentation for the APISIX Helm chart, you notice they provide a field called `apisix.admin.port` for this purpose. You can include this in the `values.yaml` for the `obaas` Helm chart under the `apisix` key, as follows: diff --git a/docs-source/site/docs/setup/helm/prereqs.md b/docs-source/site/docs/setup/helm/prereqs.md index 0a8d53ea8..edef7b04a 100644 --- a/docs-source/site/docs/setup/helm/prereqs.md +++ b/docs-source/site/docs/setup/helm/prereqs.md @@ -64,9 +64,20 @@ You must have access to an Oracle Database instance (19c or later). The followin **Version requirements:** -| Minimum | Recommended | -|---------|-------------| -| Oracle Database 19c | Oracle Autonomous Database 26ai ATP | + + + + + + + + + + + + + +
MinimumRecommended
Oracle Database 19cOracle Autonomous Database 26ai ATP
:::info[AI Features] To use OBaaS AI capabilities, you must use Oracle Database 26ai or later. Earlier versions do not support AI features. diff --git a/docs-source/site/docs/upgrade/index.mdx b/docs-source/site/docs/upgrade/index.mdx index f84892ab9..7c1a473cf 100644 --- a/docs-source/site/docs/upgrade/index.mdx +++ b/docs-source/site/docs/upgrade/index.mdx @@ -3,134 +3,208 @@ title: Upgrade sidebar_position: 0 --- -export const OBAAS_VERSION = '2.1.1'; - -This page documents how to upgrade to OBaaS version {OBAAS_VERSION} from earlier versions. - -:::warning[Important] -Before performing any upgrade, we recommend that you make a backup of your environment. +export const OBAAS_VERSION = '27.1.0'; + +Upgrade OBaaS 2.0.0 or later to {OBAAS_VERSION} in this order: +prepare values → update prerequisite CRDs → upgrade prerequisites → update +Envoy CRDs → upgrade the application. + +:::warning[Observability data] +The two-step procedure below is for installations where data loss is acceptable. +It does not create backups or intentionally erase data. For backup and preservation, +follow [SigNoZ's ClickHouse upgrade guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/) +and validate your recovery point first. Do not use `destructive-replace` for this +in-place upgrade or downgrade ClickHouse against upgraded data volumes. ::: -## Upgrading from OBaaS 2.0.0 +## 1. Prepare charts and values -OBaaS {OBAAS_VERSION} is an optional patch release. Upgrading an existing -OBaaS release replaces SigNoZ rather than migrating it. +Run the commands from the repository root with chart dependencies prepared. +Use the local charts for in-development releases; published charts must have an +`appVersion` matching the target release. -The replacement permanently deletes all existing SigNoZ telemetry, dashboards, -users, alerts, ClickHouse data, and ZooKeeper data. It does not affect the -application database or other OBaaS services. +Keep the existing release names, namespaces, database secrets, enabled components, +and registry settings. Use complete values files for both charts. Export the +saved overrides if needed, and protect the files because they may contain secrets: -This release has no in-place or data-preserving SigNoZ upgrade path. Users who -need to preserve historical observability data must follow SigNoZ's own -migration documentation; that migration path is not provided by OBaaS -{OBAAS_VERSION}. - -The general process is as follows: +```bash +umask 077 +helm get values -n -o yaml > prereqs-values.yaml +helm get values -n -o yaml > app-values.yaml +``` -- Get the new Helm charts for OBaaS {OBAAS_VERSION} -- Review your configuration (`values.yaml` files) -- Perform the prerequisite and application Helm upgrades. If SigNoZ is enabled, - the application upgrade must explicitly acknowledge the destructive SigNoZ - replacement. +## 2. Update prerequisite CRDs -The following sections provide more detail. +Apply only the enabled operators' CRDs. These changes require cluster-admin +access and affect the whole cluster. Preserve stored API versions; resolve +ownership conflicts without deleting CRDs or using `--force-conflicts`. -### Get the new Helm charts +### Strimzi -If you installed a previous version (2.0.0 or later) you should already have the Helm repository configured. -If you do not, you can configure it by running this command: +Check every Strimzi CRD's `status.storedVersions`. If any still contains +`v1beta2`, back up its resources and complete the Java 21 +[Strimzi v1 API migration](https://strimzi.io/docs/operators/1.2.0/deploying.html#assembly-upgrade-str) +before applying the 1.2.0 bundle. Continue only when all store `v1`. -``` -helm repo add obaas https://oracle.github.io/microservices-backend/helm +```bash +kubectl apply \ + -f https://github.com/strimzi/strimzi-kafka-operator/releases/download/1.2.0/strimzi-crds-1.2.0.yaml + +kubectl wait --for=condition=Established --timeout=5m \ + crd/kafkas.kafka.strimzi.io \ + crd/kafkaconnects.kafka.strimzi.io \ + crd/strimzipodsets.core.strimzi.io \ + crd/kafkatopics.kafka.strimzi.io \ + crd/kafkausers.kafka.strimzi.io \ + crd/kafkanodepools.kafka.strimzi.io \ + crd/kafkabridges.kafka.strimzi.io \ + crd/kafkaconnectors.kafka.strimzi.io \ + crd/kafkamirrormaker2s.kafka.strimzi.io \ + crd/kafkarebalances.kafka.strimzi.io ``` -Then, pull the new charts from the Helm repository using this command: +### Oracle Database Operator -``` -helm repo update -``` +:::warning[Older release-managed CRDs] +Inspect `helm get manifest -n `. +If it contains Oracle CRDs, back up their definitions and resources, then use a +transition chart to add `helm.sh/resource-policy: keep` to the old CRD templates. +Verify retention in the saved release manifest before upgrading. Annotating only +the live CRDs is insufficient. Follow `CRD-MIGRATION.md` in the operator archive +below. Recreating a deleted CRD does not restore its custom resources. +::: -To see a list of charts available in the repository, use this command: +Extract the target CRDs and replace the bundled namespace with the namespace +hosting the operator and its certificate: +```bash +OBAAS_CRD_WORKDIR=$(mktemp -d) +tar -xzf helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz \ + -C "$OBAAS_CRD_WORKDIR" \ + oracle-database-operator/crds oracle-database-operator/CRD-MIGRATION.md + +# Replace the bundled namespace with the actual operator namespace. +for crd_file in "$OBAAS_CRD_WORKDIR"/oracle-database-operator/crds/*.yaml; do + sed 's/oracle-database-operator-system//g' \ + "$crd_file" > "$crd_file.tmp" + mv "$crd_file.tmp" "$crd_file" +done + +kubectl apply --server-side --field-manager=helm \ + -f "$OBAAS_CRD_WORKDIR/oracle-database-operator/crds" +kubectl wait --for=condition=Established --timeout=5m \ + -f "$OBAAS_CRD_WORKDIR/oracle-database-operator/crds" ``` -helm search repo obaas + +## 3. Upgrade prerequisites + +```bash +helm upgrade helm/infra-charts/obaas-prereqs \ + -n \ + -f \ + --wait --timeout 30m ``` -Note that the "APP VERSION" shown in the output is the version of OBaaS itself. +Continue when Helm reports `deployed`, the operators are ready, and the database +operator CRD configuration Job completed. -### Review your configuration +## 4. Update Envoy Gateway CRDs -Before upgrading, you should review your existing configuration. If you no longer have the `values.yaml` file that -you used to install your environment, you can obtain the current configuration using this command (adjusted to match -your chart name and namespace): +When Envoy Gateway is enabled and this installation manages its CRDs, apply the +bundled Envoy and Gateway API definitions (Gateway API `v1.6.1`, experimental): -``` -helm get all obaas-prereqs -n obaas-system -helm get all obaas -n obaas +```bash +kubectl apply --server-side --field-manager=helm -R \ + -f helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds +kubectl wait --for=condition=Established --timeout=5m \ + -R -f helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds ``` -You should carefully review your configuration and ensure your new `values.yaml` files (one for each chart) maintain your settings and customizations. -In particular, check the following: +If the provider or another installation owns these CRDs, coordinate the update +with that owner and keep `gateway-helm.crds.enabled=false`. -- Make sure you have set `enabled: true` for all existing components that you wish to keep -- Make sure that secret names are correct for your environment, especially secrets with database credentials -- Make sure that any custom images or private registry configuration is maintained -- Check the configuration for any new components introduced in the target release -- Remove the configuration for any components which are no longer included in the target release +## 5. Upgrade the application -### Perform the Helm upgrade +### Upgrade SigNoZ and ClickHouse in two steps -You can perform the prerequisite upgrade using a command similar to this. -Ensure that you use the correct chart name and namespace and your customized -`values.yaml` file: +Skip the first pass if ClickHouse already runs `25.12.5`. If SigNoZ is disabled, +use the normal Helm upgrade at the end of this section. -``` -helm upgrade --install obaas-prereqs -n obaas-system obaas/obaas-prereqs -f values.yaml [--debug] +**First pass: upgrade ClickHouse with migration and dashboard reconciliation disabled.** The migration is a +`pre-upgrade` hook, so it otherwise runs against the old ClickHouse server. +Keep the current SigNoZ and collector tags; these example tags match OBaaS 2.1.0: + +```bash +helm upgrade helm/infra-charts/obaas \ + -n \ + -f \ + --set signoz.telemetryStoreMigrator.enabled=false \ + --set signoz.setup.enabled=false \ + --set signoz.clickhouse.image.tag=25.12.5 \ + --set signoz.signoz.image.tag=v0.113.0 \ + --set signoz.otelCollector.image.tag=v0.144.1 \ + --wait --timeout 30m ``` -If SigNoZ is disabled, perform the normal application-chart upgrade: +Use your currently running tags for other starting versions. This pass also +applies other application-chart changes. Keep the same complete values file, +release, and namespace for both passes. -``` -helm upgrade --install obaas -n obaas obaas/obaas -f values.yaml [--debug] -``` +`signoz.setup.enabled=false` skips the OBaaS setup hook, including dashboard +reconciliation. The current hook uses the V2 dashboard API, which the retained +older SigNoZ version does not support. Keep it disabled only for the first pass; +other Helm hooks remain enabled. -If SigNoZ is enabled, use the replacement procedure in -[Replace SigNoZ during upgrade](../observability/upgrade/index.md): +Verify ClickHouse is healthy and the running server reports `25.12.5` before +continuing (configure client authentication if required): ```bash -helm upgrade obaas helm/infra-charts/obaas \ - -n obaas \ - --timeout 30m \ - -f values.yaml \ - --set signozUpgrade.mode=destructive-replace \ - --set signozUpgrade.confirmDataLoss=true +kubectl get pods -n \ + -l clickhouse.altinity.com/chi=-clickhouse +kubectl exec -n -c clickhouse -- \ + clickhouse-client --query 'SELECT version()' ``` -Use the complete values file for the installed release and adjust the release, -namespace, chart path, and values-file path for your environment. +**Second pass: upgrade SigNoZ and the collector with migration enabled.** -If these destructive-replace settings are omitted when upgrading an existing -release, Helm fails before changing any OBaaS resources. Fresh installations do -not require these settings. +```bash +helm upgrade helm/infra-charts/obaas \ + -n \ + -f \ + --set signoz.telemetryStoreMigrator.enabled=true \ + --set signoz.setup.enabled=true \ + --set signoz.telemetryStoreMigrator.upgradeHelmHooks=true \ + --set signoz.clickhouse.image.tag=25.12.5 \ + --set signoz.signoz.image.tag=v0.142.1 \ + --set signoz.otelCollector.image.tag=v0.144.10 \ + --wait --timeout 30m +``` -## Upgrading from versions before OBaaS 2.0.0 +Do not leave the migrator or setup hook disabled. The second pass re-enables +dashboard reconciliation against the upgraded SigNoZ API. Setting only `upgradeHelmHooks=false` still +runs a migration Job and does not provide this ordering. -OBaaS versions before 2.0.0 did not use Helm charts for installation. +**Without SigNoZ**, use: -In-place upgrades are not supported when the existing release is pre-2.0.0. You must use an out-of-place upgrade to upgrade from a release before 2.0.0 -to 2.0.0 or a later release. +```bash +helm upgrade helm/infra-charts/obaas \ + -n \ + -f \ + --wait --timeout 30m +``` -### Out-of-place upgrade +## 6. Verify + +```bash +helm status -n +kubectl get pods,jobs,pvc -n +``` -To perform an out-of-place upgrade, you must install a new OBaaS environment at the target version, with your desired configuration and customizations, -and then migrate your data and applications to the new environment. +Confirm Helm reports `deployed`, pods are ready, PVCs are bound, database +initialization completed, and the enabled application endpoints work. With +SigNoZ enabled, confirm migration/setup Jobs completed and new telemetry appears. -The following data should be considered for migration: -- database secrets, including bindings -- config data from properties table -- dashboard customizations -- custom resource definitions, e.g., coherence or kafka cluster definitions +## Versions before OBaaS 2.0.0 -Note that upgrading will in most cases mean moving to a newer version of each component. As we update components to keep up with the -latest versions, and to manage security vulnerabilities, sometimes an incompatible ("breaking") API change will be required. -If you are upgrading to a new release, you may need to upgrade you application code or configuration to adjust to these changes. +In-place upgrades are unsupported. Install a new environment and migrate your +application data, database secrets, configuration, dashboards, and custom resources. diff --git a/docs-source/site/docusaurus.config.ts b/docs-source/site/docusaurus.config.ts index 735ce8ed3..178cabf17 100644 --- a/docs-source/site/docusaurus.config.ts +++ b/docs-source/site/docusaurus.config.ts @@ -51,7 +51,7 @@ const config: Config = { { docs: { sidebarPath: './sidebars.ts', - lastVersion: '2.1.1', + lastVersion: '2.1.2', // Please change this to your repo. // Remove this to remove the "edit this page" links. // editUrl: @@ -85,7 +85,7 @@ const config: Config = { }, { type: 'docsVersionDropdown', - versions: ['current', '2.1.1', '2.1.0', '2.0.0'] + versions: ['current', '2.1.2', '2.1.1', '2.1.0', '2.0.0'] }, { href: 'https://github.com/oracle/microservices-backend', diff --git a/docs-source/site/package-lock.json b/docs-source/site/package-lock.json index 5bb87964d..bb43b6770 100644 --- a/docs-source/site/package-lock.json +++ b/docs-source/site/package-lock.json @@ -44,46 +44,46 @@ } }, "node_modules/@algolia/abtesting": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.25.0.tgz", - "integrity": "sha512-rSTin9Uta23uaewYVQEp8XI9T3iA/zrg0/1G2vhf8oFFDxFL5vybnZ5IQwsVAg4JpKxPX4/WYNKdcfWrZymk7w==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.21.2.tgz", + "integrity": "sha512-uXj0rgk30EpsKvOpuS+R+1XFDrnm56hED1Lz56e8uBkZdKCxw99LS2U8eXBqAHYU8kpkbsnV1GC8velBG070Hg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.19.10", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.10.tgz", - "integrity": "sha512-K8uQ5iZCCMeqqE0JxjvcxJzDFuqZC1LTGJvR2P76ofDoOdKTs6jqoNxG5MnhzlTkNfE98VOQjcrg7qLxXPpT7g==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.9.tgz", + "integrity": "sha512-4U2JKLMWlDu0CotYyUkWakDxr8AIav3QtIUXXRpfavYN29aVWfzlwJp9T0rPKEf/dO2QCPAUc0Kq1Tj1GJxo2A==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.19.10", - "@algolia/autocomplete-shared": "1.19.10" + "@algolia/autocomplete-plugin-algolia-insights": "1.19.9", + "@algolia/autocomplete-shared": "1.19.9" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.19.10", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.10.tgz", - "integrity": "sha512-zy/cYkMKEDdT4ns/SZC6by99qaIzLCTtckPw7cTe8BMPepwXjjQdhRyBCk2CJodMQc4Ktb0zJrt2YxTtMYa4Gg==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.9.tgz", + "integrity": "sha512-6mExC6X7762s2SV3eJy3QOkB8bdMmnUhQ2agvGVDuzwoGyr3PquGSY/0vPQXCfiAiCaXUz1rXn+lwghgSi0l0w==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.19.10" + "@algolia/autocomplete-shared": "1.19.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.19.10", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.10.tgz", - "integrity": "sha512-vGJ2MDLgDOK3k256ks6t8u07bX4jdRQ0B/8MuRjjcvGTveVWwOU5lNd564uyuuqPMXQITl03HJx/juMtIFcQRw==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.9.tgz", + "integrity": "sha512-YosP9Uoek6y/Ur1r1qeogk4biMe/hzkyNcgMCciw0//3XpCM7VlYLSHnyt/vOnEOGhCCc0+3v+unEiH6zz+Z1A==", "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -91,99 +91,99 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.59.0.tgz", - "integrity": "sha512-bm2XN0hCSMYwStSsCBT0/PUB2BDxoyR1Lnub3c392HMEy9bi8PUSW8vR6zltVEKWG2t4PQFWMD5C07bmJxGgPg==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.55.2.tgz", + "integrity": "sha512-y7Epol8HcjlBxKXHhyhfFPFhm78B3P6x9cCbCyGTdxjsdVCptXCy5hpkZWxjGpnaLHvWsHS4QRF0TiBOLst2xg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.59.0.tgz", - "integrity": "sha512-XOFPOTa69WuqHR6c5tMgnUUwwqQgNSzMpxmhrgA9KmxRf8WIqEa0cokHJvohk5CYb7CZx0xeSL6Bk2IUJ7Lv7Q==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.55.2.tgz", + "integrity": "sha512-8Pxj2VVmpM2d+UZufnlTq7T1QIcYPVugLV5XC50PnHsV5uRM9CSoYkg2Y+CwqwRk2La0xK5QsfZ0obIU+9XftQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.59.0.tgz", - "integrity": "sha512-PC8ipLOYFKRTfIUY1J3FJxS6ryzWziaXmIX9/sNMoUR8L+XhF7hX2QAeUI87YVl5zujvlYTSOb+HAIqKXDjyHQ==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.55.2.tgz", + "integrity": "sha512-9L4IpIYUqA63a7sw1trnHQGUvwiAjKz67nsgDnal98JGAc7wyposRb0Iag+eiMuyzFFaSHLe2/rGyIo+PafRBA==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.59.0.tgz", - "integrity": "sha512-yFNcCMM5fHiyoR0HuxMrzy+VjDcmhFUZTm2IJ2DHwGsVH3B5SEob4zTmeEZ3j/AZqNnmrJOCKl/tJnBg7+84bA==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.55.2.tgz", + "integrity": "sha512-ZBm2ytY5EHFcj+kjNsXxMNO/TGlOHe2fBFXGKHJOM1bk1rAy4o2YI+d9oV/w/jrqx44pvJMJlc8X6vKnCuDgUQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.59.0.tgz", - "integrity": "sha512-GYja6HkDt2VrQhWmB2cLx3Z5fDwI9no7q+xwCWcFrTPm5CLH9QZvK0XLO9co1FcNIDxxkMaP3AXM39/XcecEOg==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.55.2.tgz", + "integrity": "sha512-3FGVW/jDk7sdYwqa2NKnF/qXWcttc4bvGrwNbvqz3VoWSRv42CNvRk+3Y9QJFIUf1vY50hAuVWUoFKdyc8vaXA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.59.0.tgz", - "integrity": "sha512-Wofg7bMpWh8N5qDDZs0wy6whc+KMmdNsxgrIGp9Ug2s1Bka0uq7AjyckdxReKPHLA0Q1qH8X/SNh0wn2t2X2Lw==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.55.2.tgz", + "integrity": "sha512-JsG8LovDAYul5t8e533tZ3O1uZILxso5zsTtB7ONc5RJ8ACdTxAAC/jaOnsBNYb+x+STP7fzx/Iro55v5DNgoQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.59.0.tgz", - "integrity": "sha512-fHnALZfbEnODczGk14Y/1YBRApp6UEpZUTexGcMUPzY7RDc7q4HN2Y6jh0KUG8Jo9B+q+wOoQEc3ziR0ErbuFg==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.55.2.tgz", + "integrity": "sha512-5wDnoIfC75zJ2MSHv5SSzTlRL2z7jQMbqQ5jrzottuq2p3oBObv8pD/JpXWu8pRaimaxNr3/Bs/KZIGVXxJ7hg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" @@ -196,81 +196,81 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.59.0.tgz", - "integrity": "sha512-Fa38s1mHgoaLCT117sfJ6P78rtxUt93CYxBYpq1VOIcslaF+cH+1h5uikAPsKfxLnsuEDZHiBiaI6eNPTsQMRA==", + "version": "1.55.2", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.55.2.tgz", + "integrity": "sha512-da+SC6ikpza98W7C5ChsKEQDvZc8PQLQ0sxmQ5yMRsHpdD3iPKnclJA6ViB5Nr5T9qOX+IDswC6AyqY4V3rtug==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.59.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.59.0.tgz", - "integrity": "sha512-NyNsRSqM2tF1MX7ZGw/j4rduoEJiQ5wfvbSo/CFVdEzYCjyxbGFRPOZyS/GETJG9rk1TdHOq8NZqKqk/u1fm4g==", + "version": "1.55.2", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.55.2.tgz", + "integrity": "sha512-Y8kEcPqCiIEeaGv83l9RRA09mfYECqAJHNnOyEtZc9UirI6XBMUyFVss/sSeYUiV/Lf30hkbWcl00V1uXsf86Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.59.0.tgz", - "integrity": "sha512-nXBK2uygWtvbCOffMWqqfjjcEtp9enDKY5/2Pw/Hhw8VVaOyK2ThbGK04bNX/Le+qoK1VHYkodWGVTKfw0Otkw==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.55.2.tgz", + "integrity": "sha512-5zmobuCQqFZkx+84Nt+suL7vo6jTh2CfAs2ndDSeTS2QHvnzP8YEEGWtWftjyACI0cK/FuH8urWwCHP+d2j8TA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "@algolia/client-common": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.59.0.tgz", - "integrity": "sha512-yb+4afX/zja8QwX0KmV4/ae2kyYkRknsE79CRusYS2U5D8qwn2wq0cn1x12f3tm3F3+5FgmDdbuGdQTuCLSKMQ==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.55.2.tgz", + "integrity": "sha512-qnGUUuWG66dRMnr33owLsrYIh9fHVxtU4R2rd3SpneAHuoAUcGbDOWNrj05glVU6M8yOqo9gQ22K8zpz0I8Xpg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0" + "@algolia/client-common": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.59.0.tgz", - "integrity": "sha512-Lp52TmpA1QtNmdHzs505Xwf4tgII7RAapkDSF9AAtWIBETcGaTIaXci4Rd9nS6SdaWK1BWTSqAPp5wzh6UN3Ag==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.55.2.tgz", + "integrity": "sha512-lKZ5uhafMvR7dWCJEyuaeyZitid1I3ICx+k0vGf5x/ktdIQvc7bndCiOPpmIDqUmN26FE3jTehkAzSqee95G2Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0" + "@algolia/client-common": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.59.0.tgz", - "integrity": "sha512-YYHLEs5rC6oRTFwT7bJaKBR9NSFzikeVHGAT1ffATmUQzR8XqyhHXjoieAUoR7fBU6I5cfy1FVeh5GoRgriuzA==", + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.55.2.tgz", + "integrity": "sha512-Zc90xvKWUvxcNicvvTO9Pr/hT2TAnkixOIzJm/KMj5Ptm2pKjk71ngTsdkbRtJQvhZ2Kr9N1YdIjLrNHB5P2xw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.59.0" + "@algolia/client-common": "5.55.2" }, "engines": { "node": ">= 14.0.0" @@ -339,13 +339,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -638,12 +638,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.8" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -1244,15 +1244,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz", - "integrity": "sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.29.7", "@babel/helper-plugin-utils": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.8" + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1548,9 +1548,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz", - "integrity": "sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", + "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7" @@ -1638,9 +1638,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz", - "integrity": "sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", + "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.29.7", @@ -1941,9 +1941,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.29.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", - "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1964,17 +1964,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", + "@babel/generator": "^7.29.7", "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", + "@babel/parser": "^7.29.7", "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -1982,9 +1982,9 @@ } }, "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.29.7", @@ -3330,9 +3330,9 @@ } }, "node_modules/@docsearch/core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.7.0.tgz", - "integrity": "sha512-p/9xVKmPDj3FPvMfPf5naVO3Ej8SCbcUugGvx1+8GgkuBNbqxqN2Irx3WLBv8VY0jH7XpRwKWdlmjXLZsmTLsg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.6.3.tgz", + "integrity": "sha512-rUOujwIpxJRgD7+kicVsI3D5sqBvdiRTquzWBpTEXZs8ZXfGbfzpus5HqumaNYTppN2HvH8E2yNuRwYdHJeOlA==", "license": "MIT", "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3352,20 +3352,20 @@ } }, "node_modules/@docsearch/css": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.7.0.tgz", - "integrity": "sha512-Sk5xkdRFeE7PeWjG9l4AfTwdvMfr9wHiwNNCpHXT4v4SNyNMKdHGvEILc31BgaVFGDDNbv5u/a73tofRiwbEZw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz", + "integrity": "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.7.0.tgz", - "integrity": "sha512-x6oedjJ8O8/pIDBsMo5Orca3/6cQCz616/CwthVe68l43mqnj2lrJ9kFQITBqy8hMsS3nWeBWFoVO5dJ1DCFKA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.6.3.tgz", + "integrity": "sha512-Bg2wdDsoQVlNCcEKuEJAU04tvHCqgx8rIu+uIoM4pRtcx3TBKJuXutJik3LTA8LRc9YEyHkrYUrmcC0D7BYf+g==", "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.19.2", - "@docsearch/core": "4.7.0", - "@docsearch/css": "4.7.0" + "@docsearch/core": "4.6.3", + "@docsearch/css": "4.6.3" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3488,6 +3488,42 @@ } } }, + "node_modules/@docusaurus/bundler/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/bundler/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/core": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.2.tgz", @@ -3571,15 +3607,15 @@ } }, "node_modules/@docusaurus/faster": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.10.2.tgz", - "integrity": "sha512-p/5E5/RyHv+QWusJMPN5i3OMJTqTgkhuwzVbB1AReDWTUHXQCmf5mlTFzGiDrWeQWIDOKsuOPn1jJh0s9LUOHA==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.10.1.tgz", + "integrity": "sha512-XTZhE5C1gZ/DaYYMlSk02dwP5vhpQON5QHVz1s3892mSESAywgWanURpXEDAvt4GvGuq7s+XP8rTWHZvfaJmdQ==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.10.2", + "@docusaurus/types": "3.10.1", "@rspack/core": "^1.7.10", - "@swc/core": "^1.15.40", - "@swc/html": "^1.15.40", + "@swc/core": "^1.7.39", + "@swc/html": "^1.13.5", "browserslist": "^4.24.2", "lightningcss": "^1.27.0", "semver": "^7.5.4", @@ -3665,6 +3701,42 @@ "react-dom": "*" } }, + "node_modules/@docusaurus/module-type-aliases/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-content-blog": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.2.tgz", @@ -3700,6 +3772,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-content-docs": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.2.tgz", @@ -3733,6 +3841,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-content-pages": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.2.tgz", @@ -3756,6 +3900,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-css-cascade-layers": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.2.tgz", @@ -3772,6 +3952,42 @@ "node": ">=20.0" } }, + "node_modules/@docusaurus/plugin-css-cascade-layers/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-css-cascade-layers/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-debug": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.2.tgz", @@ -3793,6 +4009,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-google-analytics": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.2.tgz", @@ -3812,7 +4064,43 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/plugin-google-gtag": { + "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.2.tgz", "integrity": "sha512-Vt90nNFhtAChRe9+it1hcHFgFvETdSnOkL5Bma+p6E/yU2tAYrvvyk+gv+LJGM2ZUkyKuKXLRsZ2Lb0bO7+Vog==", @@ -3831,6 +4119,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-google-tag-manager": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.2.tgz", @@ -3850,6 +4174,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-sitemap": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.2.tgz", @@ -3874,6 +4234,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/plugin-svgr": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.2.tgz", @@ -3897,6 +4293,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/plugin-svgr/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/plugin-svgr/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/preset-classic": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.2.tgz", @@ -3927,6 +4359,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/preset-classic/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/theme-classic": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.2.tgz", @@ -3968,6 +4436,42 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, + "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-classic/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/theme-common": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.2.tgz", @@ -4042,16 +4546,16 @@ } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.2.tgz", - "integrity": "sha512-5GiB7h/nFsMFPO9mCqcRNE1yA5TSXXNCshNIgHPL6fCPOjcTDixs6qjQBu8ddkgPcicwCvOA7n3jeK2rGdJk6g==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.1.tgz", + "integrity": "sha512-rYvB7yqkdqWIpAbDzQljGfM4cDBkLTbhmagZBEcsyj6oPUsz47lmW2pYdN1j+7sGFgltbAmQH62xfbrij4Eh6Q==", "dev": true, "license": "MIT" }, "node_modules/@docusaurus/types": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", - "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.1.tgz", + "integrity": "sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -4129,6 +4633,42 @@ "node": ">=20.0" } }, + "node_modules/@docusaurus/utils-common/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/utils-common/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docusaurus/utils-validation": { "version": "3.10.2", "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.2.tgz", @@ -4148,21 +4688,57 @@ "node": ">=20.0" } }, + "node_modules/@docusaurus/utils/node_modules/@docusaurus/types": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", + "license": "MIT", + "dependencies": { + "@mdx-js/mdx": "^3.0.0", + "@types/history": "^4.7.11", + "@types/mdast": "^4.0.2", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.9.2", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.95.0", + "webpack-merge": "^5.9.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/utils/node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@emnapi/core": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", - "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", "license": "MIT", "optional": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.3", + "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", - "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", "license": "MIT", "optional": true, "dependencies": { @@ -4170,9 +4746,9 @@ } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", - "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "license": "MIT", "optional": true, "dependencies": { @@ -4263,9 +4839,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", - "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -4327,13 +4903,13 @@ } }, "node_modules/@jsonjoy.com/fs-core": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.78.0.tgz", - "integrity": "sha512-0YE5XQj383AwNj5fG0Mm1gyx/ViVe2DJzS5FeVbJulw0pteEK9mfbeB0MWH3/ARoXb2AhHHuiiNthdWF0Y6EYQ==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.78.0", - "@jsonjoy.com/fs-node-utils": "4.78.0", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", "thingies": "^2.5.0" }, "engines": { @@ -4348,14 +4924,14 @@ } }, "node_modules/@jsonjoy.com/fs-fsa": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.78.0.tgz", - "integrity": "sha512-V1lUo5k4xUypsfdmvCrrUJ44BCixbgvpus71WI3a3BOQt39bK2LasU/HgpJ1P9or8a2d5mWR3kk26sRoehDlaw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.78.0", - "@jsonjoy.com/fs-node-builtins": "4.78.0", - "@jsonjoy.com/fs-node-utils": "4.78.0", + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", "thingies": "^2.5.0" }, "engines": { @@ -4370,17 +4946,17 @@ } }, "node_modules/@jsonjoy.com/fs-node": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.78.0.tgz", - "integrity": "sha512-AhoKCEEzsTU5C+9pSegNkErrQijvpHj10kzVhaXIxjs/0taxjCCLG7zE+Y+EWCMNCVmgFEyca+oTQQWm2RO+sg==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.78.0", - "@jsonjoy.com/fs-node-builtins": "4.78.0", - "@jsonjoy.com/fs-node-utils": "4.78.0", - "@jsonjoy.com/fs-print": "4.78.0", - "@jsonjoy.com/fs-snapshot": "4.78.0", - "glob-to-regex.js": "^1.3.1", + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", "thingies": "^2.5.0" }, "engines": { @@ -4395,9 +4971,9 @@ } }, "node_modules/@jsonjoy.com/fs-node-builtins": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.78.0.tgz", - "integrity": "sha512-yiyMh9uKnQvRVDYzINP9P2AXZPdHYM2iVsQ/2U2V+g+gfTr4vPcT1Ox0aQs0IIXGQRAnksyA63KSqpOOJ/O3lA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -4411,14 +4987,14 @@ } }, "node_modules/@jsonjoy.com/fs-node-to-fsa": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.78.0.tgz", - "integrity": "sha512-L1e0UgRJ/igqt3JUDJh3z8YXTKqJc9r9MY4ZakEMOqqEDq/C5fmSZDDzq03d7HqdG1rehkmCDpKyXWqQEVpQGw==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-fsa": "4.78.0", - "@jsonjoy.com/fs-node-builtins": "4.78.0", - "@jsonjoy.com/fs-node-utils": "4.78.0" + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" }, "engines": { "node": ">=10.0" @@ -4432,13 +5008,12 @@ } }, "node_modules/@jsonjoy.com/fs-node-utils": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.78.0.tgz", - "integrity": "sha512-Am25+Y/rEFtkJBZCFgs84XPXqeqXq4FvXmCYMZ0bEC/M+vT0e6tHBU4Camp9/Yzuf6NoxaInC3iXIN791wVu9g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-builtins": "4.78.0", - "glob-to-regex.js": "^1.3.1" + "@jsonjoy.com/fs-node-builtins": "4.57.1" }, "engines": { "node": ">=10.0" @@ -4452,12 +5027,12 @@ } }, "node_modules/@jsonjoy.com/fs-print": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.78.0.tgz", - "integrity": "sha512-Uwk0SvDN1X+5FNW3MxibrFVXXUnd0nTUP6qwvPikg3QDeXRiRww91mz34lXYa/xO5eVuUqa1WXmd0ljy1+Ej0w==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-node-utils": "4.78.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", "tree-dump": "^1.1.0" }, "engines": { @@ -4472,13 +5047,13 @@ } }, "node_modules/@jsonjoy.com/fs-snapshot": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.78.0.tgz", - "integrity": "sha512-+HvPGwV1IcXtwFFxMBK5x8rmqBuIkPpEFZMGkO8BolJH+AuSvQGVwvlKulUjQ9KECpN4GTCcgeQtyUvYC8heSA==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", "license": "Apache-2.0", "dependencies": { "@jsonjoy.com/buffers": "^17.65.0", - "@jsonjoy.com/fs-node-utils": "4.78.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", "@jsonjoy.com/json-pack": "^17.65.0", "@jsonjoy.com/util": "^17.65.0" }, @@ -4861,167 +5436,128 @@ } }, "node_modules/@peculiar/asn1-cms": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.9.4.tgz", - "integrity": "sha512-cben7oxmQsUGZqotus7yt0srYdncOT6RNWcTQ77T2RFOXejYVYkXadrfePdRcrVpO9K95IRLKKglG2k38jKXuw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", + "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "@peculiar/asn1-x509-attr": "^2.9.4", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-csr": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.9.4.tgz", - "integrity": "sha512-xd4YN4vpRjkDAQWVfZZkeu12IEND7DOpkqaHSIHxZl1uggUNa9Ju0QxY2jHvDAS9pP0zhRBytg8ifsnGo3V0jw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", + "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-ecc": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.9.4.tgz", - "integrity": "sha512-JJXefFshRAuVAjWQo/39bkg1ywc1VaiO44S8RRC+Ykvf/u2KDmYffoDb0ZBPCR5uJy4AGKQhl8mX+Q8ShcWaXQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", + "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-pfx": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.9.4.tgz", - "integrity": "sha512-khuGzHTzNzk4GDlIBEILyIs6Lce0yn0ZBdoI9v93kmNncfZRhD+AQ5ODFqdhvoE8cMJF/JMTQ8yA+t1D14kqCw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", + "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-cms": "^2.9.4", - "@peculiar/asn1-pkcs8": "^2.9.4", - "@peculiar/asn1-rsa": "^2.9.4", - "@peculiar/asn1-schema": "^2.9.4", - "asn1js": "^3.0.10", + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-rsa": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-pkcs8": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.9.4.tgz", - "integrity": "sha512-duRdotlUx9eDZe6QrQpQKl61RbWykCHBCkKayP8V8XdEFwlKHZ8qGGDMyS6Pye7OX7nLFttTTpRkJeet78ckwQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", + "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-pkcs9": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.9.4.tgz", - "integrity": "sha512-kaL4cNxBpdQE2dKlyZBqz4ygCrwffO+8wfoxTEqM1Z8RadvCeELBRzcv0dzM8aY9azHMwODO5nxU65zXmhToOQ==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-cms": "^2.9.4", - "@peculiar/asn1-pfx": "^2.9.4", - "@peculiar/asn1-pkcs8": "^2.9.4", - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "@peculiar/asn1-x509-attr": "^2.9.4", - "asn1js": "^3.0.10", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", + "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pfx": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-rsa": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.9.4.tgz", - "integrity": "sha512-pZ96eD1PptovcWQ/GSmuNFXd/7EQJNlKfDaNCyE2rx3W0v6QFelkzquVqRSRyyDXXCYD69ZXJDzZ8GhIiQzKoA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", + "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-schema": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", - "integrity": "sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", "license": "MIT", "dependencies": { - "@peculiar/utils": "^2.0.2", - "asn1js": "^3.0.10", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-x509": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.9.4.tgz", - "integrity": "sha512-CxhBo/RdEbMMob7T31ZdQjGuoyRFLVwrDzTn25bihzBasRg9kRm/0IxIPvhgQtcK/9dNcO1XQL2fuPugwELL0Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", + "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/utils": "^2.0.2", - "asn1js": "^3.0.10", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" } }, "node_modules/@peculiar/asn1-x509-attr": { - "version": "2.9.4", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.9.4.tgz", - "integrity": "sha512-ehQXbpQaQYycgu8OrvigwSPTFfVRcu0ECNYCWw+yzBp02Lw5paRqzzhUpfOgO2K38+WfFZuEz/0RPtam5g0OMg==", - "license": "MIT", - "dependencies": { - "@peculiar/asn1-schema": "^2.9.4", - "@peculiar/asn1-x509": "^2.9.4", - "asn1js": "^3.0.10", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@peculiar/utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", - "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", + "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", "license": "MIT", "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", "tslib": "^2.8.1" } }, @@ -5075,9 +5611,9 @@ "license": "ISC" }, "node_modules/@pnpm/npm-conf": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.3.tgz", - "integrity": "sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.2.tgz", + "integrity": "sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==", "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", @@ -5095,27 +5631,27 @@ "license": "MIT" }, "node_modules/@rspack/binding": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.12.tgz", - "integrity": "sha512-f4HHuLbvuld8Ba4iB/4ibse5XrKxFrgmM3S4P2AOKnPlekAFlBjmltCuaTL/W2ggYvILaVY+YcFXrEH1rrKeQA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", + "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.7.12", - "@rspack/binding-darwin-x64": "1.7.12", - "@rspack/binding-linux-arm64-gnu": "1.7.12", - "@rspack/binding-linux-arm64-musl": "1.7.12", - "@rspack/binding-linux-x64-gnu": "1.7.12", - "@rspack/binding-linux-x64-musl": "1.7.12", - "@rspack/binding-wasm32-wasi": "1.7.12", - "@rspack/binding-win32-arm64-msvc": "1.7.12", - "@rspack/binding-win32-ia32-msvc": "1.7.12", - "@rspack/binding-win32-x64-msvc": "1.7.12" + "@rspack/binding-darwin-arm64": "1.7.11", + "@rspack/binding-darwin-x64": "1.7.11", + "@rspack/binding-linux-arm64-gnu": "1.7.11", + "@rspack/binding-linux-arm64-musl": "1.7.11", + "@rspack/binding-linux-x64-gnu": "1.7.11", + "@rspack/binding-linux-x64-musl": "1.7.11", + "@rspack/binding-wasm32-wasi": "1.7.11", + "@rspack/binding-win32-arm64-msvc": "1.7.11", + "@rspack/binding-win32-ia32-msvc": "1.7.11", + "@rspack/binding-win32-x64-msvc": "1.7.11" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.12.tgz", - "integrity": "sha512-rbFprJaJiqrmfy8SHth8EsoRS0wg4bXcucwj9NiMzpGFq14Opw8c04iQ6H9BECYzgmN0PKZ9rh41LdVvhdZe4A==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", "cpu": [ "arm64" ], @@ -5126,9 +5662,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.12.tgz", - "integrity": "sha512-jnOp+/UXOJa9xqUb8KXH03sysoO2e4Ij6tw6MqDdmdj8n/A8PQENRPUbW9AwXpPtVDJPus9r4fi7b3+6e4B8Hg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", "cpu": [ "x64" ], @@ -5139,9 +5675,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.12.tgz", - "integrity": "sha512-C8owWG+yvo7X0oVLIXetkoJhIFBP1LYNcAQqtgLmJnQLQDklGuP83dKC+zISGQWpjawHfZ1ER96vLgoTrxKZdw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", "cpu": [ "arm64" ], @@ -5155,9 +5691,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.12.tgz", - "integrity": "sha512-i51WWI64aRpsfSki6rN0aepPqXkVfS+vZM7+4bWDcmnhUmdMvhIPcYg0QRk3DtyJnu33jqNLM0WHY78k00NyfA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", "cpu": [ "arm64" ], @@ -5171,9 +5707,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.12.tgz", - "integrity": "sha512-MSos0FuPEefqo9V92ULd5hggKG29EkSNg1zDcypy0OkpsKh5pfjVxTLYFXgTcVyFoUQQbdG8zFBzYbwmJ8V4ew==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", "cpu": [ "x64" ], @@ -5187,9 +5723,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.12.tgz", - "integrity": "sha512-JcAMVKXOnjfpC3coWjCFPWD3Yl8RBw6a+IXQQ8mfRlHaHMIiOv8IfZqx15XRxMUn49CtP7Z0Na8iiAg2aKrcfw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", "cpu": [ "x64" ], @@ -5203,9 +5739,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.12.tgz", - "integrity": "sha512-n+ZqP6ZMc0nhOgvadg5VhEs9ojtbES80AcWeFnmGkbzIszvGSO63GKNiRkXtjJ9KFuRzytbbmsCqkUVH+Tywxg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", "cpu": [ "wasm32" ], @@ -5216,9 +5752,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.12.tgz", - "integrity": "sha512-8+h5fYDXYdmugbdfZ+D1y8IQ3rv2EhSfyGP7vBe+bjNyaMa4jWrpucmZbtxojUL1AzaeuHbvMdj9UO/gelk/+g==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", "cpu": [ "arm64" ], @@ -5229,9 +5765,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.12.tgz", - "integrity": "sha512-cDMGwTRSa2p9fNBVe1wTRkF2AEXZ9ARWW36QeC5CkLaI0Ezz8lvhF2+CSOPnhaQ1O1qtn0L0SF+lFnrY+I7xGQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", "cpu": [ "ia32" ], @@ -5242,9 +5778,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.12.tgz", - "integrity": "sha512-wIqFvlgFqrgUyj/6S/FJcvShnkZOmIeXTfqvheLY67MGq8qd8jb1YimQVKAIrmWB3yuJKUFACI3Ag1UBtEedEA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", "cpu": [ "x64" ], @@ -5255,13 +5791,13 @@ ] }, "node_modules/@rspack/core": { - "version": "1.7.12", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.12.tgz", - "integrity": "sha512-6CwFIHlhRmXfZoMj3v9MZ1SMTPBn+cHVXeMIeaGp5sufqinKsISbsqHu6ZMJu2wDSmZLdmQJX6zLxkhcAUlhkQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", + "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", "license": "MIT", "dependencies": { "@module-federation/runtime-tools": "0.22.0", - "@rspack/binding": "1.7.12", + "@rspack/binding": "1.7.11", "@rspack/lite-tapable": "1.1.0" }, "engines": { @@ -5304,9 +5840,9 @@ "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { - "version": "0.27.12", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", - "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -5590,14 +6126,14 @@ } }, "node_modules/@swc/core": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.16.2.tgz", - "integrity": "sha512-95I4kiSMeveI/Mhi+tE4fiWcWLUMfzfKrk0jtr8LRMqHgOgq+xHS+zExkDqoO4b5OeeuXHMWVdD5MeP3X6sULw==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.33.tgz", + "integrity": "sha512-jOlwnFV2xhuuZeAUILGFULeR6vDPfijEJ57evfocwznQldLU3w2cZ9bSDryY9ip+AsM3r1NJKzf47V2NXebkeQ==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.28" + "@swc/types": "^0.1.26" }, "engines": { "node": ">=10" @@ -5607,18 +6143,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.16.2", - "@swc/core-darwin-x64": "1.16.2", - "@swc/core-linux-arm-gnueabihf": "1.16.2", - "@swc/core-linux-arm64-gnu": "1.16.2", - "@swc/core-linux-arm64-musl": "1.16.2", - "@swc/core-linux-ppc64-gnu": "1.16.2", - "@swc/core-linux-s390x-gnu": "1.16.2", - "@swc/core-linux-x64-gnu": "1.16.2", - "@swc/core-linux-x64-musl": "1.16.2", - "@swc/core-win32-arm64-msvc": "1.16.2", - "@swc/core-win32-ia32-msvc": "1.16.2", - "@swc/core-win32-x64-msvc": "1.16.2" + "@swc/core-darwin-arm64": "1.15.33", + "@swc/core-darwin-x64": "1.15.33", + "@swc/core-linux-arm-gnueabihf": "1.15.33", + "@swc/core-linux-arm64-gnu": "1.15.33", + "@swc/core-linux-arm64-musl": "1.15.33", + "@swc/core-linux-ppc64-gnu": "1.15.33", + "@swc/core-linux-s390x-gnu": "1.15.33", + "@swc/core-linux-x64-gnu": "1.15.33", + "@swc/core-linux-x64-musl": "1.15.33", + "@swc/core-win32-arm64-msvc": "1.15.33", + "@swc/core-win32-ia32-msvc": "1.15.33", + "@swc/core-win32-x64-msvc": "1.15.33" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -5630,9 +6166,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.16.2.tgz", - "integrity": "sha512-i/j0HNbnn79qnTVPicvay92Nark8fW8NQqn1e2mGERjUXNpBV0+SwQxlRpk2zBhn6laJ8PDI6Kn1nHZhnz3LCA==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.33.tgz", + "integrity": "sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA==", "cpu": [ "arm64" ], @@ -5646,9 +6182,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.16.2.tgz", - "integrity": "sha512-HrwqHyEyHVXO3qTk8EkNK7/b6sOZSEoNh+pot6RdE5x0LbNqfo8LtJUvi3UTXr+5ja/o5HbJdW80eCXo+NjbiA==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.33.tgz", + "integrity": "sha512-/Il4QHSOhV4FekbsDtkrNmKbsX26oSysvgrRswa/RYOHXAkwXDbB4jaeKq6PsJLSPkzJ2KzQ061gtBnk0vNHfA==", "cpu": [ "x64" ], @@ -5662,9 +6198,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.16.2.tgz", - "integrity": "sha512-MdXi83Z/gGp1LIrg+h7HKxiul/z/Bty/ZJSvYAFqDl9zteC1XLSAZdScquKtXPp50rdyXqritTDCqQBhwVfZKA==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.33.tgz", + "integrity": "sha512-C64hBnBxq4viOPQ8hlx+2lJ23bzZBGnjw7ryALmS+0Q3zHmwO8lw1/DArLENw4Q18/0w5wdEO1k3m1wWNtKGqQ==", "cpu": [ "arm" ], @@ -5678,9 +6214,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.16.2.tgz", - "integrity": "sha512-/jcTmK6Ktz3owM3YtiKvjofV6p3VpHnYzTIrOGwDIOsDigRAAVuZ8east33wYO/7UTdKYFlyHNnJNT0WJqOA3Q==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.33.tgz", + "integrity": "sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw==", "cpu": [ "arm64" ], @@ -5697,9 +6233,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.16.2.tgz", - "integrity": "sha512-4gFarKaFnlJTSlJYKmMhV4u+3YE4uYfiydpBoYjmgQhCf9lAieOq+WilZaK9vVSHeqLuQpTEiGULZqAdsRX5Dw==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.33.tgz", + "integrity": "sha512-il7tYM+CpUNzieQbwAjFT1P8zqAhmGWNAGhQZBnxurXZ0aNn+5nqYFTEUKNZl7QibtT0uQXzTZrNGHCIj6Y1Og==", "cpu": [ "arm64" ], @@ -5716,9 +6252,9 @@ } }, "node_modules/@swc/core-linux-ppc64-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.16.2.tgz", - "integrity": "sha512-syqSLGd6KlZ1PciNzs6bIUlhOuFztZufebOHaERjc4N4SqNZxyqYd4I+jj/EfOYnpe0kNjccn9HJLN1p5dz3+w==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.33.tgz", + "integrity": "sha512-ZtNBwN0Z7CFj9Il0FcPaKdjgP7URyKu/3RfH46vq+0paOBqLj4NYldD6Qo//Duif/7IOtAraUfDOmp0PLAufog==", "cpu": [ "ppc64" ], @@ -5735,9 +6271,9 @@ } }, "node_modules/@swc/core-linux-s390x-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.16.2.tgz", - "integrity": "sha512-ZBBLK+ewGyXLzWeMS7wbKtWBdnif6etn7xvPY/iOfbdsjX/+bgkp1pQt2lWF2wlu2hXYZuhJ/tHZE/QR8/apzg==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.33.tgz", + "integrity": "sha512-De1IyajoOmhOYYjw/lx66bKlyDpHZTueqwpDrWgf5O7T6d1ODeJJO9/OqMBmrBQc5C+dNnlmIufHsp4QVCWufA==", "cpu": [ "s390x" ], @@ -5754,9 +6290,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.16.2.tgz", - "integrity": "sha512-LyHJgxCA4Tje0ysBMbEb0tt/ie8kgUKoFE3JAKFhpevmTmhYEoC0H9s47WuDsqiFckF1ITUguZIXJG6K5e0dvg==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.33.tgz", + "integrity": "sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw==", "cpu": [ "x64" ], @@ -5773,9 +6309,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.16.2.tgz", - "integrity": "sha512-PghXJlVM1cgtLfNUR1vxFo1z+PDRAe8cWAJlZZ7spmeiN7BospGXg/MHUg7oNSgwSX7Zo//YKv9P5yD9apsFJQ==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.33.tgz", + "integrity": "sha512-hj628ZkSEJf6zMf5VMbYrG2O6QqyTIp2qwY6VlCjvIa9lAEZ5c2lfPblCLVGYubTeLJDxadLB/CxqQYOQABeEQ==", "cpu": [ "x64" ], @@ -5792,9 +6328,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.16.2.tgz", - "integrity": "sha512-StTOSefYBxemvNYYUI3UmO1a8y+hSPjjfHogC2TEHL+Z1PlEBim/XtLas5rS04jAzT9RrNmbtX911SZ42H9jSQ==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.33.tgz", + "integrity": "sha512-GV2oohtN2/5+KSccl86VULu3aT+LrISC8uzgSq0FRnikpD+Zwc+sBlXmoKQ+Db6jI57ITUOIB8jRkdGMABC29g==", "cpu": [ "arm64" ], @@ -5808,9 +6344,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.16.2.tgz", - "integrity": "sha512-fycER209DYIzsibpTMC+chND05OfOjgztWL9U8OE6/uUlsOUZH3eh98isBLEnOymYUhlJLEt5++W1+KL/FOh5Q==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.33.tgz", + "integrity": "sha512-gtyvzSNR8DHKfFEA2uqb8Ld1myqi6uEg2jyeUq3ikn5ytYs7H8RpZYC8mdy4NXr8hfcdJfCLXPlYaqqfBXpoEQ==", "cpu": [ "ia32" ], @@ -5824,9 +6360,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.16.2.tgz", - "integrity": "sha512-cSd1z6ivSrJPVr+moVwOHWjeKy6TpO4/Shwcv5KCrKYXCccxwh4pRy1C3fDioNx2PF1jPZWHKZjtXt+Be9VbaQ==", + "version": "1.15.33", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.33.tgz", + "integrity": "sha512-d6fRqQSkJI+kmMEBWaDQ7TMl8+YjLYbwRUPZQ9DY0ORBJeTzOrG0twvfvlZ2xgw6jA0ScQKgfBm4vHLSLl5Hqg==", "cpu": [ "x64" ], @@ -5846,9 +6382,9 @@ "license": "Apache-2.0" }, "node_modules/@swc/html": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html/-/html-1.16.2.tgz", - "integrity": "sha512-RmWH8m5dePWDFpHpmFKquZCRe5SyD/Sb0FBPxWcWv/tsjtlJl6oHeaxBsTL2edvaHuW385Fy5nPuTjDD/a+GEA==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html/-/html-1.16.13.tgz", + "integrity": "sha512-zBkWXiksdWdFkM46CQuMoJiq1Wic5Kj9SWPazxHHgXZyjdaTESAkmLPt3AKp80qQPTmXk4hE4CKvva+Ls0t5Rg==", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -5857,24 +6393,24 @@ "node": ">=14" }, "optionalDependencies": { - "@swc/html-darwin-arm64": "1.16.2", - "@swc/html-darwin-x64": "1.16.2", - "@swc/html-linux-arm-gnueabihf": "1.16.2", - "@swc/html-linux-arm64-gnu": "1.16.2", - "@swc/html-linux-arm64-musl": "1.16.2", - "@swc/html-linux-ppc64-gnu": "1.16.2", - "@swc/html-linux-s390x-gnu": "1.16.2", - "@swc/html-linux-x64-gnu": "1.16.2", - "@swc/html-linux-x64-musl": "1.16.2", - "@swc/html-win32-arm64-msvc": "1.16.2", - "@swc/html-win32-ia32-msvc": "1.16.2", - "@swc/html-win32-x64-msvc": "1.16.2" + "@swc/html-darwin-arm64": "1.16.13", + "@swc/html-darwin-x64": "1.16.13", + "@swc/html-linux-arm-gnueabihf": "1.16.13", + "@swc/html-linux-arm64-gnu": "1.16.13", + "@swc/html-linux-arm64-musl": "1.16.13", + "@swc/html-linux-ppc64-gnu": "1.16.13", + "@swc/html-linux-s390x-gnu": "1.16.13", + "@swc/html-linux-x64-gnu": "1.16.13", + "@swc/html-linux-x64-musl": "1.16.13", + "@swc/html-win32-arm64-msvc": "1.16.13", + "@swc/html-win32-ia32-msvc": "1.16.13", + "@swc/html-win32-x64-msvc": "1.16.13" } }, "node_modules/@swc/html-darwin-arm64": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.16.2.tgz", - "integrity": "sha512-SNBUxkxLBXD0ATwnOG1rF8mpSrRtFDfqWnEUmbm/g4KwmCt7NuHHv9YYqA3lqfq90Ucc+Xlk7afx8KAW/utz4A==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.16.13.tgz", + "integrity": "sha512-ah+W37P6vvbR3778r1f2ES4UJ3VUeHF1OMyCMsMUsxScHfjusP2xTK1ND1NTFLE5/uqZvniFZ0FTKezmasw5mw==", "cpu": [ "arm64" ], @@ -5888,9 +6424,9 @@ } }, "node_modules/@swc/html-darwin-x64": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-1.16.2.tgz", - "integrity": "sha512-WVBgn6yrBPMZu+DL95/XGAXYcgd1nhd67Ml1UjMtFoFMVKY+VRpCq8JpTZTMXhWbVoRENUHk+3PHu0nNjlE/Fg==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-1.16.13.tgz", + "integrity": "sha512-vnWXBHUuvEUt+SUXjWP059RXJNxrTESuhjWSN7DHVGzekCWGftdayzz08/iouVDwVP1xpc+KjnONcF1JDjiieg==", "cpu": [ "x64" ], @@ -5904,9 +6440,9 @@ } }, "node_modules/@swc/html-linux-arm-gnueabihf": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.16.2.tgz", - "integrity": "sha512-V9F/Akd2TXrf5nUhdLgdy3FoVFxQbw8pA2AOyqnEOa2Mbm1R7DZJJ0GdShEMcoyMyMDB9r/4pWuWfxNtP4mFHA==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.16.13.tgz", + "integrity": "sha512-AeJETHDNjpQ/h0H3eenCvUXmSeix5DFKAdqVPQqOYjL6HSNZ3dJTjz/sr8aKIJLznYs5Cc/jRTc0KxvjjwqSAQ==", "cpu": [ "arm" ], @@ -5920,9 +6456,9 @@ } }, "node_modules/@swc/html-linux-arm64-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.16.2.tgz", - "integrity": "sha512-jonZVtHc6BesMjC/muUEJGzE1L2kVdgiPVuHc7CL79MrUm0Hjf8LS4Wmtjqe2bLTfRcaMfaYl/60ZcRXHCaYSQ==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.16.13.tgz", + "integrity": "sha512-N0rho3bbFSva00yZQTfsmzOQFZEu+QP27O4Z4dSKi1Ix2tn2LH3xh/osMymXvC3JvN5cOMpfcnXxgxam1sOWBA==", "cpu": [ "arm64" ], @@ -5939,9 +6475,9 @@ } }, "node_modules/@swc/html-linux-arm64-musl": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.16.2.tgz", - "integrity": "sha512-dvki9/sgacHk9ouORmnIok5FbpeE9zUE8yqGGhL1kitNJi6/TKzfnMOpRxSxeDk1/ccvJTAdjRGDIGkT45+b3Q==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.16.13.tgz", + "integrity": "sha512-VsU3rBE25ex5C3JNx9vGvj8crHCEnwL1peKW200sNTCOTTMFaCAHCKjq5ws/oUlq+XqAEGoFkOgZ18TEyNLz4g==", "cpu": [ "arm64" ], @@ -5958,9 +6494,9 @@ } }, "node_modules/@swc/html-linux-ppc64-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-ppc64-gnu/-/html-linux-ppc64-gnu-1.16.2.tgz", - "integrity": "sha512-6m0vVWHl9MW7cmWKVgKlFW6yhRv0uahMEaDxNIvXrPC3LdbbiiYZui+ryhyQGIYeVps3OMujzUjc0GihNz/afQ==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-ppc64-gnu/-/html-linux-ppc64-gnu-1.16.13.tgz", + "integrity": "sha512-pBbdxUM0TtBMCD5saaPI7G0pqiaFOGcED1cNBzXnsb1YA8gHWJzm0UtY/AhKEkBcw0E8JJBewMw5zHO59xCEeQ==", "cpu": [ "ppc64" ], @@ -5977,9 +6513,9 @@ } }, "node_modules/@swc/html-linux-s390x-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-s390x-gnu/-/html-linux-s390x-gnu-1.16.2.tgz", - "integrity": "sha512-TOlz6wgKyZjg4THJsNZfDz/rAMO+rBa0s2eewTeHEfuJhI+jGu7H6Co6bdbMpN3oyDvTMG7N1f1ktSbkE0erAg==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-s390x-gnu/-/html-linux-s390x-gnu-1.16.13.tgz", + "integrity": "sha512-6Qp/l/3P2MQFwX4TCUfw4gSJZSBVhKHtFuw1rYIJw9ffyLuBRvn7+hqo33KU0EDRYqIp9uH0AUhWq08/oFNGFQ==", "cpu": [ "s390x" ], @@ -5996,9 +6532,9 @@ } }, "node_modules/@swc/html-linux-x64-gnu": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.16.2.tgz", - "integrity": "sha512-5EduoVpsnuAAkG9BW8COxcIKAe5swgNAEo+BVkAJCOy1ZMZm0krQYBdvlaDCsGGE9yLDKVPm7rpYIi7vTTZTbA==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.16.13.tgz", + "integrity": "sha512-7iPcqY2kZArBRZigMmHUz9U3Z7uMePOsy7XkYEGhRrWfWx6n/90slerhaytLMYCYTZMIhrpAqT9KVkIygW6sUg==", "cpu": [ "x64" ], @@ -6015,9 +6551,9 @@ } }, "node_modules/@swc/html-linux-x64-musl": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.16.2.tgz", - "integrity": "sha512-c0Z84dvBd0oh1ZcBHnM18itmvJFLbCZBKFF2lEDHsGBSLQ/1sPbggEKsVO4KgWkkhwQV2l9AB4jnsw1HrwZJCg==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.16.13.tgz", + "integrity": "sha512-pSVH8LfTAuEsu5CeKbynl5FQTFAa06Lc/k51iMKvCmVJeuqRf3NCtuU3WxPAWv0BhU2wDIU7sY9Gfq9osEN8KQ==", "cpu": [ "x64" ], @@ -6034,9 +6570,9 @@ } }, "node_modules/@swc/html-win32-arm64-msvc": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.16.2.tgz", - "integrity": "sha512-Aq7V2B5gS23X59DzV2z892c4NBHYtJbwhvsCjJN1MBMx723htjgNE9KVIJp9dQaJBr2PrNfb/u3QFwnWV2tAoQ==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.16.13.tgz", + "integrity": "sha512-ahGzL7v5ZgKP9C/WalQB6ebPV0CRpNylRBuEzEkyMmXPb8EkMUvRT0lgiR8PmdTlecjcA03njyCdxtTVZUEcJA==", "cpu": [ "arm64" ], @@ -6050,9 +6586,9 @@ } }, "node_modules/@swc/html-win32-ia32-msvc": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.16.2.tgz", - "integrity": "sha512-9gslPcsfXxKvAZtOvDkxGuEbM7lqBrONzLAyRsyUtw8KxFcSYkGIO48RDTstGWOkgTgKjjAq/WWqt9qr/NcE3A==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.16.13.tgz", + "integrity": "sha512-qsQBRIXusSxXNOWBTHAZdkgasU56NDolKxx1enaWT3IPKsHyAPaVmQt4vV4Htf8nsYmLj6C7Ad97hjnQzawBCg==", "cpu": [ "ia32" ], @@ -6066,9 +6602,9 @@ } }, "node_modules/@swc/html-win32-x64-msvc": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.16.2.tgz", - "integrity": "sha512-Kdb4VdC8FyF5s1MQaFUNeASLckHECrb/oYy/6OCtU+hbgxQ/o/JCgE4uCe8YAg0LCWSOjhx73PCZDGwPf1TpKw==", + "version": "1.16.13", + "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.16.13.tgz", + "integrity": "sha512-D6ScrzmTFhvcLWwzIXjtzrYSuPR+QyRzwJXl4cHin5wvc2E+ljRhIiXcmdUOcexJu4RRWuEmugRGom7abs3xsw==", "cpu": [ "x64" ], @@ -6082,9 +6618,9 @@ } }, "node_modules/@swc/types": { - "version": "0.1.28", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz", - "integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==", + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -6103,9 +6639,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", - "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "license": "MIT", "optional": true, "dependencies": { @@ -6159,10 +6695,30 @@ "@types/ms": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", - "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -6187,9 +6743,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", - "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -6199,9 +6755,9 @@ } }, "node_modules/@types/hast": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", - "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -6280,9 +6836,9 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", - "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "license": "MIT" }, "node_modules/@types/mime": { @@ -6298,12 +6854,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.5.1.tgz", - "integrity": "sha512-CzNm2FezW4VR/LjG6yUdiEgLE/rAQ9Slj5gCu/C2VrdcW7I0ahNZ8DRbHT7zOZ6r3ONgd/bsQIeSaoDGrd1C6g==", + "version": "25.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", + "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", "license": "MIT", "dependencies": { - "undici-types": "~8.9.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/prismjs": { @@ -6313,9 +6869,9 @@ "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.15.1", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", - "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", "license": "MIT" }, "node_modules/@types/range-parser": { @@ -6325,9 +6881,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.3.0.tgz", - "integrity": "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg==", + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -6459,9 +7015,9 @@ "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha512-1mEZtMKPM09vDmQt5y7YvmN2+DFTP7Tg0EWXdic8/C6VRnpb33e4ghisCIE3WZjsE2N8mf+QV1Zqh7ZFYLWInQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, "node_modules/@webassemblyjs/ast": { @@ -6666,9 +7222,9 @@ } }, "node_modules/acorn": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz", - "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6677,6 +7233,18 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6721,9 +7289,9 @@ } }, "node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6737,9 +7305,9 @@ } }, "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -6766,34 +7334,34 @@ } }, "node_modules/algoliasearch": { - "version": "5.59.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.59.0.tgz", - "integrity": "sha512-wUXzaeI7B526W4y1gFg3lcxgDZ67XSgRJIiellYWOas/pLpO7rOtxm9Gr2E/C8aiSDXIgx1q5TdSsvK67Uakqw==", - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.25.0", - "@algolia/client-abtesting": "5.59.0", - "@algolia/client-analytics": "5.59.0", - "@algolia/client-common": "5.59.0", - "@algolia/client-insights": "5.59.0", - "@algolia/client-personalization": "5.59.0", - "@algolia/client-query-suggestions": "5.59.0", - "@algolia/client-search": "5.59.0", - "@algolia/ingestion": "1.59.0", - "@algolia/monitoring": "1.59.0", - "@algolia/recommend": "5.59.0", - "@algolia/requester-browser-xhr": "5.59.0", - "@algolia/requester-fetch": "5.59.0", - "@algolia/requester-node-http": "5.59.0" + "version": "5.55.2", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.55.2.tgz", + "integrity": "sha512-OyacJsaeuLUvGWOynNqYc6sx88XvyoG39wMT8SYqL3l9wwaorDW/LPRbUPfhzw0bWsUWzNCZTnFYOrWFBKsUaw==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.21.2", + "@algolia/client-abtesting": "5.55.2", + "@algolia/client-analytics": "5.55.2", + "@algolia/client-common": "5.55.2", + "@algolia/client-insights": "5.55.2", + "@algolia/client-personalization": "5.55.2", + "@algolia/client-query-suggestions": "5.55.2", + "@algolia/client-search": "5.55.2", + "@algolia/ingestion": "1.55.2", + "@algolia/monitoring": "1.55.2", + "@algolia/recommend": "5.55.2", + "@algolia/requester-browser-xhr": "5.55.2", + "@algolia/requester-fetch": "5.55.2", + "@algolia/requester-node-http": "5.55.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.29.3", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.3.tgz", - "integrity": "sha512-gVOMbbPVrCO3Xs+B+BLAIGFqIQow6qHMTYCEeBqLQB9m4ZmKUqMwkEumlal2iyyezHEd4Y0FvFTLbCRutCutIQ==", + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.2.tgz", + "integrity": "sha512-SaV+rZM3drExb0punEYYjT+sNcH74YFwN8ocjya7IDOyQvKWeQpEaSMVG3+IGTVos+feuatj7ljQ4BXlXdUp3w==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -6917,13 +7485,13 @@ } }, "node_modules/asn1js": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", - "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", "license": "BSD-3-Clause", "dependencies": { "pvtsutils": "^1.3.6", - "pvutils": "^1.1.5", + "pvutils": "^1.1.3", "tslib": "^2.8.1" }, "engines": { @@ -6940,9 +7508,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.6.0.tgz", - "integrity": "sha512-A26d6qs9kqGgkmImIXMYvXTzqb4Qv7AVgpY1NXzr9Y659J8qHHnLOO/zE8ewIGFMprOolAoRAQYDgNryXIJKBw==", + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.2.tgz", + "integrity": "sha512-rD5t5DwOjJdmSORcTq64j8MawTC+tbQ+HHqjR4NDumamy/ambn1UJrlKL+KdwujWxMkFjPM3pPHOEA9tl4767Q==", "funding": [ { "type": "opencollective", @@ -6959,8 +7527,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.9", - "caniuse-lite": "^1.0.30001810", + "browserslist": "^4.28.4", + "caniuse-lite": "^1.0.30001799", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -7066,9 +7634,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.11.23", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.23.tgz", - "integrity": "sha512-le521dGVfxM7yRX0EikCoSz+rOK+hHzdDt/E7mG1jOJB/6WAAUuwVroLwaB7ApaUsz5Q0kFlDXLSA9MheUIfRQ==", + "version": "2.11.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.21.tgz", + "integrity": "sha512-uh8vpY/1/YyFkunIDFH/12p7/7VdPKA1hejMVEbdkEaWnUz0Hesvx5EbiU6XxjyHZIOju+ZMbQJkRh+es3/spQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -7146,16 +7714,32 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/bonjour-service": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.4.tgz", - "integrity": "sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -7213,9 +7797,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.9.tgz", - "integrity": "sha512-EWazOblFYUvlGZcfGhPUPmYh3nikUxBVb+y9MJun5f3hBi812X+8MSQTujLBtgK3cf51fJWbWfOjyeO954d+Eg==", + "version": "4.28.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.8.tgz", + "integrity": "sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==", "funding": [ { "type": "opencollective", @@ -7232,11 +7816,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.11.20", - "caniuse-lite": "^1.0.30001810", - "electron-to-chromium": "^1.5.420", - "node-releases": "^2.0.54", - "update-browserslist-db": "^1.3.2" + "baseline-browser-mapping": "^2.11.12", + "caniuse-lite": "^1.0.30001809", + "electron-to-chromium": "^1.5.402", + "node-releases": "^2.0.53", + "update-browserslist-db": "^1.3.0" }, "bin": { "browserslist": "cli.js" @@ -8002,29 +8586,23 @@ } }, "node_modules/core-js": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.50.0.tgz", - "integrity": "sha512-BRWgOLKkFeCgRudR6zrs8p9XJZcE14grzKMMssoYrk6krtuEZ7MTKPIY5RzOnqsEKIR9kst7wNzphttraT+Yqw==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", + "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", "hasInstallScript": true, "license": "MIT", - "engines": { - "node": "*" - }, "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.50.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.50.0.tgz", - "integrity": "sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz", + "integrity": "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==", "license": "MIT", "dependencies": { - "browserslist": "^4.28.7" - }, - "engines": { - "node": ">=6.4.0" + "browserslist": "^4.28.1" }, "funding": { "type": "opencollective", @@ -8359,9 +8937,9 @@ } }, "node_modules/cssdb": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.11.0.tgz", - "integrity": "sha512-VzY/8kcK5M8oCVr/cwh24J8XVlCOITpmzCizKBC28o7Z1s23MMojXoJ3q7a+TQQoMKvxC3YlG0Z9yU10kJF1uQ==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz", + "integrity": "sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw==", "funding": [ { "type": "opencollective", @@ -8604,9 +9182,9 @@ } }, "node_modules/default-browser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", - "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -8910,9 +9488,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.427", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.427.tgz", - "integrity": "sha512-n14zb3FdsChZ2BNobqNHAJMcP3ifFv4paox2LvCrfVAQcqGiSURgbJl+PfMpHVCNFkStnNc+RRVtPBTVW5PDgw==", + "version": "1.5.420", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz", + "integrity": "sha512-2yD6XreGusOfNV+dUcvipJEXc3n/n7fgr7996aszTG+YY5E4mqM4tOq/3uhP129cazL9YHbVWSpc79ePotWtPA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -8956,13 +9534,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.25.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.25.1.tgz", - "integrity": "sha512-nGXts5znJzmWPu+mIE9izCOzdg63oJca2mDzGWWTth7sr4aCToKcoyFVBQwN75Ij5Pf6p510EwkTqViTRzDV+w==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", + "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.3.3" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -9008,15 +9586,15 @@ } }, "node_modules/es-module-lexer": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz", - "integrity": "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -9096,6 +9674,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/estree-util-attach-comments": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", @@ -9136,9 +9757,9 @@ } }, "node_modules/estree-util-scope": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.1.tgz", - "integrity": "sha512-B0np3dcdxqILX5e9nEi5/Fr4K7gL4oYFVPV1zRa2e9wRCbQoZZNWOZFYyoInvXUPJXBXjss+QXlWLJChDEHDkA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", + "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -9280,14 +9901,14 @@ } }, "node_modules/express": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.3.tgz", - "integrity": "sha512-Bdcs4+3qlpVlx2NRn6fgX2Ue2/gGRaPeawebgclM0ERSCqDpA+owF1fdPwjJUTAJWMTuAaxjDf+hzb0/4eKvvw==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "~1.20.5", + "body-parser": "~1.20.3", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", @@ -9304,9 +9925,9 @@ "methods": "~1.1.2", "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.13", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "~6.16.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", @@ -9430,9 +10051,9 @@ "license": "BSD-3-Clause" }, "node_modules/fastq": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz", - "integrity": "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -9699,9 +10320,9 @@ } }, "node_modules/fs-extra": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", - "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "version": "11.3.6", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.6.tgz", + "integrity": "sha512-w8ZNZr2mKIc7qeNaQ9AVPT1+iFaI+Avd4xudVOvdDJ8VytREi1Ft5Ih7hd9jjehod8vAM5GMsfQ/TpPf4EyoEA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -9818,9 +10439,9 @@ } }, "node_modules/glob-to-regex.js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.3.1.tgz", - "integrity": "sha512-zhWhMRsgnOym+1txhUmYJGD6eUsbUdrZv55gCYKuJX8t2p3+M8My23PD09bEIsreGUs5pnSa/idmcfp2/IlqGg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -9833,6 +10454,12 @@ "tslib": "2" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -10302,9 +10929,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz", - "integrity": "sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA==", + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz", + "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==", "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -10321,7 +10948,7 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x || 2.x", + "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" }, "peerDependenciesMeta": { @@ -10629,9 +11256,9 @@ } }, "node_modules/ipaddr.js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz", - "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", "license": "MIT", "engines": { "node": ">= 10" @@ -10830,9 +11457,9 @@ } }, "node_modules/is-network-error": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", - "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", "license": "MIT", "engines": { "node": ">=16" @@ -11186,9 +11813,9 @@ } }, "node_modules/lightningcss": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", - "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", "license": "MPL-2.0", "dependencies": { "detect-libc": "^2.0.3" @@ -11201,23 +11828,23 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-android-arm64": "1.33.0", - "lightningcss-darwin-arm64": "1.33.0", - "lightningcss-darwin-x64": "1.33.0", - "lightningcss-freebsd-x64": "1.33.0", - "lightningcss-linux-arm-gnueabihf": "1.33.0", - "lightningcss-linux-arm64-gnu": "1.33.0", - "lightningcss-linux-arm64-musl": "1.33.0", - "lightningcss-linux-x64-gnu": "1.33.0", - "lightningcss-linux-x64-musl": "1.33.0", - "lightningcss-win32-arm64-msvc": "1.33.0", - "lightningcss-win32-x64-msvc": "1.33.0" + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" } }, "node_modules/lightningcss-android-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", - "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", "cpu": [ "arm64" ], @@ -11235,9 +11862,9 @@ } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", - "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", "cpu": [ "arm64" ], @@ -11255,9 +11882,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", - "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", "cpu": [ "x64" ], @@ -11275,9 +11902,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", - "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", "cpu": [ "x64" ], @@ -11295,9 +11922,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", - "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", "cpu": [ "arm" ], @@ -11315,9 +11942,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", - "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", "cpu": [ "arm64" ], @@ -11338,9 +11965,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", - "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", "cpu": [ "arm64" ], @@ -11361,9 +11988,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", - "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ "x64" ], @@ -11384,9 +12011,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", - "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ "x64" ], @@ -11407,9 +12034,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", - "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" ], @@ -11427,9 +12054,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", - "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" ], @@ -11464,6 +12091,19 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -12018,22 +12658,22 @@ } }, "node_modules/memfs": { - "version": "4.78.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.78.0.tgz", - "integrity": "sha512-gX14RGPP+fyNodL8g9jc5DfKtWNCronEMItOKDyZatTI3CPpMZDPtm7rAbftDqQAFovP4nzR0RO80sESSEnI4g==", + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/fs-core": "4.78.0", - "@jsonjoy.com/fs-fsa": "4.78.0", - "@jsonjoy.com/fs-node": "4.78.0", - "@jsonjoy.com/fs-node-builtins": "4.78.0", - "@jsonjoy.com/fs-node-to-fsa": "4.78.0", - "@jsonjoy.com/fs-node-utils": "4.78.0", - "@jsonjoy.com/fs-print": "4.78.0", - "@jsonjoy.com/fs-snapshot": "4.78.0", + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", - "glob-to-regex.js": "^1.3.1", + "glob-to-regex.js": "^1.0.1", "thingies": "^2.5.0", "tree-dump": "^1.0.3", "tslib": "^2.0.0" @@ -12041,6 +12681,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/merge-descriptors": { @@ -12511,9 +13154,9 @@ "license": "MIT" }, "node_modules/micromark-extension-gfm-table": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.2.tgz", - "integrity": "sha512-pRzm4kDTu0MjlmBkxmS9yYhw60nncfcEwu9NNdPFSQEFXS95ZKyIIyTSHu/o3ReBUrLKYEq+7YaXCRn/bPB4MA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", + "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -13974,107 +14617,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimizer-webpack-plugin": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.10.1.tgz", - "integrity": "sha512-+dsZEyTcy1lkq41lxdiOqvb26gXbYGgwY+30w37f9PqUVkuEBejBLDotsHOTjuga9xJyGLW2DqzKDUyJ4W/PMQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.31", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.3", - "terser": "^5.51.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@minify-html/node": { - "optional": true - }, - "@napi-rs/image": { - "optional": true - }, - "@swc/core": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "@swc/html": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "cssnano": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "html-minifier-terser": { - "optional": true - }, - "imagemin": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "postcss": { - "optional": true - }, - "sharp": { - "optional": true - }, - "svgo": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/mrmime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", @@ -14104,9 +14646,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.19", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.19.tgz", - "integrity": "sha512-Y2tUNy4ouw6tq5oDSKeQYGOyhkUBhNOcGV/02KC+6kd9eDGqdZd++mjMiIDilrBYvjEnCYvVtsuHCuP+okSfug==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", @@ -14130,6 +14672,12 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", @@ -14156,9 +14704,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.55", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.55.tgz", - "integrity": "sha512-mIrE/Cw9y+9Au6dS5vDKDhQza9YvG6w+ZrS6X+ZzA7yFW/soAeaups4Qzn1bL6g5FVy8WtP79+0j82oPIbqRjQ==", + "version": "2.0.54", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.54.tgz", + "integrity": "sha512-YHs7BmmcsdAI5Ozuf8JZo6PT0mv2GIWC9vMfvUC3dp65M8hn7Ux8CPL+2oBI7juNuj9d0ndhTcznq2ODBps9cQ==", "license": "MIT", "engines": { "node": ">=18" @@ -14754,9 +15302,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.25", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.25.tgz", + "integrity": "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==", "funding": [ { "type": "opencollective", @@ -14773,7 +15321,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -16288,9 +16836,9 @@ } }, "node_modules/property-information": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", - "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", "funding": { "type": "github", @@ -16363,22 +16911,21 @@ } }, "node_modules/pvutils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", - "integrity": "sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", "license": "MIT", "engines": { "node": ">=16.0.0" } }, "node_modules/qs": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", - "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "license": "BSD-3-Clause", "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -16492,24 +17039,24 @@ } }, "node_modules/react": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", - "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", - "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", "dependencies": { - "scheduler": "^0.28.0" + "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.3.0" + "react": "^19.2.4" } }, "node_modules/react-fast-compare": { @@ -17259,18 +17806,18 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", - "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" } }, "node_modules/scheduler": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", - "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/schema-dts": { @@ -17280,14 +17827,14 @@ "license": "Apache-2.0" }, "node_modules/schema-utils": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.5.0.tgz", - "integrity": "sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.15", - "ajv": "^8.20.0", - "ajv-formats": "^3.0.1", + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" }, "engines": { @@ -17338,9 +17885,9 @@ } }, "node_modules/semver": { - "version": "7.8.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -17928,9 +18475,9 @@ } }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", - "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -18083,13 +18630,10 @@ } }, "node_modules/svg-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.1.0.tgz", - "integrity": "sha512-bwLf38YmY+TDYHJw1Ex0Co8c4yeXuJAo8YnXGZrscxrvYoVVIvLeniEkV1Ks/54VteMnL4FtyN1+P+TZJdUPmQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" }, "node_modules/svgo": { "version": "3.3.5", @@ -18139,9 +18683,9 @@ } }, "node_modules/tapable": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", - "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", "license": "MIT", "engines": { "node": ">=6" @@ -18152,9 +18696,9 @@ } }, "node_modules/terser": { - "version": "5.51.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.51.2.tgz", - "integrity": "sha512-bWnjSNscmuI+GJze6ZupnHP8G/cTcsJF+bXCeQknk2SHQsgbNJnLrqiH9jZ2W4STPVXH2mDKKRX3iwPhc9Cn/Q==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -18170,9 +18714,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", - "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", + "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -18191,39 +18735,12 @@ "webpack": "^5.1.0" }, "peerDependenciesMeta": { - "@minify-html/node": { - "optional": true - }, "@swc/core": { "optional": true }, - "@swc/css": { - "optional": true - }, - "@swc/html": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "cssnano": { - "optional": true - }, - "csso": { - "optional": true - }, "esbuild": { "optional": true }, - "html-minifier-terser": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "postcss": { - "optional": true - }, "uglify-js": { "optional": true } @@ -18265,9 +18782,9 @@ "license": "MIT" }, "node_modules/thingies": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", - "integrity": "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", "license": "MIT", "engines": { "node": ">=10.18" @@ -18467,9 +18984,9 @@ } }, "node_modules/undici-types": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", - "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { @@ -18655,9 +19172,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.3.tgz", - "integrity": "sha512-pJ2sYawQS0R/WI928Gj5GlPhTGzbMelq0+4INtSYNDV9ErKJcX6xjGWkoG/VnB3dpUm00zALaqkrUD77pO5TDQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", + "integrity": "sha512-UQ+MSxlhRm1bzjhU+DcuXfjFO1FzNtqhK5+9Yvlp90ItDLk5vT932A0rFu619nf7RVS+Y/VeaUW1jaRDqZ8VJw==", "funding": [ { "type": "opencollective", @@ -18898,7 +19415,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -18962,11 +19478,12 @@ } }, "node_modules/watchpack": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", - "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "license": "MIT", "dependencies": { + "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { @@ -18993,28 +19510,36 @@ } }, "node_modules/webpack": { - "version": "5.111.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.111.0.tgz", - "integrity": "sha512-A2R74kfE6b3eLKS91iZiol03Ebx7avmJJBOyiP+4LePW9NNeNJGQkKeSQos4dk6R4H0YAMYlv+aOrs1CyWT3eA==", + "version": "5.105.4", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.4.tgz", + "integrity": "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==", "license": "MIT", "dependencies": { + "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.16.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.25.0", - "es-module-lexer": "^2.1.0", + "enhanced-resolve": "^5.20.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "mime-db": "^1.54.0", - "minimizer-webpack-plugin": "^5.7.0", - "schema-utils": "^4.5.0", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", "tapable": "^2.3.0", - "watchpack": "^2.5.2", - "webpack-sources": "^3.5.1" + "terser-webpack-plugin": "^5.3.17", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" @@ -19068,9 +19593,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.6.tgz", - "integrity": "sha512-yBWCMvIfUmuhAE8vdqUKzH0vg9kuWN0KeG4vBnqRplUFHRU7lMQjkiJWxVQzvo2BTewqhPhDlMB41rAt2jVA9A==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", "license": "MIT", "dependencies": { "colorette": "^2.0.10", @@ -19122,16 +19647,12 @@ } }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", - "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-server": { @@ -19222,9 +19743,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.21.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -19257,19 +19778,31 @@ } }, "node_modules/webpack-sources": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", - "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", + "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, "engines": { "node": ">= 0.6" } @@ -19378,9 +19911,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", - "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "license": "MIT", "engines": { "node": ">=12" @@ -19429,9 +19962,9 @@ } }, "node_modules/ws": { - "version": "7.5.13", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", - "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.11.tgz", + "integrity": "sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==", "license": "MIT", "engines": { "node": ">=8.3.0" diff --git a/docs-source/site/src/components/HomepageFeatures/index.tsx b/docs-source/site/src/components/HomepageFeatures/index.tsx index 7b7683850..f807327ae 100644 --- a/docs-source/site/src/components/HomepageFeatures/index.tsx +++ b/docs-source/site/src/components/HomepageFeatures/index.tsx @@ -43,7 +43,11 @@ function Feature({title, Svg, description}: FeatureItem) { return (
- +
{title} diff --git a/docs-source/site/versioned_docs/version-2.1.2/OBaaS-Architecture.png b/docs-source/site/versioned_docs/version-2.1.2/OBaaS-Architecture.png new file mode 100644 index 000000000..aa7cb6b35 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/OBaaS-Architecture.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/deploy/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/deploy/_category_.json new file mode 100644 index 000000000..fd3cebaa2 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/deploy/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Deploy Apps", + "position": 3, + "link": { + "type": "doc", + "id": "deploy/overview" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/deploy/deploy.md b/docs-source/site/versioned_docs/version-2.1.2/deploy/deploy.md new file mode 100644 index 000000000..1f7f0316d --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/deploy/deploy.md @@ -0,0 +1,620 @@ +--- +title: Deploying an Application to OBaaS +sidebar_position: 5 +--- + +This guide walks through deploying an application to Oracle Backend for Microservices and AI (OBaaS). It covers each step from creating container repositories through exposing services via the API gateway. + +The steps below are generic — replace placeholder values like `my-app`, `my-service`, and `mydb` with values appropriate to your application. + +## Prerequisites + +Before you begin, ensure the following tools are installed and configured: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ToolPurposeVerify
JavaBuild application JARsjava -version
MavenBuild and packagemvn --version
DockerBuild and push container imagesdocker ps
kubectlInteract with Kubernetes clusterkubectl cluster-info
HelmDeploy applications to Kuberneteshelm version
OCI CLIManage OCI resources (if using OCIR)oci --version
+ +Additional requirements: + +- `JAVA_HOME` must be set and point to your Java installation +- Docker daemon must be running +- kubectl must be connected to the target cluster (`kubectl config current-context`) +- OBaaS platform must already be installed in your target namespace + +:::tip +If you are using OCI Container Registry (OCIR), configure the OCI CLI first: + +```bash +oci setup config +``` + +The registry URL is derived from your OCI region and namespace: `.ocir.io/`. +::: + +## Step 1: Create Container Repositories + +Each microservice needs a container repository to store its image. Create one repository per service in your container registry of choice — OCI Container Registry (OCIR), Amazon ECR, Azure Container Registry, Google Artifact Registry, Docker Hub, GitHub Container Registry, or any Docker V2-compatible registry. Use your provider's CLI or console to create the repositories, then authenticate Docker with `docker login`. The registry URL format varies by provider; consult your provider's documentation for the correct path. The rest of this guide works the same regardless of which registry you use. + +The example below shows how to create repositories in OCI Container Registry. Adapt to your registry as needed. + +```bash +# Set your variables +COMPARTMENT="my-compartment" +PREFIX="my-app" + +# Get your compartment OCID +COMPARTMENT_OCID=$(oci iam compartment list --all \ + --compartment-id-in-subtree true \ + --query "data[?name=='${COMPARTMENT}'].id | [0]" \ + --raw-output) + +# Create a repository for each service +for SERVICE in service1 service2 service3; do + oci artifacts container repository create \ + --compartment-id "$COMPARTMENT_OCID" \ + --display-name "${PREFIX}/${SERVICE}" \ + --is-public true +done +``` + +After creating the repositories, authenticate Docker to your registry: + +```bash +docker login +``` + +## Step 2: Build and Push Container Images + +### Configure JKube in Your pom.xml + +The `obaas-sample-app` Helm chart expects a standard container image. Use [Eclipse JKube](https://eclipse.dev/jkube/) to build and push images with Maven. + +Add the JKube plugin to each service's `pom.xml`: + +```xml + + org.eclipse.jkube + kubernetes-maven-plugin + 1.18.2 + + + + + ${image.registry}/${project.artifactId}:${project.version} + + ghcr.io/oracle/openjdk-image-obaas:21 + + dir + /deployments + + java -jar /deployments/${project.artifactId}-${project.version}.jar + + + + + +``` + +Replace the `` value with your registry path. The `${image.registry}` property can be passed on the command line with `-Dimage.registry=...`. + +### Build Dependencies + +If your project has shared modules (parent POM, common libraries, build tools), install them to your local Maven repository first: + +```bash +# Install parent POM +mvn clean install -N + +# Install shared modules (adjust module names to your project) +mvn clean install -pl common +``` + +### Build and Push + +```bash +# Set your registry path +REGISTRY=".ocir.io//my-app" + +# Build the JAR +mvn clean package -DskipTests -pl my-service + +# Build the container image +mvn org.eclipse.jkube:kubernetes-maven-plugin:build \ + -pl my-service \ + -Dimage.registry=$REGISTRY + +# Push to registry +mvn org.eclipse.jkube:kubernetes-maven-plugin:push \ + -pl my-service \ + -Dimage.registry=$REGISTRY +``` + +Or combine build and push in a single command: + +```bash +mvn clean package k8s:build k8s:push \ + -DskipTests \ + -pl my-service \ + -Dimage.registry=$REGISTRY +``` + +:::tip +To build and push all services at once, pass a comma-separated list to `-pl`: + +```bash +mvn clean package k8s:build k8s:push \ + -DskipTests \ + -pl service1,service2,service3 \ + -Dimage.registry=$REGISTRY +``` + +::: + +## Step 3: Create Database Secrets + +If your application connects to an Oracle database, you need to create Kubernetes secrets containing the database credentials. The Helm chart uses these secrets to configure datasource environment variables and to run a database initialization job. + +### Secret Naming Convention + +The Helm chart expects secrets following this naming pattern: + + + + + + + + + + + + + + + + + + + + + +
SecretPurposeKeys
{dbname}-db-priv-authnPrivileged credentials (for creating users, Liquibase)username, password, service
{dbname}-{service}-db-authnApplication credentials (per service)username, password, service
+ +### Create the Privileged Secret + +The privileged secret must exist before deploying. It is typically created during OBaaS platform setup. If it does not exist, create it manually: + +```bash +kubectl -n create secret generic -db-priv-authn \ + --from-literal=username=ADMIN \ + --from-literal=password='' \ + --from-literal=service=_tp +``` + +The `service` value is the TNS service name for your database (for example, `mydb_tp`). + +### Create Application Secrets + +Create a secret for each distinct database user your application needs. Services that share a schema can share a secret. + +```bash +kubectl -n create secret generic --db-authn \ + --from-literal=username= \ + --from-literal=password='' \ + --from-literal=service=_tp +``` + +:::info[Oracle Password Requirements] +Oracle database passwords must meet the following rules: + +- 12–30 characters +- At least two uppercase letters, two lowercase letters, two digits, and two special characters (`#` or `_`) +- Cannot start with a digit or special character +- Cannot contain the username + +Oracle usernames are stored as uppercase by default. +::: + +### Verify Secrets + +```bash +# List all database secrets +kubectl get secrets -n | grep db-authn + +# View a secret's keys (not values) +kubectl describe secret --db-authn -n + +# Decode a specific value +kubectl get secret --db-authn -n \ + -o jsonpath='{.data.password}' | base64 -d +``` + +## Step 4: Deploy with Helm + +### Add the Helm Repository + +The `obaas-sample-app` Helm chart is published in the OBaaS Helm repository: + +```bash +helm repo add obaas https://oracle.github.io/microservices-backend/helm +helm repo update +``` + +Verify the chart is available: + +```bash +helm search repo obaas/obaas-sample-app +``` + +### Identify the OBaaS Release Name + +The Helm chart needs to know the OBaaS platform release name to derive service endpoints (Eureka, OTEL collector, APISIX, etc.). Find it with: + +```bash +helm list -n +``` + +Look for the release that is **not** an application deployment (i.e., not using the `obaas-sample-app` chart). This is your OBaaS platform release name. + +### Create a values.yaml + +Create a `values.yaml` for each service you want to deploy. Here is a minimal example for a Spring Boot service: + +```yaml +fullnameOverride: "my-service" + +image: + repository: ".ocir.io//my-app/my-service" + tag: "0.0.1-SNAPSHOT" + +obaas: + releaseName: "" + framework: "SPRING_BOOT" + +database: + name: "" + +eureka: + enabled: true + +otel: + enabled: true + +otmm: + enabled: false +``` + +For a Helidon service, set `framework: "HELIDON"` and add the required Helidon values: + +```yaml +obaas: + framework: "HELIDON" + +helidon: + datasource: + name: "myDatasource" # Must match application.yaml + otel: + serviceName: "my-service" +``` + +### Helm Values Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ValueRequiredDescription
image.repositoryYesFull image path (without tag)
image.tagYesImage tag
obaas.releaseNameYesOBaaS platform Helm release name
obaas.frameworkYesSPRING_BOOT or HELIDON
database.nameIf using DBDatabase name (derives secret names and wallet)
database.authN.secretNameNoOverride derived secret name {dbname}-{release}-db-authn
database.aq.enabledNoGrant Advanced Queuing (AQ/JMS) permissions (default: false)
eureka.enabledNoRegister with Eureka service discovery (default: true)
otel.enabledNoEnable OpenTelemetry integration (default: true)
otmm.enabledNoEnable MicroTx LRA distributed transactions (default: false)
service.portNoContainer and service port (default: 8080)
replicaCountNoNumber of pod replicas (default: 1)
+ +### Deploy a Service + +```bash +helm upgrade --install my-service obaas/obaas-sample-app \ + -f values.yaml \ + --namespace \ + --set image.repository=/my-service \ + --set image.tag=0.0.1-SNAPSHOT \ + --set obaas.releaseName= \ + --set database.name= \ + --wait --timeout 5m +``` + +Values passed via `--set` override those in `values.yaml`. This is useful for CI/CD pipelines where the registry and tag vary per build. + +### What Gets Deployed + +For each `helm install`, the chart creates: + +1. **Deployment** — your application pod with framework-aware environment variables (datasource, Eureka, OTEL, LRA) +2. **Service** — a ClusterIP service on port 8080 (default) +3. **DB Init Job** — a Kubernetes Job that runs SQLcl to create the database user if it doesn't already exist. It uses the privileged secret to connect and creates a user matching the application secret credentials. The job retries up to 60 times (10-second intervals) and auto-cleans after 5 minutes. +4. **DB Init ConfigMap** — the SQL script used by the init job. If `database.aq.enabled` is `true`, AQ permissions (`DBMS_AQ`, `DBMS_AQADM`, etc.) are included. + +The database wallet (TLS certificates for Oracle Autonomous Database) is automatically mounted at `/oracle/tnsadmin` from the OBaaS platform's wallet secret. + +### Verify the Deployment + +```bash +# Check pod status +kubectl get pods -n + +# Check service +kubectl get svc -n + +# View pod logs +kubectl logs -n -l app.kubernetes.io/name=my-service + +# Check the db-init job +kubectl get jobs -n + +# Test connectivity via port-forward +kubectl port-forward -n svc/my-service 8080:8080 +curl http://localhost:8080/actuator/health +``` + +### Upgrade and Uninstall + +```bash +# Upgrade (after pushing a new image) +helm upgrade my-service obaas/obaas-sample-app \ + -f values.yaml \ + --namespace \ + --set image.tag=0.0.2-SNAPSHOT \ + --wait --timeout 5m + +# Uninstall +helm uninstall my-service -n +``` + +## Step 5: Create API Gateway Routes + +The OBaaS platform uses [Apache APISIX](https://apisix.apache.org/) as its API gateway. To expose your services externally, create routes that map URI patterns to Eureka service names. + +### Get the APISIX Admin Key + +The admin API key is stored in the APISIX ConfigMap: + +```bash +# Replace with your release name +kubectl get configmap -apisix -n \ + -o jsonpath='{.data.config\.yaml}' | grep -A2 '"admin"' +``` + +Look for the `key:` value under the admin user. + +### Port-Forward to the Admin API + +```bash +kubectl port-forward -n svc/-apisix-admin 9180:9180 & +``` + +### Create a Route + +```bash +ADMIN_KEY="" + +curl http://localhost:9180/apisix/admin/routes/1 \ + -H "X-API-KEY: $ADMIN_KEY" \ + -H "Content-Type: application/json" \ + -X PUT \ + -d '{ + "name": "my-service", + "desc": "My Service", + "uri": "/api/v1/my-service*", + "methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD"], + "upstream": { + "service_name": "MY-SERVICE", + "type": "roundrobin", + "discovery_type": "eureka" + }, + "plugins": { + "opentelemetry": { + "sampler": { + "name": "always_on" + } + }, + "prometheus": { + "prefer_name": true + } + } + }' +``` + +Key fields: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FieldDescription
uriThe URL pattern to match. Use a wildcard suffix (e.g., /api/v1/my-service*).
upstream.service_nameThe Eureka-registered service name (uppercase by default for Spring Boot).
upstream.discovery_typeSet to eureka so APISIX resolves service instances from the Eureka registry.
plugins.opentelemetryEnables distributed tracing through the gateway.
plugins.prometheusEnables Prometheus metrics collection for the route.
+ +### Verify the Route + +```bash +# Test through the gateway +curl http:///api/v1/my-service/health + +# List all routes +curl http://localhost:9180/apisix/admin/routes \ + -H "X-API-KEY: $ADMIN_KEY" | jq '.list[].value.name' +``` + +### Stop Port-Forward + +When done configuring routes, stop the port-forward: + +```bash +kill %1 +``` + +## Summary + +The full deployment flow: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepWhatHow
1Create container repositoriesOCI CLI or registry UI
2Build and push imagesMaven + JKube (k8s:build + k8s:push)
3Create database secretskubectl create secret
4Deploy with Helmhelm upgrade --install with obaas-sample-app chart
5Create API gateway routesAPISIX Admin API via curl
+ +After all steps are complete, your application is accessible through the APISIX gateway at the URI patterns you configured. diff --git a/docs-source/site/versioned_docs/version-2.1.2/deploy/overview.md b/docs-source/site/versioned_docs/version-2.1.2/deploy/overview.md new file mode 100644 index 000000000..6ddc23264 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/deploy/overview.md @@ -0,0 +1,51 @@ +--- +title: Deployment Overview +sidebar_position: 0 +--- + +## Deploying Applications to Oracle Backend for Microservices and AI + +This guide outlines the steps to build, deploy, and expose an application on Oracle Backend for Microservices and AI (OBaaS). + +### Deployment Steps + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionDetails
1Create container repositoriesSet up a repository per microservice in your container registry (OCIR, ECR, ACR, etc.).
2Build and push imagesUse Maven and Eclipse JKube to build JARs, create container images, and push to the registry.
3Create database secretsCreate Kubernetes secrets with privileged and per-service database credentials.
4Deploy with HelmInstall each service using the obaas-sample-app Helm chart with a per-service values.yaml.
5Create API gateway routesConfigure Apache APISIX routes to expose services externally via Eureka discovery.
+ +### Detailed Guide + +- [Deploying an Application to OBaaS](./deploy.md) — Full step-by-step walkthrough with commands and configuration examples diff --git a/docs-source/site/versioned_docs/version-2.1.2/intro.md b/docs-source/site/versioned_docs/version-2.1.2/intro.md new file mode 100644 index 000000000..d8396e395 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/intro.md @@ -0,0 +1,52 @@ +--- +sidebar_position: 1 +--- +# Oracle Backend for Microservices and AI + +## Accelerate Your Journey to Cloud-Native Applications + +Oracle Backend for Microservices and AI (OBaaS) is a comprehensive platform that transforms how developers build, deploy, and scale modern applications. By combining the power of Oracle AI Database with a complete microservices infrastructure, OBaaS eliminates the complexity of cloud-native development and empowers teams to focus on innovation rather than infrastructure. + +## Build Faster, Scale Smarter + +Whether you're building with Helidon, Spring Boot, or integrating AI capabilities, OBaaS provides a production-ready "backend as a service" that handles the heavy lifting. Deploy across multiple clouds with confidence, knowing that your platform is built on proven Oracle technology designed for enterprise-grade reliability, security, and performance. + +## Why Choose Oracle Backend for Microservices and AI? + +### Developer Experience First + +Write code in your preferred framework - Helidon or Spring Boot - while OBaaS handles service discovery, configuration management, API gateways, and data persistence. Spend less time configuring infrastructure and more time building features that matter to your business. + +### Enterprise-Grade Infrastructure + +Built on Oracle AI Database and designed for mission-critical workloads, OBaaS provides: + +- **Reliability**: High availability and disaster recovery built in +- **Security**: Enterprise-grade security controls and compliance +- **Scalability**: Elastic scaling to meet demand automatically +- **Performance**: Optimized for low latency and high throughput +- **Support**: Supported for Oracle AI Database customers, see KB181357 in Oracle Support for details +- **Compliance**: Simplified open-source license compliance, see [Licensing Information User Manual](https://docs.oracle.com/en/database/oracle/backend-for-microservices-and-ai/2.0/licensing-guide/index.html) for details + +### AI-Ready Platform + +Leverage the power of Oracle AI Database to integrate artificial intelligence and machine learning directly into your applications. Build intelligent services that learn and adapt without the complexity of managing separate AI infrastructure. + +### Multi-Cloud Flexibility + +Deploy on Oracle Cloud Infrastructure, other cloud providers, or hybrid environments. OBaaS provides consistent operations and portability across clouds, giving you freedom from vendor lock-in. + +### Simplified Operations + +OBaaS vastly simplifies the task of building, testing, and operating microservices platforms. From development through production, automated workflows and integrated tooling streamline every phase of the application lifecycle. + +### Architecture + +![Architecture](OBaaS-Architecture.png "Oracle Backend for Microservices and AI Architecture") + +## Get Started + +Ready to try Oracle Backend for Microservices and AI? Choose your path: + +- **[Setup →](./setup/index.md)** — Install the platform on your Kubernetes cluster +- **[Deploy an Application →](./deploy/overview.md)** — Deploy your microservices to an existing OBaaS installation diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/observability/_category_.json new file mode 100644 index 000000000..8a9b3eda0 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Observability", + "position": 5, + "link": { + "type": "doc", + "id": "observability/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/access.md b/docs-source/site/versioned_docs/version-2.1.2/observability/access.md new file mode 100644 index 000000000..da7c72440 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/access.md @@ -0,0 +1,72 @@ +--- +title: Access SigNoz +sidebar_position: 3 +--- + +SigNoz is the observability platform included with OBaaS that provides metrics, traces, and logs visualization. This guide shows you how to access the SigNoz UI and retrieve your admin credentials. + +### Prerequisites + +- OBaaS deployed and running +- kubectl configured with access to your cluster +- Your OBaaS namespace name (referred to as `` below) + +:::tip[Finding Your Namespace] +If you deployed with Terraform, your namespace is typically your `label_prefix` value. +If you deployed with Helm, it's the namespace you specified during installation (e.g., `obaas-prod`, `tenant1`, etc.). +::: + +### Retrieve SigNoz Credentials + +SigNoz admin credentials are stored in a Kubernetes secret named `-signoz` in your OBaaS namespace. + +**Get the admin email/username:** + +```bash +kubectl -n get secret -signoz \ + -o jsonpath='{.data.email}' | base64 -d && echo +``` + +**Get the admin password:** + +```bash +kubectl -n get secret -signoz \ + -o jsonpath='{.data.password}' | base64 -d && echo +``` + +### Access the SigNoz UI + +Expose the SigNoz UI using kubectl port-forward: + +:::note[About the Service Name] +`obaas` is the default Helm release name used when installing the SigNoz chart. The service name follows the pattern `-signoz`. If you used a different release name during installation replace `` with your release name: + +```bash +kubectl -n port-forward svc/-signoz 8080 +``` +::: + +**Finding the correct service name:** + +If you're unsure of the service name, list all services in your namespace: + +```bash +kubectl get svc -n | grep signoz +``` + +Look for a service with a name ending in `-signoz` (e.g., `obaas-signoz`, `tenant1-signoz`). + +### Log In to SigNoz + +1. Open your browser and navigate to: + - **Port-forward**: [http://localhost:8080](http://localhost:8080) + +2. Enter the credentials you retrieved in Step 1: + - **Email**: The email from the secret + - **Password**: The password from the secret + +3. Click **Login** + +**SigNoz Dashboard:** + +![SigNoz UI](images/obaas-signoz-ui.png) diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/configure.md b/docs-source/site/versioned_docs/version-2.1.2/observability/configure.md new file mode 100644 index 000000000..8c17b20b7 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/configure.md @@ -0,0 +1,395 @@ +--- +title: Configure Applications for SigNoz +sidebar_position: 6 +--- +## Configure Spring Boot applications for SigNoz Observability + +In order for SigNoz to collect logs, metrics, and traces from applications, some configurations must be added. + +:::note + Looking for Helidon applications - see [below](#configure-helidon-applications-for-signoz-observability) +::: + +### Configure OpenTelemetry and Micrometer + +[OpenTelemetry zero-code instrumentation](https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/getting-started/) enables adding observability to Spring Boot based applications without changing any code. Similarly [Micrometer](https://docs.micrometer.io/micrometer/reference/observation/projects.html) enables instrumentation of JVM based applications and can be configured using Spring Boot starters. + +:::note +The versions in the below pom.xml might be outdated. +::: + +```xml + + + io.micrometer + micrometer-core + + + io.micrometer + micrometer-registry-prometheus + + + io.micrometer + micrometer-tracing-bridge-otel + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-api-incubator + + + + + io.opentelemetry + opentelemetry-exporter-otlp + + + io.micrometer + micrometer-tracing + + + io.opentelemetry.instrumentation + opentelemetry-spring-boot-starter + + + net.ttddyy.observation + datasource-micrometer-spring-boot + + + com.oracle.database.spring + oracle-spring-boot-starter-ucp + pom + + + io.opentelemetry.instrumentation + opentelemetry-oracle-ucp-11.2 + + + + + + + io.opentelemetry.instrumentation + opentelemetry-instrumentation-bom + pom + import + + + io.micrometer + micrometer-tracing-bom + ${micrometer-tracing.version} + pom + import + + + +``` + +### Configure Datasource Observability + +[datasource-micrometer](https://github.com/jdbc-observations/datasource-micrometer) and [Oracle Universal Connection Pool Instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/oracle-ucp-11.2) can be configured to enable observability for Database connections and queries. + +:::note +The versions in the below pom.xml might be outdated. +::: + +```xml + + + net.ttddyy.observation + datasource-micrometer-spring-boot + + + io.opentelemetry.instrumentation + opentelemetry-oracle-ucp-11.2 + + +``` + +### Configure Spring Boot Actuator + +When you deploy an application with Oracle Backend for Microservices and AI CLI or Visual Code Extension, provided you included the Spring Actuator in your application, SigNoz will automatically find your application (using the annotations) and start collecting metrics. These metrics will be included in both the Spring Boot Observability dashboard and the Spring Boot Statistics dashboard automatically. + +To include the Actuator in your application, add the following dependencies to your Maven POM or equivalent: + +```xml + + org.springframework.boot + spring-boot-starter-actuator + +``` + +You must also add the configuration similar to one given below, after customizing it for your application, to your Spring `application.yaml` + +```yaml +spring: + threads: + virtual: + enabled: true + jpa: + hibernate: + ddl-auto: validate + properties: + hibernate: + dialect: org.hibernate.dialect.OracleDialect + format_sql: true + show-sql: true + +eureka: + instance: + hostname: ${spring.application.name} + preferIpAddress: true + client: + service-url: + defaultZone: ${eureka.service-url} + fetch-registry: true + register-with-eureka: true + enabled: true + +management: + endpoint: + health: + show-details: always + show-components: always + endpoints: + web: + exposure: + include: "*" + metrics: + tags: + application: ${spring.application.name} + distribution: + percentiles[http.server.requests]: 0.5, 0.90, 0.95, 0.99 + percentiles-histogram[http.server.requests]: true + slo[http.server.requests]: 100ms, 250ms, 500ms, 1s, 2s, 5s, 10s, 30s + percentiles[http.client.requests]: 0.5, 0.90, 0.95, 0.99 + percentiles-histogram[http.client.requests]: true + slo[http.client.requests]: 100ms, 250ms, 500ms, 1s, 2s, 5s, 10s, 30s + health: + probes: + enabled: true + tracing: + sampling: + probability: 1.0 + info: + os: + enabled: true + env: + enabled: true + java: + enabled: true + observations: + key-values: + app: ${spring.application.name} + +logging: + level: + root: INFO + com.example: INFO + org.springframework.web.filter.AbstractRequestLoggingFilter: INFO + +jdbc: + datasource-proxy: + query: + enable-logging: true + log-level: INFO + include-parameter-values: true +``` + +The Oracle Backend for Microservices and AI platform adds the following annotations to your application pods for SigNoz to start scraping the actuator endpoint for metrics. + +```yaml +signoz.io/path: /actuator/prometheus +signoz.io/port: "8080" +signoz.io/scrape: "true" +``` + +It also adds the `OTEL_EXPORTER_OTLP_ENDPOINT` to pod environment variables for the OpenTelemetry instrumentation libraries to access the OpenTelemetry collector of SigNoz. + +:::note[About the Service Name] +`obaas` is the default Helm release name used when installing the SigNoz chart. The service name follows the pattern `-signoz-otel-collector`. If you used a different release name during installation, replace `` with your release name. +::: + +:::tip[Finding Your Namespace] +If you deployed with Terraform, your namespace is typically your `label_prefix` value. +If you deployed with Helm, it's the namespace you specified during installation (e.g., `obaas-prod`, `tenant1`, etc.), referred to as `` in the example below. +::: + +```yaml +- name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://-signoz-otel-collector.:4318 +``` + +## Configure Helidon applications for SigNoz Observability + +In order for SigNoz to collect logs, metrics, and traces from Helidon applications, some configurations must be added. + +### Configure OpenTelemetry + +OpenTelemetry provides instrumentation without any code changes. To enable OpenTelemetry, add these Helidon dependencies to your application's `pom.xml`: + +```xml + + io.helidon.microprofile.telemetry + helidon-microprofile-telemetry + + + io.opentelemetry + opentelemetry-exporter-otlp + + +``` + +Then, add the following configuration properties to your `microprofile-config.properties`. Replace `APP_NAME` with the name of your application: + +``` +metrics.rest-request.enabled=true +otel.sdk.disabled=false +otel.service.name=APP_NAME +otel.logs.exporter=otlp +otel.exporter.otlp.protocol=http/protobuf + +# If you are using Helidon MP, you may change the following to true +# to enable the optional MicroProfile Metrics REST.request metrics +metrics.rest-request.enabled=false +``` + +:::note + When you deploy your Helidon applications with the OBaaS application Helm chart, it will automatically add the necessary environment variables + to configure the endpoint addresses when you set `obaas.otel.enabled: true` in your `values.yaml`. +::: + +### Structured Logging + +We recommend that you configure your Helidon application to use Structured JSON logging, including trace correlation - which will allow you to easily +navigate between traces and the matching logs - without any manual OpenTelemetry SDK configuration. + +First, add the following dependencies to your applications `pom.xml`: + +```xml + + + org.slf4j + slf4j-api + 2.0.9 + + + ch.qos.logback + logback-classic + 1.4.14 + + + + org.slf4j + jul-to-slf4j + 2.0.9 + + + + net.logstash.logback + logstash-logback-encoder + 7.4 + + + io.opentelemetry.instrumentation + opentelemetry-logback-mdc-1.0 + 2.1.0-alpha + + runtime + +``` + +Next, create a configuration file for logging. Create a file called `src/main/resources/logback.xml` with the following content. This +standardizes all container application text output to pure JSON string lines via the `LogstashEncoder`: + +```xml + + + + + + + + + + + + + + + +``` + +For trace injection, create a custom JAX-RS `ContainerRequestFilter` that intercepts incoming HTTP requests, extracts the +active `trace_id` and `span_id` from the OpenTelemetry `SpanContext`, and securely drops them into the SLF4J ThreadLocal MDC. + +Create a new Java class in your application called `MdcFilter.java` with this content. Update the Java package as necessary: + +```java +// Copyright (c) 2026, Oracle and/or its affiliates. +// Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +package com.example; + +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.ext.Provider; +import jakarta.annotation.Priority; +import jakarta.ws.rs.Priorities; +import org.slf4j.MDC; +import java.io.IOException; + +/** + * A JAX-RS Container Filter that intercepts incoming HTTP requests and bridges + * the active OpenTelemetry execution context into the SLF4J Mapped Diagnostic + * Context(MDC). + *

+ * This filter extracts the Trace ID, Span ID, and Trace Flags from the active + * OTel Span and populates the SLF4J MDC map at the start of every HTTP request. + * It strictly cleans up the MDC map during the HTTP response lifecycle phase to + * prevent context-bleeding across concurrent virtual threads. + *

+ * The @Priority annotation ensures this filter executes after Helidon's + * internal OpenTelemetry filters have initialized the tracing span for the + * incoming request, guaranteeing that Span.current() will return a valid + * context. + */ +@Provider +@Priority(Priorities.USER + 100) +public class MdcFilter implements ContainerRequestFilter, ContainerResponseFilter { + @Override + public void filter(ContainerRequestContext requestContext) throws IOException { + SpanContext spanContext = Span.current().getSpanContext(); + if (spanContext.isValid()) { + MDC.put("trace_id", spanContext.getTraceId()); + MDC.put("span_id", spanContext.getSpanId()); + MDC.put("trace_flags", spanContext.getTraceFlags().asHex()); + } + } + + @Override + public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) + throws IOException { + MDC.remove("trace_id"); + MDC.remove("span_id"); + MDC.remove("trace_flags"); + } +} +``` + +With this configuration, logs will be printed to stdout in pure JSON with trace IDs attached, and the cluster's +OpenTelemetry DaemonSet will natively scrape, parse, and correlate the logs entirely outside of the application's runtime. + +With this approach: + +* You do not need to configure a custom `GlobalOpenTelemetry` in your application. +* Any `LOGGER.info()` statement will get stamped with the distributed Trace ID. +* There is minimal overhead - your application only prints text locally; the cluster agent handles the expensive network gRPC telemetry export. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/custom-dashboards.md b/docs-source/site/versioned_docs/version-2.1.2/observability/custom-dashboards.md new file mode 100644 index 000000000..17d5271ab --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/custom-dashboards.md @@ -0,0 +1,155 @@ +--- +title: Custom dashboards +sidebar_position: 5.5 +--- + +Use the `helm/app-charts/signoz-dashboards` sample chart to install your own +dashboards into SigNoz and repeat the import with Helm upgrades. Keep your JSON +dashboard definitions with the chart in your application's source control. +Install it as a separate Helm release from the OBaaS platform release. + +## Prerequisites + +- A healthy OBaaS SigNoz instance, including its ClickHouse connection. +- Helm and `kubectl` configured for the target cluster. +- The namespace and Helm release name of your OBaaS instance. +- An existing SigNoz credential Secret containing `email` and `password`. + +Install the dashboard chart in the same namespace as OBaaS. The default credential +Secret is `signoz-authn`; use the Secret configured for your instance if it has a +different name. See [Access SigNoz](./access.md) for connection and credential +instructions. + +## Add your dashboard files + +1. Export each custom dashboard as JSON from SigNoz. +2. Place each file directly in `helm/app-charts/signoz-dashboards/dashboards/`. +3. Remove `sample-application.json` when replacing the empty sample dashboard. +4. Give each dashboard a unique, application-specific title. + +The chart includes only `dashboards/*.json`; it does not include subdirectories. +Each JSON file becomes a ConfigMap. For example, `orders.json` creates the +ConfigMap `orders`. Names are normalized when needed and shortened to at most +63 characters, with a hash suffix to distinguish changed names. Use distinct +filenames across dashboard releases in the same namespace because ConfigMap +names are based on filenames rather than Helm release names. + +Each JSON file must fit within Kubernetes' 1 MiB ConfigMap data limit. The complete +chart must also fit within Helm's release storage limits; splitting files into +individual ConfigMaps does not remove the aggregate limit. + +### Dashboard formats + +The importer detects the dashboard API supported by the deployed SigNoz instance: + +- Older instances, including OBaaS 2.1.0's SigNoz, use the V1 dashboard API and + JSON exports with `version: "v4"` or `"v5"`. The dashboard title is `title`. +- Newer instances use the V2 API and Perses exports with `schemaVersion: "v6"`. + The dashboard title is `spec.display.name`. + +Use V1 exports when the same definitions need to run on both older and newer +instances. Newer SigNoz can convert V1 payloads submitted to its V2 create +endpoint. This compatibility is transitional; for future SigNoz upgrades, +re-export dashboards in the supported format. V2 files cannot be imported into a +V1 instance and are rejected before any dashboards are deleted. + +## Configure the chart + +Create a values file, for example `my-dashboards-values.yaml`, containing the +OBaaS release name and credential Secret reference: + +```yaml +signoz: + releaseName: obaas + auth: + existingSecret: signoz-authn +``` + +Replace `obaas` with your actual OBaaS platform release name, not the release name +you will use for the dashboard chart. Keep passwords out of the values file. + +The Job runs a Python standard-library importer on +`container-registry.oracle.com/os/oraclelinux:9`. It waits for SigNoz, discovers +the organization through `/api/v2/sessions/context` using the credential Secret's +`email`, logs in, and imports dashboards through the detected dashboard API. + +If the Secret contains a non-empty `orgID` key, that value takes precedence over +discovery. Accounts belonging to multiple organizations must supply this key to +select an organization explicitly. The Secret must contain `email` and `password` +in either case. + +For private registries, configure `image.repository`, `image.tag`, and +`imagePullSecrets`. Replacement images must provide Python 3 and its standard +library. No runtime package installation is needed. + +## Install and update dashboards + +Run from the repository root. Use the same values file for rendering and installing: + +```bash +helm lint helm/app-charts/signoz-dashboards \ + -f my-dashboards-values.yaml + +helm template my-dashboards helm/app-charts/signoz-dashboards \ + -n -f my-dashboards-values.yaml \ + > /tmp/my-dashboards-rendered.yaml + +helm upgrade --install my-dashboards helm/app-charts/signoz-dashboards \ + -n -f my-dashboards-values.yaml \ + --timeout 15m +``` + +The ConfigMaps are ordinary Helm resources. A `post-install,post-upgrade` hook Job +imports them after they are created or updated. Helm waits for the Job and reports +an error if it fails. Successful and failed Jobs remain available for inspection; +the next install or upgrade replaces the previous hook Job. + +To apply dashboard changes, edit or replace the JSON files and run the same +`helm upgrade --install` command again. This upgrades the dashboard release; it +does not upgrade the OBaaS platform or replace the SigNoz installation. + +## Replacement and removal behavior + +On every install or upgrade, the importer deletes all existing dashboards whose +titles exactly match the bundled titles, then creates dashboards from the JSON +files. Other titles are preserved. Local JSON and duplicate titles are checked +before deletion, but creation can still fail server-side if a payload is invalid. +Replacement is not transactional; fix any failed import and rerun the upgrade. + +:::important +A title match replaces the dashboard regardless of who created it. Avoid titles +used by [OBaaS system dashboards](./dashboards.md) or other users. Replacement +creates new dashboard IDs, which can break links, and overwrites UI edits to the +matching dashboards. +::: + +If you remove a JSON file and upgrade the chart, Helm removes its ConfigMap, but +the dashboard remains in SigNoz. **Delete that dashboard manually in the SigNoz +UI when you no longer need it.** Changing a dashboard's title also leaves the old +dashboard for manual cleanup. + +Uninstalling the dashboard chart removes its ConfigMaps but leaves the imported +dashboards in SigNoz. The retained hook Job can be deleted separately: + +```bash +helm uninstall my-dashboards -n +kubectl delete job my-dashboards-signoz-setup -n \ + --ignore-not-found +``` + +## Verify and troubleshoot + +```bash +helm status my-dashboards -n +kubectl get jobs -n \ + -l app.kubernetes.io/instance=my-dashboards +kubectl logs -n job/my-dashboards-signoz-setup \ + -c signoz-setup +``` + +Open SigNoz and confirm your dashboard titles appear. If the Job does not start, +inspect its pod events and the `signoz-setup` container logs. Check image pulls, +SigNoz and ClickHouse health, the service URL, the credential Secret, and any +explicit `orgID` selection. HTTP 400 during +creation indicates the exported JSON needs checking against the deployed schema; +HTTP 401 or 403 indicates a credential or permission problem. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/customizations.md b/docs-source/site/versioned_docs/version-2.1.2/observability/customizations.md new file mode 100644 index 000000000..74705236c --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/customizations.md @@ -0,0 +1,107 @@ +--- +title: Common Customizations +sidebar_position: 2 +--- +## Configure Online Storage + +You can configure the amount of online storage, for storing metrics, logs and traces, by specifying the desired size in the `values.yaml` +for the `obaas` Helm chart as follows. The default ClickHouse volume request is `20Gi`. If you have a large number of applications, you may want to increase +the amount of storage. + +```yaml +signoz: + clickhouse: + persistence: + size: 200Gi +``` + +This value controls the ClickHouse volume that stores telemetry. It is separate +from the SigNoZ metadata volume, configured with +`signoz.signoz.persistence.size`, whose default request is `1Gi`. + +## Configure Cold Storage + +### Use Case + +Use this configuration when you want recent telemetry data to remain on local persistent storage while older data is offloaded to object storage for long-term retention. For on-premises deployments, use a supported S3-compatible object store. For additional information, see the [SigNoz Administrator Guide](https://signoz.io/docs/manage/administrator-guide/). + +### Storage Hierarchy + +SigNoZ stores recent ClickHouse data on the local persistent volume as hot storage. After the configured retention threshold is reached, older data is moved to OCI Object Storage or another supported S3-compatible object store. When needed, ClickHouse retrieves older data from cold storage to satisfy queries. + +```text + Hot Storage (Local Disk) + ↓ [after retention threshold] + Cold Storage (OCI Object Storage / S3-compatible object storage) + ↓ [query hits cold data] +``` + +### Configuration Summary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyValueDescription
signoz.enabledtrueEnables the SigNoz deployment.
signoz.clickhouse.coldStorage.enabledtrueEnables ClickHouse cold storage.
signoz.clickhouse.coldStorage.defaultKeepFreeSpaceBytes"10485760"Keeps at least 10 MiB of local disk space free before moving older data to cold storage. Set value to reflect your environment
signoz.clickhouse.coldStorage.types3Uses an S3-compatible object storage API.
signoz.clickhouse.coldStorage.endpoint<END-POINT>Object storage endpoint URL.
signoz.clickhouse.coldStorage.accessKey<YOUR-ACCESS-KEY>Access key for the object storage service.
signoz.clickhouse.coldStorage.secretAccess<YOUR-SECRET-ACCESS-KEY>Secret key for the object storage service.
signoz.clickhouse.persistence.enabledtrueEnables persistent local storage for ClickHouse hot data.
signoz.clickhouse.persistence.size100GiSize of the local persistent volume used for hot storage. Set value to reflect your environment
+ +### Installation + +Before installation modify the `values-signoz-cold-storage.yaml` file with values that reflects your environment. + +```bash + helm upgrade --install obaas/obaas \ + -f examples/values-signoz-cold-storage.yaml \ + -n \ + --create-namespace [--debug] +``` diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/dashboards.md b/docs-source/site/versioned_docs/version-2.1.2/observability/dashboards.md new file mode 100644 index 000000000..e864776ba --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/dashboards.md @@ -0,0 +1,266 @@ +--- +title: Pre-installed dashboards +sidebar_position: 5 +--- +:::note +More details can be found in the [SigNoz Documentation](https://signoz.io/docs/introduction/). +::: + +:::warning[SigNoz dashboard migration] +SigNoz v0.135.0 deprecates the Dashboards V1 schema and retires the V1 dashboard API endpoints. User-supplied dashboards that use the V1 format must be migrated to the Dashboards V2/Perses-compatible schema before upgrading. Dashboards managed only through the SigNoz UI are migrated automatically, but verify that none remain marked `Legacy`. See the [SigNoz v0.135.0 upgrade guide](https://signoz.io/docs/operate/migration/upgrade-0-135/) for migration details. +::: + +To install your own dashboards with Helm, see [Custom dashboards](./custom-dashboards.md). + +## Dashboard setup Job + +The OBaaS chart runs `-signoz-setup` after installation and upgrade +when `signoz.setup.enabled` is `true` (the default). The Job runs Python 3 on +`container-registry.oracle.com/os/oraclelinux:9`, using a script mounted from a +ConfigMap. It waits for SigNoz to become healthy, then signs in with the `email` +and `password` from the Secret selected by `signoz.auth.existingSecret`, or +`signoz-authn` when no existing Secret is configured. + +The Job discovers the organization through `/api/v2/sessions/context`. If the +account belongs to multiple organizations, add an `orgID` key containing the +selected organization's UUID to the credential Secret. A non-empty `orgID` takes +precedence over discovery. This setup uses the SigNoz API and does not mount the +SigNoz metadata database PVC, so it also works with PostgreSQL metadata storage. + +On each run, the Job deletes existing dashboards whose names exactly match the +bundled system dashboards, including matching legacy records, then recreates +them through the V2 API. Their IDs change and edits to these system dashboards +are replaced. Dashboards with other names are left alone. Save customized copies +under distinct names. Bundled V1 payloads are skipped; imported system dashboards +use the V2/Perses `schemaVersion: v6` format. + +Check completion and logs with: + +```bash +kubectl -n wait --for=condition=complete \ + job/-signoz-setup --timeout=5m +kubectl -n logs job/-signoz-setup \ + -c signoz-setup +``` + +Successful logs end with `SigNoz setup complete`. For private registries, override +`signoz.setup.image.registry`, `signoz.setup.image.repository`, and +`signoz.setup.image.tag`; see the [private registry configuration](../setup/helm/install.md#private-registry-configuration-values-private-registryyaml). + +## Included dashboards + +There are several dashboards that are pre-installed in SigNoz, for example: + +- [Spring Boot Observability](#spring-boot-observability) +- [Spring Boot Statistics](#spring-boot-statistics) +- [Oracle Database Dashboard](#oracle-database-dashboard) +- [Kube State Metrics Dashboard](#kube-state-metrics-dashboard) +- [Apache APISIX Dashboard](#apache-apisix-dashboard) +- [Envoy Gateway Dashboard](#envoy-gateway-dashboard) +- [Helidon Main Dashboard](#helidon-main-dashboard) +- [Helidon MP Details](#helidon-mp-details) +- [Helidon SE Details](#helidon-se-details) +- [Helidon JVM Details](#helidon-jvm-details) +- [APM Metrics](#apm-metrics) +- [Kafka Server Monitoring Dashboard](#kafka-server-monitoring-dashboard) +- [Kubernetes Pod Metrics - Overall](#kubernetes-pod-metrics---overall) +- [Kubernetes Pod Metrics - Detailed](#kubernetes-pod-metrics---detailed) +- [Kubernetes PVC Metrics](#kubernetes-pvc-metrics) +- [Kubernetes Node Metrics - Overall](#kubernetes-node-metrics---overall) +- [Kubernetes Node Metrics - Detailed](#kubernetes-node-metrics---detailed) +- [DB Calls Monitoring](#db-calls-monitoring) +- [Host Metrics (k8s)](#host-metrics-k8s) +- [HTTP API Monitoring](#http-api-monitoring) +- [JVM Metrics](#jvm-metrics) +- [NGINX (OTEL)](#nginx-otel) +- [MicroTx](#microtx) + +## Spring Boot Observability + +This dashboard provides details of one or more Spring Boot applications including the following: + +- The number of HTTP requests received by the application +- A breakdown of which URL paths requests were received for +- The average duration of requests by path +- The number of exceptions encountered by the application +- Details of 2xx (that is, successful) and 5xx (that is, exceptions) requests +- The request rate per second over time, by path +- Log messages from the service + +You may adjust the time period and drill down into issues, and search the logs for particular messages. This dashboard is designed for Spring Boot 3.x applications. Some features may work for Spring Boot 2.x applications. + +Here is an example of this dashboard displaying data for a simple application: + +![Spring Boot Observability Dashboard](images/spring-boot-observability-dashboard.png) + +## Spring Boot Statistics + +This dashboard provides more in-depth information about services including the following: + +- JVM statistics like heap and non-heap memory usage, and details of garbage collection +- Load average and open files +- Database connection pool statistics (for HikariCP) +- HTTP request statistics +- Logging (logback) statistics + +You may adjust the time period and drill down into issues, and search the logs for particular messages. This dashboard is designed for Spring Boot 3.x applications. Some features may work for Spring Boot 2.x applications. + +Here is an example of this dashboard displaying data for a simple application: + +![Spring Boot Stats Dashboard](images/spring-boot-stats-dashboard.png) + +## Oracle Database Dashboard + +This dashboard provides details about the Oracle Database including: + +- SGA and PGA size +- Active sessions +- User commits +- Execute count +- CPU count and platform +- Top SQL +- Wait time statistics by class + +Here is an example of this dashboard: + +![Oracle Database Dashboard](images/db-dashboard.png) + +## Kube State Metrics Dashboard + +This dashboard provides details of the Kubernetes cluster including: + +- Pod capacity and requests for CPU and memory +- Node availability +- Deployment, Stateful Set, Pod, Job and Container statistics +- Details of horizontal pod autoscalers +- Details of persistent volume claims + +Here is an example of this dashboard: + +![Kube State Metrics Dashboard](images/kube-state-metrics-dashboard.png) + +## Apache APISIX Dashboard + +This dashboard provides details of the APISIX API Gateway including: + +- Total Requests +- NGINX Connection State +- Etcd modifications + +Here is an example of this dashboard: + +![Apache APISIX Dashboard](images/apache-apisix-dashboard.png) + +## Envoy Gateway Dashboard + +This dashboard provides details of the Envoy Gateway, including: + +- Requests by type +- Gateway controller runtime operations +- Gateway processes and work queue + +![Envoy Gateway Dashboard](images/envoy-gateway-dashboard.png) + +In addition, the following dashboards are also pre-installed: + +## Helidon Main Dashboard + +Combined dashboard for Heap memory usage statistics about all [Helidon SE](https://helidon.io/docs/v3/about/introduction) and [Helidon MP](https://helidon.io/docs/v4/mp/introduction) applications deployed in the cluster. + +![Helidon Main Dashboard](images/helidon-main-dashboard.png) + +## Helidon MP Details + +Details about CPU and Memory usage of [Helidon MP](https://helidon.io/docs/v4/mp/introduction) applications along with statistics about HTTP/REST requests per JVM. + +![Helidon MP Dashboard](images/helidon-mp-dashboard.png) + +## Helidon SE Details + +Details about Memory usage of [Helidon SE](https://helidon.io/docs/v3/about/introduction) applications along with statistics about HTTP/REST requests per JVM. + +![Helidon SE Dashboard](images/helidon-se-dashboard.png) + +## Helidon JVM Details + +JVM level details about Helidon applications, including statistics about [Virtual Threads](https://docs.oracle.com/en/java/javase/24/core/virtual-threads.html), CPU and Memory usage and HTTP requests. + +![Helidon JVM Dashboard](images/helidon-jvm-dashboard.png) + +## APM Metrics + +Application Performance overview for all deployed services in terms of request execution times and consistency. + +![APM Dashboard](images/apm-dashboard.png) + +## Kafka Server Monitoring Dashboard + +Details about Kafka brokers, topics, partitions, and consumers. For more details on Kafka monitoring configuration and metrics, see the [Kafka Observability Guide](./kafka.md). + +![Kafka Dashboard](images/kafka-dashboard.png) + +## Kubernetes Pod Metrics - Overall + +Aggregated view of CPU, Memory, FileSystem, and Network usage by pods. + +![Kubernetes Pod Metrics Overall](images/k8s-pod-metrics-overall.png) + +## Kubernetes Pod Metrics - Detailed + +Detailed view of CPU, Memory, FileSystem, and Network usage by pods. + +![Kubernetes Pod Metrics Detailed](images/k8s-pod-metrics-detailed.png) + +## Kubernetes PVC Metrics + +Capacity and Usage statistics about Persistent Volume Claims in the cluster. + +![Kubernetes PVC Metrics](images/k8s-pvc-metrics.png) + +## Kubernetes Node Metrics - Overall + +Aggregated view of CPU, Memory, FileSystem, and Network usage by Nodes in the cluster. + +![Kubernetes Node Metrics Overall Dashboard](images/k8s-node-metrics-overall.png) + +## Kubernetes Node Metrics - Detailed + +Detailed view of CPU, Memory, FileSystem, and Network usage by Nodes in the cluster. + +![Kubernetes Node Metrics Detailed Dashboard](images/k8s-node-metrics-detailed.png) + +## DB Calls Monitoring + +Details about [DB attributes from opentelemetry](https://opentelemetry.io/docs/specs/semconv/attributes-registry/db/). + +![Host Metrics Dashboard](images/db-calls-dashboard.png) + +## Host Metrics (k8s) + +This dashboard uses the system metrics collected from the [hostmetrics receiver](https://uptrace.dev/opentelemetry/collector/host-metrics) to show CPU, Memory, Disk, Network and Filesystem usage. + +![Host Metrics Dashboard](images/host-metrics-dashboard.png) + +## HTTP API Monitoring + +This dashboard is built on top of available [HTTP attributes from opentelemetry](https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/) and provides insights about endpoint level performance indicators for HTTP calls. + +![HTTP API Dashboard](images/http-api-dashboard.png) + +## JVM Metrics + +JVM Runtime metrics for all services deployed in the cluster in terms of CPU/Memory usage, Garbage collection events, threads and class loading/unloading. + +![JVM Metrics Dashboard](images/jvm-metrics-dashboard.png) + +## NGINX (OTEL) + +Details about connections/requests being handled by the [NGINX Ingress controller](https://github.com/kubernetes/ingress-nginx). This dashboard is relevant only when deprecated ingress-nginx is explicitly enabled. + +![Nginx Dashboard](images/nginx-dashboard.png) + +## MicroTx + +Details about [Transaction Manager for Microservices](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/24.2/tmmdg/oracle-transaction-manager-microservices.html) component and statistics about participating transactions. + +![MicroTx Dashboard](images/microtx-dashboard.png) diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/dbexporter.md b/docs-source/site/versioned_docs/version-2.1.2/observability/dbexporter.md new file mode 100644 index 000000000..0f17d88ea --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/dbexporter.md @@ -0,0 +1,8 @@ +--- +title: Oracle Database Metrics Exporter +sidebar_position: 8 +--- + +Oracle Database Metrics Exporter aims to provide observability for the Oracle Database so that users can understand performance and diagnose issues easily across applications and the database. Oracle Database Metrics Exporter delivers functionality to support both cloud and on-premises databases, including those running in Kubernetes and containers. + +See the [documentation](https://oracle.github.io/oracle-db-appdev-monitoring/) for how to install and configure Oracle Database Metrics Exporter. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/apache-apisix-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/apache-apisix-dashboard.png new file mode 100644 index 000000000..3313173c2 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/apache-apisix-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/apm-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/apm-dashboard.png new file mode 100644 index 000000000..316918c55 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/apm-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/db-calls-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/db-calls-dashboard.png new file mode 100644 index 000000000..a891a2921 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/db-calls-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/db-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/db-dashboard.png new file mode 100755 index 000000000..01dd34bc8 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/db-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/envoy-gateway-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/envoy-gateway-dashboard.png new file mode 100644 index 000000000..4ac2d6e4f Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/envoy-gateway-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-jvm-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-jvm-dashboard.png new file mode 100644 index 000000000..f0f35a19a Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-jvm-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-main-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-main-dashboard.png new file mode 100644 index 000000000..ecb184b20 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-main-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-mp-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-mp-dashboard.png new file mode 100644 index 000000000..ce82f3d2d Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-mp-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-se-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-se-dashboard.png new file mode 100644 index 000000000..7311079b8 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/helidon-se-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/host-metrics-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/host-metrics-dashboard.png new file mode 100644 index 000000000..71a9d11bd Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/host-metrics-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/http-api-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/http-api-dashboard.png new file mode 100644 index 000000000..97ad80fb3 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/http-api-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/jvm-metrics-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/jvm-metrics-dashboard.png new file mode 100644 index 000000000..500184996 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/jvm-metrics-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-node-metrics-detailed.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-node-metrics-detailed.png new file mode 100644 index 000000000..3a621fa14 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-node-metrics-detailed.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-node-metrics-overall.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-node-metrics-overall.png new file mode 100644 index 000000000..8a9a73a48 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-node-metrics-overall.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pod-metrics-detailed.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pod-metrics-detailed.png new file mode 100644 index 000000000..2c3e40a59 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pod-metrics-detailed.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pod-metrics-overall.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pod-metrics-overall.png new file mode 100644 index 000000000..2fa439df0 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pod-metrics-overall.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pvc-metrics.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pvc-metrics.png new file mode 100644 index 000000000..9e374e024 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/k8s-pvc-metrics.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/kafka-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/kafka-dashboard.png new file mode 100644 index 000000000..cea646dc4 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/kafka-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/kube-state-metrics-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/kube-state-metrics-dashboard.png new file mode 100755 index 000000000..e95a302ef Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/kube-state-metrics-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/microtx-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/microtx-dashboard.png new file mode 100644 index 000000000..efde1cf38 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/microtx-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/nginx-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/nginx-dashboard.png new file mode 100644 index 000000000..c585356d0 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/nginx-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/obaas-signoz-ui.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/obaas-signoz-ui.png new file mode 100644 index 000000000..bde78a22b Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/obaas-signoz-ui.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/observability-overview.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/observability-overview.png new file mode 100755 index 000000000..f254c4a6c Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/observability-overview.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/service-list.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/service-list.png new file mode 100644 index 000000000..ec278785c Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/service-list.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/service-metrics.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/service-metrics.png new file mode 100644 index 000000000..11c3f747c Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/service-metrics.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-logs-details.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-logs-details.png new file mode 100644 index 000000000..1a1ecc622 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-logs-details.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-logs.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-logs.png new file mode 100644 index 000000000..574a93cdc Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-logs.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-traces-details.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-traces-details.png new file mode 100644 index 000000000..425e050fd Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-traces-details.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-traces.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-traces.png new file mode 100644 index 000000000..c71c76e89 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/signoz-traces.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/spring-boot-observability-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/spring-boot-observability-dashboard.png new file mode 100755 index 000000000..193e44c7c Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/spring-boot-observability-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/images/spring-boot-stats-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/observability/images/spring-boot-stats-dashboard.png new file mode 100755 index 000000000..c72b0af81 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/observability/images/spring-boot-stats-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/index.md b/docs-source/site/versioned_docs/version-2.1.2/observability/index.md new file mode 100644 index 000000000..4fe521366 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/index.md @@ -0,0 +1,83 @@ +--- +title: Observability Overview +sidebar_position: 0 +--- + +Oracle Backend for Microservices and AI ships with a fully integrated observability stack powered by [SigNoz](https://signoz.io/), providing metrics, logs, and distributed traces. Platform services are preconfigured for observability. Applications export telemetry after they are instrumented with OpenTelemetry or configured with supported metrics annotations. + +### What's Included + +- **Metrics** — Application and infrastructure metrics collected via OpenTelemetry and Micrometer, with 20+ pre-installed dashboards +- **Logs** — Centralized log aggregation with filtering and search +- **Traces** — Distributed tracing across microservices with request correlation +- **Database Monitoring** — Oracle Database metrics via the built-in database exporter +- **Kafka Monitoring** — End-to-end visibility for Kafka clusters, producers, and consumers + +### Guides + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GuideDescription
Introduction and OverviewArchitecture and how the observability stack fits together
Access SigNozRetrieve credentials and connect to the SigNoz UI
Metrics, Logs and TracesNavigate metrics, logs, and traces in the SigNoz dashboard
Pre-installed DashboardsCatalog of 20+ ready-to-use dashboards (Spring Boot, Kafka, Kubernetes, Oracle DB, and more)
Custom DashboardsInstall and update your own SigNoz dashboards with a separate Helm chart
Configure Applications for SigNozAdd OpenTelemetry and Micrometer dependencies to your application
SigNoz Resource ProfilesDraft small, medium and distributed allocations, storage planning and validation boundaries
Persistent Collector QueuesConfigure a dedicated queue PVC for a single small or medium collector
SigNoz SQLStoreChoose a metadata store, use the bundled PostgreSQL example, or connect to managed PostgreSQL
Kafka ObservabilityMonitor Kafka clusters, producers, and consumers
Customize Java InstrumentationPass custom environment variables to the OpenTelemetry Java agent through Helm values or CLI overrides
Oracle Database Metrics ExporterDatabase-level metrics collection and configuration guidance
Common CustomizationsConfigure Online and Cold Storage
Upgrade SigNoZ in placeUpgrade SigNoZ in place during an optional OBaaS 2.1.2 patch release
diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/java-instrumentation.mdx b/docs-source/site/versioned_docs/version-2.1.2/observability/java-instrumentation.mdx new file mode 100644 index 000000000..7c84a04f3 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/java-instrumentation.mdx @@ -0,0 +1,93 @@ +--- +title: Customizing Java Instrumentation +sidebar_position: 7 +--- + +import Admonition from '@theme/Admonition'; + +Oracle Backend for Microservices and AI lets you pass custom environment variables to the OpenTelemetry Java agent through the `obaas` Helm chart. This makes it possible to tune logging, protocol settings, and agent behavior without modifying the core chart templates. + +## Before you start + +- This guide applies to Java applications that use OpenTelemetry auto-instrumentation in OBaaS. +- Your application must be deployed with `otel.enabled: true` for the OpenTelemetry Operator to inject the Java agent and its environment variables. + +## Method 1: Using values.yaml (Recommended) + +This approach is best when you want a persistent configuration that is easy to review and reuse across deployments. + +Add the `env` list to your custom values file: + +```yaml +signoz: + instrumentation: + java: + env: + - name: "OTEL_LOGS_EXPORTER" + value: "otlp" + - name: "OTEL_EXPORTER_OTLP_LOGS_PROTOCOL" + value: "grpc" + - name: "OTEL_METRIC_EXPORT_INTERVAL" + value: "15000" +``` + +In this example: + +- `OTEL_LOGS_EXPORTER=otlp` enables exporting application logs through OTLP. +- `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc` configures the OTLP logs exporter to use gRPC. +- `OTEL_METRIC_EXPORT_INTERVAL=15000` changes the metrics export interval to 15 seconds. + +Deploy the updated configuration: + +```bash +helm upgrade --install obaas/obaas \ + -f my-values.yaml \ + -n \ + --create-namespace [--debug] +``` + +## Method 2: Using Helm CLI (--set-json) + +This method works well for quick testing or one-off overrides. `--set-json` is easier to read and maintain than a long `--set` expression when passing lists of objects. + +```bash +helm upgrade --install obaas/obaas \ + -n \ + --create-namespace \ + --set-json 'signoz.instrumentation.java.env=[{"name":"OTEL_METRIC_EXPORT_INTERVAL","value":"15000"}]' \ + [--debug] +``` + +## How to Verify Changes + +### Check the Instrumentation resource + +Verify that the Instrumentation custom resource picked up your environment variables: + +```bash +kubectl get instrumentation traces-instrumentation -n -o yaml +``` + +In the output, look for your configured entries under the Java instrumentation environment list. You should see values such as `OTEL_LOGS_EXPORTER`, `OTEL_EXPORTER_OTLP_LOGS_PROTOCOL`, or `OTEL_METRIC_EXPORT_INTERVAL` in the resource definition. + +If the change was applied successfully, the instrumentation resource should show your configured variables and the restarted pod should use the same values. + +### Restart application pods + + + The OpenTelemetry Operator injects environment variables only when pods are created. If your application pods are already running, restart them so the new settings are applied. + + +```bash +kubectl rollout restart deployment -n +``` + +### Check the pod environment + +After the new pods are running, inspect the environment inside one of the application pods: + +```bash +kubectl exec -n -- env | grep OTEL_ +``` + +If you set a custom variable that does not start with `OTEL_`, such as `CUSTOM_JAVA_SETTING`, adjust the `grep` expression to match that variable name as well. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/kafka.md b/docs-source/site/versioned_docs/version-2.1.2/observability/kafka.md new file mode 100644 index 000000000..98c7046ae --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/kafka.md @@ -0,0 +1,116 @@ +--- +title: Kafka Observability +sidebar_position: 7 +--- + +Oracle Backend for Microservices and AI (OBaaS) provides a unified observability stack for Kafka that spans from the underlying infrastructure to the microservices producing and consuming messages. This integration is powered by the OpenTelemetry (OTEL) Collector and the OTEL Java Agent, providing a seamless view of metrics, traces, and logs. + +## Kafka Cluster Metrics + +Kafka cluster metrics provide deep visibility into the health and performance of the brokers, topics, and partitions within your OBaaS cluster. + +### Enabling Cluster Metrics (Opt-in) + +Kafka infrastructure monitoring is an "opt-in" feature provided as a platform extension. It uses the native OpenTelemetry `kafkametrics` receiver to scrape metadata directly from the Kafka bootstrap service. + +To enable cluster metrics, include the `kafka-metrics.yaml` extension from the source repository during your platform installation or upgrade: + +```bash +helm upgrade obaas obaas/obaas \ + -n obaas \ + -f helm/infra-charts/obaas/extensions/kafka-metrics.yaml \ + --reuse-values +``` + +### Platform Automation for Infrastructure Metrics + +The OBaaS platform automates several complex tasks to ensure Kafka metrics flow correctly: + +- **Universal Metric Bridge**: The platform automatically creates an `ExternalName` service called `kafka-bootstrap` in your namespace. This acts as a stable alias for the internal Strimzi bootstrap service, ensuring the scraper doesn't need to change if the cluster is re-deployed. +- **Collector Configuration**: The `kafkametrics` extension automatically updates the SigNoz OpenTelemetry Collector's configuration to include the Kafka scraper in its metrics pipeline. +- **Service Name Resolution**: The platform ensures that metrics are correctly tagged with the `service_name` of your application, allowing for easy filtering in SigNoz. + +### Kafka Server Monitoring Dashboard + +Once enabled, the **Kafka Server Monitoring Dashboard** automatically populates in SigNoz. This dashboard provides a centralized view of: +- **Broker Health**: Active broker count, controller status, and request handler pool utilization. +- **Topic Metrics**: Total topic count and message throughput. +- **Partition Details**: Current offsets, oldest offsets (retention), and replica status (ISR count). +- **Consumer Groups**: Real-time consumer group lag and member counts. + +![Kafka Dashboard](images/kafka-dashboard.png) + +## Producer and Consumer Metrics + +OBaaS provides "zero-touch" instrumentation for any Java microservice using the [OpenTelemetry Java Agent](./java-instrumentation.mdx). + +### Reference Examples + +For a practical implementation, see the following projects in the `cloudbank-v5` directory: +- **[helidon-producer](https://github.com/oracle/microservices-backend/tree/main/cloudbank-v5/helidon-producer/README.md)**: Demonstrates producing messages using MicroProfile Reactive Messaging. +- **[helidon-consumer](https://github.com/oracle/microservices-backend/tree/main/cloudbank-v5/helidon-consumer/README.md)**: Demonstrates consuming messages with automatic trace propagation. + +Both services illustrate how to configure OTLP metrics by simply setting the `OTEL_INSTRUMENTATION_KAFKA_METRICS_ENABLED` flag. + +### Enabling Application Metrics + +To enable Kafka-specific metrics in your microservice, you must set the following environment variable in your `values.yaml`: + +```yaml +env: + - name: OTEL_INSTRUMENTATION_KAFKA_METRICS_ENABLED + value: "true" +``` + +### Automated Instrumentation and Configuration + +When you deploy a microservice using the OBaaS sample app chart, the platform handles the following automatically: +- **Agent Injection**: The OpenTelemetry Java Agent is automatically injected into your pod as an init container. +- **Endpoint Configuration**: The `OTEL_EXPORTER_OTLP_ENDPOINT` is dynamically set to point to the SigNoz OTLP collector. +- **Trace Propagation**: The agent automatically handles the injection and extraction of trace headers into Kafka messages, ensuring end-to-end distributed tracing without any code changes. + +### Key Performance Indicators (KPIs) + +The following metrics are exported by the agent and available in the SigNoz Metrics Explorer: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Metric NameDescription
kafka.producer.record_send_rateAverage records sent per second.
kafka.producer.request_latency_maxMaximum acknowledgment time from the broker.
kafka.producer.outgoing_byte_rateData throughput in bytes per second.
kafka.consumer.fetch_manager_records_lag_maxMaximum lag across all assigned partitions.
kafka.consumer.bytes_consumed_totalTotal volume of data processed by the consumer.
+ +## Distributed Tracing & Logging + +OBaaS automatically correlates every Kafka operation with distributed traces and structured JSON logs. + +- **Trace Correlation**: Every log generated during a Kafka send or receive operation is stamped with `trace_id` and `span_id`. +- **Latency Attribution**: SigNoz renders a single flamegraph showing the original HTTP request, the Kafka publish operation, and the subsequent message processing in the consumer. + +> **Tip: Helidon 4 and Reactive Messaging** +> +> Helidon 4's use of **Java 21 Virtual Threads** ensures that the blocking operations of the Kafka client (like broker acknowledgments) do not block OS threads, while the OTEL agent maintains full context propagation across these virtual threads. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/metricslogstraces.md b/docs-source/site/versioned_docs/version-2.1.2/observability/metricslogstraces.md new file mode 100644 index 000000000..baa701c13 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/metricslogstraces.md @@ -0,0 +1,39 @@ +--- +title: Metrics, Logs and Traces +sidebar_position: 4 +--- +:::note +More details can be found in the [SigNoz Documentation](https://signoz.io/docs/introduction/). +::: + +## Metrics + +To access metrics in SigNoz, click on _Services_ in the menu to see the list of applications. + +![Service List](images/service-list.png) + +Click on any of the services to see its metrics in a dashboard. + +![Service Metrics](images/service-metrics.png) + +## Logs + +To access logs in SigNoz, click on _Logs_ in the menu to access the Log Explorer where logs for all the applications and platform services can be accessed. + +![SigNoz logs](images/signoz-logs.png) + +Logs can be filtered based on Namespaces, Deployments, Pods etc. Clicking on any log line will show more details regarding a log event. + +![SigNoz Logs Details](images/signoz-logs-details.png) + +## Traces + +To access Traces in SigNoz, click on _Traces_ in the menu to access the Traces view where all trace events can be accessed. + +![SigNoz Traces](images/signoz-traces.png) + +Traces can be filtered based on Service, HTTP Routes etc. Click on a trace to see its details. + +![SigNoz Traces Details](images/signoz-traces-details.png) + +Logs for a trace event can directly be accessed using the _Go to related logs_ link. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/overview.md b/docs-source/site/versioned_docs/version-2.1.2/observability/overview.md new file mode 100644 index 000000000..b7e16a04b --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/overview.md @@ -0,0 +1,31 @@ +--- +title: Introduction and Overview +sidebar_position: 1 +--- + +Oracle Backend for Microservices and AI includes SigNoz, which is an observability platform to collect and provide access to logs, metrics, and traces for the platform itself and for your applications. + +The diagram below provides an overview of SigNoz: + +![Observability Overview](images/observability-overview.png) + +In the diagram above: + +- You may deploy applications into the platform and can either send the metrics, logs, and traces to the SigNoz OpenTelemetry collector or configure annotations on the application pod for SigNoz to scrape metrics endpoints from the application pod directly. Similarly, traces can be generated and sent to the SigNoz OpenTelemetry collector using the OpenTelemetry SDK. Please refer to the [OpenTelemetry Collector - architecture and configuration guide](https://signoz.io/blog/opentelemetry-collector-complete-guide/) for details. +- The [Oracle Database Exporter](./dbexporter.md) and Kube State Metrics are pre-installed and SigNoz is configured to collect metrics from them. +- SigNoz is populated with a set of [pre-installed dashboards](./dashboards.md). + +:::note +More details can be found in the [SigNoz Documentation](https://signoz.io/docs/introduction/). +::: + +### Oracle Database Monitoring Explorer + +With Oracle Backend for Microservices and AI, you can choose to install [Oracle Database Monitoring Explorer](https://oracle.github.io/oracle-db-appdev-monitoring/). The tool provides observability for Oracle Database so that users can understand performance and diagnose issues easily across applications and the database. The project also provides dashboards for SigNoz. + +### Next Steps + +- [Access SigNoz](./access.md) — Retrieve credentials and connect to the SigNoz UI +- [Configure your applications](./configure.md) — Add OpenTelemetry and Micrometer to your services +- [Explore dashboards](./dashboards.md) — Browse the 20+ pre-installed dashboards +- [Kafka Observability](./kafka.md) — Monitor Kafka clusters, producers, and consumers diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-persistent-queue.md b/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-persistent-queue.md new file mode 100644 index 000000000..b32de051c --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-persistent-queue.md @@ -0,0 +1,154 @@ +--- +title: Persistent SigNoz collector queues +sidebar_position: 6.2 +--- + +The [persistent queue example](https://github.com/oracle/microservices-datadriven/blob/main/helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml) +configures queuing and backpressure in the SigNoz collector to help mitigate +telemetry bursts overwhelming ClickHouse. It buffers pending exports on disk, +bounds concurrent export requests and blocks enqueueing when a queue is full. +This gives ClickHouse time to recover from temporary ingestion pressure or +backend interruptions. + +Layer this example after a +[small or medium sizing profile](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles). +It uses one collector with a dedicated PVC. The distributed profile requires +independent storage for each collector and cannot share this queue directory. + +## What the example configures + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SettingExample configurationPurpose
Collector deployment1 replica, autoscaling disabled, Recreate rolloutsKeep one collector attached to the queue volume and avoid overlapping pods during upgrades.
Exporter coverageTraces, metrics, logs, metadata and meter dataEnable persistent queues on all five ClickHouse exporters.
Queue storageSeparate signoz-collector-queue PVC, requesting 20Gi with ReadWriteOncePodRetain queued exports across pod replacement and restrict the claim to one pod.
Storage extensionfile_storage/queue, mounted under /var/lib/otelcol/queueStore exporter queues on the PVC using stable exporter and extension IDs.
Queue capacity1,000 requests/batches per exporter queueBound the pending backlog. Capacity is measured in requests, not records or bytes.
Export concurrency2 consumers per exporter queueLimit concurrent exports from each queue to ClickHouse.
Backpressureblock_on_overflow: trueBlock enqueueing until space becomes available, allowing pressure to propagate through the collector pipeline.
Retry policy5-second initial backoff, 30-second maximum backoff, unlimited elapsed retry timeKeep retrying retryable export failures while the backend recovers.
Export timeout30 seconds per attemptBound the duration of individual export attempts.
File storageDirectory creation, fsync and rebound compaction enabledPersist writes and reclaim file space after queues drain, with additional I/O and temporary disk-space requirements.
Volume permissionsUID/GID and volume group 10001Run the collector as a non-root user with write access to the queue volume.
Existing collector configurationPreserved signal pipelines and diagnostic extensions; memory limiting and batching inherited from the sizing profileAdd persistence alongside the profile's processing and memory controls.
+ +The request counts, concurrency and storage capacity are starting values. Size +them against your telemetry volume, payload sizes, storage performance and target +buffering duration. Queuing absorbs temporary excess; sustained ingestion must +remain below ClickHouse's processing capacity, with enough headroom to drain the +backlog. The consumer count bounds concurrency rather than imposing a fixed +telemetry rate. + +## Use the example + +Copy [signoz-collector-queue-pvc.yaml](https://github.com/oracle/microservices-datadriven/blob/main/helm/infra-charts/obaas/examples/signoz-collector-queue-pvc.yaml) +to a site-specific manifest. Select a durable CSI StorageClass supporting +`ReadWriteOncePod`, file locking and write permissions through `fsGroup`. The +manifest uses the default StorageClass unless you set `storageClassName`. Check +the allocated capacity: providers may provision more than the requested size. + +From the repository root, apply the PVC in the release namespace and layer the +queue values after your environment and sizing values: + +```bash +kubectl create namespace +kubectl -n apply -f + +helm template helm/infra-charts/obaas -n \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml \ + > /tmp/obaas-persistent-queue-rendered.yaml + +helm install helm/infra-charts/obaas -n \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml +``` + +These commands illustrate a fresh installation after preparing OBaaS +prerequisites. Use medium in place of small if appropriate, and skip namespace +creation when it already exists. With `WaitForFirstConsumer`, the PVC can remain +Pending until the collector is scheduled. Review the rendered configuration +before installing; Helm replaces lists such as volumes, mounts and extensions. +Protect rendered files containing credentials. + +For an existing collector, drain its memory queues before enabling persistence; +the rollout does not copy them to disk. Keep the same PVC and exporter/extension +IDs for replay. The PVC is managed separately from Helm and survives release +uninstallation. Drain persistent queues before removing the overlay. + +## Operational considerations + +Persistence covers data successfully enqueued at the exporter. Receiver, batch +and processor state can still be in memory. Permanent export errors, disk +exhaustion, upstream retry expiry and storage loss can still lose data; replay +can produce duplicates. Single-collector restarts also interrupt ingestion. + +Monitor queue size/capacity, enqueue/send failures, PVC free space, memory and +telemetry freshness. Leave disk space for compaction and account for file-backed +memory usage. Validate recovery by interrupting a test collector's backend path, +sending identifiable telemetry, replacing its pod with backlog present, and +confirming replay and queue drainage after connectivity returns. Reconcile total +and distinct-record counts without resending the test records. + +See [OpenTelemetry exporter queues and retries](https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector/v0.144.0/exporter/exporterhelper/README.md) +and [file storage and compaction](https://raw.githubusercontent.com/open-telemetry/opentelemetry-collector-contrib/v0.144.0/extension/storage/filestorage/README.md) +for the underlying collector behavior. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-profiles.md b/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-profiles.md new file mode 100644 index 000000000..25a02fcf2 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-profiles.md @@ -0,0 +1,290 @@ +--- +title: SigNoz resource profiles +sidebar_position: 6.1 +--- + +These SigNoz sizing overlays provide example configurations to size the bundled SigNoz chart. Use them as starting allocations for workload assessment. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProfileClickHouse layoutSigNoz collectorsMetadata storeIntended use
Small1 shard, 1 replica1SQLite by default; PostgreSQL optionalEvaluation
Medium1 shard, 1 replica1SQLite by default; PostgreSQL optionalCustom deployment with larger vertical allocations
Distributed2 shards, 1 replica per shard3SQLite by default; PostgreSQL optionalAdaptation of the upstream Community resource reference
+ +The distributed profile follows the component counts and CPU/memory allocations +in [SigNoz Community resource planning](https://signoz.io/docs/setup/capacity-planning/community/resources-planning/). +The example sets both requests and limits to the reference allocation for those +components. Small and medium provide lower resource starting points for OBaaS; +validate their suitability against your workload. + +## Distributed availability and routing + +The distributed example spreads data over two ClickHouse shards with one replica +per shard. It provides horizontal capacity, **no ClickHouse replica redundancy**. +Loss of either shard can interrupt ingestion and complete queries; permanent +volume loss can lose that shard's data. Three ZooKeeper instances provide +coordination quorum, not additional copies of ClickHouse data. The SigNoz server +and its default SQLite metadata store also remain single instances. This profile +is not a highly available deployment. + +[SigNoz distributed ClickHouse guidance](https://signoz.io/docs/manage/administrator-guide/clickhouse/distributed-clickhouse/kubernetes/) +illustrates two replicas per shard plus three ZooKeeper instances. Treat that as +a separate availability design: budget resources and storage per replica, place +replicas across failure domains, verify backup/restore and failover, and plan +migration before changing an existing layout. That upstream page uses an older +`schemaMigrator` key; this bundled chart uses `telemetryStoreMigrator`. + +The example moves Prometheus scraping and Kubernetes events to the singleton +`k8s-infra.otelDeployment`. Its outage creates a collection gap even if all three +central collectors are healthy. Do not increase this singleton's replica count +without assigning disjoint scrape targets and event collection ownership; +otherwise telemetry can be duplicated. Central collector replication does not +replicate its work. + +Three central collector replicas also do not guarantee balanced ingestion. A +Kubernetes Service balances connections, and long-lived OTLP/gRPC connections +can remain pinned to one pod. Measure accepted telemetry, queues, memory and CPU +**per pod**. +Consider client-side gRPC balancing or a gRPC-aware proxy only after testing the +client, discovery, connection churn and failure behavior. See +[OpenTelemetry scaling guidance](https://opentelemetry.io/docs/collector/scaling/). + +The pinned SigNoz collector v0.144.10 +[span-metrics implementation](https://github.com/SigNoz/signoz-otel-collector/blob/v0.144.10/processor/signozspanmetricsprocessor/processor.go) +aggregates individual spans in local maps, resets aggregates for delta export, +and adds `signoz.collector.id` to dimensions. The bundled configuration selects +`AGGREGATION_TEMPORALITY_DELTA` and retains that collector dimension. This source +check supports keeping the current settings; it is not an end-to-end validation +of multi-replica queries. Do not remove collector identity, switch temporality, +or prescribe trace-ID affinity from generic stateful-processor advice alone. +Before changing routing, distribute known spans across replicas and compare +service/operation call counts, errors and merged histogram counts/buckets with a +single-collector baseline, aggregating across collector IDs. Exercise reconnects +and pod replacement. Verify metrics routing separately, especially cumulative +streams, and avoid replaying the same spans to multiple collectors. + +## Resource allocations + +Each cell shows CPU cores / memory GiB, as **request → limit**, per instance. +Memory expressed in MiB in YAML is shown as fractional GiB here. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentSmall (Requests → Limits)Medium (Requests → Limits)Distributed (Requests → Limits)
ClickHouse, per shard2 / 8 → 4 / 164 / 16 → 8 / 3216 / 32 → 16 / 32
SigNoz collector, each0.25 / 0.5 → 1 / 21 / 2 → 2 / 44 / 16 → 4 / 16
SigNoz server0.25 / 0.5 → 1 / 10.5 / 1 → 2 / 24 / 8 → 4 / 8
ZooKeeper, each0.25 / 2 → 1 / 40.25 / 2 → 1 / 42 / 8 → 2 / 8
Node agent, per node0.1 / 0.25 → 0.5 / 0.50.25 / 0.5 → 1 / 10.25 / 0.5 → 1 / 1
Cluster collector, singleton0.25 / 0.5 → 1 / 10.5 / 1 → 2 / 21 / 2 → 2 / 4
+ +### Totals + +These totals include all ClickHouse, SigNoz collector, SigNoz server and ZooKeeper +instances, the ClickHouse operator and its metrics exporter, and the singleton +cluster collector. Each cell shows **requests → limits**. + + + + + + + + + + + + + + + + + + + + + + + + + + +
ProfileCPU coresMemory (GiB)
Small3.2 → 911.875 → 24.75
Medium6.45 → 1622.375 → 44.75
Distributed55.2 → 57146.375 → 148.75
+ +## Configuring your cluster + +Run from the repository root after preparing OBaaS prerequisites, database, +access, secrets and cluster capacity. Replace the release, namespace and values +placeholders with the settings for your installation. + +```bash +helm lint helm/infra-charts/obaas \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f + +helm template helm/infra-charts/obaas -n \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f > /tmp/obaas-rendered.yaml + +helm install helm/infra-charts/obaas \ + -n --create-namespace \ + -f \ + -f helm/infra-charts/obaas/examples/values-signoz-small.yaml \ + -f +``` + +Substitute medium or distributed as appropriate. Inspect rendered files securely: +Later files override earlier ones, and YAML lists replace entire lists. Merge custom receivers, processors and RBAC deliberately. + +## Storage, retention and buffering + +Illustrative ClickHouse PVC capacities are 200Gi (small), 500Gi (medium) and 1Ti +**per shard** (distributed). ZooKeeper uses 20Gi per instance. SQLite, when used, +has 10Gi. Select storage +classes, volume performance and capacity in an overlay. For example: + +```yaml +signoz: + clickhouse: + persistence: + storageClass: + size: + zookeeper: + persistence: + storageClass: + signoz: + persistence: + storageClass: +``` + +Use measured compressed storage growth across telemetry and dependent tables, +desired retention, shard distribution and replication to estimate capacity. +Allow additional room for merges, diagnostics, delayed TTL cleanup and recovery. +Separate PVCs on the same exhausted backing filesystem do not isolate failures. +Shrinking PVCs is not a supported way to move down a size profile. + +The included diagnostic TTL settings do not configure application retention. +Choose application logs, traces and metrics retention independently (for example, +2, 7 or 15 days) using the version-appropriate +[SigNoz retention controls](https://signoz.io/docs/userguide/retention-period/). +Verify dependent-table TTLs, existing-data behavior and disk reclamation before +claiming that a retention policy bounds storage. + +All three collector tiers set `GOMEMLIMIT` and a `memory_limiter`, with +headroom below their container limits. The central collector also bounds batch +sizes. Starting values for the additional tiers are: + + + + + + + + + + +
Tier / profileContainer limit (MiB)GOMEMLIMITLimiter hard / spike (MiB)
Node / small512300MiB384 / 64
Node / medium or distributed1024600MiB768 / 128
Cluster / small1024600MiB768 / 128
Cluster / medium20481200MiB1536 / 256
Cluster / distributed40962400MiB3072 / 512
+ +The soft refusal threshold is hard limit minus spike allowance. The Go runtime +limit is a soft target, not a cap on total process RSS. Tune all three settings +together under load. + +Memory pressure can refuse or lose telemetry at the agents and singleton before +it reaches a central persistent queue. Pull receivers and file readers have +different retry/checkpoint behavior; memory limiting cannot guarantee delivery. +SDK/agent retries can expire. + +Exporter queues and retries retain chart defaults. These examples do not add +persistent queue storage or promise restart-surviving buffering. For small or +medium, the optional [persistent queue overlay](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-persistent-queue) +provides a dedicated PVC for a single collector. + +## Existing releases and validation + +These examples describe fresh installations. Before +changing an existing release, preserve its effective values, inventory versions +and topology, back up telemetry and metadata, and test restoration. Establish +data placement, distributed query coverage, schema compatibility, downtime and +recovery before changing shards or replicas. Enabling PostgreSQL does not copy +SQLite metadata. A Helm rollback alone does not reverse database migrations. +Review the [OBaaS upgrade guidance](https://oracle.github.io/microservices-backend/obaas/docs/observability/upgrade/) +and the upstream procedures for the installed versions. + +Helm linting and rendering validate chart compatibility only. Before using a +profile operationally, measure sustained/burst ingestion with representative +payloads, cardinality and concurrent queries; reconcile generated and queryable +telemetry; measure freshness, queue drainage, memory peaks, throttling, query +latency and disk growth. Exercise backend slowdown, collector restart, disk +pressure and recovery. Use those measurements to choose resources, storage and +operational targets for your environment. Kafka is separate and is not enabled +by these overlays. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-sqlstore.md b/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-sqlstore.md new file mode 100644 index 000000000..3c3e7170a --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/signoz-sqlstore.md @@ -0,0 +1,65 @@ +--- +title: SigNoz SQLStore +sidebar_position: 6.3 +--- + +SigNoz uses a SQL store for metadata such as organizations, users, dashboards, +alerts and configuration, separate from the Clickhouse telemetry store. SQLite is the default for quick setups. PostgreSQL is the recommended alternative metadata store; see [SigNoz relational database configuration](https://signoz.io/docs/manage/administrator-guide/configuration/relational-database/). + +## Bundled PostgreSQL example + +The [values-signoz-postgres.yaml example](https://github.com/oracle/microservices-datadriven/blob/main/helm/infra-charts/obaas/examples/values-signoz-postgres.yaml) +enables **SigNoz's bundled PostgreSQL subchart**. It deploys a single PostgreSQL +instance inside Kubernetes with a persistent volume. The parent SigNoz chart +configures the SQLStore provider, connection string and credential environment +from those values. + +Layer the example after your normal OBaaS values and optional +[SigNoz sizing profile](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles). +Follow its instructions to create the password Secret and select a suitable +StorageClass. PostgreSQL resources and storage are configured separately from +the sizing profiles. + +Use this example for evaluation or deployments where you operate PostgreSQL +yourself. The bundled chart does not configure replication, automatic failover +or backups. Increasing its replica count does not establish a replicated +PostgreSQL service. + +## Managed PostgreSQL + +For production, it is recommended to **use a managed PostgreSQL service** or similarly configured PostgreSQL server with appropriate availability, +backup, point-in-time recovery and maintenance settings. This follows +[SigNoz's resource-planning recommendation](https://signoz.io/docs/setup/capacity-planning/community/resources-planning/) +and reduces the database operations you must manage inside the OBaaS cluster. + +For an external managed database, leave the bundled PostgreSQL chart disabled +and configure SQLStore on the SigNoz server. For example: + +```yaml +signoz: + postgresql: + enabled: false + signoz: + env: + SIGNOZ_SQLSTORE_PROVIDER: postgres + SIGNOZ_SQLSTORE_POSTGRES_DSN: + valueFrom: + secretKeyRef: + name: signoz-sqlstore + key: dsn +``` + +Create `signoz-sqlstore` in the release namespace with a `dsn` key containing +the complete PostgreSQL connection URI. Keep credentials in a Secret, encode +URI credentials correctly, and apply the provider's TLS and CA requirements. +The database must already exist, the SigNoz pods must be able to reach it, and +the database user needs permission to create and migrate SigNoz's metadata +tables. Size and monitor the database for metadata volume and query load. + +## Existing installations + +Switching SQLStore providers does not copy existing SQLite metadata into +PostgreSQL. Back up the current metadata store and validate a migration and +restore procedure before changing providers. Confirm users, dashboards, alerts +and other configuration after migration, and test recovery independently of +ClickHouse backups. A Helm rollback alone does not reverse database migrations. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/_category_.json new file mode 100644 index 000000000..83305cf2f --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "SigNoZ upgrade paths", + "position": 10, + "link": { + "type": "doc", + "id": "observability/upgrade/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/index.md b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/index.md new file mode 100644 index 000000000..deb844f0b --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/index.md @@ -0,0 +1,18 @@ +--- +title: Upgrade SigNoZ in place +sidebar_position: 9 +--- + +# Upgrade SigNoZ in place + +OBaaS 2.1.2 requires ClickHouse `25.12.5` before its new telemetry-store +migrations run. The migrator is a Helm `pre-upgrade` hook, so a single application +upgrade from an older ClickHouse version can fail before the database is updated. + +Follow the [two-step ClickHouse and SigNoZ upgrade procedure](../../upgrade/index.mdx#upgrade-signoz-and-clickhouse-in-two-steps) +after applying the required operator and Gateway API CRD updates. That procedure +is for installations where data loss is acceptable and does not create backups. + +If existing data must be preserved, follow [SigNoZ's ClickHouse upgrade and backup guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/) +and validate your recovery point before upgrading. Do not select +`signozUpgrade.mode=destructive-replace` for this in-place upgrade. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/protected-recovery.md b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/protected-recovery.md new file mode 100644 index 000000000..215b00ad7 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/protected-recovery.md @@ -0,0 +1,310 @@ +--- +title: Upgrade with protected recovery +sidebar_position: 1 +--- + +# Upgrade to SigNoZ 0.142.1 with protected recovery + +This is the recommended upgrade procedure. It uses two Helm commands. Stage 1 +creates retained Kubernetes CSI snapshots and upgrades ClickHouse. Stage 2 +upgrades SigNoZ and runs its telemetry migrations only after validating the +Stage 1 result. + +## When to use this guide + +Use this guide for production environments and whenever historical telemetry, +dashboards, users, or ClickHouse data must remain recoverable. + +## Prerequisites + +Add and update the released OBaaS Helm repository: + +```bash +helm repo add obaas https://oracle.github.io/microservices-backend/helm +helm repo update +``` + +Confirm that: + +- The existing release uses SigNoZ, ClickHouse, and ZooKeeper persistent + volumes. +- The storage CSI driver supports Kubernetes `VolumeSnapshot` resources. +- A compatible `VolumeSnapshotClass` exists or can be created. +- Provider backup limits and budget can accommodate complete snapshots of all + protected volumes. +- The same customer values, database settings, secret names, image settings, + and other overrides are available for both stages. + +Download the versioned OBaaS helper scripts. A source checkout is not required: + +```bash +mkdir -p /tmp/obaas-signoz-upgrade + +curl --fail --location \ + --output /tmp/obaas-signoz-upgrade/prepare-oke-volume-snapshots.sh \ + https://raw.githubusercontent.com/oracle/microservices-backend/OBAAS-2.1.1/helm/infra-charts/tools/prepare-oke-volume-snapshots.sh +curl --fail --location \ + --output /tmp/obaas-signoz-upgrade/validate-signoz-snapshot-restore.sh \ + https://raw.githubusercontent.com/oracle/microservices-backend/OBAAS-2.1.1/helm/infra-charts/tools/validate-signoz-snapshot-restore.sh +curl --fail --location \ + --output /tmp/obaas-signoz-upgrade/diagnose-signoz-upgrade.sh \ + https://raw.githubusercontent.com/oracle/microservices-backend/OBAAS-2.1.1/helm/infra-charts/tools/diagnose-signoz-upgrade.sh + +chmod +x /tmp/obaas-signoz-upgrade/*.sh +``` + +Replace all placeholders in the following commands with values for the existing +release. + +## Step-by-step procedure + +### 1. Record the current environment + +```bash +kubectl config current-context +helm status -n +kubectl get pods,pvc -n + +helm get values -n -o yaml \ + > /tmp/obaas-pre-signoz-upgrade-values.yaml +helm get manifest -n \ + > /tmp/obaas-pre-signoz-upgrade-manifest.yaml +``` + +Wait for the stateful workloads and ClickHouse pods to report ready: + +```bash +kubectl rollout status statefulset/-signoz \ + -n --timeout=5m +kubectl rollout status statefulset/-zookeeper \ + -n --timeout=5m +kubectl wait --for=condition=Ready pod \ + -l clickhouse.altinity.com/chi=-clickhouse \ + -n --timeout=5m +``` + +Inspect the component pods, persistent volumes, restart counts, and recent +warning events: + +```bash +kubectl get pods,pvc -n \ + | grep -E 'signoz|clickhouse|zookeeper' +kubectl get events -n \ + --field-selector type=Warning \ + --sort-by=.lastTimestamp +``` + +Confirm that all listed pods are `Running` and fully ready, all listed PVCs are +`Bound`, and no component is repeatedly restarting. Investigate unresolved +warning events before continuing. + +Verify the SigNoZ health endpoint. In one terminal, run: + +```bash +kubectl port-forward -n \ + service/-signoz 18080:8080 +``` + +While the port-forward is running, use another terminal to run: + +```bash +curl --fail 'http://127.0.0.1:18080/api/v1/health?live=1' +``` + +Stop the port-forward after the health request succeeds. Log in to SigNoZ and +select an existing service with historical telemetry. Record the service name, +signal type, and a time range containing data so that the same telemetry can be +verified after Stage 2. + +### 2. Prepare volume snapshots + +#### OKE with OCI Block Volume + +Prepare each OKE cluster once: + +```bash +/tmp/obaas-signoz-upgrade/prepare-oke-volume-snapshots.sh \ + --namespace \ + --release +``` + +The script installs pinned Kubernetes VolumeSnapshot CRDs, creates the +non-default `obaas-oci-bv-snapshot` class, and validates the SigNoZ, ClickHouse, +and ZooKeeper PVCs. The class uses the OCI Block Volume CSI driver, full +backups, and `deletionPolicy: Retain`. + +Validate an already prepared cluster without changing it: + +```bash +/tmp/obaas-signoz-upgrade/prepare-oke-volume-snapshots.sh \ + --namespace \ + --release \ + --check-only +``` + +Kubernetes VolumeSnapshots do not require a backup size. OCI backs up each +complete source Block Volume. Review the protected PVC capacities and verify +that OCI Block Volume Backup service limits and budget can accommodate them. + +#### Other Kubernetes providers + +Install the provider-supported snapshot CRDs, common snapshot controller, CSI +snapshot implementation, and `VolumeSnapshotClass`. Verify that the snapshot +class uses the same CSI driver as the SigNoZ PVCs. Do not use the OKE +preparation script with a non-OCI storage driver. + +### 3. Run Stage 1 + +For OKE: + +```bash +helm upgrade obaas/obaas \ + --version 0.1.1 \ + -n \ + --timeout 30m \ + -f \ + --set signozUpgrade.stage=stage1 \ + --set signozUpgrade.backup.volumeSnapshotClassName=obaas-oci-bv-snapshot \ + --set signoz.signoz.image.tag=v0.113.0 \ + --set signoz.otelCollector.image.tag=v0.144.1 \ + --set signoz.telemetryStoreMigrator.enabled=false \ + --set signoz.clickhouse.image.tag=25.12.5 +``` + +For another Kubernetes provider: + +```bash +helm upgrade obaas/obaas \ + --version 0.1.1 \ + -n \ + --timeout 30m \ + -f \ + --set signozUpgrade.stage=stage1 \ + --set signozUpgrade.backup.volumeSnapshotClassName= \ + --set signoz.signoz.image.tag=v0.113.0 \ + --set signoz.otelCollector.image.tag=v0.144.1 \ + --set signoz.telemetryStoreMigrator.enabled=false \ + --set signoz.clickhouse.image.tag=25.12.5 +``` + +Stage 1: + +1. Invalidates any earlier completion marker. +2. Creates retained snapshots for the SigNoZ, ClickHouse, and ZooKeeper PVCs. +3. Waits for every snapshot to become ready. +4. Upgrades ClickHouse to `25.12.5`. +5. Validates the running ClickHouse version and original PVC identities. +6. Records a completion marker for Stage 2. + +Do not continue until the following checks pass: + +```bash +kubectl get volumesnapshots -n +/tmp/obaas-signoz-upgrade/diagnose-signoz-upgrade.sh \ + +``` + +Every snapshot must report `readyToUse: true`, ClickHouse must be healthy, and +the diagnostics must show a complete Stage 1 marker. + +### 4. Validate the ClickHouse restore point + +Prove that the newest ClickHouse snapshot can provision a new volume and that +the restored volume contains recognizable ClickHouse data: + +```bash +NAMESPACE= \ +RELEASE_NAME= \ +/tmp/obaas-signoz-upgrade/validate-signoz-snapshot-restore.sh +``` + +This smoke test creates a temporary PVC, mounts it read-only, and retains it for +inspection. It does not mount or change the live ClickHouse PVC. The restore +PVC size is selected automatically from the snapshot's `status.restoreSize`. +Run the cleanup commands printed by the script after inspection. + +Do not continue to Stage 2 if restore validation fails. + +### 5. Run Stage 2 + +```bash +helm upgrade obaas/obaas \ + --version 0.1.1 \ + -n \ + --timeout 30m \ + -f \ + --set signozUpgrade.stage=stage2 +``` + +Before modifying workloads, the Stage 2 gate verifies the completion marker, +ClickHouse version, original PVC identities, and retained snapshots. It then +upgrades SigNoZ and the collector, runs telemetry migrations, removes obsolete +resources, runs the OBaaS SigNoZ setup, and validates historical and newly +ingested telemetry rows. + +## Validation + +```bash +kubectl get pods,jobs -n +/tmp/obaas-signoz-upgrade/diagnose-signoz-upgrade.sh \ + +``` + +Confirm: + +- SigNoZ is running `v0.142.1`. +- The SigNoZ collector is running `v0.144.10`. +- ClickHouse is running `25.12.5`. +- The telemetry-store migrator and SigNoZ setup Jobs completed. +- Existing users can sign in. +- Existing dashboards remain available. +- Telemetry from before Stage 1 is visible. +- New metrics, logs, and traces are ingested. + +Keep the Stage 1 snapshots through the customer's upgrade and recovery window. +They are retained independently of Helm and may incur storage charges. + +For OKE, inventory both Kubernetes objects and OCI backup handles: + +```bash +kubectl get volumesnapshots -n +kubectl get volumesnapshotcontents \ + -o custom-columns='NAME:.metadata.name,POLICY:.spec.deletionPolicy,HANDLE:.status.snapshotHandle' +``` + +Remove snapshots and retained provider backups only under the customer's backup +retention policy. + +## Rollback and recovery + +ClickHouse upgrades its on-disk format in place, so an automatic downgrade is +not guaranteed. Do not start an older ClickHouse version against the upgraded +live PVC. + +If Stage 1 or Stage 2 fails: + +1. Stop and retain the live PVCs, VolumeSnapshots, and provider backup handles. +2. Do not continue to Stage 2 when the Stage 1 marker or restore validation is + incomplete. +3. Collect the diagnostics described below. +4. Follow the storage provider's procedure to create replacement volumes from + the retained snapshots. OKE restores a snapshot into a new Block Volume; it + does not revert an existing PVC in place. +5. Validate restored data before reconnecting workloads. + +The chart does not automatically replace live PVCs during recovery. Preserve +the original resources and contact Oracle Support before rebinding restored +volumes in a production environment. + +## Troubleshooting + +Collect read-only diagnostics: + +```bash +/tmp/obaas-signoz-upgrade/diagnose-signoz-upgrade.sh \ + +``` + +Stage 2 stops before changing workloads when its marker, version, PVC, or +snapshot checks fail. Correct the reported condition; do not bypass the gate by +manually creating or editing the completion marker. diff --git a/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/without-protected-recovery.md b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/without-protected-recovery.md new file mode 100644 index 000000000..11e6b6704 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/observability/upgrade/without-protected-recovery.md @@ -0,0 +1,15 @@ +--- +title: Upgrade without protected recovery +sidebar_position: 2 +--- + +# Upgrade without protected recovery + +For installations where observability data loss is acceptable, follow the +[two-step ClickHouse and SigNoZ upgrade procedure](../../upgrade/index.mdx#upgrade-signoz-and-clickhouse-in-two-steps). +Upgrade ClickHouse with migration disabled first, verify the running server +version, then upgrade SigNoZ and the collector with migration enabled. + +This procedure does not create backups or guarantee data preservation. If +existing data must be preserved, follow [SigNoZ's ClickHouse upgrade and backup guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/) +and validate a recovery point before upgrading. diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/platform/_category_.json new file mode 100644 index 000000000..3432ce1b4 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Platform Services", + "position": 4, + "link": { + "type": "doc", + "id": "platform/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/apacheapisix.md b/docs-source/site/versioned_docs/version-2.1.2/platform/apacheapisix.md new file mode 100644 index 000000000..8b7236900 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/apacheapisix.md @@ -0,0 +1,322 @@ +--- +title: Apache APISIX +sidebar_position: 1 +--- + +[Apache APISIX](https://apisix.apache.org) is an open source cloud native API platform that supports the full lifecycle of API management including publishing, traffic management, deployment strategies, and circuit breakers. + +## Installing APISIX + +Apache APISIX will be installed if the `apisix.enabled` is set to `true` in the `values.yaml` file. The default namespace for Apache APISIX is `apisix`. + +## Configure APISIX for multiple Eureka replicas + +By default, OBaaS deploys three Eureka replicas. APISIX connects directly to each +Eureka StatefulSet pod so that it can refresh the service registry and fail over +to another Eureka replica. + +If you change `eureka.replicas`, also update +`apisix.apisix.discovery.registry.eureka.host`. Include one host entry for every +Eureka replica, numbered from `0` through `eureka.replicas - 1`. + +For example, the following values configure five Eureka replicas: + +```yaml +eureka: + replicas: 5 + +apisix: + apisix: + discovery: + registry: + eureka: + host: + - "http://{{ .Release.Name }}-eureka-0.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-1.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-2.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-3.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-4.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + prefix: "/eureka/" +``` + +Apply the updated values with Helm: + +```shell +helm upgrade --install helm/infra-charts/obaas \ + --namespace \ + --create-namespace \ + -f +``` + +Verify that the APISIX ConfigMap includes an endpoint for each Eureka replica: + +```shell +kubectl -n get configmap -apisix \ + -o yaml | yq '.data."config.yaml"' \ + | yq '.discovery.registry.eureka.host' +``` + +The command should return five endpoints for the example configuration, from +`-eureka-0` through `-eureka-4`. + +## Accessing Apache APISIX + +Oracle Backend for Microservices and AI deploys the Apache APISIX Gateway and Dashboard in the `apisix` namespace by default. The gateway is exposed via an external load balancer and an ingress controller. + +To access the Apache APISIX APIs, use kubectl port-forward to create a secure channel to `service/apisix-admin`. Run the following command to establish the secure tunnel (replace the example namespace `obaas-dev` with the namespace where APISIX is deployed): + +```shell +kubectl port-forward -n obaas-dev svc/apisix-admin 9180 +``` + +## Retrieving admin key + +To access the APISIX APIs, you need the admin key. Retrieve it with the following command (replace the example namespace `obaas-dev` with the namespace where APISIX is deployed): + +**Option 1 - Using yq:** + +```bash +kubectl -n obaas-dev get configmap apisix -o yaml | yq '.data."config.yaml"' | yq '.deployment.admin.admin_key[] | select(.name == "admin") | .key' +``` + +**Option 2 - Manual retrieval:** + +If the command above doesn't work: + +1. Run: `kubectl get configmap apisix -n obaas-dev -o yaml` +1. Look for the `config.yaml` section +1. Find `deployment.admin.admin_key` and copy the key value + +Test the admin key by running a simple curl command; it should return the list of configured routes. + +```shell +curl http://127.0.0.1:9180/apisix/admin/routes -H "X-API-key: $admin_key" -X GET +``` + +## Accessing APISIX Dashboard + +:::note + Note that all functionality is not available in the dashboard. You might need to use the REST APIs +::: + +APISIX has an embedded dashboard that can be accessed after a tunnel is established to the `apisix-admin` service. The dashboard is available on [http://localhost:8190/ui](http://localhost:8190/ui). **NOTE:** you need the Admin key to be able to access the dashboard. + +![APISIX Dashboard](images/apisix-dashboard.png) + +## Configuring APISIX using REST APIs + +You can configure and update the APISIX gateway using the provided APIs. Pleas refer to the [API Documentation](https://apisix.apache.org/docs/apisix/getting-started/README/) for detailed information. + +## Tracing requests through APISIX + +When SigNoz and APISIX are enabled, OBaaS configures APISIX with the built-in +`opentelemetry` plugin and exports spans to the in-cluster SigNoz OpenTelemetry +collector. APISIX uses the service name `APISIX`, writes its trace context to +JSON access logs, and propagates W3C `traceparent` headers to upstream services. + +This makes the plugin available, but it does **not** enable tracing on every +route. Add the plugin to each route that you want to trace, or attach it through +an APISIX GlobalRule when every route should be traced. The OBaaS chart does not +create a tracing route or GlobalRule for you. + +For a short validation window, configure an existing or new route with an +always-on sampler: + +```yaml +plugins: + opentelemetry: + sampler: + name: always_on +``` + +For production, use parent-based sampling and sample a fraction of new traces. +This preserves the sampling decision of an incoming trace while reducing the +volume of traces that originate at the gateway: + +```yaml +plugins: + opentelemetry: + sampler: + name: parent_base + options: + root: + name: trace_id_ratio + options: + fraction: 0.1 +``` + +Apply the route or GlobalRule through your normal APISIX configuration workflow. +If you use the Admin API, retrieve the current object first and preserve its +matching rules, upstream, authentication, and other plugins when adding the +`opentelemetry` block. + +The APISIX span is the gateway portion of the trace. To continue the same trace +in an upstream Java service, the service must be OpenTelemetry-instrumented and +configured to export to SigNoz. Instrumentation is described in +[Configure Applications for SigNoz](../observability/configure.md). Kafka and +database spans likewise depend on instrumentation in the backend service; an +APISIX span alone is not proof of a complete end-to-end trace. + +### Find APISIX spans and correlated logs in SigNoz + +Port-forward the SigNoz UI service, then open [http://localhost:8080](http://localhost:8080): + +```shell +kubectl -n port-forward \ + svc/-signoz 8080:8080 +``` + +The OpenTelemetry collector's port `8888` exposes Prometheus metrics. It is not +the SigNoz UI and cannot be used to browse traces. + +In **Traces** > **Trace Explorer**, select a recent time range and filter on +service name `APISIX`. To locate one request, filter on its trace ID, for example +the `trace_id` from the APISIX access log. Open a matching trace to inspect the +gateway span and any child spans from instrumented services. + +APISIX access logs include `trace_id`, `span_id`, and `traceparent`. In **Logs +Explorer**, filter on the `trace_id` field to find the matching gateway log +entry. This requires the deployed file-log receiver and parser to preserve the +JSON `trace_id` field; if the trace is present but the log is not, verify that +collector configuration separately. + +## Using custom plugins + +You can install custom plugins in APISIS using the Helm charts. + +First, add an `extraConfigMaps` section to the `values.yaml` file that you use with the `obaas` Helm chart. This will allow you +to create extra arbitrary Config Maps in your cluster as part of the OBaaS installation. In this config map, add one key (data item) +for each plugin, and include the Lua code for the plugin, as shown in the example below. You may list as many custom plugins as desired. + +```yaml +# ConfigMaps created by the parent chart +# Each top-level key becomes a ConfigMap name, with nested keys as data entries +extraConfigMaps: + apisix-custom-plugin: + abd.lua: | + local core = require("apisix.core") + + local plugin_name = "abd" + + local _M = { + version = 0.1, + priority = 2500, + name = plugin_name, + schema = {} + } + + function _M.access(conf, ctx) + core.log.warn("ABD plugin executed") + end + + return _M + xyz.lua: | + local core = require("apisix.core") + + local plugin_name = "xyz" + + local _M = { + version = 0.1, + priority = 2501, + name = plugin_name, + schema = {} + } + + function _M.access(conf, ctx) + core.log.info("XYZ plugin executed") + end + + return _M +``` + +Next, in the `apisix` section, add a `customPlugins` section to configure the plugins, here is an example that loads the two plugins defined above: + +```yaml +# custom plugin +apisix: + apisix: + customPlugins: + enabled: true + luaPath: "/opts/custom_plugins/?.lua" + plugins: + - name: "abd" + attrs: {} + configMap: + name: "apisix-custom-plugin" + mounts: + - key: "abd.lua" + path: "/opts/custom_plugins/apisix/plugins/abd.lua" + - name: "xyz" + attrs: {} + configMap: + name: "apisix-custom-plugin" + mounts: + - key: "xyz.lua" + path: "/opts/custom_plugins/apisix/plugins/xyz.lua" +``` + +:::note + Note that the luaPath does not contain the “apisix/plugins” part because APISIX will automatically add that when it searches for the plugin source code files. +::: + +After you have deployed OBaaS, you can access the APISIX admin service to create a route and attach your plugins to the route. Here is an example of a route that uses the `abd` plugin from the example above: + +```json +{ + "list": [ + { + "key": "/apisix/routes/00000000000000000076", + "value": { + "uri": "/test-plugin*", + "methods": [ + "GET" + ], + "plugins": { + "abd": {} + }, + "update_time": 1772900293, + "upstream": { + "discovery_type": "eureka", + "pass_host": "pass", + "scheme": "http", + "hash_on": "vars", + "tls": { + "verify": false + }, + "service_name": "CONFIG-SERVER", + "type": "roundrobin" + }, + "priority": 0, + "id": "00000000000000000076", + "status": 1, + "name": "abc", + "enable_websocket": false, + "create_time": 1772899208 + }, + "modifiedIndex": 96, + "createdIndex": 77 + } + ], + "total": 1 +} +``` + +You can then hit the uri in the route to test it, for example: + +```bash +curl http://IP_ADDRESS:8080/test-plugin/1 + +{"name":"test-plugin","profiles":["1"],"label":null,"version":null,"state":null,"propertySources":[]} +``` + +You can check the APISIX pod log to confirm the plugin was executed, in this example by verifying you see the HTTP GET and also the `ADB plugin executed` message that the plugin printed: + +``` +2026/03/07 16:18:31 [warn] 56#56: *38964 [lua] abd.lua:13: phase_func(): ABD plugin executed, client: 127.0.0.1, server: _, request: "GET /test-plugin/1 HTTP/1.1", host: "localhost:8080" +127.0.0.1 - - [07/Mar/2026:16:18:31 +0000] localhost:8080 "GET /test-plugin/1 HTTP/1.1" 200 112 0.021 "-" "curl/7.81.0" 10.42.0.48:8080 200 0.022 "http://localhost:8080" +``` + +:::note + Note that you do not need to list your custom plugins in the `apisix.apisix.plugins` list in the `values.yaml` for the `obaas` Helm chart, APISIX will automatically + add your custom plugins to its configuration. +::: diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/coherence.md b/docs-source/site/versioned_docs/version-2.1.2/platform/coherence.md new file mode 100644 index 000000000..dcef94676 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/coherence.md @@ -0,0 +1,150 @@ +--- +title: Coherence Operator +sidebar_position: 3 +--- + +The Oracle Coherence Operator is an open-source Kubernetes operator that enables the deployment and management of Oracle Coherence clusters in Kubernetes environments. It provides features to assist with deploying, scaling, and managing Coherence data grid clusters using cloud-native technologies. [Full Documentation can be found here](https://oracle.github.io/coherence-operator/) + +:::note + Note that the Coherence Operator is deprecated in this release of OBaaS and may be removed in a future release. +::: + +## Installing the Coherence Operator + +The cluster-wide Coherence Operator is installed by the `obaas-prereqs` chart. Install that chart once per cluster and keep `coherence-operator.enabled` set to `true` (the default). The operator runs in the namespace used for the `obaas-prereqs` release and must watch the namespace where an OBaaS release creates a Coherence cluster. + +```yaml +# obaas-prereqs values +coherence-operator: + enabled: true +``` + +Before installing an OBaaS release with Coherence enabled, verify that the operator is ready and the Coherence custom resource definition is established: + +```bash +kubectl rollout status deployment/coherence-operator -n --timeout=5m +kubectl wait --for=condition=Established crd/coherence.coherence.oracle.com --timeout=5m +``` + +## Creating a Coherence Cluster + +### Helm-managed cluster (recommended) + +Enable Coherence in the namespace-scoped `obaas` chart. The provided `values-coherence.yaml` example creates a three-member, ephemeral cluster named `mysample-cluster`, with a 512 MiB JVM heap and an HTTP port on 8080. Set `coherence.name` to a DNS-compatible name unique within the release namespace. The cluster uses the default Coherence image configured by the installed operator unless you override `coherence.image`. + +```bash +helm upgrade --install obaas/obaas \ + -f examples/values-coherence.yaml \ + -n \ + --create-namespace +``` + +Helm creates the `Coherence` custom resource using `coherence.name` in the OBaaS release namespace. Verify `` and wait for all three members: + +```bash +kubectl get coherence -n +kubectl wait -n \ + --for=jsonpath='{.status.readyReplicas}'=3 \ + coherence/ \ + --timeout=5m +kubectl get pods -n +``` + +The Coherence Operator creates and manages an internal health port on `6676` for the cluster members. It configures the Kubernetes liveness probe as `GET /healthz` and the readiness probe as `GET /ready`. This port is intentionally not added to `coherence.ports` or exposed through the application Service. + +To create durable Coherence data, layer an override with persistence settings after `values-coherence.yaml`. Choose a StorageClass and size appropriate to the cluster: + +```yaml +coherence: + coherence: + persistence: + mode: active + persistentVolumeClaim: + storageClassName: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +``` + +The Coherence custom resource is owned by the OBaaS Helm release. Do not create a second resource with the same name outside Helm. + +### Manually managed cluster (advanced) + +For a Coherence cluster that is intentionally independent of an OBaaS Helm release, create its custom resource directly after installing and verifying the operator. Use a namespace of your choice and manage its lifecycle separately from Helm. + +```yaml +apiVersion: coherence.oracle.com/v1 +kind: Coherence +metadata: + name: mysample-cluster +spec: + replicas: 3 + jvm: + memory: + heapSize: 512m + ports: + - name: http + port: 8080 +``` + +```bash +kubectl apply -f mysample-cluster.yaml -n coherence +kubectl describe coherence mysample-cluster -n coherence +kubectl get pods -n coherence +``` + +## Using Coherence with Spring Boot + +To connect your Spring Boot application to a Coherence cluster, add the following dependencies and configuration. Set the client cluster name to the value configured in `coherence.name`; the Helm example uses `mysample-cluster`. [Coherence Spring Documentation](https://spring.coherence.community/4.3.0/index.html#/about/01_overview) + +### Dependencies + +**Maven** (`pom.xml`): + +```xml + + + + com.oracle.coherence.spring + coherence-spring-boot-starter + + + + + com.oracle.coherence.ce + coherence + + +``` + +### Spring Boot Configuration + +Create or update your `application.yaml` file to connect to the Helm-managed cluster. Replace `mysample-cluster` with your chosen cluster name: + +```yaml +coherence: + # Set the instance type to 'client' to connect to an existing cluster + instance: + type: client + + # Configure the cluster connection + cluster: + name: mysample-cluster + + # Configure sessions + sessions: + - name: default + config: coherence-cache-config.xml + priority: 1 + + # Logging configuration (optional) + logging: + destination: slf4j + logger-name: Coherence + + # Server startup timeout (optional) + server: + startup-timeout: 60s +``` diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/conductor.md b/docs-source/site/versioned_docs/version-2.1.2/platform/conductor.md new file mode 100644 index 000000000..92cd27219 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/conductor.md @@ -0,0 +1,24 @@ +--- +title: MicroTx Workflow Orchestration +sidebar_position: 4 +--- + +MicroTx Workflow is a workflow orchestration platform, based on Orkes Conductor, which was originally developed at Netflix. It is designed to coordinate long-running, distributed workflows across microservices by defining tasks, dependencies, and retries, while providing scalability, fault tolerance, and operational visibility through a centralized engine. + +For reference: [Conductor OSS Documentation](https://docs.conductor-oss.org) + +## Installing MicroTx Workflow + +MicroTx Workflow Server is installed when `otmm.workflowServer.enabled` is set to `true` in the `values.yaml` file. The MicroTx transaction coordinator is controlled separately by `otmm.coordinator.enabled`. + +```yaml +otmm: + coordinator: + enabled: true + workflowServer: + enabled: true + console: + enabled: true +``` + +The web user interface is requested with `otmm.console.enabled=true`, but it is deployed only when either `otmm.coordinator.enabled` or `otmm.workflowServer.enabled` is also `true`. The web user interface is optional; you may install just the workflow engine by setting `otmm.workflowServer.enabled=true` and `otmm.console.enabled=false`. diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/configserver.md b/docs-source/site/versioned_docs/version-2.1.2/platform/configserver.md new file mode 100644 index 000000000..418eacee9 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/configserver.md @@ -0,0 +1,105 @@ +--- +title: Spring Cloud Config Server +sidebar_position: 11 +--- + +OBaaS includes the Spring Cloud Config Server. It is configured with the JDBC backend so that you can store your +configuration properties in your Oracle database. The OBaaS database will be pre-configured during OBaaS installation +with a table to hold your properties. + +Please refer to the [Spring Cloud Config Server documentation](https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_spring_cloud_config_server) +for more information about the server itself. + +Here is the definition of the `PROPERTIES` table for your reference: + +``` +Name Null? Type +______________ ___________ _________________ +ID NOT NULL NUMBER +APPLICATION VARCHAR2(4000) +PROFILE VARCHAR2(4000) +LABEL VARCHAR2(4000) +PROP_KEY NOT NULL VARCHAR2(4000) +VALUE NOT NULL VARCHAR2(4000) +CREATED_ON TIMESTAMP(6) +CREATED_BY VARCHAR2(100) +UPDATED_ON TIMESTAMP(6) +UPDATED_BY VARCHAR2(100) +``` + +## Managing configuration properties in the database + +If you have direct access to the database, you can log in and create, update, delete configuration properties in this table as needed. + +If you do not have direct access to the database, you can run the necessary SQL statements in a pod in your Kubernetes cluster with the necessary credentials. + +An example job definition is provided in [https://github.com/oracle/microservices-backend/blob/main/helm/app-charts/obaas-sample-app/examples/sqlcl-pod.yaml](https://github.com/oracle/microservices-backend/blob/main/helm/app-charts/obaas-sample-app/examples/sqlcl-pod.yaml) + +You can edit the SQL statements in this manifest to suit your needs. In the example file, you see the statements to list the currently defined +configuration properties, and then to add two new properties for an application called `billing` in its `default` profile and `latest` label. +See the [Spring Cloud Config Server documentation](https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_spring_cloud_config_server) +to understand how application, profile, and label are used. + +```sql +-- list current config properties +select * from properties; +-- create some new config properties +insert into properties (application, profile, label, prop_key, value) values +('billing', 'default', 'latest', 'apikey', 'abc123'), +('billing', 'default', 'latest', 'subscription', 'xyz456'); +``` + +Once you have edited the manifest, you can start a pod with a command like this: + +```bash +kubectl apply -f your-sqlcl-pod.yaml -n obaas +``` + +Check the pod output to confirm it was successful, using a command like this: + +The example output below was captured with the SQLcl `26.2.2` container image against an Oracle Database Free test schema; your database version, user, and timestamps will differ. + +```bash +kubectl -n obaas logs sqlcl + +SQLcl: Release 26.2 Production on Mon Sep 28 20:11:05 2026 + +Copyright (c) 1982, 2026, Oracle. All rights reserved. + +Connected. + + + ID APPLICATION PROFILE LABEL PROP_KEY VALUE CREATED_ON CREATED_BY UPDATED_ON UPDATED_BY +_____ ______________ __________ _________ _______________ _________ __________________________________ _________________ _____________ _____________ + 1 billing default latest apikey abc123 28-SEP-26 08.10.32.118082000 PM SQLCL_DOC_TEST + 2 billing default latest subscription xyz456 28-SEP-26 08.10.32.118082000 PM SQLCL_DOC_TEST + +Disconnected from Oracle AI Database 26ai Free Release 23.26.3.0.0 - Develop, Learn, and Run for Free +Version 23.26.3.0.0 +``` + +Remember to remove your pod when you are finished, using a command like this: + +```bash +kubectl -n obaas delete pod sqlcl +``` + +## Using Spring Cloud Config Server in your applications + +When you deploy your application into your OBaaS environment using the OBaaS Application Helm Chart, make sure +you include the Spring Cloud Config Client in your application dependencies, +and set `configServer.enabled: true` if you want the Spring Cloud Config Server configuration to be injected +into your application: + +```yaml +configServer: + enabled: true +``` + +This will inject `spring.cloud.config.uri` into your application with the correct address for the Spring Cloud Config Server, +and will therefore allow you to refer to and use configuration properties in your application. + + +Please refer to the [Spring Cloud Config Client documentation](https://docs.spring.io/spring-cloud-config/docs/current/reference/html/#_spring_cloud_config_client) +for detailed information about how to use Spring Cloud Config in your applications, in particular to learn how application name, +profile and labels are used to lookup configuration properties. diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/dbexporter.md b/docs-source/site/versioned_docs/version-2.1.2/platform/dbexporter.md new file mode 100644 index 000000000..b4c2e6061 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/dbexporter.md @@ -0,0 +1,20 @@ +--- +title: Oracle Database Metrics Exporter +sidebar_position: 5 +--- + +This project provides observability for Oracle Database, helping users understand performance and diagnose issues across applications and the database. Over time, it will expand beyond metrics to include logging, tracing, and integrations with popular frameworks such as Spring Boot. It targets both cloud and on-premises deployments, including databases running in Kubernetes and containers. + +[Full documentation](https://github.com/oracle/oracle-db-appdev-monitoring). + +## Installing Oracle Database Metrics Exporter + +Oracle Database Metrics Exporter will be installed if the `oracle-database-exporter.enabled` is set to `true` in the `values.yaml` file. The default namespace for Oracle Database Metrics Exporter is `oracle-database-exporter`. + +## Oracle Database Grafana Dashboard + +![Oracle Database Dashboard](images/exporter-running-against-basedb.png) + +## Transactional Event Queue Grafana Dashboard + +![Transactional Event Queue Dashboard](images/txeventq-dashboard-v2.png) diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/dboperator.md b/docs-source/site/versioned_docs/version-2.1.2/platform/dboperator.md new file mode 100644 index 000000000..5158a36c7 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/dboperator.md @@ -0,0 +1,308 @@ +--- +title: Oracle Database Operator for Kubernetes +sidebar_position: 6 +--- + +The Oracle Database Operator for Kubernetes (_OraOperator_, or simply the _operator_) extends the Kubernetes API with custom resources and controllers to automate Oracle Database lifecycle management. + +[Full Documentation](https://github.com/oracle/oracle-database-operator). + +Learn about using the OraOperator in the Livelab [Microservices and Kubernetes for an Oracle DBA](https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/view-workshop?wid=3734) + +## Installing the Oracle Database Operator for Kubernetes + +Oracle Database Operator for Kubernetes will be installed if the `oracle-database-operator.enabled` is set to `true` in the `values.yaml` file. The default namespace for Oracle Database Operator is `oracle-database-operator-system`. + +## Deploy ORDS with the Oracle Database Operator + +Use the `OrdsSrvs` custom resource to deploy Oracle REST Data Services (ORDS) into an OBaaS namespace. + +### Prerequisites + +Before you create the ORDS resource, confirm that: + +- Oracle Database Operator is installed. +- The `ordssrvs.database.oracle.com` custom resource exists. +- The OBaaS namespace exists. +- The database administrator Secret exists. +- The database connection details are known. + +```bash +kubectl get crd ordssrvs.database.oracle.com +kubectl get secret -n +``` + +Create a Secret for the ORDS runtime database user password: + +```bash +read -r -s ORDS_RUNTIME_PASSWORD +printf '%s' "${ORDS_RUNTIME_PASSWORD}" | kubectl -n create secret generic \ + --from-file=password=/dev/stdin +unset ORDS_RUNTIME_PASSWORD +``` + +### Database connection settings + +Use the connection settings that match the OBaaS database type. + + + + + + + + + + + + + + + + + + + + + + + + + + +
OBaaS database typeORDS connection typeRequired connection details
ADB-StnsADB wallet Secret and TNS alias
SIDB-FREEbasicIn-cluster database service, port 1521, service FREEPDB1
OTHERbasic or customurlExternal host, port, service name, or JDBC URL
+ +### Create the ORDS resource + +Create a file named `ords.yaml`. + +```yaml +apiVersion: database.oracle.com/v4 +kind: OrdsSrvs +metadata: + name: + namespace: +spec: + image: container-registry.oracle.com/database/ords:25.1.0 + imagePullPolicy: IfNotPresent + workloadType: Deployment + replicas: 1 + globalSettings: + standalone.context.path: /ords + standalone.http.port: 8080 + standalone.https.port: 8443 + security.forceHTTPS: true + database.api.enabled: true + poolSettings: + - poolName: + + # Add the database connection settings for ADB-S, SIDB-FREE, or OTHER here. + + db.username: ORDS_PUBLIC_USER_OPER + db.secret: + secretName: + passwordKey: password + db.adminUser: + db.adminUser.secret: + secretName: + passwordKey: password + + restEnabledSql.active: true + feature.sdw: true + plsql.gateway.mode: proxied + jdbc.InitialLimit: 2 + jdbc.MinLimit: 2 + jdbc.MaxLimit: 10 +``` + +For `ADB-S`, add: + +```yaml + db.connectionType: tns + db.tnsAliasName: + tnsAdminSecret: + secretName: +``` + +For `SIDB-FREE`, add: + +```yaml + db.connectionType: basic + db.hostname: + db.port: 1521 + db.servicename: FREEPDB1 +``` + +You can find the in-cluster database service with: + +```bash +kubectl get svc -n -l app.kubernetes.io/component=database +``` + +For `OTHER`, add: + +```yaml + db.connectionType: basic + db.hostname: + db.port: + db.servicename: +``` + +If the database requires a JDBC URL, use: + +```yaml + db.connectionType: customurl + db.customURL: +``` + +### Apply and verify + +Validate the resource before applying it: + +```bash +kubectl apply --dry-run=server -f ords.yaml +kubectl apply -f ords.yaml +``` + +Check the ORDS resource, pods, and service: + +```bash +kubectl get ordssrvs -n +kubectl get pods,svc -n -l app= +``` + +Test the ORDS endpoint locally: + +```bash +kubectl -n port-forward service/ 18443:8443 +curl -k -i https://localhost:18443/ords//_/db-api/stable/ +``` + +### Optional: Route ORDS through APISIX + +You can keep ORDS internal and access it with `kubectl port-forward`, as shown above. Only create an APISIX route when you want ORDS reachable through the OBaaS APISIX gateway. + +If your APISIX gateway is exposed outside the cluster, this route can make ORDS reachable from that same network path. Review your gateway, hostname, TLS, and access-control configuration before using this option in a shared or production environment. + +The examples below use these service name patterns: + + + + + + + + + + + + + + + + + + + + + + + + + + +
ServiceName
APISIX admin API<app-release>-apisix-admin
APISIX gateway<app-release>-apisix-gateway
ORDS<ords-resource-name>
SigNoz OpenTelemetry collector aliassignoz-otel-collector
+ +Confirm the services exist: + +```bash +kubectl get svc -n \ + -apisix-admin \ + -apisix-gateway \ + \ + signoz-otel-collector +``` + +Confirm that APISIX has the OpenTelemetry plugin enabled: + +```bash +kubectl -n get configmap -apisix -o yaml \ + | yq '.data."config.yaml"' \ + | yq '.plugins[]' \ + | grep opentelemetry +``` + +Open a local tunnel to the APISIX admin API: + +```bash +kubectl -n port-forward service/-apisix-admin 9180:9180 +``` + +In another terminal, retrieve the APISIX admin key: + +```bash +admin_key=$( + kubectl -n get configmap -apisix -o yaml \ + | yq '.data."config.yaml"' \ + | yq '.deployment.admin.admin_key[] | select(.name == "admin") | .key' +) +``` + +APISIX OpenTelemetry plugin metadata (`plugin_metadata/opentelemetry`) is registered automatically by a sidecar container in the APISIX pod on every install/upgrade — no manual step is required. + +Create the ORDS route: + +```bash +curl -i http://127.0.0.1:9180/apisix/admin/routes/ \ + -H "X-API-KEY: ${admin_key}" \ + -X PUT \ + -d '{ + "name": "", + "uri": "/ords/*", + "methods": ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"], + "plugins": { + "opentelemetry": { + "sampler": { + "name": "always_on" + } + } + }, + "upstream": { + "type": "roundrobin", + "scheme": "https", + "pass_host": "rewrite", + "upstream_host": "localhost", + "tls": { + "verify": false + }, + "nodes": { + "..svc.cluster.local:8443": 1 + } + } + }' +``` + +The route uses the ORDS HTTPS port, `8443`. The generated ORDS certificate uses `localhost`, so the APISIX upstream sets `upstream_host` to `localhost` and disables upstream certificate verification. + +For a local test of the optional APISIX route, open a tunnel to the APISIX gateway: + +```bash +kubectl -n port-forward service/-apisix-gateway 18080:80 +``` + +Test the ORDS endpoint through APISIX: + +```bash +curl -i \ + -H "x-request-id: ords-apisix-test-001" \ + http://localhost:18080/ords//_/db-api/stable/ +``` + +Check the APISIX route: + +```bash +curl -s http://127.0.0.1:9180/apisix/admin/routes/ \ + -H "X-API-KEY: ${admin_key}" +``` + +In SigNoz, look for traces with service name `APISIX`. The APISIX span should include `http.route=/ords/*`, `apisix.route_id=`, and `apisix.route_name=`. diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/envoygateway.md b/docs-source/site/versioned_docs/version-2.1.2/platform/envoygateway.md new file mode 100644 index 000000000..acb814317 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/envoygateway.md @@ -0,0 +1,18 @@ +--- +title: Envoy Gateway +sidebar_position: 7 +--- + +[Envoy Gateway](https://gateway.envoyproxy.io/) is an open-source, CNCF graduated implementation of the [Kubernetes Gateway API](https://gateway-api.sigs.k8s.io/). The Gateway API provides L4 and L7 routing in Kubernetes, iterating on the prior Kubernetes Ingress, Load Balancing, and Service Mesh APIs. + +## Installing Envoy Gateway + +Envoy Gateway is enabled by default and will be installed when `gateway-helm.enabled` is set to `true` in the `values.yaml` file. The default namespace for the Envoy Gateway is the chart installation namespace. + +## Admin UI + +To access the Envoy Gateway Admin UI, use kubectl port-forward to create a secure channel to `deployment/envoy-gateway`. Run the following command to establish the secure tunnel (replace the example namespace `obaas-dev` with the namespace where Envoy Gateway is deployed): + +```shell +kubectl port-forward -n obaas-dev deployment/envoy-gateway 19000:19000 +``` diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/esooperator.md b/docs-source/site/versioned_docs/version-2.1.2/platform/esooperator.md new file mode 100644 index 000000000..e4b060df5 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/esooperator.md @@ -0,0 +1,19 @@ +--- +title: External Secrets Operator +sidebar_position: 8 +--- + +:::important +The External Secrets Operator is an optional prerequisite for Oracle Backend for Microservices and AI +::: + +External Secrets Operator is a Kubernetes operator that integrates external secret management systems like OCI Vault, AWS Secrets Manager, +HashiCorp Vault, Google Secrets Manager, Azure Key Vault and many more. The operator reads information from external APIs and automatically injects the values into a Kubernetes Secret. + +Full [documentation](https://external-secrets.io/latest/) + +![External Secrets Operator](images/diagrams-high-level-simple.png) + +## Installing External Secrets Operator + +External Secrets Operator will be installed if the `external-secrets.enabled` is set to `true` in the `values.yaml` file. The default namespace for External Secrets Operator is `external-secrets`. diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/eureka.md b/docs-source/site/versioned_docs/version-2.1.2/platform/eureka.md new file mode 100644 index 000000000..f071cfb34 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/eureka.md @@ -0,0 +1,136 @@ +--- +title: Spring Boot Eureka Server +sidebar_position: 9 +--- + +Oracle Backend for Microservices and AI includes the Spring Boot Eureka service registry, which stores information about client services. Typically, each microservice registers with Eureka at startup. Eureka maintains a list of all active service instances, including their IP addresses and ports. Other services can look up this information using a well-known key, enabling service-to-service communication without hardcoding addresses at development or deployment time. + +:::note + Want to use Eureka in your Helidon applications - see [below](#enable-a-helidon-application-for-eureka) +::: + +## Installing Spring Boot Eureka Server + +Spring Boot Eureka Server will be installed if the `eureka.enabled` is set to `true` in the `values.yaml` file. The default namespace for Spring Boot Eureka Server is `eureka`. + +### Scaling Eureka replicas + +By default, OBaaS deploys three Eureka replicas. You can change the number of +replicas with `eureka.replicas`. + +When APISIX is enabled, update the APISIX Eureka discovery host list to include +each Eureka replica. See [Configure APISIX for multiple Eureka +replicas](./apacheapisix.md#configure-apisix-for-multiple-eureka-replicas) for +the required configuration. + +### Connection idle timeout + +The Eureka server's Jetty connection idle timeout defaults to 90 seconds. This is longer than APISIX/OpenResty's 60-second pooled connection lifetime and prevents APISIX from attempting to reuse a connection that Eureka has already closed. + +You can override the timeout in your OBaaS values file: + +```yaml +eureka: + connectionIdleTimeout: 90s +``` + +Keep this value longer than the APISIX/OpenResty pooled connection lifetime. Lower values can cause intermittent `failed to fetch registry ...: closed` messages while APISIX refreshes the Eureka registry. + +## Access Eureka Web User Interface + +To access the Eureka Web User Interface, use kubectl port-forward to create a secure channel to `service/eureka`. Run the following command to establish the secure tunnel (replace the example namespace `obaas-dev` with the namespace where the Spring Boot Eureka Server is deployed): + +```shell +kubectl port-forward -n obaas-dev svc/eureka 8761 +``` + +Open the [Eureka web user interface](http://localhost:8761) + +![Eureka Web User Interface](images/eureka-web.png) + +## Enable a Spring Boot application for Eureka + +To enable a Spring Boot application, you need to add the following dependency. + +```xml + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + +``` + +And to configure the application to register with Eureka, add the following to the `application.yaml` file. The variables in this configuration are automatically injected into your deployment and pods when you deploy applications to Oracle Backend for Microservices and AI using the OBaaS deployment Helm chart. + +```yaml +eureka: + instance: + hostname: ${spring.application.name} + preferIpAddress: true + client: + service-url: + defaultZone: ${eureka.service-url} + fetch-registry: true + register-with-eureka: true + enabled: true +``` + +## Enable a Helidon application for Eureka + +To enable a Helidon application, you need to add the following dependency. + +```xml + + io.helidon.integrations.eureka + helidon-integrations-eureka + runtime + +``` + +And to configure the application to register with Eureka, add the following to the `application.yaml` file: + +```properties +server.features.eureka.enabled=true +server.features.eureka.instance.name=${eureka.instance.hostname} +server.features.eureka.client.base-uri=${eureka.client.service-url.defaultZone} +server.features.eureka.client.register-with-eureka=true +server.features.eureka.client.fetch-registry=true +server.features.eureka.instance.preferIpAddress=true +``` + + +## Enable a Helidon application for Eureka + +To enable a Helidon application, you need to add the following dependency to your `pom.xml`: + +```xml + + io.helidon.integrations.eureka + helidon-integrations-eureka + +``` + +Then, update your application configuration in `src/main/resources/application.yaml`: + +```yaml +server: + features: + eureka: + enabled: true + client: + base-uri: ${eureka.client.service-url.defaultZone} + connect-timeout: PT10S + read-timeout: PT30S + instance: + name: "your-service-name" # IMPORTANT: Use 'name' not 'app-name' + hostname: ${eureka.instance.hostname} + prefer-ip-address: ${eureka.instance.preferIpAddress:true} +``` + +Notes: + +* Use `instance.name` (not `app-name`) +* Use ISO 8601 duration format: `PT10S` (not `10s`) +* Environment variables will be injected by OBaaS + +If you deploy your application using the OBaaS application Helm chart, you can enable Eureka by +setting `obaas.eureka.enabled: true` in your `values.yaml`. diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/images/admin-server.png b/docs-source/site/versioned_docs/version-2.1.2/platform/images/admin-server.png new file mode 100644 index 000000000..6736c6216 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/platform/images/admin-server.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/images/apisix-dashboard.png b/docs-source/site/versioned_docs/version-2.1.2/platform/images/apisix-dashboard.png new file mode 100644 index 000000000..620d073eb Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/platform/images/apisix-dashboard.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/images/diagrams-high-level-simple.png b/docs-source/site/versioned_docs/version-2.1.2/platform/images/diagrams-high-level-simple.png new file mode 100644 index 000000000..460003eb9 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/platform/images/diagrams-high-level-simple.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/images/eureka-web.png b/docs-source/site/versioned_docs/version-2.1.2/platform/images/eureka-web.png new file mode 100644 index 000000000..179f9e5a9 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/platform/images/eureka-web.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/images/exporter-running-against-basedb.png b/docs-source/site/versioned_docs/version-2.1.2/platform/images/exporter-running-against-basedb.png new file mode 100755 index 000000000..a8c99d4df Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/platform/images/exporter-running-against-basedb.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/images/txeventq-dashboard-v2.png b/docs-source/site/versioned_docs/version-2.1.2/platform/images/txeventq-dashboard-v2.png new file mode 100755 index 000000000..9418bf2f1 Binary files /dev/null and b/docs-source/site/versioned_docs/version-2.1.2/platform/images/txeventq-dashboard-v2.png differ diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/index.md b/docs-source/site/versioned_docs/version-2.1.2/platform/index.md new file mode 100644 index 000000000..73fb4342b --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/index.md @@ -0,0 +1,106 @@ +--- +title: Platform Services Overview +sidebar_position: 0 +--- + +Oracle Backend for Microservices and AI includes a set of pre-integrated platform services that handle common infrastructure concerns — API routing, service discovery, messaging, distributed transactions, secrets management, and more. These services are deployed and managed via Helm and can be enabled or disabled individually in your `values.yaml`. + +## API Gateway & Networking + + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
Apache APISIXCloud-native API gateway for routing, traffic management, and rate limiting
Spring Boot Eureka ServerService registry for automatic discovery between microservices
Envoy GatewayCNCF graduated implementation of the Kubernetes Gateway API
+ +## Messaging & Event Streaming + + + + + + + + + + + + + + +
ServiceDescription
Strimzi Kafka OperatorKubernetes operator for deploying and managing Apache Kafka clusters
+ +## Data & Transactions + + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
Oracle Transaction Manager for MicroservicesDistributed transaction coordinator supporting XA, LRA, and TCC consistency models
Oracle Database OperatorKubernetes operator for provisioning and managing Oracle Database instances
Coherence OperatorIn-memory data grid for caching, data distribution, and compute
+ +## Operations & Security + + + + + + + + + + + + + + + + + + + + + + + + + + +
ServiceDescription
Oracle Database Metrics ExporterExposes Oracle Database metrics for monitoring and alerting
External Secrets OperatorSyncs secrets from external stores (OCI Vault, AWS, HashiCorp Vault) into Kubernetes
Spring Boot Admin ServerWeb dashboard for monitoring and managing Spring Boot applications
MicroTx Workflow OrchestrationWorkflow orchestration engine for multi-step service choreography
+ +## Architecture + +![Architecture](../OBaaS-Architecture.png "Oracle Backend for Microservices and AI Architecture") diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/otmm.md b/docs-source/site/versioned_docs/version-2.1.2/platform/otmm.md new file mode 100644 index 000000000..77bf52096 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/otmm.md @@ -0,0 +1,196 @@ +--- +title: Oracle Transaction Manager for Microservices +sidebar_position: 10 +--- + +[Oracle Transaction Manager for Microservices](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/index.html), also known as "MicroTx", simplifies application development and operations by enabling distributed transactions to ensure consistency across microservices deployed in Kubernetes. + +Oracle Backend for Microservices and AI includes the free version of MicroTx, which has all of the functionality of the commercial version, but limits the number of transactions and only persists data in memory. It is recommended for evaluations and application development purposes. + +MicroTx supports the following consistency models: + +- Extended Architecture (XA) +- Long Running Actions (LRA) +- Try-Confirm/Cancel (TCC) + +## Use Oracle Transaction Manager for Microservices with Spring Boot + +To use MicroTx in your Spring Boot applications, include the following dependency in your `pom.xml` or equivalent: + +```xml + + com.oracle.microtx.lra + microtx-lra-spring-boot-starter-3x + +``` + +Add the following configuration to your Spring application configuration. The variables in this configuration are automatically injected into your deployment and pods when you deploy applications to Oracle Backend for Microservices and AI using the OBaaS deployment Helm chart. + +```yaml +spring: + microtx: + lra: + coordinator-url: ${MP_LRA_COORDINATOR_URL} + propagation-active: true + headers-propagation-prefix: "{x-b3-, oracle-tmm-, authorization, refresh-}" + +lra: + coordinator: + url: ${MP_LRA_COORDINATOR_URL} +``` + +## Components and enablement + +The MicroTx installation is made up of three components, each of which can be enabled or disabled independently in the Helm values: + +- `otmm.coordinator` — the transaction coordinator (XA/LRA/TCC). +- `otmm.workflowServer` — the [workflow server](#microtx-workflow-server) (see below). +- `otmm.console` — the web console used to monitor transactions and workflows. + +All three are enabled by default. To disable a component, set its `enabled` flag to `false`: + +```yaml +otmm: + coordinator: + enabled: true + workflowServer: + enabled: true + console: + enabled: false +``` + +The console exists only to front the coordinator and workflow server, so it is deployed only when at least one of those two components is enabled. If both `otmm.coordinator.enabled` and `otmm.workflowServer.enabled` are `false`, the console is not deployed even if `otmm.console.enabled` is `true`. When deployed, the console is connected only to the backends that are enabled, so a coordinator-only or workflow-only install does not leave the console pointing at a service that was not deployed. + +## Coordinator database storage + +The coordinator defaults to `otmm.coordinator.storage.type: memory`. To persist +transaction state across coordinator restarts, use `db` with a MicroTx Enterprise +Edition image. The Free coordinator image does not support database storage. +Database storage does not require a coordinator PVC and does not migrate +transactions previously held in memory. + +Before installing, prepare a reachable Oracle Database and grant the storage user +MicroTx's [required privileges and tablespace quota](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/grant-privileges-create-and-run-stored-procedures.html). +Follow the [database setup prerequisites](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/create-data-store.html), +including separate schemas for the coordinator and workflow server when both use +Oracle Database. Accept the applicable Enterprise Edition image terms and provide +an image pull secret if required by Oracle Container Registry. + +### Reuse the OBaaS database credentials + +For a coordinator-only installation, layer these overrides after your normal +OBaaS values: + +```yaml +otmm: + coordinator: + image: + repository: container-registry.oracle.com/database/microtx-ee-coordinator + tag: "26.1.2" + storage: + type: db + db: + credentialSecretName: "" + workflowServer: + enabled: false +``` + +With `credentialSecretName` empty, the coordinator uses the same application +credential secret as the database metrics exporter. This includes custom secret +names and keys configured through `database.authN`. The application secret's +service key supplies the connection string; optionally override it with +`otmm.coordinator.storage.db.connectionString`. + +The chart also reuses the exporter's database wallet and mounts it at +`/etc/config/dbwallet`. It overlays `sqlnet.ora` to point to that directory without +changing the shared Secret. No separate JSON credential Secret is needed: the +chart serializes the application username and password at startup. Custom +coordinator images using this path must provide Python 3 and `/app/tcs`. + +### Use a separate coordinator schema + +When the workflow server is enabled, keep its OBaaS application schema separate +from the coordinator's transaction-store schema. Create a Secret in the OBaaS +application namespace for the coordinator user. Its `secret` key must contain JSON +in this format: + +```json +{"username":"","password":""} +``` + +Create it from a protected local file rather than placing credentials in a +committed values file: + +```bash +kubectl -n create secret generic microtx-coordinator-db \ + --from-file=secret= +``` + +Keep the Enterprise Edition image override above and configure: + +```yaml +otmm: + coordinator: + storage: + type: db + db: + credentialSecretName: microtx-coordinator-db + credentialSecretKey: secret + connectionString: "" + # Set one of these when the connection requires a wallet: + # walletSecretName: "" + # walletConfigMapName: "" +``` + +A separate credential Secret requires an explicit connection string. It does not +implicitly select the shared OBaaS wallet: supply `walletSecretName` or +`walletConfigMapName` when needed, in the application namespace. The wallet is +mounted at `/etc/config/dbwallet`; its `sqlnet.ora` must use that wallet directory. +The chart does not rewrite custom wallet configuration. + +### Schema initialization and verification + +For database storage, `otmm.coordinator.storage.db.initializeSchema` defaults to +`true`. The `initialize-coordinator-schema` init container runs the selected image +in MicroTx initialization mode with the same credentials and wallet as the +service. The coordinator starts only after initialization succeeds. This step can +create or upgrade database objects; review MicroTx's migration requirements and +back up an existing transaction store before upgrading its image. + +If a DBA provisions and upgrades the schema separately, set +`otmm.coordinator.storage.db.initializeSchema: false`. + +After the Helm installation or upgrade, check both containers: + +```bash +kubectl -n logs -otmm-tcs-0 \ + -c initialize-coordinator-schema +kubectl -n logs -otmm-tcs-0 -c otmm-tcs +``` + +Initialization should complete successfully and the coordinator should report +`serving...`. If startup reports `ORA-00942` for `OMTM_STATS`, check schema +initialization and the storage user's privileges. For `ORA-28759`, check that the +wallet files are readable and `sqlnet.ora` points to their mounted directory. + +## MicroTx Workflow Server + +The MicroTx Workflow Server extends transaction coordinator with advanced workflow capabilities. + +For MicroTx sizing and deployment guidance, see the official [Oracle Transaction Manager for Microservices 26.1 documentation](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/index.html). To enable the workflow server in OBaaS, set the `otmm.workflowServer.enabled` property to true in the Helm values: + +```yaml +otmm: + workflowServer: + enabled: true +``` + +When the workflow server is enabled, it uses the OBaaS application database secret, typically `-db-authn`, and runs Flyway against that schema during startup. The database init job grants `OBAAS_USER` the schema privileges required for this initialization. If a pre-existing application user is supplied through `database.authN.secretName`, that user must have equivalent schema DDL privileges and quota on its default tablespace. + +## Upgrading to the commercial version + +If you have licensed Oracle Transaction Manager for Microservices Enterprise Edition (EE), upgrade the MicroTx components as follows: + +- **Transaction Coordinator:** Replace the Free container image with the EE container image from [Oracle Container Registry](https://container-registry.oracle.com/ords/ocr/ba/database/microtx-ee-coordinator). You must also configure persistence when upgrading to EE. Follow the [Set Up Oracle Database as Data Store](https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/create-data-store.html) instructions. +- **Workflow Server:** Replace the Free container image with the EE container image from [Oracle Container Registry](https://container-registry.oracle.com/ords/ocr/ba/database/microtx-ee-workflow). +- **Console:** Replace the Free container image with the EE container image from [Oracle Container Registry](https://container-registry.oracle.com/ords/ocr/ba/database/microtx-ee-console). diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/sbadminserver.md b/docs-source/site/versioned_docs/version-2.1.2/platform/sbadminserver.md new file mode 100644 index 000000000..fcedfd5c1 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/sbadminserver.md @@ -0,0 +1,24 @@ +--- +title: Spring Boot Admin Server +sidebar_position: 11 +--- + +Spring Boot Admin works by registering Spring Boot applications that expose Actuator endpoints. Each application's health and metrics data is polled by Spring Boot Admin Server, which aggregates and displays this information in a web dashboard. The registered applications can either self-register or be discovered using service discovery tools like Eureka or Consul. Through the dashboard, users can monitor the health, memory usage, logs, and more for each application, and even interact with them via management endpoints for tasks like restarting or updating configurations. + +[Spring Boot Admin Documentation](https://docs.spring-boot-admin.com/3.5.5/docs/installation-and-setup/) + +## Installing Spring Boot Admin + +Spring Boot Admin will be installed if the `admin-server.enabled` is set to `true` in the `values.yaml` file. The default namespace for Spring Boot Admin is `admin-server`. + +## Access Spring Boot Admin Web Interface + +To access the Spring Boot Admin Web Interface, use kubectl port-forward to create a secure channel to `service/admin-server`. Run the following command to establish the secure tunnel (replace the example namespace `obaas-dev` with the namespace where the Spring Boot Admin Server is deployed): + +```shell +kubectl port-forward -n obaas-dev svc/admin-server 8989 +``` + +Open the [Spring Boot Admin dashboard](http://localhost:8989) + +![Spring Boot Admin Server](images/admin-server.png) diff --git a/docs-source/site/versioned_docs/version-2.1.2/platform/strimzi_operator.md b/docs-source/site/versioned_docs/version-2.1.2/platform/strimzi_operator.md new file mode 100644 index 000000000..9e326cce2 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/platform/strimzi_operator.md @@ -0,0 +1,313 @@ +--- +title: Strimzi Kafka Operator +sidebar_position: 2 +--- + +[Strimzi](https://strimzi.io/) is an open-source operator that simplifies running Apache Kafka on Kubernetes. It extends Kubernetes with Custom Resources (CRDs) to declaratively manage Kafka clusters, topics, and users. [Full documentation can be found here](https://strimzi.io/docs/operators/latest/overview) + +Oracle Backend for Microservices and AI deploys the operator as a cluster-scoped component via the `obaas-prereqs` Helm chart. Once installed, you can create Kafka clusters in any namespace by applying Strimzi custom resources. + +## Installing the Strimzi Kafka Operator + +The Strimzi Kafka Operator is installed if `strimzi.enabled` is set to `true` in the `values.yaml` file. The operator is deployed cluster-wide and manages Kafka custom resources across all namespaces. + +### Creating a Kafka Cluster + +Follow these steps to create a single-node Kafka cluster named `my-cluster` in a given namespace. + +### Prerequisites + +- Strimzi Kafka Operator is installed and running +- `kubectl` is configured to access your Kubernetes cluster +- A namespace where you want to deploy the cluster (examples below use `my-namespace`) + +### Step 1: Create the Kafka Cluster YAML + +Create a file named `kafka-cluster.yaml`. This defines a single-node KRaft-based cluster suitable for development and testing: + +```yaml +apiVersion: kafka.strimzi.io/v1 +kind: Kafka +metadata: + name: basic-kafka +spec: + kafka: + version: 4.2.0 + metadataVersion: "4.2" + listeners: + - name: plain + port: 9092 + type: internal + tls: false + config: + offsets.topic.replication.factor: 3 + transaction.state.log.replication.factor: 3 + transaction.state.log.min.isr: 2 + default.replication.factor: 3 + min.insync.replicas: 2 + entityOperator: + topicOperator: {} + userOperator: {} +--- +apiVersion: kafka.strimzi.io/v1 +kind: KafkaNodePool +metadata: + name: pool-a + labels: + strimzi.io/cluster: basic-kafka +spec: + replicas: 3 + roles: + - controller + - broker + storage: + type: ephemeral +``` + +**Notes:** + +- This uses **KRaft mode** (Kafka Raft) — no ZooKeeper required +- The `dual-role` node pool runs both controller and broker roles on a single node +- Replication factors are set to 1 for single-node operation — for production, increase `replicas` and replication factors to 3+ +- Two listeners are configured: `plain` (port 9092, no TLS) and `tls` (port 9093, encrypted) +- The `entityOperator` enables the Topic Operator and User Operator for declarative topic and user management +- `KafkaNodePool` names are scoped to the **namespace**, not to the cluster — if you run multiple Kafka clusters in the same namespace, each node pool must have a unique name (e.g. `cluster-a-pool`, `cluster-b-pool`) + +### Step 2: Deploy the Cluster + +Apply the YAML to your namespace: + +```bash +kubectl apply -f kafka-cluster.yaml -n my-namespace +``` + +Wait for the cluster to be ready: + +```bash +kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n my-namespace +``` + +### Step 3: Verify the Deployment + +```bash +# Check the Kafka resource status +kubectl get kafka -n my-namespace + +# Check that pods are running +kubectl get pods -n my-namespace + +# View cluster details +kubectl describe kafka my-cluster -n my-namespace +``` + +## Creating a Kafka Topic + +Once your cluster is running, create topics declaratively using the `KafkaTopic` resource. + +Create a file named `my-topic.yaml`: + +```yaml +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaTopic +metadata: + name: my-topic + labels: + strimzi.io/cluster: my-cluster +spec: + partitions: 1 + replicas: 1 + config: + retention.ms: 7200000 + segment.bytes: 1073741824 +``` + +Apply it: + +```bash +kubectl apply -f my-topic.yaml -n my-namespace +``` + +Verify the topic was created: + +```bash +kubectl get kafkatopic -n my-namespace +``` + +## Testing with a Producer and Consumer + +You can quickly test your cluster using the Kafka console tools: + +**Start a producer** (type messages and press Enter to send): + +```bash +kubectl -n my-namespace run kafka-producer -ti \ + --image=quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 \ + --rm=true --restart=Never -- \ + bin/kafka-console-producer.sh \ + --bootstrap-server my-cluster-kafka-bootstrap:9092 \ + --topic my-topic +``` + +**Start a consumer** (in a separate terminal): + +```bash +kubectl -n my-namespace run kafka-consumer -ti \ + --image=quay.io/strimzi/kafka:0.45.0-kafka-3.9.0 \ + --rm=true --restart=Never -- \ + bin/kafka-console-consumer.sh \ + --bootstrap-server my-cluster-kafka-bootstrap:9092 \ + --topic my-topic \ + --from-beginning +``` + +## Configuring TLS + +To configure a Kafka cluster with TLS, add a new listener with `tls=true` in the `Kafka` custom resource. By default, the Kafka cluster will sign certificates using the Strimzi cluster CA. + +```yaml +listeners: + - name: tls + port: 9093 + type: internal + tls: true +``` + +Strimzi will create the following secrets in the cluster namespace, prefixed by the cluster name: `clients-ca`, `clients-ca-cert`, `cluster-ca`, and `cluster-ca-cert`. + +### Trusting the cluster CA cert from internal clients + +Clients running in the Kubernetes cluster should mount the cluster CA cert to their client pod: + +```yaml +volumes: + - name: cluster-ca + secret: + secretName: my-cluster-cluster-ca-cert + +containers: + - name: my-java-client + image: my-java-client:latest + volumeMounts: + - name: cluster-ca + mountPath: /etc/kafka/cluster-ca + readOnly: true +``` + +Then, configure the Kafka client to use TLS. The truststore password is stored in the `cluster-ca-cert` secret under the `ca.password` key: + +```properties +bootstrap.servers=my-cluster-kafka-bootstrap:9093 +security.protocol=SSL + +ssl.truststore.location=/etc/kafka/cluster-ca/ca.p12 +ssl.truststore.password= +ssl.truststore.type=PKCS12 +``` + +This must be configured in the relevant Kafka clients settings. + +### Configuring SASL_SSL with SCRAM + +SASL_SSL with SCRAM is configurable through the Kafka custom resource listeners. First, add a new SCRAM listener with TLS enabled: + +```yaml +listeners: + - name: scram + port: 9094 + type: internal + tls: true + authentication: + type: scram-sha-512 +``` + +Create a KafkaUser for your cluster using SCRAM authentication: + +```yaml +apiVersion: kafka.strimzi.io/v1 +kind: KafkaUser +metadata: + name: my-cluster-kafka-scram-user # name also becomes the Secret name + labels: + strimzi.io/cluster: my-cluster +spec: + authentication: + type: scram-sha-512 +``` + +Strimzi creates a Secret with the same name as the KafkaUser (`my-cluster-kafka-scram-user`), containing the password and JAAS config. Clients running in the Kubernetes cluster should mount the cluster CA cert and scram user secrets: + +```yaml +volumes: + - name: cluster-ca + secret: + secretName: my-cluster-cluster-ca-cert + - name: scram-user + secret: + secretName: my-cluster-kafka-scram-user +containers: + - name: my-java-client + image: my-java-client:latest + volumeMounts: + - name: cluster-ca + mountPath: /etc/kafka/cluster-ca + readOnly: true + - name: scram-user + mountPath: /etc/kafka/scram-user + readOnly: true +``` + +Then, configure the client to use SASL_SSL with SCRAM-SHA-512: + +```properties +security.protocol=SASL_SSL +sasl.mechanism=SCRAM-SHA-512 +sasl.jaas.config= +ssl.truststore.location=/etc/kafka/cluster-ca/ca.p12 +ssl.truststore.password= +ssl.truststore.type=PKCS12 +``` + +Strimzi also supports mTLS and custom CA certificates. For additional Strimzi certificate documentation, see the [Strimzi security reference](https://github.com/IBM/strimzi-kafka-operator/tree/main/documentation/modules/security). + +## Strimzi Custom Resources Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ResourcePurpose
KafkaDefines the Kafka cluster configuration
KafkaNodePoolManages groups of Kafka nodes with specific roles
KafkaTopicDeclaratively manages Kafka topics
KafkaUserManages user authentication and authorization
KafkaConnectDeploys Kafka Connect for data integration
KafkaBridgeProvides HTTP API access to Kafka
+ +For the full custom resource reference, see the [Strimzi documentation](https://strimzi.io/docs/operators/latest/configuring). + +## Next Steps + +- **Kafka Observability**: Learn how to monitor your Strimzi Kafka clusters, producers, and consumers using the [Kafka Observability Guide](../observability/kafka.md). diff --git a/docs-source/site/versioned_docs/version-2.1.2/rel_notes/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/rel_notes/_category_.json new file mode 100644 index 000000000..1ba9ab639 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/rel_notes/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Release Notes", + "position": 6, + "link": { + "type": "doc", + "id": "rel_notes/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/rel_notes/index.mdx b/docs-source/site/versioned_docs/version-2.1.2/rel_notes/index.mdx new file mode 100644 index 000000000..eab34a69f --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/rel_notes/index.mdx @@ -0,0 +1,288 @@ +--- +title: Release Notes +sidebar_position: 0 +--- + +export const OBAAS_VERSION = '2.1.2'; + +## Release Notes for Oracle Backend for Microservices and AI (OBaaS) + +The current version of OBaaS is {OBAAS_VERSION}. + +This version is compatible with Spring Boot 3.5.x, 4.0.x, and 4.1.x, along with Helidon 4.3.x and 4.4.x. Compatible framework and cloud versions are also supported, though backward compatibility is limited. + +Platform services use Java 25, Spring Boot 4.0.6, and Spring Cloud 2025.1.1. + +### Helm Chart Versions + +The OBaaS {OBAAS_VERSION} Helm charts use the following chart and application versions: + + + + + + + + + + + + + + + + + + + + + + + + +
ChartChart VersionApp VersionKubernetes Version
obaas-prereqs0.1.1{OBAAS_VERSION}1.34 or later
obaas0.1.1{OBAAS_VERSION}1.34 or later
+ +> **SigNoz patch upgrade** +> +> OBaaS 2.1.2 is an optional patch release. Upgrading an existing OBaaS installation upgrades SigNoz in place and preserves existing telemetry, dashboards, users, alerts, ClickHouse data, and ZooKeeper data. +> +> Use the standard Helm upgrade command with the complete values file for the installed release. + +### Additions in this Release + +* Envoy Gateway is added and enabled by default to provide external access to the cluster, implementing the new Kubernetes Gateway API. +* OpenTelemetry Operator is added to provide auto-instrumentation for Java applications. +* Spring Config Server is added to provide centralized configuration for Spring Boot applications. +* NetworkPolicy resources are added to the OBaaS application chart to define namespace-scoped network isolation rules. +* `ADB-FREE` is added as a supported `database.type` value alongside `SIDB-FREE`, `ADB-S`, and `OTHER`. +* Kafka cluster resources can be enabled in the OBaaS application chart and are reconciled by Strimzi from the prerequisite chart. +* AI Optimizer is available as an optional component through the `ai-optimizer` subchart. +* APISIX custom plugins can be supplied through `extraConfigMaps` and `apisix.apisix.customPlugins`. +* SigNoz is upgraded to chart/application version 0.142.1 in place. + +### Deprecations in this Release + +Components that are deprecated in this release may be removed in a future release. + +* NGINX Ingress Controller is deprecated in this release due to deprecation of the Ingress API in Kubernetes, in favor of the new Gateway API. It is disabled by default and remains available only when explicitly enabled. +* Coherence Operator is deprecated in this release. + +### Replacements/changes/updates in this Release + +* Conductor-OSS is replaced with Oracle Transaction Manager For Microservices (MicroTx) Workflow (based on Conductor-OSS) + +### OBaaS Helm Charts - Complete Image List + +The following table lists container images for OBaaS {OBAAS_VERSION} (sorted alphabetically): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ComponentImageVersion
Alpine Kubernetes Toolsdocker.io/alpine/k8s1.36.2
Apache APISIXdocker.io/apache/apisix3.18.0-ubuntu
BusyBoxdocker.io/busybox1.37
Cert Manager (CA Injector)quay.io/jetstack/cert-manager-cainjectorv1.21.2
Cert Manager (Controller)quay.io/jetstack/cert-manager-controllerv1.21.2
Cert Manager (Startup API Check)quay.io/jetstack/cert-manager-startupapicheckv1.21.2
Cert Manager (Webhook)quay.io/jetstack/cert-manager-webhookv1.21.2
ClickHouse Metrics Exporterdocker.io/altinity/metrics-exporter0.21.2
ClickHouse Operatordocker.io/altinity/clickhouse-operator0.21.2
ClickHouse Serverdocker.io/clickhouse/clickhouse-server25.12.5
Coherence CEcontainer-registry.oracle.com/middleware/coherence-ce22.06.13
Coherence Operatorcontainer-registry.oracle.com/middleware/coherence-operator3.5.17
Config Servercontainer-registry.oracle.com/obaas/config-server2.1.0
Dashboardscontainer-registry.oracle.com/obaas/dashboards2.1.0
Envoydocker.io/envoyproxy/envoydistroless-v1.38.3
Envoy Gatewaydocker.io/envoyproxy/gatewayv1.8.2
Envoy Ratelimitdocker.io/envoyproxy/ratelimitmaster
etcddocker.io/bitnamilegacy/etcd3.6.1
Eurekacontainer-registry.oracle.com/obaas/service-registry2.1.0
External Secretsghcr.io/external-secrets/external-secrets2.10.0
Ingress NGINX Controllerregistry.k8s.io/ingress-nginx/controllerv1.15.1
Kafkaquay.io/strimzi/kafka1.1.0-kafka-4.2.0
Kube State Metricsregistry.k8s.io/kube-state-metrics/kube-state-metricsv2.17.0
Metrics Serverregistry.k8s.io/metrics-server/metrics-serverv0.9.0
MicroTx Consolecontainer-registry.oracle.com/database/microtx-console26.1.2
MicroTx Coordinatorcontainer-registry.oracle.com/database/microtx-coordinator26.1.2
MicroTx Workflowcontainer-registry.oracle.com/database/microtx-workflow26.1.2
OBaaS Admin Servercontainer-registry.oracle.com/obaas/admin-server2.1.0
Observability Exportercontainer-registry.oracle.com/database/observability-exporter2.4.2
OpenTelemetry Collector Contribdocker.io/otel/opentelemetry-collector-contrib0.160.0
OpenTelemetry Java Autoinstrumentationghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java2.30.0
OpenTelemetry Operatorghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator0.158.0
Oracle Database Freecontainer-registry.oracle.com/database/free23.26.2.0
Oracle Database Operatorcontainer-registry.oracle.com/database/operator2.1.0
Oracle Linux (SigNoz setup)container-registry.oracle.com/os/oraclelinux9
Signozdocker.io/signoz/signozv0.142.1
Signoz OpenTelemetry Collectordocker.io/signoz/signoz-otel-collectorv0.144.10
SQLclcontainer-registry.oracle.com/database/sqlcl26.2.2
Strimzi Operatorquay.io/strimzi/operator1.1.0
Zookeeperdocker.io/signoz/zookeeper3.8.4
diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/setup/_category_.json new file mode 100644 index 000000000..5d9bdcd62 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Setup", + "position": 1, + "link": { + "type": "doc", + "id": "setup/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/aks.md b/docs-source/site/versioned_docs/version-2.1.2/setup/aks.md new file mode 100644 index 000000000..5d714b53c --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/aks.md @@ -0,0 +1,82 @@ +--- +title: Azure Kubernetes Service (AKS) +sidebar_position: 3 +--- + +# OBaaS on Azure Kubernetes Service (AKS) + +OBaaS installs on Azure AKS with minimal additional configuration. This document documents installation for the `obaas-prereqs` and `obaas` Helm charts on AKS. + +## Scope + +The repository includes two AKS example values files: + +- `helm/infra-charts/obaas-prereqs/examples/values-aks.yaml` +- `helm/infra-charts/obaas/examples/values-aks.yaml` + +Use them as the starting point for AKS deployments. + +## Prerequisites + +- AKS must meet the chart Kubernetes version requirement. +- The examples assume Azure Disk CSI storage is available. +- The `obaas` AKS example uses `managed-csi` as the storage class. Replace it if your AKS cluster standardizes on a different StorageClass. + +## Install Sequence + +Install cluster-scoped prerequisites once per AKS cluster: + +```bash +helm upgrade --install obaas-prereqs ./obaas-prereqs \ + -n obaas-system \ + --create-namespace \ + -f obaas-prereqs/examples/values-aks.yaml +``` + +Install the main chart per namespace: + +```bash +helm upgrade --install obaas ./obaas \ + -n obaas \ + --create-namespace \ + -f obaas/examples/values-aks.yaml +``` + +## `obaas-prereqs` Guidance + +### `metrics-server` + +AKS may already install and manage `metrics-server` through an AKS addon or another cluster-level installation. + +If `metrics-server` is already present, disable the copy from `obaas-prereqs`: + +```yaml +metrics-server: + enabled: false +``` + +If AKS is not already providing `metrics-server`, leave it enabled. + +## `obaas` Guidance + +### Azure Cloud Detection + +The AKS example sets both `k8s-infra.global.cloud` and `signoz.global.cloud` to `azure` so the observability stack identifies the environment correctly. + +### Storage Classes + +The AKS example sets: + +- `signoz.global.storageClass: managed-csi` +- `signoz.clickhouse.persistence.storageClass: managed-csi` +- `signoz.signoz.persistence.storageClass: managed-csi` + +This is intended for AKS clusters using the Azure Disk CSI driver. If your platform team uses a different StorageClass, update these values before install. + +## Recommended Review Before Install + +Review these values before using the AKS examples unchanged: + +- StorageClass names +- Whether AKS already manages `metrics-server` +- How ingress should be exposed on AKS diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/helm/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/_category_.json new file mode 100644 index 000000000..849e6b2e2 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/_category_.json @@ -0,0 +1,10 @@ +{ + "label": "Helm Installation", + "position": 2, + "collapsible": true, + "collapsed": true, + "link": { + "type": "doc", + "id": "setup/helm/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/helm/chart-references.md b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/chart-references.md new file mode 100644 index 000000000..f70e9d8d7 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/chart-references.md @@ -0,0 +1,114 @@ +--- +title: Dependent Helm Chart References +sidebar_position: 4 +--- + +OBaaS 2.1.2 uses the dependent charts listed below. Each link is pinned to the +chart release bundled with this OBaaS release and opens the upstream chart's +rendered README or values file. Use these references when customizing a +component; do not copy the complete dependency values into OBaaS documentation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ChartVersionChart READMEValues reference
ai-optimizer2.0.3READMEvalues.yaml
apisix2.17.0READMEvalues.yaml
cert-managerv1.21.2README templatevalues.yaml
coherence-operator3.5.17READMEvalues.yaml
external-secrets2.10.0READMEvalues.yaml
gateway-helm1.9.1READMEvalues template
ingress-nginx4.15.1READMEvalues.yaml
k8s-infra0.15.0READMEvalues.yaml
kube-state-metrics6.4.1READMEvalues.yaml
metrics-server3.14.0READMEvalues.yaml
opentelemetry-operator0.122.0READMEvalues.yaml
signoz0.142.1READMEvalues.yaml
strimzi-kafka-operator1.1.0READMEvalues.yaml
+ +## Vendored Oracle Database Operator + +The `oracle-database-operator` chart is vendored locally at version 0.2.0 and +does not publish a matching upstream chart README and values page. To inspect +the exact chart bundled with OBaaS, run these commands from the chart checkout: + +```bash +helm show readme helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz +helm show values helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz +``` + +The top-level `obaas` and `obaas-prereqs` values remain the authoritative +OBaaS-specific configuration references. diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/helm/index.md b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/index.md new file mode 100644 index 000000000..0f967b22e --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/index.md @@ -0,0 +1,48 @@ +--- +title: Helm Installation Overview +sidebar_position: 0 +--- + +## Installing OBaaS with Helm Charts + +This guide outlines the steps to deploy Oracle Backend for Microservices and AI (OBaaS) to an existing Kubernetes cluster using Helm charts. + +### Installation Steps + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StepDescriptionDetails
1Verify prerequisitesConfirm your Kubernetes cluster, database, and tooling meet the requirements.
2Install prerequisites chartInstall the cluster-scoped operators and CRDs (once per cluster).
3Install OBaaS chartInstall the OBaaS application chart into one or more namespaces.
4Verify installationConfirm all pods are running and services are accessible.
+ +### Detailed Guides + +- [Prerequisites](./prereqs.md) — Kubernetes cluster, database, and tooling requirements +- [Helm Chart Installation](./install.md) — Full installation, architecture, and example configurations +- [Dependent Helm Chart References](./chart-references.md) — Version-pinned upstream README and values references for bundled dependency charts diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/helm/install.md b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/install.md new file mode 100644 index 000000000..99fcc9927 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/install.md @@ -0,0 +1,883 @@ +--- +title: Helm Chart installation +sidebar_position: 3 +--- +## Oracle Backend for Microservices and AI (OBaaS) Helm Charts + +This document describes how to deploy OBaaS to an existing Kubernetes cluster using Helm charts. + +- [Quick Start Decision Guide](#quick-start-decision-guide) — Choose the right example values file for your deployment +- [Architecture](#architecture) — Two-chart design, components, and cluster layout +- [Dependent Helm Chart References](./chart-references.md) — Version-pinned README and values references for bundled dependency charts +- [Prerequisites](#prerequisites) — Required tools and cluster access +- [Names and Namespace Conventions](#names-and-namespace-conventions) — Replace example release names and namespaces with your own values +- [Installation Guide](#installation-guide) — Step-by-step deployment process +- [Example Configurations](#example-configurations) — Common deployment scenarios: + - [Default](#default-configuration-values-defaultyaml) — Quick start with no overrides + - [SIDB-FREE Database](#sidb-free-database-values-sidb-freeyaml) — In-cluster Oracle Database Free container + - [Existing Oracle AI Autonomous Database](#existing-oracle-ai-autonomous-database-configuration-values-existing-adbyaml) — Connect to a pre-provisioned Autonomous Database + - [Other Existing Database](#other-existing-oracle-ai-database-values-byodbyaml) - Connect to another type of pre-existing Oracle AI Database, for example, an Oracle Base DB, or an on-premises Oracle Database + - [Multi-Tenant](#multi-tenant-setup-values-tenant1yaml-values-tenant2yaml) — Run multiple OBaaS instances in one cluster + - [Namespace and Scope](#namespace-and-scope-configuration-values-namespace-overrideyaml) — Control which namespaces components watch + - [SigNoz Existing Secret](#signoz-existing-secret-values-signoz-existing-secretyaml) — Pre-provisioned SigNoz credentials + - [SigNoz Cold Storage](#signoz-cold-storage-values-signoz-cold-storageyaml) — Offload older observability data to S3-compatible object storage + - [Kafka Enabled](#kafka-enabled-configuration-values-kafkayaml) — Create a Strimzi-managed Kafka cluster + - [Coherence Enabled](#coherence-enabled-configuration-values-coherenceyaml) — Create a Coherence Operator-managed cluster + - [Private Registry](#private-registry-configuration-values-private-registryyaml) — Air-gapped and corporate registry setups + - [Combining Examples](#combining-examples) — Layer multiple value files together +- [Uninstallation](#uninstallation) — Teardown instructions +- [Next Steps](#next-steps) — Deploy applications and configure observability + +### Quick Start Decision Guide + +Choose the example values file that best matches your deployment scenario: + +- `values-default.yaml` - Minimal installation with default settings +- `values-sidb-free.yaml` - Development or testing with an in-cluster Oracle Database Free container +- `values-existing-adb.yaml` - Production deployments using an existing OCI Autonomous Database +- `values-byodb.yaml` - Production deployments using an existing non-Autonomous Oracle Database +- `values-tenant1.yaml` and `values-tenant2.yaml` - Multi-tenant deployments in a shared cluster +- `values-namespace-override.yaml` - Custom ingress namespace watching behavior +- `values-signoz-existing-secret.yaml` - Pre-provisioned SigNoz admin credentials +- `values-signoz-cold-storage.yaml` - Long-term observability retention using S3-compatible object storage +- `values-kafka.yaml` - Strimzi-managed Kafka cluster for Kafka workloads and observability +- `values-coherence.yaml` - Coherence Operator-managed cluster for distributed-cache and data-grid workloads +- `values-private-registry.yaml` - Air-gapped or private registry environments + +If you are unsure where to start, use `values-sidb-free.yaml` for evaluation or `values-existing-adb.yaml` for an external OCI Autonomous Database deployment. + +### Architecture + +The deployment uses a two-chart architecture. The charts are separated because the OBaaS prerequisites chart installs cluster-wide CRDs and operators that may only exist once in a cluster, while the OBaaS chart contains namespace-scoped resources that can be safely installed multiple times. + +For configuration options supplied by a dependent chart, see the [version-pinned dependent Helm chart references](./chart-references.md). The references include the upstream README and complete values file for the versions bundled with OBaaS 2.1.2. + +**obaas-prereqs** (cluster-scoped, install once): + +- **cert-manager** - Automatic TLS certificate management +- **external-secrets** - Integration with external secret stores +- **metrics-server** - Container resource metrics +- **kube-state-metrics** - Kubernetes object metrics +- **strimzi-kafka-operator** - Kafka cluster operator +- **coherence-operator** - Coherence cluster operator +- **oraoperator** - Oracle Database Operator for Kubernetes + +:::danger[Warning] +Attempting to install the obaas-prereqs chart multiple times will cause CRD version conflicts, duplicate operator controllers, and resource contention. +::: + +**obaas** (namespace-scoped, install per tenant): + +- **Envoy Gateway** - Default Gateway API controller for external access +- **ingress-nginx** - Deprecated namespace-specific ingress controller, disabled by default and available for explicit opt-in +- **Apache APISIX** - API Gateway +- **Eureka** - Service discovery +- **Signoz** - Observability stack with ClickHouse +- **Spring Boot Admin** - Application monitoring +- **OTMM** - Transaction manager for microservices, including MicroTX Workflow for service orchestration +- **Kafka cluster** - Optional namespace-scoped Kafka custom resource managed by the Strimzi operator from `obaas-prereqs` +- **Coherence cluster** - Optional namespace-scoped Coherence custom resource managed by the Coherence Operator from `obaas-prereqs` + +Each instance operates independently in its own namespace with its own gateway resources and observability stack. Deprecated ingress-nginx is installed only when explicitly enabled. + +```tree +Cluster +├── obaas-system namespace (prerequisites - install once) +│ ├── cert-manager +│ ├── external-secrets +│ ├── metrics-server +│ ├── kube-state-metrics +│ ├── strimzi-kafka-operator (manages Kafka CRs across all namespaces) +│ └── coherence-operator (manages Coherence CRs across all namespaces) +├── tenant1 namespace (OBaaS instance 1) +│ ├── Envoy Gateway resources +│ ├── APISIX, Eureka, and other OBaaS services +│ ├── Kafka cluster (CR managed by Strimzi) +│ ├── Coherence cluster (CR managed by Coherence Operator) +│ └── Signoz + ClickHouse +└── tenant2 namespace (OBaaS instance 2) + ├── Envoy Gateway resources + ├── APISIX, Eureka, and other OBaaS services + ├── Kafka cluster (CR managed by Strimzi) + ├── Coherence cluster (CR managed by Coherence Operator) + └── Signoz + ClickHouse +``` + +**Namespace behavior:** All OBaaS chart components deploy to the release namespace (specified with the `-n` flag during installation). Envoy Gateway is enabled by default. If deprecated ingress-nginx is explicitly enabled, it watches only its own release namespace by default (`scope.enabled: true`). + +**Network isolation:** The OBaaS chart installs NetworkPolicy resources in the release namespace. Effective enforcement depends on the cluster CNI plugin; use a CNI that supports Kubernetes NetworkPolicy and has policy enforcement enabled. By default, the chart establishes a default-deny baseline, allows same-namespace traffic, allows DNS egress, permits public ingress to the configured gateway or ingress entrypoints, and explicitly allows external egress for compatibility with external databases, OCI APIs, registries, and identity providers. + +**Directory structure:** + +```tree +helm/infra-charts/ +├── obaas-prereqs/ # Cluster-singleton prerequisites (install once per cluster) +└── obaas/ # OBaaS application chart (install N times in different namespaces) + └── examples/ # Example values files for different scenarios +``` + +### Application & Privileged Database User + +During installation, the Helm chart sets up two database users with different privilege levels: + + + + + + + + + + + + + + + + + + + + + +
UserPurposeCreated by
SYSTEM (non-ADB) or ADMIN (ADB)Privileged user for one-time database initializationPre-exists (external DBs) or auto-generated (container DBs)
OBAAS_USERApplication-level user for runtime platform operationsCreated by the init script during first install
+ +**OBAAS_USER** is the unprivileged database identity used by OBaaS components at runtime. The privileged user is only used once — to create OBAAS_USER and grant it the +minimum permissions the platform needs. + +

+ +What OBAAS_USER is granted + +The init script grants or refreshes the following permissions: + +- **DB_DEVELOPER_ROLE** (Oracle 21c+). On Oracle 19c or databases where this role is unavailable, falls back to explicit schema privileges: `CREATE SESSION`, `CREATE TABLE`, `CREATE VIEW`, `CREATE SEQUENCE`, `CREATE PROCEDURE`, `CREATE TRIGGER`, and `CREATE TYPE`. +- **SELECT on monitoring views** Required by the Oracle Database Exporter for Prometheus metrics. +- **Unlimited quota** on its default tablespace. +- **ADB only:** `EXECUTE ON DBMS_CLOUD_AI` and `EXECUTE ON DBMS_CLOUD_PIPELINE` for the AI Optimizer feature. + +
+ +
+ +Which components use OBAAS_USER + +The following components read the `-db-authn` Secret at runtime: + +- **Oracle Database Exporter** — connects as OBAAS_USER to query the monitoring views for Prometheus metrics. +- **Database init container** — uses the credentials during initialization to create the user and verify connectivity. +- **MicroTx Workflow Server** — connects as OBAAS_USER and uses Flyway to create or update its workflow schema objects when `otmm.workflowServer.enabled` is `true`. + +Other platform components such as Eureka and Admin Server connect to the database through their own Spring Boot datasource configuration. + +
+ +:::tip[Bring Your Own Application User] +To use a pre-existing database user instead of the auto-generated OBAAS_USER, create a Secret with your credentials and reference it via `database.authN.secretName`. The init script will skip user creation if the named user already exists in `DBA_USERS`. +::: + +### Prerequisites + +:::warning[Important] +Ensure all [prerequisites](./prereqs.md) are met before starting the deployment. +::: + +Verify that you have the required tools installed: + +```bash +# Verify Helm installation +helm version + +# Verify kubectl and cluster access +kubectl get nodes +``` + +### Names and Namespace Conventions + +The release names `obaas` and `obaas-prereqs`, along with the namespace names `obaas` and `obaas-system`, are used throughout this document as examples only. Replace them with the release names and namespaces that match your environment. + +- `obaas` - example Helm release name for the OBaaS application chart +- `obaas-prereqs` - example Helm release name for the prerequisites chart +- `obaas` - example namespace for namespace-scoped OBaaS application components +- `obaas-system` - example namespace for the cluster-scoped prerequisites chart + +All namespace-scoped OBaaS resources are deployed into the namespace provided with the `-n` flag in the Helm and `kubectl` commands, and the prerequisites chart is installed once per cluster into the namespace you choose for those cluster-level resources. + +For example: + +```bash +helm upgrade --install obaas/obaas-prereqs -n --create-namespace [--debug] +helm upgrade --install obaas/obaas -n --create-namespace [--debug] +kubectl get pods -n +kubectl get pods -n +``` + +If you are deploying multiple OBaaS instances in the same cluster, each instance should use its own namespace. The prerequisite chart should still be installed once per cluster in a single shared namespace of your choice. + +### Installation Guide + +#### Step 0: Configure Helm Repository + +Add the Helm repository to your local Helm installation using the following commands: + +```bash +helm repo add obaas https://oracle.github.io/microservices-backend/helm +helm repo update +``` + +#### Step 1: Install cert-manager + +OBaaS requires [cert-manager](https://cert-manager.io/) as a prerequisite. If you do not have cert-manager installed on your cluster, install it now: + +```shell +helm install \ + cert-manager oci://quay.io/jetstack/charts/cert-manager \ + --version v1.21.2 \ + --namespace cert-manager \ + --create-namespace \ + --set crds.enabled=true \ + --set crds.keep=false +``` + +#### Step 2: Install Prerequisites (Once Per Cluster) + +:::warning[Cluster-Scoped Installation] +Only install prerequisites once per cluster. Installing multiple times will cause CRD conflicts and duplicate operator controllers. +::: + +```bash +helm upgrade --install obaas/obaas-prereqs -n --create-namespace [--debug] [--values ] +``` + +Verify all prerequisite pods are running before proceeding: + +```bash +kubectl get pods -n +``` + +All pods should reach `Running` status within 2-3 minutes. + +To verify that Metrics Server is serving resource metrics, check its aggregated +APIService and query node or pod usage: + +```bash +kubectl get apiservice v1beta1.metrics.k8s.io +kubectl top nodes +kubectl top pods -n +``` + +The APIService should report `Available=True`. A temporarily empty `kubectl +top` result can be normal immediately after startup while the first scrape +completes. + +#### Step 3: Choose a Values File and Install OBaaS + +Choose an example configuration that matches your deployment scenario and install: + +```bash +helm upgrade --install obaas/obaas -f examples/.yaml -n --create-namespace [--debug] +``` + +See [Example Configurations](#example-configurations) below for the full list of available examples. + +Monitor the installation: + +```bash +kubectl get pods -n -w +``` + +:::tip[First Deployment] +It may take 5-10 additional minutes for all pods to reach the Running state. +::: + +#### Step 4: Verify Installation + +After the installation completes, verify all components are running: + +```bash +kubectl get pods -A +``` + +**Expected results:** + +- All pods in `Running` state +- Services with ClusterIP or LoadBalancer IPs assigned +- Ingress configured with your hostname + +### Example Configurations + +Several example configurations are provided for comparison. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Values fileBest forExternal DB requiredNotes
values-default.yamlMinimal evaluationNoUses chart defaults
values-sidb-free.yamlDevelopment and testingNoRuns Oracle Database Free in the cluster
values-existing-adb.yamlOCI productionYesUses Autonomous Database
values-byodb.yamlExisting Oracle DatabaseYesNon-Autonomous Oracle Database only
values-tenant1.yaml, values-tenant2.yamlMulti-tenant setupsDependsRequires unique ingress settings per tenant
values-namespace-override.yamlNamespace watch tuningDependsAdjusts ingress scope
values-signoz-existing-secret.yamlGitOps and pre-created credentialsDependsUses an existing SigNoz secret
values-signoz-cold-storage.yamlLong-term observability retentionDependsUses S3-compatible object storage
values-kafka.yamlKafka workloads and observability testingDependsCreates a Strimzi-managed Kafka cluster
values-coherence.yamlCoherence integration and distributed-cache testingDependsCreates a Coherence Operator-managed cluster
values-private-registry.yamlAir-gapped and private registry installsDependsMirrors images to a private registry
+ +The OBaaS chart selects the database mode with `database.type`. The supported values are `SIDB-FREE`, `ADB-FREE`, `ADB-S`, and `OTHER`; choose the example values file that matches the database deployment you plan to use. + +#### Default Configuration (`values-default.yaml`) + +Minimal configuration with no overrides. All subcharts use their default settings. + +**Use case:** Quick start, development, testing + +**Installation:** + +```bash +helm upgrade --install obaas/obaas -f examples/values-default.yaml -n --create-namespace [--debug] +``` + +#### SIDB-FREE Database (`values-sidb-free.yaml`) + +:::warning[Important] +If you use SIDB, you may need more ephemeral storage on your nodes. Please refer to [prerequisites](./prereqs.md) for details. +::: + +Uses Oracle Database Free as an in-cluster container. This is the default database type. + +**Use case:** Development, testing, standalone deployments + +**Installation:** + +```bash +helm upgrade --install obaas/obaas -f examples/values-sidb-free.yaml -n --create-namespace [--debug] +``` + +#### Existing Oracle AI Autonomous Database Configuration (`values-existing-adb.yaml`) + +Connects to an existing OCI Autonomous Database (ADB-S) instead of deploying a database container. + +**Use case:** Production deployments using a pre-provisioned OCI Oracle Autonomous AI Database + +
+Prerequisites: Create required secrets before installing + +1. Create the OCI API key secret. + + ```bash + python3 tools/oci_config.py --namespace [--config ] [--profile ] + ``` + + `` is the location of your OCI configuration file, e.g., `/home/user/.oci/config` + `` is the profile in your config file to use, if not `DEFAULT` + + :::note + Python 3.12 or later is required to run the `oci_config.py` script. + ::: + +1. Create the privileged authentication secret for the `ADMIN` user. Replace `` with the name of your database. + + ```bash + kubectl -n create secret generic -db-priv-authn \ + --from-literal=username=ADMIN \ + --from-literal=password= \ + --from-literal=service=_tp + ``` + +1. Optional: create the application user secret for `OBAAS_USER`. Replace `` with the name of your database. + + ```bash + kubectl -n create secret generic -db-authn \ + --from-literal=username=OBAAS_USER \ + --from-literal=password= \ + --from-literal=service=_tp + ``` + +
+ +##### Get the OCID for an Existing Oracle AI Autonomous Database + +Before installing OBaaS with an existing Oracle AI Autonomous Database (ADB), you must get the database OCID. The OCID is required as an input parameter for the `helm` installation command. + +A helper script, `get-adb-ocid.sh`, is provided to retrieve the OCID of an existing Oracle AI Autonomous Database. Alternatively, you can locate the OCID manually in the Oracle Cloud Infrastructure (OCI) Console. + +###### Script Usage + +```bash +tools/get-adb-ocid.sh -r (-c | --compartment-ocid ) -dbname [options] +``` + +###### Parameters + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
-r <region>OCI region where the Oracle AI Autonomous Database is deployed
-c <compartment-name>Name of the OCI compartment containing the database
--compartment-ocid <ocid>OCID of the OCI compartment containing the database
-dbname <adb-display-name>Display name of the existing Oracle AI Autonomous Database
[options]Additional optional parameters supported by the script
+ +##### Example + +```bash +tools/get-adb-ocid.sh \ + -r us-ashburn-1 \ + -c my-compartment \ + -dbname my-existing-adb +``` + +The script returns the OCID for the specified Autonomous Database, which can then be used during the OBaaS installation process. + +**Installation:** + +The `--set database.authN.secretName=` argument is optional. + +```bash +helm upgrade --install obaas/obaas \ + -n \ + -f examples/values-existing-adb.yaml \ + --set database.oci.ocid= \ + --set database.privAuthN.secretName= \ + --set database.authN.secretName= \ + [--debug] +``` + +#### Other Existing Oracle AI Database (`values-byodb.yaml`) + +Connects to an existing Oracle AI Database using a connection string and user credentials. +Do not use this option for an Oracle Autonomous Database. This is a good option for +an Oracle Base DB or an on-premises Oracle AI Database. + +**Use case:** Production deployments using a pre-existing Oracle AI Database (non-Autonomous) + +
+Prerequisites: Create required secrets before installing + +1. Create the privileged authentication secret for an appropriate admin user. + + ```bash + kubectl -n create secret generic -db-priv-authn \ + --from-literal=username=SYSTEM \ + --from-literal=password= \ + --from-literal=service= + ``` + +1. Use an admin user with DBA privileges that can create application users and grant the required permissions. The `SYSTEM` user is a good choice. This user should not require the `SYSDBA` role. + +1. Ensure the admin user has the following permissions: + + ```sql + SELECT WITH GRANT OPTION on: + DBA_TABLESPACE_USAGE_METRICS, DBA_TABLESPACES, + GV_$SYSTEM_WAIT_CLASS, GV_$ASM_DISKGROUP_STAT, GV_$DATAFILE, + GV_$SYSSTAT, GV_$PROCESS, GV_$WAITCLASSMETRIC, GV_$SESSION, + GV_$RESOURCE_LIMIT, GV_$PARAMETER, GV_$DATABASE, + GV_$SQLSTATS, GV_$SYSMETRIC, GV_$CON_SYSMETRIC, V_$DIAG_ALERT_EXT + + EXECUTE WITH GRANT OPTION on: + SYS.DBMS_AQ, SYS.DBMS_AQADM, SYS.DBMS_AQIN, + SYS.DBMS_AQIN, SYS.DBMS_AQJMS_INTERNAL + ``` + +1. Review and update the database connection details in `examples/values-byodb.yaml`. + +
+ +**Installation:** + +```bash +helm upgrade --install obaas/obaas \ + -n \ + -f examples/values-byodb.yaml \ + [--debug] +``` + +#### Multi-Tenant Setup (`values-tenant1.yaml`, `values-tenant2.yaml`) + +Configures unique IngressClass and credentials for each tenant to allow multiple OBaaS instances in the same cluster. + +**Use case:** Multi-tenant deployments, namespace isolation + +Each tenant **must** have unique values for the following to avoid conflicts: + +- `controller.ingressClass` +- `controller.ingressClassResource.name` +- `controller.ingressClassResource.controllerValue` +- `controller.electionID` + +**Installation:** + +```bash +# Install first tenant +helm upgrade --install obaas/obaas -n -f examples/values-tenant1.yaml --create-namespace [--debug] + +# Install second tenant +helm upgrade --install obaas/obaas -n -f examples/values-tenant2.yaml --create-namespace [--debug] +``` + +#### Namespace and Scope Configuration (`values-namespace-override.yaml`) + +Demonstrates legacy opt-in ingress-nginx watching scope configuration. All OBaaS components deploy to the release namespace (specified with the `-n` flag). + +**Use case:** Preserving legacy ingress-nginx namespace watch settings when ingress-nginx is explicitly enabled + +**Installation:** + +```bash +helm upgrade --install obaas/obaas -f examples/values-namespace-override.yaml -n --create-namespace [--debug] +``` + +#### SigNoz Existing Secret (`values-signoz-existing-secret.yaml`) + +Uses a pre-existing Kubernetes secret for SigNoz admin authentication instead of auto-generating one. + +**Use case:** GitOps workflows, pre-provisioned credentials + +**Prerequisites:** + +1. Create the secret before installing the chart. + +**Installation:** + +```bash +# Create the secret first +kubectl create secret generic my-signoz-secret \ + --from-literal=email=admin@mydomain.com \ + --from-literal=password=my-secure-password \ + -n + +# Install with the example +helm upgrade --install obaas/obaas -f examples/values-signoz-existing-secret.yaml -n [--debug] +``` + +The setup Job discovers the organization associated with the Secret's `email` +through the SigNoz API. If that account belongs to multiple organizations, include +an `orgID` key containing the selected organization's UUID in the same Secret. +See [dashboard setup](../../observability/dashboards.md#dashboard-setup-job) for +reconciliation behavior and verification commands. + +#### Upgrade SigNoZ during an existing-release upgrade + +Follow the [OBaaS upgrade guide](../../upgrade/index.mdx) for prerequisite and +Envoy Gateway CRD updates and the two-step ClickHouse/SigNoZ upgrade. Older +ClickHouse versions must be upgraded before the new pre-upgrade migration runs. + +The two-step procedure without protected recovery is for installations where +observability data loss is acceptable. For backup and preservation, follow +[SigNoZ's ClickHouse upgrade and backup guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/). +Do not set `signozUpgrade.mode=destructive-replace` for the in-place upgrade. + +#### SigNoz Cold Storage (`values-signoz-cold-storage.yaml`) + +Configures SigNoz ClickHouse cold storage so recent telemetry stays on the local persistent disk and older data is offloaded to S3-compatible object storage. + +This example can be used with Oracle Cloud Infrastructure Object Storage or with an on-premises S3-compatible object store such as MinIO. + +**Use case:** Longer telemetry retention, reduced local disk pressure, and support for both cloud and on-premises object storage backends + +
+Prerequisites: Prepare object storage settings before installing + +1. Create or identify an S3-compatible bucket for SigNoz cold storage. + +1. Collect the connection details for your object store: `endpoint`, `accessKey`, and `secretAccess`. + +1. Review and update `examples/values-signoz-cold-storage.yaml` with your environment-specific values. + +1. Size local ClickHouse storage appropriately. `signoz.clickhouse.persistence.size` controls hot storage capacity, and `signoz.clickhouse.coldStorage.defaultKeepFreeSpaceBytes` controls how much local disk remains free before older data is offloaded. + +1. For on-premises installations, you can use an S3-compatible endpoint provided by MinIO instead of OCI Object Storage. ([min.io](https://min.io/)) + +
+ +**Installation:** + +```bash +helm upgrade --install obaas/obaas \ + -f examples/values-signoz-cold-storage.yaml \ + -n --create-namespace [--debug] +``` + +#### Kafka Enabled Configuration (`values-kafka.yaml`) + +Creates a Strimzi-managed Kafka cluster in the OBaaS release namespace. This is useful for Kafka integration testing, CloudBank Helidon producer and consumer workloads, and Kafka observability validation in SigNoz. + +**Prerequisites:** + +1. Install `obaas-prereqs` once per cluster. +1. Keep `strimzi-kafka-operator` enabled in `obaas-prereqs`. +1. Ensure the Strimzi operator watches the OBaaS release namespace. + +**Installation:** + +```bash +helm upgrade --install obaas/obaas \ + -f examples/values-kafka.yaml \ + -n \ + --create-namespace [--debug] +``` + +**Optional Kafka metrics in SigNoz:** + +```bash +helm upgrade --install obaas/obaas \ + -f examples/values-kafka.yaml \ + -f extensions/kafka-metrics.yaml \ + -n \ + --create-namespace [--debug] +``` + +With release name `obaas`, Kafka clients can use `obaas-kafka-cluster-kafka-bootstrap:9092`. The chart also creates the stable alias `kafka-bootstrap:9092`. + +#### Coherence Enabled Configuration (`values-coherence.yaml`) + +Creates a three-member, ephemeral Coherence cluster in the OBaaS release namespace. This is useful for Coherence integration testing and development workloads that require a distributed cache or data grid. + +**Prerequisites:** + +1. Install `obaas-prereqs` once per cluster. +1. Keep `coherence-operator` enabled in `obaas-prereqs`. +1. Ensure the Coherence Operator watches the OBaaS release namespace. + +**Installation:** + +```bash +helm upgrade --install obaas/obaas \ + -f examples/values-coherence.yaml \ + -n \ + --create-namespace [--debug] +``` + +Set `coherence.name` to a DNS-compatible name unique within the release namespace. The provided example uses `mysample-cluster`; replace it with the name for your cluster. Verify the resource and its members with: + +```bash +kubectl get coherence -n +kubectl get pods -n +``` + +The example does not create persistent storage. Configure `coherence.coherence.persistence` with a suitable StorageClass and volume size when durable Coherence data is required. + +#### Private Registry Configuration (`values-private-registry.yaml`) + +Uses a private container registry for all images with authentication. + +**Use case:** Air-gapped environments, corporate registries, security compliance + +
+Prerequisites + +1. Mirror all required images to your private registry. + + A utility is provided to mirror the images to your registry. Provide the name of your target registry. You must be authenticated to the target registry before running this script. + + ```bash + cd helm/infra-charts/tools + ./mirror-images.sh myregistry.example.com + ``` + +1. Create an image pull secret. + + ```bash + kubectl create secret docker-registry myregistry-secret \ + --docker-server=myregistry.example.com \ + --docker-username= \ + --docker-password= \ + --docker-email= + ``` + +1. Install both the `obaas-prereqs` and `obaas` charts using values files with your registry details. + +
+ +**Installation:** + +```bash +helm upgrade --install obaas/obaas-prereqs -n -f obaas-prereqs/examples/values-private-registry.yaml --create-namespace [--debug] +helm upgrade --install obaas/obaas -n -f obaas/examples/values-private-registry.yaml --create-namespace [--debug] +``` + +
+Image registry override details + +Each subchart has its own image configuration that must be set explicitly. + +**Subcharts with a dedicated registry field** (set to your registry URL): + +- **ingress-nginx**: `controller.image.registry` when deprecated ingress-nginx is explicitly enabled +- **signoz**: `global.imageRegistry` +- **SigNoz setup Job**: `signoz.setup.image.registry`, with separate + `signoz.setup.image.repository` and `signoz.setup.image.tag` values. The default + is `container-registry.oracle.com/os/oraclelinux:9`; this Job does not use + `signoz.global.imageRegistry`. The private registry example mirrors it as + `myregistry.example.com/os/oraclelinux:9`. Replacement images must provide + `python3` and its standard library; no packages are installed at runtime. + The former `signoz.utilities.curlJq.image` override is no longer used. +- **apisix etcd**: `apisix.etcd.image.registry` + +**OBaaS components requiring the full repository path** (include registry in `image.repository`): + +- **eureka**, **admin-server**, **otmm**, **oracle-database-exporter** +- **database** (for SIDB-FREE/ADB-FREE) +- **apisix**: `apisix.image.repository`, `apisix.initContainer.image` + +Image pull secrets are propagated to subcharts via `global.imagePullSecrets`. See `values-private-registry.yaml` for a complete example. + +:::note +Cluster-singleton prerequisites (cert-manager, external-secrets, metrics-server, kube-state-metrics, strimzi-kafka-operator) have their own image configuration in the `obaas-prereqs` chart. +::: + +
+ +#### Combining Examples + +You can layer multiple value files to combine configurations: + +```bash +# Combine multi-tenant and private registry configurations +helm upgrade --install obaas/obaas \ + -f examples/values-tenant1.yaml \ + -f examples/values-private-registry.yaml \ + -n --create-namespace [--debug] +``` + +Or create a custom values file: + +```yaml +# my-custom-values.yaml +global: + imagePullSecrets: + - myregistry-secret + +# Disable components you don't need +ai-optimizer: + enabled: false + +signoz: + enabled: false +``` + +### Uninstallation + +To remove OBaaS from your cluster: + +:::warning[Data Loss] +Uninstalling will delete all resources. Ensure you have backups of any important data before proceeding. +::: + +**Step 1: Uninstall OBaaS instances first:** + +```bash +helm uninstall -n +helm uninstall -n +helm uninstall -n +``` + +**Step 2: Delete namespaces (optional):** + +```bash +kubectl delete namespace +``` + +**Step 3: Uninstall prerequisites (only if removing entirely):** + +```bash +helm uninstall -n +``` + +:::danger[Warning] +Uninstalling prerequisites will affect **all** OBaaS instances in the cluster. Only do this if you're removing OBaaS completely. +::: + +### Next Steps + +Once OBaaS is running, you can: + +- [Deploy your application](../../deploy/deploy.md) using the OBaaS platform +- [Configure observability](../../observability/configure.md) for metrics, logs, and traces diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/helm/planning.md b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/planning.md new file mode 100644 index 000000000..8f41888a0 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/planning.md @@ -0,0 +1,135 @@ +--- +title: Planning your installation +sidebar_position: 2 +--- + +Before embarking on installation, there are a few decisions you should make. + +The main steps of the planning process are as follows: + +- Choose database deployment option +- Choose cluster access option +- Choose components +- Plan any customizations +- Confirm prerequisites met +- Perform installation + +Each step is explained in detail below. + +## Choose database deployment option + +An Oracle database is a prerequisite for installation, but you may use any kind of database deployment. For example, you may choose to use: + +- Oracle Autonomous AI Database +- Oracle Globally Distributed Autonomous AI Database +- Oracle AI Database running in Base Database Service +- Oracle AI Database running in a container inside your Kubernetes cluster +- Oracle AI Database running in your own data center or cloud provider + +You will need to provide various configuration information to the Helm charts during installation depending on where your database will be deployed. In each case, you will specify this information in the `database` section of the `values.yaml` file for the `obaas` Helm chart. + +Select the database mode by setting `database.type` to one of the supported values: `SIDB-FREE`, `ADB-FREE`, `ADB-S`, or `OTHER`. Use `SIDB-FREE` or `ADB-FREE` for in-cluster database deployments, `ADB-S` for Autonomous Database deployments, and `OTHER` for non-Autonomous Oracle Database deployments. + + + + + + + + + + + + + + + + + + + + + + +
Type of deploymentInformation you will need
Autonomous AI Database (including Globally Distributed)The OCID of your database, your OCI CLI or SDK configuration details, including your private key, and the password for your ADMIN user.
In-cluster (Single Instance) deploymentThe username and password for both an admin user, e.g., SYSTEM, and a user for OBaaS, e.g., OBAAS_USER.
Any other type of deploymentThe username and password for both an admin user, e.g., SYSTEM, and a user for OBaaS, e.g., OBAAS_USER, and the connection details for your database (host, port, service name).
+ +Ensure that you review the installation documentation and the instructions in the example `values.yaml` file provided for your specific type of database deployment and provide the necessary configuration information. Also, ensure that you create Kubernetes secrets with your database credentials if required for your chosen deployment option. + +:::note +If you plan to use the in-cluster (Single instance) deployment option, be aware that you will need to have adequate storage on your nodes for the database files. We recommend 250 GB ephemeral node storage for this option. +::: + +## Choose cluster access option + +Kubernetes has deprecated the Ingress API and is moving to the Gateway API as its replacement. At this time, both are supported, but it is important to consider your migration strategy. + +OBaaS 2.1.0 includes Envoy Gateway (which works with the Gateway API) and deprecated NGINX Ingress Controller (which works with the Ingress API). Envoy Gateway is enabled by default. NGINX Ingress Controller is disabled by default and should be enabled only when you still require the legacy Ingress API path. You can choose which is installed by setting the appropriate `enabled` field to `true` or `false`. Note that there are additional configuration options for each. + +```yaml +gateway-helm: + enabled: true + + ... + +ingress-nginx: + enabled: false +``` + +You may also choose to explicitly install both during migration, or neither, for example, if your Kubernetes cluster already has another method for external cluster access provided. + +Additional resources are likely to be available from your Kubernetes provider. For example, see [this guide](https://gateway-api.sigs.k8s.io/guides/getting-started/migrating-from-ingress-nginx/) on the Kubernetes SIG website. + +## Choose components + +OBaaS contains a number of components, and you may choose which components you wish to install. Each component has its own section in the `values.yaml` file for either the `obaas` or `obaas-prereqs` Helm chart. Note that the components in the `obaas-prereqs` Helm chart are cluster-wide deployments that can only be installed once per cluster. + +You may opt out of installing any component by setting its `enabled` field to `false`. For example, if you do not want to install the Strimzi Kafka Operator, you would update the `values.yaml` for the `obaas-prereqs` Helm chart as follows: + +```yaml +strimzi-kafka-operator: + enabled: false +``` + +To create a Kafka cluster for an OBaaS instance, enable Kafka in the `obaas` Helm chart. The `values-kafka.yaml` example shows this configuration: + +```yaml +kafka: + enabled: true +``` + +To create a Coherence cluster for an OBaaS instance, keep `coherence-operator` enabled in the cluster-wide `obaas-prereqs` chart, then enable Coherence in the namespace-scoped `obaas` chart. The `values-coherence.yaml` example creates a three-member, ephemeral cluster: + +```yaml +coherence: + enabled: true + name: mysample-cluster +``` + +Configure `coherence.coherence.persistence` with a StorageClass and volume size when the cluster requires durable data. The Coherence Operator and its CRDs are installed once per cluster; each enabled OBaaS release creates its own Coherence custom resource in that release namespace. + +Note that most components also have additional configuration, and some have optional sub-components that you may also enable or disable as desired. + +## Plan any customizations + +The OBaaS Helm charts include most components by depending on those components' public Helm charts. This means that any customization option provided in those charts is available for your use. See the [version-pinned dependent Helm chart references](./chart-references.md) for the README and complete values file for each dependency bundled with OBaaS 2.1.2. + +For example, the [APISIX Helm chart README](https://github.com/apache/apisix-helm-chart/blob/apisix-2.17.0/charts/apisix/README.md) and [values.yaml](https://github.com/apache/apisix-helm-chart/blob/apisix-2.17.0/charts/apisix/values.yaml) provide the configuration options for the APISIX version bundled with this release. + +If you wish to use a customization option from a dependent chart, you may specify it under the key/section for that chart in the appropriate `values.yaml`. For example, suppose you wanted to change the admin port for APISIX. In the documentation for the APISIX Helm chart, you notice they provide a field called `apisix.admin.port` for this purpose. You can include this in the `values.yaml` for the `obaas` Helm chart under the `apisix` key, as follows: + +```yaml +apisix: + apisix: + admin: + port: 9123 +``` + +In the *Platform Services* section of this documentation, you will find details of commonly used customizations. + +## Confirm prerequisites met + +As a final step, before starting the installation, please take a moment to confirm that your environment meets the stated [prerequisites](./prereqs.md) as many common installation problems are caused by failure to ensure the environment meets the prerequisites. + +## Perform Installation + +You are now ready to continue to the [installation guide](./install.md). diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/helm/prereqs.md b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/prereqs.md new file mode 100644 index 000000000..5413e11c6 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/helm/prereqs.md @@ -0,0 +1,156 @@ +--- +title: Prerequisites +sidebar_position: 1 +--- +## Overview + +Before installing Oracle Backend for Microservices and AI (OBaaS), ensure your environment meets all prerequisites. Installing without meeting these requirements will result in deployment failures. + +:::danger[Warning] +If your environment does not meet the prerequisites, the installation may not succeed. Do not proceed with installation until you have confirmed your environment meets all requirements. +::: + +## System Requirements + +### Oracle OCI + +If you are installing into Oracle OCI you need the right [OCI IAM policies](../oci_policies.md) in place. Please review and ensure you have the required policies and permissions before installing. + +### Kubernetes Cluster + +A CNCF-compliant Kubernetes cluster with the following specifications: + +**Cluster version:** + +- Kubernetes 1.34+ + +**Infrastructure requirements:** + +- Minimum 3 worker nodes +- At least 2 OCPU and 32GB memory per worker node +- Working storage provider with storage class for RWX (ReadWriteMany) PVs +- Working network provider supporting either Ingress or Gateway API for external cluster access +- (optional but recommended) Kubernetes NetworkPolicy enforcement from the cluster CNI plugin + +You may need extra capacity: + +- If you are installing the OTMM workflow-server, allocate at least an additional 2 CPUs and 4Gi RAM per cluster. +- If you are using the Single Instance Database (SIDB) option, which runs the Oracle AI Database in a container in the cluster, you may need more ephemeral storage on your nodes to allow space for the database file system. We recommend at least 250GB of ephemeral node storage for this option. + +**Capacity planning:** + +- Base configuration supports ONE OBaaS installation plus applications +- For TWO OBaaS instances: double the number of worker nodes +- Scale worker nodes based on additional application requirements + +:::tip[Recommended] +Oracle Kubernetes Engine (OKE) "Quick Create/Enhanced" cluster is the recommended platform for OBaaS deployments. +::: + +### NetworkPolicy enforcement + +The OBaaS application chart creates NetworkPolicy resources in each release namespace. These policies establish a default-deny baseline, allow traffic within the release namespace, allow DNS egress, and allow public ingress only to the gateway and ingress entrypoints that OBaaS exposes. For compatibility, outbound traffic to external destinations is explicitly allowed by default. + +NetworkPolicy objects are only enforced when the Kubernetes cluster uses a CNI plugin that implements NetworkPolicy. Before using OBaaS in a shared or production cluster, confirm that your CNI has NetworkPolicy enforcement enabled. Clusters without an enforcing CNI will accept the NetworkPolicy resources, but pod traffic will not be isolated by them. + +If you disable the chart's default external egress allowance, add explicit `networkPolicy.extraEgress` rules for every required external dependency, including Oracle Database endpoints, OCI APIs, image registries, identity providers, and any outbound service your applications call. + +### Oracle Database + +You must have access to an Oracle Database instance (19c or later). The following database types are supported: + +- Oracle Autonomous Database (ADB-S or ADB-D) +- Oracle Database on-premise or in the cloud + +**Version requirements:** + + + + + + + + + + + + + + +
MinimumRecommended
Oracle Database 19cOracle Autonomous Database 26ai ATP
+ +:::info[AI Features] +To use OBaaS AI capabilities, you must use Oracle Database 26ai or later. Earlier versions do not support AI features. +::: + +**Recommended configuration:** + +- 2 ECPU +- 1 TB storage +- Secure access from anywhere enabled + +**Access requirements:** + +- ADMIN or SYSTEM credentials (required for schema creation) +- Connection details: host, port, and service name + +### Private Image Repository (Optional) + +If using a private container image repository: + +**Requirements:** + +- All OBaaS images copied to your private registry +- Registry credentials configured in Kubernetes +- Network access from cluster to private registry + +**Helper script:** + +OBaaS provides the `mirror-images.sh` script to assist with copying images to your private repository. + +```bash +helm/tools/mirror-images.sh +``` + +## Verification + +### Verify Kubernetes Cluster + +Check your Kubernetes version: + +```bash +kubectl version --short +``` + +Verify worker nodes meet requirements: + +```bash +kubectl get nodes +kubectl describe nodes | grep -A 5 "Allocated resources" +``` + +Check storage classes: + +```bash +kubectl get storageclass +``` + +Ensure you have a storage class that supports RWX (ReadWriteMany) access mode. + +### Verify Default Namespaces + +For a fresh OKE cluster, verify the default namespaces are present: + +```bash +kubectl get ns +``` + +Expected output: + +```text +NAME STATUS AGE +default Active 4m52s +kube-node-lease Active 4m52s +kube-public Active 4m52s +kube-system Active 4m52s +``` diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/index.md b/docs-source/site/versioned_docs/version-2.1.2/setup/index.md new file mode 100644 index 000000000..aed028d05 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/index.md @@ -0,0 +1,63 @@ +--- +title: Setup +sidebar_position: 0 +--- + +## Oracle Backend for Microservices and AI (OBaaS) - Deployment Options + +Choose your preferred deployment method for OBaaS based on your requirements and existing infrastructure. + +### Deploy with Helm + +Helm deployment is the only supported method of installation for production environments. + +**Best for**: Deploying to existing Kubernetes clusters. + +**What you get**: + +- **Flexible deployment** to existing Kubernetes cluster +- **Multi-tenancy support** - deploy multiple OBaaS instances +- **Granular control** over individual components +- **Use existing infrastructure** (cluster, database, networking) + +**Prerequisites**: + +- Existing Kubernetes cluster (1.34+) +- Helm 3.8+ installed +- kubectl configured +- Access to Oracle Database (19c or later) + +**[Get started with Helm Charts →](./helm/install.md)** + +### Deploy using OCI "Magic Button" + +Complete development/test infrastructure provisioning on Oracle Cloud Infrastructure. + +**What you get**: + +- Automated OKE cluster creation and configuration +- Autonomous Database provisioning (or BYO database support) +- Network infrastructure (VCN, subnets, load balancers, security lists) +- Complete OBaaS platform deployed and configured + +**Prerequisites:** + +- OCI tenancy with appropriate quotas and permissions + +To use this approach, click on this button to get started: + +[![Deploy to Oracle Cloud](https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/latest/deploy-to-oracle-cloud.svg)](https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/oracle/microservices-backend/releases/latest/download/obaas-iac.zip) + +When deploying using this method you may see the following error, the resolution is to run the `Apply` job again: + +```log +module.kubernetes["managed"].oci_identity_policy.workers_policies: Creating... +module.kubernetes["managed"].oci_identity_policy.workers_policies: Creation complete after 0s [id=ocid1.policy.oc1..aaaaaaaasaxvpssa2h2qgzacgc5az6s477gn3o4sdhwwh3fo7jxyxmu2k24a] +╷ +│ Error: During creation, Terraform expected the resource to reach state(s): ACTIVE,NEEDS_ATTENTION, but the service reported unexpected state: DELETING. +│ +│ with module.kubernetes["managed"].oci_containerengine_addon.ingress_addon[0], +│ on modules/kubernetes/main.tf line 125, in resource "oci_containerengine_addon" "ingress_addon": +│ 125: resource "oci_containerengine_addon" "ingress_addon" { +│ +``` diff --git a/docs-source/site/versioned_docs/version-2.1.2/setup/oci_policies.md b/docs-source/site/versioned_docs/version-2.1.2/setup/oci_policies.md new file mode 100644 index 000000000..a86e3705a --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/setup/oci_policies.md @@ -0,0 +1,88 @@ +--- +title: OCI Policies +sidebar_position: 3 +--- + +## Overview + +The following policies need to be in place to install Oracle Backend for Microservices and AI. + +:::tip[Use names or OCIDs] +You can use OCIDs instead of names by replacing the `` or `` with the word `id` followed by the OCID. Use of OCIDs may be required for some kinds of identity domains. +::: + +### Identity and Access Management + +```text +Allow group to read compartments in tenancy +Allow group to read domains in tenancy +Allow group to inspect all-resources in tenancy +Allow group to inspect resource-availability in tenancy +Allow group to read limits in tenancy +Allow group to manage dynamic-groups in tenancy +Allow group to manage policies in tenancy +``` + +### Oracle Container Engine for Kubernetes + +```text +Allow group to manage cluster-family in compartment +Allow group to manage cluster-node-pools in compartment +Allow group to manage clusters in compartment +Allow group to manage instance-family in compartment +Allow group to manage cluster-node-pools in compartment +Allow group to manage instance-family in compartment +Allow group to manage public-ips in compartment +``` + +### VCN + +```text +Allow group to manage vcns in compartment +Allow group to manage virtual-network-family in compartment +Allow group to use private-ips in compartment +Allow group to use subnets in compartment +Allow group to use vnics in compartment +Allow group to manage route-tables in compartment +Allow group to manage security-lists in compartment +Allow group to manage dhcp-options in compartment +Allow group to manage nat-gateways in compartment +Allow group to manage service-gateways in compartment +Allow group to manage network-security-groups in compartment +Allow group to manage subnets in compartment +Allow group to manage load-balancers in compartment +``` + +### Container Registry + +```text +Allow group to manage repos in compartment +``` + +### Object Storage + +```text +Allow group to read objectstorage-namespaces in compartment +Allow group to manage objects in compartment +Allow group to inspect buckets in compartment +``` + +### Autonomous Database + +```text +Allow group to manage autonomous-database-family in compartment +``` + +### Oracle Resource Manager + +```text +Allow group to manage orm-family in compartment +Allow group to manage orm-config-source-providers in compartment +Allow group to manage orm-stacks in compartment +Allow group to manage orm-jobs in compartment +Allow group to manage orm-private-endpoints in compartment +Allow group to manage orm-template in compartment +Allow group to manage orm-work-requests in compartment +Allow group to use cloud-shell-public-network in tenancy +Allow group to use cloud-shell in tenancy +``` diff --git a/docs-source/site/versioned_docs/version-2.1.2/upgrade/_category_.json b/docs-source/site/versioned_docs/version-2.1.2/upgrade/_category_.json new file mode 100644 index 000000000..06621a02e --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/upgrade/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Upgrade", + "position": 7, + "link": { + "type": "doc", + "id": "upgrade/index" + } +} diff --git a/docs-source/site/versioned_docs/version-2.1.2/upgrade/index.mdx b/docs-source/site/versioned_docs/version-2.1.2/upgrade/index.mdx new file mode 100644 index 000000000..d0f6811d6 --- /dev/null +++ b/docs-source/site/versioned_docs/version-2.1.2/upgrade/index.mdx @@ -0,0 +1,210 @@ +--- +title: Upgrade +sidebar_position: 0 +--- + +export const OBAAS_VERSION = '2.1.2'; + +Upgrade OBaaS 2.0.0 or later to {OBAAS_VERSION} in this order: +prepare values → update prerequisite CRDs → upgrade prerequisites → update +Envoy CRDs → upgrade the application. + +:::warning[Observability data] +The two-step procedure below is for installations where data loss is acceptable. +It does not create backups or intentionally erase data. For backup and preservation, +follow [SigNoZ's ClickHouse upgrade guidance](https://signoz.io/docs/operate/migration/upgrade-0-131/) +and validate your recovery point first. Do not use `destructive-replace` for this +in-place upgrade or downgrade ClickHouse against upgraded data volumes. +::: + +## 1. Prepare charts and values + +Run the commands from the repository root with chart dependencies prepared. +Use the local charts for in-development releases; published charts must have an +`appVersion` matching the target release. + +Keep the existing release names, namespaces, database secrets, enabled components, +and registry settings. Use complete values files for both charts. Export the +saved overrides if needed, and protect the files because they may contain secrets: + +```bash +umask 077 +helm get values -n -o yaml > prereqs-values.yaml +helm get values -n -o yaml > app-values.yaml +``` + +## 2. Update prerequisite CRDs + +Apply only the enabled operators' CRDs. These changes require cluster-admin +access and affect the whole cluster. Preserve stored API versions; resolve +ownership conflicts without deleting CRDs or using `--force-conflicts`. + +### Strimzi + +Check every Strimzi CRD's `status.storedVersions`. If any still contains +`v1beta2`, back up its resources and complete the Java 21 +[Strimzi v1 API migration](https://strimzi.io/docs/operators/1.2.0/deploying.html#assembly-upgrade-str) +before applying the 1.2.0 bundle. Continue only when all store `v1`. + +```bash +kubectl apply \ + -f https://github.com/strimzi/strimzi-kafka-operator/releases/download/1.2.0/strimzi-crds-1.2.0.yaml + +kubectl wait --for=condition=Established --timeout=5m \ + crd/kafkas.kafka.strimzi.io \ + crd/kafkaconnects.kafka.strimzi.io \ + crd/strimzipodsets.core.strimzi.io \ + crd/kafkatopics.kafka.strimzi.io \ + crd/kafkausers.kafka.strimzi.io \ + crd/kafkanodepools.kafka.strimzi.io \ + crd/kafkabridges.kafka.strimzi.io \ + crd/kafkaconnectors.kafka.strimzi.io \ + crd/kafkamirrormaker2s.kafka.strimzi.io \ + crd/kafkarebalances.kafka.strimzi.io +``` + +### Oracle Database Operator + +:::warning[Older release-managed CRDs] +Inspect `helm get manifest -n `. +If it contains Oracle CRDs, back up their definitions and resources, then use a +transition chart to add `helm.sh/resource-policy: keep` to the old CRD templates. +Verify retention in the saved release manifest before upgrading. Annotating only +the live CRDs is insufficient. Follow `CRD-MIGRATION.md` in the operator archive +below. Recreating a deleted CRD does not restore its custom resources. +::: + +Extract the target CRDs and replace the bundled namespace with the namespace +hosting the operator and its certificate: + +```bash +OBAAS_CRD_WORKDIR=$(mktemp -d) +tar -xzf helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz \ + -C "$OBAAS_CRD_WORKDIR" \ + oracle-database-operator/crds oracle-database-operator/CRD-MIGRATION.md + +# Replace the bundled namespace with the actual operator namespace. +for crd_file in "$OBAAS_CRD_WORKDIR"/oracle-database-operator/crds/*.yaml; do + sed 's/oracle-database-operator-system//g' \ + "$crd_file" > "$crd_file.tmp" + mv "$crd_file.tmp" "$crd_file" +done + +kubectl apply --server-side --field-manager=helm \ + -f "$OBAAS_CRD_WORKDIR/oracle-database-operator/crds" +kubectl wait --for=condition=Established --timeout=5m \ + -f "$OBAAS_CRD_WORKDIR/oracle-database-operator/crds" +``` + +## 3. Upgrade prerequisites + +```bash +helm upgrade helm/infra-charts/obaas-prereqs \ + -n \ + -f \ + --wait --timeout 30m +``` + +Continue when Helm reports `deployed`, the operators are ready, and the database +operator CRD configuration Job completed. + +## 4. Update Envoy Gateway CRDs + +When Envoy Gateway is enabled and this installation manages its CRDs, apply the +bundled Envoy and Gateway API definitions (Gateway API `v1.6.1`, experimental): + +```bash +kubectl apply --server-side --field-manager=helm -R \ + -f helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds +kubectl wait --for=condition=Established --timeout=5m \ + -R -f helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds +``` + +If the provider or another installation owns these CRDs, coordinate the update +with that owner and keep `gateway-helm.crds.enabled=false`. + +## 5. Upgrade the application + +### Upgrade SigNoZ and ClickHouse in two steps + +Skip the first pass if ClickHouse already runs `25.12.5`. If SigNoZ is disabled, +use the normal Helm upgrade at the end of this section. + +**First pass: upgrade ClickHouse with migration and dashboard reconciliation disabled.** The migration is a +`pre-upgrade` hook, so it otherwise runs against the old ClickHouse server. +Keep the current SigNoZ and collector tags; these example tags match OBaaS 2.1.0: + +```bash +helm upgrade helm/infra-charts/obaas \ + -n \ + -f \ + --set signoz.telemetryStoreMigrator.enabled=false \ + --set signoz.setup.enabled=false \ + --set signoz.clickhouse.image.tag=25.12.5 \ + --set signoz.signoz.image.tag=v0.113.0 \ + --set signoz.otelCollector.image.tag=v0.144.1 \ + --wait --timeout 30m +``` + +Use your currently running tags for other starting versions. This pass also +applies other application-chart changes. Keep the same complete values file, +release, and namespace for both passes. + +`signoz.setup.enabled=false` skips the OBaaS setup hook, including dashboard +reconciliation. The current hook uses the V2 dashboard API, which the retained +older SigNoZ version does not support. Keep it disabled only for the first pass; +other Helm hooks remain enabled. + +Verify ClickHouse is healthy and the running server reports `25.12.5` before +continuing (configure client authentication if required): + +```bash +kubectl get pods -n \ + -l clickhouse.altinity.com/chi=-clickhouse +kubectl exec -n -c clickhouse -- \ + clickhouse-client --query 'SELECT version()' +``` + +**Second pass: upgrade SigNoZ and the collector with migration enabled.** + +```bash +helm upgrade helm/infra-charts/obaas \ + -n \ + -f \ + --set signoz.telemetryStoreMigrator.enabled=true \ + --set signoz.setup.enabled=true \ + --set signoz.telemetryStoreMigrator.upgradeHelmHooks=true \ + --set signoz.clickhouse.image.tag=25.12.5 \ + --set signoz.signoz.image.tag=v0.142.1 \ + --set signoz.otelCollector.image.tag=v0.144.10 \ + --wait --timeout 30m +``` + +Do not leave the migrator or setup hook disabled. The second pass re-enables +dashboard reconciliation against the upgraded SigNoZ API. Setting only `upgradeHelmHooks=false` still +runs a migration Job and does not provide this ordering. + +**Without SigNoZ**, use: + +```bash +helm upgrade helm/infra-charts/obaas \ + -n \ + -f \ + --wait --timeout 30m +``` + +## 6. Verify + +```bash +helm status -n +kubectl get pods,jobs,pvc -n +``` + +Confirm Helm reports `deployed`, pods are ready, PVCs are bound, database +initialization completed, and the enabled application endpoints work. With +SigNoZ enabled, confirm migration/setup Jobs completed and new telemetry appears. + +## Versions before OBaaS 2.0.0 + +In-place upgrades are unsupported. Install a new environment and migrate your +application data, database secrets, configuration, dashboards, and custom resources. diff --git a/docs-source/site/versioned_sidebars/version-2.1.2-sidebars.json b/docs-source/site/versioned_sidebars/version-2.1.2-sidebars.json new file mode 100644 index 000000000..caea0c03b --- /dev/null +++ b/docs-source/site/versioned_sidebars/version-2.1.2-sidebars.json @@ -0,0 +1,8 @@ +{ + "tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/docs-source/site/versions.json b/docs-source/site/versions.json index 64d299423..fae264081 100644 --- a/docs-source/site/versions.json +++ b/docs-source/site/versions.json @@ -1,4 +1,5 @@ [ + "2.1.2", "2.1.1", "2.1.0", "2.0.0" diff --git a/helm/app-charts/obaas-sample-app/Chart.yaml b/helm/app-charts/obaas-sample-app/Chart.yaml index 97576a434..58c81f0c1 100644 --- a/helm/app-charts/obaas-sample-app/Chart.yaml +++ b/helm/app-charts/obaas-sample-app/Chart.yaml @@ -9,5 +9,5 @@ maintainers: - name: Oracle and/or its affiliates email: obaas_ww@oracle.com url: https://oracle.github.io/microservices-backend -version: 0.2.0 -appVersion: "2.2.0" +version: 0.1.2 +appVersion: "2.1.2" diff --git a/helm/app-charts/obaas-sample-app/examples/sqlcl-pod.yaml b/helm/app-charts/obaas-sample-app/examples/sqlcl-pod.yaml index 31519a2af..6990c7931 100644 --- a/helm/app-charts/obaas-sample-app/examples/sqlcl-pod.yaml +++ b/helm/app-charts/obaas-sample-app/examples/sqlcl-pod.yaml @@ -5,38 +5,38 @@ metadata: spec: restartPolicy: Never containers: - - name: sqlcl - image: container-registry.oracle.com/database/sqlcl:26.2.0 - env: - # - name: TNS_ADMIN - # value: /app/tns_admin - - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: obaas-db-authn - key: username - - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: obaas-db-authn - key: password - - name: DB_SERVICE - valueFrom: - secretKeyRef: - name: obaas-db-authn - key: service - command: ["/bin/sh", "-c"] - args: - - | - sql $DB_USERNAME/$DB_PASSWORD@$DB_SERVICE << SQL - -- list current config properties - select * from properties; - -- create some new config properties - insert into properties (application, profile, label, prop_key, value) values - ('billing', 'default', 'latest', 'apikey', 'abc123'), - ('billing', 'default', 'latest', 'subscription', 'xyz456'); - SQL - exit 0 + - name: sqlcl + image: container-registry.oracle.com/database/sqlcl:26.2.2 + env: + # - name: TNS_ADMIN + # value: /app/tns_admin + - name: DB_USERNAME + valueFrom: + secretKeyRef: + name: obaas-db-authn + key: username + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: obaas-db-authn + key: password + - name: DB_SERVICE + valueFrom: + secretKeyRef: + name: obaas-db-authn + key: service + command: ["/bin/sh", "-c"] + args: + - | + sql $DB_USERNAME/$DB_PASSWORD@$DB_SERVICE << SQL + -- list current config properties + select * from properties; + -- create some new config properties + insert into properties (application, profile, label, prop_key, value) values + ('billing', 'default', 'latest', 'apikey', 'abc123'), + ('billing', 'default', 'latest', 'subscription', 'xyz456'); + SQL + exit 0 # If using wallet, need to mount the wallet secret # volumeMounts: # - name: tns-admin diff --git a/helm/app-charts/obaas-sample-app/templates/db-init-job.yaml b/helm/app-charts/obaas-sample-app/templates/db-init-job.yaml index bf0f019f3..f9f8a5ad0 100644 --- a/helm/app-charts/obaas-sample-app/templates/db-init-job.yaml +++ b/helm/app-charts/obaas-sample-app/templates/db-init-job.yaml @@ -31,7 +31,7 @@ spec: securityContext: {{- toYaml . | nindent 10 }} {{ end }} - image: {{ .Values.database.sqlcl.image.repository | default "container-registry.oracle.com/database/sqlcl" }}:{{ .Values.database.sqlcl.image.tag | default "26.2.0" }} + image: {{ .Values.database.sqlcl.image.repository | default "container-registry.oracle.com/database/sqlcl" }}:{{ .Values.database.sqlcl.image.tag | default "26.2.2" }} env: - name: TNS_ADMIN value: /app/tns_admin diff --git a/helm/app-charts/obaas-sample-app/values.yaml b/helm/app-charts/obaas-sample-app/values.yaml index 581023e1a..161f446a2 100644 --- a/helm/app-charts/obaas-sample-app/values.yaml +++ b/helm/app-charts/obaas-sample-app/values.yaml @@ -54,7 +54,7 @@ database: # usernameKey: "username" # passwordKey: "password" # serviceKey: "service" - #-- Specify privAuthN when you have pre-created this secret. + # -- Specify privAuthN when you have pre-created this secret. # privAuthN: # secretName: "" # usernameKey: "username" @@ -67,7 +67,7 @@ database: sqlcl: image: repository: container-registry.oracle.com/database/sqlcl - tag: "26.2.0" + tag: "26.2.2" eureka: diff --git a/helm/app-charts/signoz-dashboards/.helmignore b/helm/app-charts/signoz-dashboards/.helmignore new file mode 100644 index 000000000..41e951a7e --- /dev/null +++ b/helm/app-charts/signoz-dashboards/.helmignore @@ -0,0 +1,3 @@ +__pycache__/ +*.pyc + diff --git a/helm/app-charts/signoz-dashboards/Chart.yaml b/helm/app-charts/signoz-dashboards/Chart.yaml new file mode 100644 index 000000000..7cb74d880 --- /dev/null +++ b/helm/app-charts/signoz-dashboards/Chart.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +apiVersion: v2 +name: signoz-dashboards +description: Sample chart for installing user dashboards into an existing OBaaS SigNoz instance +type: application +version: 0.1.2 +appVersion: "2.1.2" diff --git a/helm/app-charts/signoz-dashboards/README.md b/helm/app-charts/signoz-dashboards/README.md new file mode 100644 index 000000000..2497a2b83 --- /dev/null +++ b/helm/app-charts/signoz-dashboards/README.md @@ -0,0 +1,151 @@ +# SigNoz User Dashboards Sample Chart + +Install custom user dashboards into an existing OBaaS SigNoz instance. Keep the +dashboard files and this chart in your application's repository so a Helm install +or upgrade repeats the import independently of the OBaaS platform release. + +The chart follows the flow in +[`Job-signoz-setup.yaml`](../../infra-charts/obaas/templates/observability/Job-signoz-setup.yaml): +wait for SigNoz, discover its organization ID, log in, list existing dashboards, +delete exact title matches, and create dashboards from the bundled JSON files. +It uses a small Python standard-library importer to parse JSON reliably, including +minified exports and titles containing quotes or other special characters. +The Job uses `container-registry.oracle.com/os/oraclelinux:9`, which includes Python 3 and +its standard library. No custom image or runtime package installation is needed. + +## Add dashboards + +1. Export your dashboard as JSON from the target SigNoz instance. +2. Copy the file directly into this chart's `dashboards/` directory. +3. Remove `dashboards/sample-application.json` when replacing the empty example. +4. Give every dashboard a unique title: `title` in V1 exports or + `spec.display.name` in V2 exports. + +Only `dashboards/*.json` is included; subdirectories and other extensions are +ignored. The importer supports both the OBaaS 2.1.0 V1 format (`version: "v4"` +or `"v5"`) and the newer V2/Perses format (`schemaVersion: "v6"`). It probes the +V2 dashboard list endpoint and falls back to V1 when V2 is unavailable, including +older SigNoz servers that return frontend HTML for unknown routes. Authentication +errors and malformed JSON responses are reported rather than triggering fallback. + +Use a V1 export when the same files must run on both OBaaS 2.1.0 and the current +OBaaS 2.1.2 chart. Newer SigNoz converts V1 exports submitted to its V2 create +endpoint. The included empty sample uses V1/v5 for this reason. A V2 export works +only with newer SigNoz; on a V1 instance, the importer rejects it before deleting +any dashboards. Arbitrary V2-to-V1 conversion is not provided. + +The V1-on-V2 create compatibility is a transitional SigNoz feature; for future +SigNoz upgrades, re-export dashboards in the supported format. See the +[SigNoz migration guide](https://signoz.io/docs/operate/migration/upgrade-0-135/). + +Each file becomes its own ConfigMap. `orders.json` produces a ConfigMap named +`orders`, with the JSON stored in its `dashboard.json` key. Short, valid lowercase +names are preserved. Other names are normalized to lowercase letters, digits, and +hyphens; normalized or shortened names receive an eight-character hash of the +original filename stem. Names are limited to 63 characters, and rendering fails +if two generated names collide. ConfigMaps are projected into a single +`/dashboards` directory in the Job under the original filenames. + +ConfigMap names deliberately follow filenames rather than the Helm release name. +Use distinct filenames across dashboard releases in the same namespace, and +avoid filenames that collide with existing ConfigMaps. Each JSON file must fit +within Kubernetes' 1 MiB ConfigMap data limit. Helm also stores the complete +release manifest in its release storage: one ConfigMap per file does not remove +that aggregate size constraint. Keep this sample small; use an importer image +containing the files for large dashboard collections. + +## Configure the existing SigNoz instance + +Install into the **same namespace as OBaaS**. The default configuration assumes an +OBaaS release called `obaas` and the existing `signoz-authn` Secret. Create an +environment values file outside the chart, for example `my-dashboards-values.yaml`: + +```yaml +signoz: + releaseName: obaas + auth: + existingSecret: signoz-authn +``` + +Change `releaseName` to your actual OBaaS release and `existingSecret` to the +credential Secret configured for that instance. The Secret must contain `email` +and `password`. This chart references it; it does not create or modify credentials. + +Organization discovery uses `/api/v2/sessions/context` for the configured email, +following the OBaaS Python setup script. A non-empty `orgID` key in the credential +Secret takes precedence. If the account belongs to multiple organizations, this +key is required to select one explicitly. Empty or ambiguous discovery results +fail before any dashboards are changed. + +`signoz.url` can override the default `http://-signoz:8080`. The +Secret must still exist in the namespace where this chart is installed. + +For private registries, override `image.repository`, `image.tag`, and +`imagePullSecrets` as needed. Replacement images must contain `python3` and its +standard library; no packages are installed at runtime. + +## Render and install + +Run from the repository root, after adding your JSON files: + +```bash +helm lint helm/app-charts/signoz-dashboards \ + -f my-dashboards-values.yaml + +helm template my-dashboards helm/app-charts/signoz-dashboards \ + -n -f my-dashboards-values.yaml \ + > /tmp/my-dashboards-rendered.yaml + +helm upgrade --install my-dashboards helm/app-charts/signoz-dashboards \ + -n --set signoz.releaseName= \ + --timeout 15m +``` + +The ConfigMaps are ordinary Helm resources. The import Job is a +`post-install,post-upgrade` hook, so it runs after those ConfigMaps are created or +updated. Helm waits for the hook to finish and reports an error if it fails. +The Job has a ten-minute overall deadline by default. Successful and failed Jobs +remain available for inspection; the next install or upgrade replaces the previous +hook Job. + +## Replacement behavior + +On every install or upgrade, the importer fetches all dashboard list pages and +deletes **every existing dashboard whose title exactly matches a bundled +`title` (V1) or `spec.display.name` (V2)**, including legacy records returned by +the V2 API. It then POSTs every bundled dashboard to the detected +`/api/v1/dashboards` or `/api/v2/dashboards` endpoint. + +This is the same title-based replacement policy as the OBaaS system setup Job. +Use application-specific titles: a matching user or system dashboard will be +overwritten regardless of who created it. Replacement creates new dashboard IDs, +so existing links to those IDs can break. UI edits to matching dashboards are +lost at the next chart install or upgrade. + +Dashboards with other titles are preserved. Removing a file or changing its title +does not delete the old dashboard in SigNoz. Uninstalling this chart removes its +ConfigMaps but does not remove imported dashboards. Hook Jobs are not managed as +ordinary release resources; delete the retained Job separately if needed. + +Local JSON and duplicate titles are checked before deletion. API-side validation +still happens during creation; replacement is not transactional. A failed import +can leave matching dashboards deleted or only partially recreated. Fix the export +or configuration and rerun `helm upgrade --install`. + +## Verify and troubleshoot + +```bash +helm status my-dashboards -n +kubectl get configmaps -n \ + -l app.kubernetes.io/instance=my-dashboards +kubectl get jobs -n \ + -l app.kubernetes.io/instance=my-dashboards +kubectl logs -n job/my-dashboards-signoz-setup \ + -c signoz-setup +``` + +Open SigNoz and confirm the imported titles appear. For startup problems, inspect +the Job's pod events and `signoz-setup` logs. Check the service URL, credential +Secret, and any explicit `orgID` selection. HTTP 400 during creation usually +requires checking the exported dashboard against the deployed SigNoz schema; +HTTP 401/403 requires checking the credentials and permissions. diff --git a/helm/app-charts/signoz-dashboards/dashboards/sample-application.json b/helm/app-charts/signoz-dashboards/dashboards/sample-application.json new file mode 100644 index 000000000..dcd2b3c0c --- /dev/null +++ b/helm/app-charts/signoz-dashboards/dashboards/sample-application.json @@ -0,0 +1,12 @@ +{ + "version": "v5", + "image": "/assets/Icons/eight-ball", + "title": "Sample Application Dashboard", + "description": "Replace this empty sample with a dashboard exported from your SigNoz instance.", + "uploadedGrafana": false, + "tags": [], + "variables": {}, + "layout": [], + "panelMap": {}, + "widgets": [] +} diff --git a/helm/app-charts/signoz-dashboards/scripts/import-dashboards.py b/helm/app-charts/signoz-dashboards/scripts/import-dashboards.py new file mode 100644 index 000000000..811c9fab8 --- /dev/null +++ b/helm/app-charts/signoz-dashboards/scripts/import-dashboards.py @@ -0,0 +1,160 @@ +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +"""Reconcile dashboard titles through the deployed SigNoz dashboard API.""" + +import json +import os +from pathlib import Path +import sys +import time +from urllib.error import HTTPError, URLError +from urllib.parse import quote, urlencode +from urllib.request import Request, urlopen +from uuid import UUID + + +class DashboardAPIUnavailable(Exception): + """Older SigNoz serves the frontend HTML for unknown API routes.""" + + +def request(url, method="GET", payload=None, token=None): + headers = {"Content-Type": "application/json"} + if token: + headers["Authorization"] = f"Bearer {token}" + body = None if payload is None else json.dumps(payload).encode() + with urlopen(Request(url, data=body, headers=headers, method=method), timeout=30) as response: + content = response.read() + if response.headers.get_content_type() == "text/html": + raise DashboardAPIUnavailable("Endpoint returned frontend HTML instead of API JSON") + return json.loads(content) if content else None + + +def wait_until_ready(url): + while True: + try: + request(f"{url}/api/v1/health?live=1") + print("SigNoz ready", flush=True) + return + except (URLError, TimeoutError, DashboardAPIUnavailable): + print("Waiting for SigNoz...", flush=True) + time.sleep(5) + + +def login(url, auth): + email = (auth / "email").read_text().strip() + password = (auth / "password").read_text().rstrip("\r\n") + org_path = auth / "orgID" + org_id = org_path.read_text().strip() if org_path.exists() else "" + if not org_id: + context = request(f"{url}/api/v2/sessions/context?" + urlencode({"email": email})) + orgs = context["data"]["orgs"] + if len(orgs) != 1: + raise ValueError( + f"Expected one organization for the configured email; found {len(orgs)}. " + "Set orgID in the credential secret to select one explicitly." + ) + org_id = orgs[0]["id"] + UUID(org_id) + response = request(f"{url}/api/v2/sessions/email_password", method="POST", payload={ + "email": email, "password": password, "orgID": org_id, + }) + token = response.get("data", response).get("accessToken") + if not isinstance(token, str) or not token: + raise ValueError("SigNoz login returned no access token") + print("Login successful", flush=True) + return token + + +def load_dashboards(directory): + dashboards = {} + for path in sorted(directory.glob("*.json")): + dashboard = json.loads(path.read_text()) + if dashboard.get("schemaVersion") == "v6": + title = dashboard.get("spec", {}).get("display", {}).get("name") + elif "schemaVersion" not in dashboard and dashboard.get("version") in ("v4", "v5"): + title = dashboard.get("title") + else: + raise ValueError(f"{path.name}: expected a V1 (v4/v5) or V2 (v6) dashboard export") + if not isinstance(title, str) or not title.strip(): + raise ValueError(f"{path.name}: missing dashboard title") + if title in dashboards: + raise ValueError(f"Duplicate dashboard title: {title}") + dashboards[title] = dashboard + if not dashboards: + raise ValueError("No dashboard JSON files found") + return dashboards + + +def list_dashboards(url, token): + # OBaaS 2.1.0 / SigNoz v0.113 serves HTML, not 404, for the unknown V2 route. + try: + page = request(f"{url}/api/v2/dashboards?limit=200&offset=0", token=token)["data"] + except (DashboardAPIUnavailable, HTTPError) as error: + if isinstance(error, HTTPError) and error.code not in (404, 405, 501): + raise + records = request(f"{url}/api/v1/dashboards", token=token)["data"] + if not isinstance(records, list): + raise ValueError("Invalid V1 dashboard list response") + return "v1", records + + # Fetch all pages before changing the collection, so deletes cannot shift offsets. + existing = [] + offset = 0 + while True: + records = page["dashboards"] + if not isinstance(records, list) or type(page["total"]) is not int or page["total"] < 0: + raise ValueError("Invalid V2 dashboard list response") + existing.extend(records) + offset += len(records) + if offset >= page["total"]: + break + if not records: + raise ValueError("Dashboard listing ended before its reported total") + page = request(f"{url}/api/v2/dashboards?limit=200&offset={offset}", token=token)["data"] + return "v2", existing + + +def reconcile(url, token, dashboards): + api_version, existing = list_dashboards(url, token) + print(f"Using SigNoz dashboards API {api_version}", flush=True) + if api_version == "v1" and any("schemaVersion" in dashboard for dashboard in dashboards.values()): + raise ValueError("This SigNoz instance requires V1 exports (version v4/v5); V2/v6 files cannot be imported") + + # Match exact titles, including legacy records, as in the OBaaS setup Job. + # V1 summaries nest titles in data; V2 summaries use spec.display.name. + for dashboard in existing: + if api_version == "v1": + title = dashboard.get("data", {}).get("title") + else: + title = dashboard.get("spec", {}).get("display", {}).get("name") + if title in dashboards: + dashboard_id = quote(dashboard["id"], safe="") + print(f"Deleting existing dashboard: {title} ({dashboard_id})", flush=True) + request(f"{url}/api/{api_version}/dashboards/{dashboard_id}", method="DELETE", token=token) + for title, dashboard in dashboards.items(): + print(f"Creating dashboard: {title}", flush=True) + # Newer SigNoz accepts V1 exports on V2 POST and converts them server-side. + request(f"{url}/api/{api_version}/dashboards", method="POST", payload=dashboard, token=token) + print("SigNoz dashboard setup complete", flush=True) + + +def main(): + # Validate every local file before deleting any existing dashboards. + dashboards = load_dashboards(Path("/dashboards")) + url = os.environ["SIGNOZ_URL"].rstrip("/") + wait_until_ready(url) + token = login(url, Path("/signoz-authn")) + reconcile(url, token, dashboards) + + +if __name__ == "__main__": + try: + main() + except HTTPError as error: + # Do not print response bodies that could contain authentication data. + print(f"SigNoz API request failed: HTTP {error.code}", file=sys.stderr) + sys.exit(1) + + except (ValueError, KeyError, TypeError, OSError, DashboardAPIUnavailable): + print("SigNoz setup failed: invalid setup input, API response, or connection", file=sys.stderr) + sys.exit(1) diff --git a/helm/app-charts/signoz-dashboards/templates/_helpers.tpl b/helm/app-charts/signoz-dashboards/templates/_helpers.tpl new file mode 100644 index 000000000..1f9307c67 --- /dev/null +++ b/helm/app-charts/signoz-dashboards/templates/_helpers.tpl @@ -0,0 +1,27 @@ +{{/* Keep valid short filename stems unchanged. Hash changed names to avoid truncation collisions. */}} +{{- define "signoz-dashboards.safeName" -}} +{{- $original := . -}} +{{- $normalized := regexReplaceAll "[^a-z0-9-]+" (lower $original) "-" | trimAll "-" -}} +{{- if and (eq $original $normalized) (le (len $normalized) 63) (ne $normalized "") -}} +{{- $normalized -}} +{{- else -}} +{{- printf "%s-%s" ($normalized | default "dashboard" | trunc 54 | trimSuffix "-") (sha256sum $original | trunc 8) -}} +{{- end -}} +{{- end -}} + +{{- define "signoz-dashboards.configMapName" -}} +{{- include "signoz-dashboards.safeName" (base . | trimSuffix ".json") -}} +{{- end -}} + +{{- define "signoz-dashboards.jobName" -}} +{{- include "signoz-dashboards.safeName" (printf "%s-signoz-setup" .Release.Name) -}} +{{- end -}} + +{{- define "signoz-dashboards.scriptName" -}} +{{- include "signoz-dashboards.safeName" (printf "%s-dashboard-importer" .Release.Name) -}} +{{- end -}} + +{{- define "signoz-dashboards.url" -}} +{{- .Values.signoz.url | default (printf "http://%s-signoz:8080" .Values.signoz.releaseName) -}} +{{- end -}} + diff --git a/helm/app-charts/signoz-dashboards/templates/configmaps.yaml b/helm/app-charts/signoz-dashboards/templates/configmaps.yaml new file mode 100644 index 000000000..bf65a9811 --- /dev/null +++ b/helm/app-charts/signoz-dashboards/templates/configmaps.yaml @@ -0,0 +1,42 @@ +{{- $files := .Files.Glob "dashboards/*.json" -}} +{{- if eq (len $files) 0 -}} +{{- fail "Add at least one dashboard JSON file to dashboards/ before installing" -}} +{{- end -}} +{{- $names := dict -}} +{{- $_ := set $names (include "signoz-dashboards.scriptName" .) true -}} +{{- range $path, $_ := $files }} +{{- $name := include "signoz-dashboards.configMapName" $path -}} +{{- if hasKey $names $name -}} +{{- fail (printf "Dashboard ConfigMap name collision: %s" $name) -}} +{{- end -}} +{{- $_ := set $names $name true -}} +{{- $content := $.Files.Get $path -}} +{{- if gt (len $content) 1048576 -}} +{{- fail (printf "%s exceeds the 1 MiB ConfigMap data limit" $path) -}} +{{- end }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $name }} + namespace: {{ $.Release.Namespace }} + labels: + app.kubernetes.io/name: signoz-dashboards + app.kubernetes.io/instance: {{ $.Release.Name }} +data: + dashboard.json: |- +{{ $content | indent 4 }} +{{- end }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "signoz-dashboards.scriptName" . }} + namespace: {{ .Release.Namespace }} + labels: + app.kubernetes.io/name: signoz-dashboards + app.kubernetes.io/instance: {{ .Release.Name }} +data: + import-dashboards.py: |- +{{ .Files.Get "scripts/import-dashboards.py" | indent 4 }} + diff --git a/helm/app-charts/signoz-dashboards/templates/job.yaml b/helm/app-charts/signoz-dashboards/templates/job.yaml new file mode 100644 index 000000000..2b874819a --- /dev/null +++ b/helm/app-charts/signoz-dashboards/templates/job.yaml @@ -0,0 +1,64 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "signoz-dashboards.jobName" . }} + namespace: {{ .Release.Namespace }} + annotations: + helm.sh/hook: post-install,post-upgrade + helm.sh/hook-weight: "20" + helm.sh/hook-delete-policy: before-hook-creation + labels: + app.kubernetes.io/name: signoz-dashboards + app.kubernetes.io/instance: {{ .Release.Name }} +spec: + backoffLimit: {{ .Values.job.backoffLimit }} + activeDeadlineSeconds: {{ .Values.job.activeDeadlineSeconds }} + template: + metadata: + labels: + app.kubernetes.io/name: signoz-dashboards + app.kubernetes.io/instance: {{ .Release.Name }} + spec: + automountServiceAccountToken: false + restartPolicy: OnFailure + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + containers: + - name: signoz-setup + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + command: [python3, -u, /scripts/import-dashboards.py] + env: + - name: SIGNOZ_URL + value: {{ include "signoz-dashboards.url" . | quote }} + resources: + {{- toYaml .Values.job.resources | nindent 12 }} + volumeMounts: + - name: importer + mountPath: /scripts + readOnly: true + - name: dashboards + mountPath: /dashboards + readOnly: true + - name: signoz-authn + mountPath: /signoz-authn + readOnly: true + volumes: + - name: importer + configMap: + name: {{ include "signoz-dashboards.scriptName" . }} + - name: dashboards + projected: + sources: + {{- range $path, $_ := .Files.Glob "dashboards/*.json" }} + - configMap: + name: {{ include "signoz-dashboards.configMapName" $path }} + items: + - key: dashboard.json + path: {{ base $path | quote }} + {{- end }} + - name: signoz-authn + secret: + secretName: {{ required "signoz.auth.existingSecret is required" .Values.signoz.auth.existingSecret }} diff --git a/helm/app-charts/signoz-dashboards/tests/test-import-dashboards.py b/helm/app-charts/signoz-dashboards/tests/test-import-dashboards.py new file mode 100644 index 000000000..1f5c81f66 --- /dev/null +++ b/helm/app-charts/signoz-dashboards/tests/test-import-dashboards.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +"""Check API discovery and preserve dashboard format compatibility.""" + +import importlib.util +import io +import json +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile +import unittest +from unittest.mock import patch + +CHART = Path(__file__).resolve().parents[1] +SPEC = importlib.util.spec_from_file_location("importer", CHART / "scripts/import-dashboards.py") +importer = importlib.util.module_from_spec(SPEC) +sys.dont_write_bytecode = True +SPEC.loader.exec_module(importer) +ORG_ID = "01a16416-98e2-7709-b4a8-584fddf3a379" +URL = "http://signoz:8080" + + +class ImporterTest(unittest.TestCase): + def login(self, orgs, explicit=None): + with tempfile.TemporaryDirectory() as directory: + auth = Path(directory) + (auth / "email").write_text("admin+setup@example.com") + (auth / "password").write_text('special"\\password\n') + if explicit is not None: + (auth / "orgID").write_text(explicit) + responses = [{"data": {"orgs": orgs}}, {"data": {"accessToken": "jwt"}}] + if explicit: + responses.pop(0) + with patch.object(importer, "request", side_effect=responses) as request: + token = importer.login(URL, auth) + return token, request.call_args_list + + def test_api_discovery_and_json_credentials(self): + token, calls = self.login([{"id": ORG_ID}], explicit="") + self.assertEqual(token, "jwt") + self.assertIn("email=admin%2Bsetup%40example.com", calls[0].args[0]) + self.assertEqual(calls[1].kwargs['payload'], { + "email": "admin+setup@example.com", "password": 'special"\\password', "orgID": ORG_ID, + }) + + def test_explicit_org_skips_discovery(self): + _, calls = self.login([], explicit=ORG_ID) + self.assertEqual(len(calls), 1) + self.assertTrue(calls[0].args[0].endswith("/api/v2/sessions/email_password")) + + def test_invalid_or_ambiguous_discovery_fails(self): + for orgs in [[], [{"id": ORG_ID}] * 2, [{"id": "invalid"}]]: + with self.subTest(orgs=orgs), self.assertRaises(ValueError): + self.login(orgs) + + def test_readiness_retries(self): + with patch.object(importer, "request", side_effect=[importer.HTTPError(URL, 503, "unready", {}, io.BytesIO()), {}]): + with patch.object(importer.time, "sleep") as sleep: + importer.wait_until_ready(URL) + sleep.assert_called_once_with(5) + + def test_v2_pagination_and_legacy_exact_title_replacement(self): + def record(title, **fields): + return dict(spec={"display": {"name": title}}, **fields) + responses = [ + {"data": {"dashboards": [record("App", id="old", legacy=True)], "total": 2}}, + {"data": {"dashboards": [record("Other", id="user")], "total": 2}}, + None, {}, + ] + with patch.object(importer, "request", side_effect=responses) as request: + importer.reconcile(URL, "jwt", {"App": dict(record("App"), schemaVersion="v6")}) + calls = request.call_args_list + self.assertIn("offset=1", calls[1].args[0]) + self.assertTrue(calls[2].args[0].endswith("/api/v2/dashboards/old")) + self.assertEqual(calls[2].kwargs['method'], "DELETE") + self.assertEqual(calls[3].kwargs['method'], "POST") + self.assertEqual(len(calls), 4) + + def test_v1_fallback_preserved(self): + with patch.object(importer, "request", side_effect=[ + importer.DashboardAPIUnavailable(), {"data": []}, {}, + ]) as request: + importer.reconcile(URL, "jwt", {"App": {"version": "v5", "title": "App"}}) + self.assertTrue(request.call_args_list[-1].args[0].endswith("/api/v1/dashboards")) + + def test_v1_rejects_v2_before_deletion(self): + with patch.object(importer, "list_dashboards", return_value=("v1", [])): + with patch.object(importer, "request") as request, self.assertRaises(ValueError): + importer.reconcile(URL, "jwt", {"App": {"schemaVersion": "v6"}}) + request.assert_not_called() + + def test_pagination_failure_stops_reconciliation(self): + with patch.object(importer, "request", return_value={"data": {"dashboards": [], "total": 1}}) as request: + with self.assertRaises(ValueError): + importer.reconcile(URL, "jwt", {"App": {}}) + self.assertEqual(request.call_count, 1) + + def test_bundled_sample(self): + self.assertTrue(importer.load_dashboards(CHART / "dashboards")) + + @unittest.skipUnless(shutil.which("helm"), "Helm unavailable") + def test_job_has_no_database_mount_or_init_containers(self): + result = subprocess.run(["helm", "template", "dashboards-test", str(CHART)], + capture_output=True, text=True, check=True) + job = next(doc for doc in result.stdout.split("\n---") if "kind: Job" in doc) + self.assertIn("command: [python3, -u, /scripts/import-dashboards.py]", job) + self.assertIn("os/oraclelinux:9", job) + for removed in ["signoz-db", "shared-data", "affinity:", "initContainers:"]: + self.assertNotIn(removed, job) + + +if __name__ == "__main__": + unittest.main() diff --git a/helm/app-charts/signoz-dashboards/values.yaml b/helm/app-charts/signoz-dashboards/values.yaml new file mode 100644 index 000000000..f3e5059de --- /dev/null +++ b/helm/app-charts/signoz-dashboards/values.yaml @@ -0,0 +1,28 @@ +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +signoz: + # Install this chart in the same namespace as this OBaaS release. + releaseName: obaas + # Empty derives http://-signoz:8080. + url: "" + auth: + # Existing secret with email and password. Set orgID to select an organization + # explicitly; otherwise discover the single organization for this email via API. + existingSecret: signoz-authn + +image: + # The full Oracle Linux 9 image includes Python 3 and its standard library. + repository: container-registry.oracle.com/os/oraclelinux + tag: "9" + pullPolicy: IfNotPresent +imagePullSecrets: [] + +job: + backoffLimit: 2 + activeDeadlineSeconds: 600 + resources: + requests: + cpu: 100m + memory: 64Mi + limits: + memory: 256Mi diff --git a/helm/infra-charts/CHANGELOG.md b/helm/infra-charts/CHANGELOG.md index 221d9a356..116454f2e 100644 --- a/helm/infra-charts/CHANGELOG.md +++ b/helm/infra-charts/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Require Kubernetes 1.36–1.37 for `obaas` and `obaas-prereqs`. +- Integrate the refreshed Oracle Database Operator 0.2.0 chart for operator 2.2.0, with strict values validation, `namespaceOverride`, a dedicated ServiceAccount, and release-specific cluster RBAC and webhook names. - Improve APISIX Eureka discovery resilience by configuring direct endpoints for all three Eureka replicas and increasing registry send and read timeouts. - Keep Eureka Jetty connections open for 90 seconds by default, longer than APISIX/OpenResty's pooled connection lifetime, to avoid intermittent registry refresh failures caused by stale keepalive connections. - Automatically register the required APISIX `opentelemetry` plugin_metadata via a sidecar container in the APISIX pod, eliminating the manual admin-API curl workaround and the recurring "plugin_metadata is required" warning. @@ -134,33 +136,6 @@ AppVersion: 2.1.0 - Production release of 2.1.0 -# 0.1.1 -August 12, 2026 - -AppVersion 2.1.1 - -* Create new documentation version, 2.1.0 by @andytael in https://github.com/oracle/microservices-backend/pull/1387 -* Strimzi Kafka TLS by @anders-swanson in https://github.com/oracle/microservices-backend/pull/1396 -* document SASL_SCRAM for strimzi by @anders-swanson in https://github.com/oracle/microservices-backend/pull/1398 -* Strimzi operator docu changes by @andytael in https://github.com/oracle/microservices-backend/pull/1399 -* fix(apisix): improve Eureka failover and configure OTEL metadata by @andytael in https://github.com/oracle/microservices-backend/pull/1401 -* Fix Virtual Threads Metrics by @ddrechse in https://github.com/oracle/microservices-backend/pull/1402 -* New version SQLcl and Coherence Operator by @andytael in https://github.com/oracle/microservices-backend/pull/1406 -* update db exporter by @markxnelson in https://github.com/oracle/microservices-backend/pull/1407 -* Update Cert Mgr by @andytael in https://github.com/oracle/microservices-backend/pull/1410 -* Update APISIX by @andytael in https://github.com/oracle/microservices-backend/pull/1411 -* Gateway 1.8.2 by @anders-swanson in https://github.com/oracle/microservices-backend/pull/1412 -* Resolve Failed to scrape Prometheus endpoint by @andytael in https://github.com/oracle/microservices-backend/pull/1413 -* Logfile for OTEL collector reports use of deprecated v1 endpoints by @andytael in https://github.com/oracle/microservices-backend/pull/1414 -* Upgrade opentelemetry operator by @andytael in https://github.com/oracle/microservices-backend/pull/1416 -* upgrade strimzi to 1.1.0 by @anders-swanson in https://github.com/oracle/microservices-backend/pull/1417 -* Housekeeping, doc update, Coherence updates by @andytael in https://github.com/oracle/microservices-backend/pull/1418 -* Improve virtual thread dashboard stats with peak window aggregation by @ddrechse in https://github.com/oracle/microservices-backend/pull/1421 -* Update the docs for non 3 replicas of Eureka by @andytael in https://github.com/oracle/microservices-backend/pull/1422 -* Fix Helidon JVM requests-per-second dashboard query by @ddrechse in https://github.com/oracle/microservices-backend/pull/1423 -* Update ESO version by @andytael in https://github.com/oracle/microservices-backend/pull/1431 -* Upgrade SigNoz to 0.134.0 with a validated two-stage ClickHouse migra… by @ddrechse in https://github.com/oracle/microservices-backend/pull/1420 -* Cert mgr update by @andytael in https://github.com/oracle/microservices-backend/pull/1433 -* Update k8s_image and default Coherence image by @andytael in https://github.com/oracle/microservices-backend/pull/1434 -* Coherence version fix by @andytael in https://github.com/oracle/microservices-backend/pull/1435 -* Disable high-volume ClickHouse diagnostic logs by @ddrechse - https://github.com/oracle/microservices-backend/pull/1440 +# TBD +AppVersion 2.1.2 diff --git a/helm/infra-charts/obaas-prereqs/CLICKHOUSE-CRD-MAINTENANCE.md b/helm/infra-charts/obaas-prereqs/CLICKHOUSE-CRD-MAINTENANCE.md index 901df3d54..ac24adb29 100644 --- a/helm/infra-charts/obaas-prereqs/CLICKHOUSE-CRD-MAINTENANCE.md +++ b/helm/infra-charts/obaas-prereqs/CLICKHOUSE-CRD-MAINTENANCE.md @@ -8,7 +8,7 @@ The ClickHouse Operator CRDs are installed as part of `obaas-prereqs` chart but - CRDs are cluster-scoped resources (not namespaced) - Installing them once in prereqs prevents conflicts between multiple tenant installations - Each tenant gets their own namespace-scoped operator via SigNoz -- Similar pattern to other operators in this chart (Strimzi, cert-manager, etc.) +- Similar pattern to other operators in this chart (Strimzi, Oracle Database Operator, etc.) ## Current CRD Version diff --git a/helm/infra-charts/obaas-prereqs/Chart.lock b/helm/infra-charts/obaas-prereqs/Chart.lock index 67dcfa6a4..896da0341 100644 --- a/helm/infra-charts/obaas-prereqs/Chart.lock +++ b/helm/infra-charts/obaas-prereqs/Chart.lock @@ -1,24 +1,24 @@ dependencies: - name: external-secrets repository: https://charts.external-secrets.io - version: 2.8.0 + version: 2.10.0 - name: metrics-server repository: https://kubernetes-sigs.github.io/metrics-server/ - version: 3.13.1 + version: 3.14.0 - name: kube-state-metrics repository: https://prometheus-community.github.io/helm-charts - version: 6.4.1 + version: 8.4.2 - name: strimzi-kafka-operator repository: https://strimzi.io/charts/ - version: 1.1.0 + version: 1.2.0 - name: coherence-operator repository: https://oracle.github.io/coherence-operator/charts - version: 3.5.14 + version: 3.5.17 - name: opentelemetry-operator repository: https://open-telemetry.github.io/opentelemetry-helm-charts - version: 0.119.0 + version: 0.122.0 - name: oracle-database-operator repository: file://charts/oracle-database-operator version: 0.2.0 -digest: sha256:f4c4169af0b6436739e2b11e118697d8f54036d73cdf8c2746a8675f8ffdfa48 -generated: "2026-07-27T10:36:56.176704-05:00" +digest: sha256:077f81335627b91c562fb4c18872a91b850cdd146895e940d2a2d72b14fa7391 +generated: "2026-09-14T13:42:00.062527-05:00" diff --git a/helm/infra-charts/obaas-prereqs/Chart.yaml b/helm/infra-charts/obaas-prereqs/Chart.yaml index 15b1653b1..c37bb4746 100644 --- a/helm/infra-charts/obaas-prereqs/Chart.yaml +++ b/helm/infra-charts/obaas-prereqs/Chart.yaml @@ -3,7 +3,7 @@ apiVersion: v2 type: application name: "obaas-prereqs" -kubeVersion: ">= 1.34.0" +kubeVersion: ">=1.36.0-0 <1.38.0-0" description: Prerequisites and cluster-singleton infrastructure for Oracle Backend as a Service home: https://oracle.github.io/microservices-backend maintainers: @@ -11,40 +11,38 @@ maintainers: email: obaas_ww@oracle.com url: https://oracle.github.io/microservices-backend # This is the chart version. -version: 0.2.0 +version: 0.1.2 # This is the version number of the application being deployed. -appVersion: "2.2.0" +appVersion: "2.1.2" # SubCharts - Cluster-scoped singleton infrastructure dependencies: - name: external-secrets - version: "2.8.0" + version: "2.10.0" repository: https://charts.external-secrets.io condition: external-secrets.enabled - name: metrics-server - version: "3.13.1" + version: "3.14.0" repository: https://kubernetes-sigs.github.io/metrics-server/ condition: metrics-server.enabled - name: kube-state-metrics - version: "6.4.1" + version: "8.4.2" repository: https://prometheus-community.github.io/helm-charts condition: kube-state-metrics.enabled - name: strimzi-kafka-operator - version: "1.1.0" + version: "1.2.0" repository: https://strimzi.io/charts/ condition: strimzi-kafka-operator.enabled - name: coherence-operator - version: "3.5.14" + version: "3.5.17" repository: https://oracle.github.io/coherence-operator/charts condition: coherence-operator.enabled # Installs the OpenTelemetry Operator to enable auto-instrumentation via custom resources - name: opentelemetry-operator - version: "0.119.0" + version: "0.122.0" repository: https://open-telemetry.github.io/opentelemetry-helm-charts condition: opentelemetry-operator.enabled - name: oracle-database-operator - # NOTE: cert-manager is a dependency of oracle-database-operator - # if cert-manager is already installed, modify values.yaml to disable cert-manager in the subchart version: "0.2.0" repository: "file://charts/oracle-database-operator" condition: oracle-database-operator.enabled diff --git a/helm/infra-charts/obaas-prereqs/README.md b/helm/infra-charts/obaas-prereqs/README.md index 985d71af1..9e88855e4 100644 --- a/helm/infra-charts/obaas-prereqs/README.md +++ b/helm/infra-charts/obaas-prereqs/README.md @@ -12,18 +12,21 @@ This chart must be installed **once per cluster** before installing any OBaaS in - **strimzi-kafka-operator** - Kafka cluster management via CRDs - **clickhouse-operator CRDs** - Custom Resource Definitions for ClickHouse management (operator runs per-tenant namespace) - **oracle-database-operator** - Oracle Database lifecycle management via CRDs -- **cert-manager** (subchart) - Certificate management and issuance. ## Installation ### Prerequisites -- Kubernetes >= 1.34.0 +- Kubernetes 1.36–1.37 - Helm 3.x +- A healthy, separately installed cert-manager with its CRDs and cainjector. ### Install Prerequisites (once per cluster) ```bash +# Install cert-manager (version correct as of: 11-Sept-2026) +kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.21.2/cert-manager.yaml + # Install prerequisites helm upgrade --install obaas-prereqs . --create-namespace -n obaas-system @@ -33,6 +36,20 @@ helm upgrade --install obaas-prereqs . -n obaas-system --create-namespace --valu **Note:** All prerequisite components will be installed into the `obaas-system` namespace. While these components operate cluster-wide and manage cluster-scoped resources (CRDs, cluster roles, etc.), their deployments, services, and other namespaced resources will reside in `obaas-system`. +### Verify Metrics Server + +Metrics Server is working when its aggregated APIService is available and +`kubectl top` returns current node or pod usage: + +```bash +kubectl get apiservice v1beta1.metrics.k8s.io +kubectl top nodes +kubectl top pods -n +``` + +The APIService should report `Available=True`; an empty `kubectl top` result +immediately after startup can be normal while the first scrape completes. + ### After Prerequisites are Installed Once the prerequisites are installed, you can install the main OBaaS chart multiple times in different namespaces: @@ -77,13 +94,18 @@ strimzi-kafka-operator: ```yaml oracle-database-operator: enabled: true - # Uncomment to override default image for air-gapped installations + # Uncomment to override images for air-gapped installations # image: # registry: myregistry.example.com # repository: database/operator - # tag: "2.1.0" - # Uncomment to watch specific namespace instead of all namespaces - # watchNamespace: "tenant1" + # tag: "2.2.0" + # crdConfiguration: + # image: myregistry.example.com/kubectl:v1.36.3 + # Uncomment to watch an existing namespace + # scope: + # mode: namespace + # watchNamespaces: + # - tenant1 ``` **AKS-specific note for metrics-server:** diff --git a/helm/infra-charts/obaas-prereqs/charts/coherence-operator-3.5.14.tgz b/helm/infra-charts/obaas-prereqs/charts/coherence-operator-3.5.14.tgz deleted file mode 100644 index 715d78491..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/coherence-operator-3.5.14.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/coherence-operator-3.5.17.tgz b/helm/infra-charts/obaas-prereqs/charts/coherence-operator-3.5.17.tgz new file mode 100644 index 000000000..c1871b6b9 Binary files /dev/null and b/helm/infra-charts/obaas-prereqs/charts/coherence-operator-3.5.17.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/charts/external-secrets-2.10.0.tgz b/helm/infra-charts/obaas-prereqs/charts/external-secrets-2.10.0.tgz new file mode 100644 index 000000000..e9ed8266b Binary files /dev/null and b/helm/infra-charts/obaas-prereqs/charts/external-secrets-2.10.0.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/charts/external-secrets-2.8.0.tgz b/helm/infra-charts/obaas-prereqs/charts/external-secrets-2.8.0.tgz deleted file mode 100644 index baf2ff9e1..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/external-secrets-2.8.0.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/kube-state-metrics-6.4.1.tgz b/helm/infra-charts/obaas-prereqs/charts/kube-state-metrics-6.4.1.tgz deleted file mode 100644 index 896948f8f..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/kube-state-metrics-6.4.1.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/kube-state-metrics-8.4.2.tgz b/helm/infra-charts/obaas-prereqs/charts/kube-state-metrics-8.4.2.tgz new file mode 100644 index 000000000..02076cc01 Binary files /dev/null and b/helm/infra-charts/obaas-prereqs/charts/kube-state-metrics-8.4.2.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/charts/metrics-server-3.13.1.tgz b/helm/infra-charts/obaas-prereqs/charts/metrics-server-3.13.1.tgz deleted file mode 100644 index fb5c13bf1..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/metrics-server-3.13.1.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/metrics-server-3.14.0.tgz b/helm/infra-charts/obaas-prereqs/charts/metrics-server-3.14.0.tgz new file mode 100644 index 000000000..55649d5c8 Binary files /dev/null and b/helm/infra-charts/obaas-prereqs/charts/metrics-server-3.14.0.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/charts/opentelemetry-operator-0.119.0.tgz b/helm/infra-charts/obaas-prereqs/charts/opentelemetry-operator-0.119.0.tgz deleted file mode 100644 index 1170cd2d4..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/opentelemetry-operator-0.119.0.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/opentelemetry-operator-0.122.0.tgz b/helm/infra-charts/obaas-prereqs/charts/opentelemetry-operator-0.122.0.tgz new file mode 100644 index 000000000..1addad8c4 Binary files /dev/null and b/helm/infra-charts/obaas-prereqs/charts/opentelemetry-operator-0.122.0.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz index c9035410d..57d29a205 100644 Binary files a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz and b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator-0.2.0.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/Chart.lock b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/Chart.lock deleted file mode 100644 index 95dcbee0c..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/Chart.lock +++ /dev/null @@ -1,6 +0,0 @@ -dependencies: -- name: cert-manager - repository: https://charts.jetstack.io - version: v1.21.1 -digest: sha256:31bf129f0d4e49a6f1cc6fb81acbc82d56a17224b9b680fd6076e46b86295211 -generated: "2026-08-03T14:41:47.191359-05:00" diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/Chart.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/Chart.yaml deleted file mode 100644 index c8b536812..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/Chart.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: v2 -appVersion: 2.0.0 -dependencies: -- condition: cert-manager.enabled - name: cert-manager - repository: https://charts.jetstack.io - version: v1.21.1 -description: A Helm chart for Oracle Database Operator for Kubernetes -home: https://github.com/oracle/oracle-database-operator -keywords: -- oracle -- database -- operator -- kubernetes -kubeVersion: '>=1.21.0-0' -maintainers: -- name: Oracle - url: https://www.oracle.com -name: oracle-database-operator -sources: -- https://github.com/oracle/oracle-database-operator -type: application -version: 0.2.0 diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/README.md b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/README.md deleted file mode 100644 index 820a6b0a3..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/README.md +++ /dev/null @@ -1,247 +0,0 @@ -# Oracle Database Operator Helm Chart - -This Helm chart installs the Oracle Database Operator for Kubernetes. - -## Prerequisites - -- Kubernetes 1.21+ -- Helm 3.7+ - -## cert-manager Installation Options - -This chart requires cert-manager for webhook certificates. Four deployment scenarios are supported: - -| Use-Case | cert-manager Install | Namespace | Example File | -|----------|---------------------|-----------|--------------| -| 1 | Standalone (external) | `cert-manager` | [standalone-cert-manager-default-ns.yaml](examples/standalone-cert-manager-default-ns.yaml) | -| 2 | Standalone (external) | Custom | [standalone-cert-manager-custom-ns.yaml](examples/standalone-cert-manager-custom-ns.yaml) | -| 3 | Subchart (bundled) | `cert-manager` | [subchart-cert-manager-default-ns.yaml](examples/subchart-cert-manager-default-ns.yaml) | -| 4 | Subchart (bundled) | Custom | [subchart-cert-manager-custom-ns.yaml](examples/subchart-cert-manager-custom-ns.yaml) | - -### Use-Case 1: Standalone cert-manager in "cert-manager" namespace - -Use this when cert-manager is already installed or managed separately. - -```bash -# Pre-requisite: Install cert-manager -helm repo add jetstack https://charts.jetstack.io -helm upgrade --install cert-manager jetstack/cert-manager \ - --namespace cert-manager --create-namespace \ - --set crds.enabled=true - -# Install operator -helm upgrade --install oraoperator . --set cert-manager.enabled=false -``` - -### Use-Case 2: Standalone cert-manager in custom namespace - -Use this when cert-manager is installed in a non-default namespace. - -```bash -# Pre-requisite: Install cert-manager in custom namespace -helm repo add jetstack https://charts.jetstack.io -helm upgrade --install cert-manager jetstack/cert-manager \ - --namespace my-cert-manager --create-namespace \ - --set crds.enabled=true - -# Install operator -helm upgrade --install oraoperator . \ - --set cert-manager.enabled=false \ - --set cert-manager.namespace=my-cert-manager -``` - -### Use-Case 3: Subchart cert-manager in "cert-manager" namespace (default) - -Use this for a simple all-in-one installation. - -```bash -# Update dependencies first -helm dependency update . - -# Install operator (cert-manager installed automatically) -helm upgrade --install oraoperator . -``` - -### Use-Case 4: Subchart cert-manager in custom namespace - -Use this when you want the bundled cert-manager in a custom namespace. - -```bash -# Update dependencies first -helm dependency update . - -# Install operator -helm upgrade --install oraoperator . --set cert-manager.namespace=my-cert-manager -``` - -## Uninstall - -```bash -helm uninstall oraoperator -``` - -## Configuration - -### cert-manager Settings - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `cert-manager.enabled` | Install cert-manager as a subchart | `true` | -| `cert-manager.namespace` | Namespace for cert-manager | `cert-manager` | -| `cert-manager.crds.enabled` | Install cert-manager CRDs | `true` | -| `certManagerWaitJob.enabled` | Wait for cert-manager webhook before creating Issuer | `true` | -| `certManagerWaitJob.image.repository` | Image repository for wait job | `registry.k8s.io/kubectl` | -| `certManagerWaitJob.image.tag` | Image tag for wait job | `v1.28.0` | -| `certManagerWaitJob.image.pullPolicy` | Image pull policy for wait job | `IfNotPresent` | -| `certManagerWaitJob.maxAttempts` | Max retry attempts for webhook readiness | `60` | -| `certManagerWaitJob.sleepSeconds` | Sleep duration between retries | `5` | -| `certManagerWaitJob.resources` | Resource limits for wait job | `{}` | -| `certManagerWaitJob.externalWebhookServiceName` | Webhook service name (when `cert-manager.enabled=false`) | `cert-manager-webhook` | - -### General Settings - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `namespace` | Namespace for Oracle Database Operator resources | `oracle-database-operator-system` | -| `imagePullSecrets` | Image pull secrets for private registries | `[]` | - -### Scope Settings - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `scope.mode` | Deployment scope: `cluster` or `namespace` | `cluster` | -| `scope.watchNamespaces` | Namespaces to watch when `scope.mode=namespace` | `[]` | -| `rbac.nodeAccess` | Grant permission to list/watch nodes (for NodePort services) | `false` | - -### Operator Deployment Settings - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `replicas` | Number of replicas | `3` | -| `image.repository` | Image repository | `container-registry.oracle.com/database/operator` | -| `image.tag` | Image tag | `2.0` | -| `image.pullPolicy` | Image pull policy | `IfNotPresent` | -| `resources.limits.cpu` | CPU limit | `400m` | -| `resources.limits.memory` | Memory limit | `400Mi` | -| `resources.requests.cpu` | CPU request | `400m` | -| `resources.requests.memory` | Memory request | `400Mi` | -| `leaderElection` | Enable leader election | `true` | -| `probes.liveness.initialDelaySeconds` | Liveness probe initial delay | `15` | -| `probes.liveness.periodSeconds` | Liveness probe period | `20` | -| `probes.readiness.initialDelaySeconds` | Readiness probe initial delay | `5` | -| `probes.readiness.periodSeconds` | Readiness probe period | `10` | -| `pdb.enabled` | Enable PodDisruptionBudget (when replicas > 1) | `true` | -| `pdb.minAvailable` | Minimum available pods | `1` | -| `pdb.maxUnavailable` | Maximum unavailable pods (alternative to minAvailable) | - | -| `affinity` | Pod affinity rules (default: soft anti-affinity when replicas > 1) | `{}` | -| `nodeSelector` | Node selector for scheduling | `{}` | -| `tolerations` | Pod tolerations | `[]` | -| `terminationGracePeriodSeconds` | Termination grace period | `10` | -| `extraEnv` | Extra environment variables | `[]` | - -### Webhook Settings - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `webhook.failurePolicy` | Webhook failure policy (`Fail` or `Ignore`) | `Fail` | -| `webhook.port` | Webhook server port | `9443` | -| `webhook.certificateSecretName` | Secret name for webhook TLS certificate | `webhook-server-cert` | -| `webhook.timeoutSeconds` | Webhook timeout in seconds | `10` | - -### OCI Credentials Settings - -| Parameter | Description | Default | -|-----------|-------------|---------| -| `ociCredentials.existingSecretName` | Existing Secret with OCI credentials | `""` | -| `ociCredentials.tenancy` | OCI tenancy OCID | `""` | -| `ociCredentials.user` | OCI user OCID | `""` | -| `ociCredentials.fingerprint` | OCI API key fingerprint | `""` | -| `ociCredentials.region` | OCI region | `""` | -| `ociCredentials.passphrase` | Passphrase for encrypted private key | `""` | -| `ociCredentials.secretName` | Existing Secret with OCI API private key | `""` | - -## Deployment Modes - -### Cluster-Scoped (Default) - -The operator monitors all namespaces in the cluster. - -```bash -helm upgrade --install oraoperator . --set scope.mode=cluster -``` - -### Namespace-Scoped - -The operator monitors only specified namespaces. - -```bash -helm upgrade --install oraoperator . \ - --set scope.mode=namespace \ - --set 'scope.watchNamespaces={default,my-app-ns}' -``` - -## High Availability - -When running multiple replicas (`replicas > 1`), the chart automatically: - -1. **Enables leader election** - Only one replica processes events at a time -2. **Applies pod anti-affinity** - Spreads pods across nodes (soft preference) -3. **Creates PodDisruptionBudget** - Ensures minimum availability during disruptions - -To customize HA behavior: - -```bash -helm upgrade --install oraoperator . \ - --set replicas=3 \ - --set pdb.minAvailable=2 -``` - -## OCI Credentials - -Autonomous Database operations require OCI credentials. - -### Option 1: Reference Existing Secret - -```bash -helm upgrade --install oraoperator . \ - --set ociCredentials.existingSecretName=oci-cred \ - --set ociCredentials.secretName=oci-privatekey -``` - -### Option 2: Provide Values Directly - -```bash -# Create the secret with your private key first -kubectl create secret generic oci-privatekey \ - --from-file=privatekey=/path/to/oci_api_key.pem \ - -n oracle-database-operator-system - -# Install with credential values -helm upgrade --install oraoperator . \ - --set ociCredentials.tenancy=ocid1.tenancy.oc1..xxx \ - --set ociCredentials.user=ocid1.user.oc1..xxx \ - --set ociCredentials.fingerprint=aa:bb:cc:dd:... \ - --set ociCredentials.region=us-ashburn-1 \ - --set ociCredentials.secretName=oci-privatekey -``` - -## Generating YAML Manifests - -```bash -# Generate with defaults -helm template oraoperator . --include-crds > oracle-database-operator.yaml - -# Namespace-scoped -helm template oraoperator . \ - --include-crds \ - --set scope.mode=namespace \ - --set 'scope.watchNamespaces={default,my-app-ns}' \ - > oracle-database-operator-namespace-scoped.yaml -``` - -## Notes - -- The chart creates the cert-manager namespace automatically when using the subchart. -- A wait job ensures the cert-manager webhook is ready before creating Issuer resources. -- Use `skipCertManagerCheck=true` for GitOps workflows where cert-manager is installed separately. -- Health probes use HTTP GET requests on the `/metrics` endpoint (port 8080). diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/charts/cert-manager-v1.21.1.tgz b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/charts/cert-manager-v1.21.1.tgz deleted file mode 100644 index 55d0ce33d..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/charts/cert-manager-v1.21.1.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/crds/oracle-database-operator-crds.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/crds/oracle-database-operator-crds.yaml deleted file mode 100644 index 76bb5bf05..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/crds/oracle-database-operator-crds.yaml +++ /dev/null @@ -1,15571 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: databaseobservers.observability.oracle.com -spec: - group: observability.oracle.com - names: - kind: DatabaseObserver - listKind: DatabaseObserverList - plural: databaseobservers - shortNames: - - dbobserver - - dbobservers - singular: databaseobserver - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.metricsConfig - name: MetricsConfig - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.version - name: Version - type: string - name: v1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - azureConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - type: object - database: - properties: - azure: - properties: - vaultID: - type: string - vaultPasswordSecret: - type: string - vaultUsernameSecret: - type: string - type: object - dbConnectionString: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbPassword: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbUser: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - oci: - properties: - vaultID: - type: string - vaultPasswordSecret: - type: string - type: object - type: object - databases: - additionalProperties: - properties: - dbConnectionString: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbPassword: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbUser: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - type: object - type: object - deployment: - properties: - args: - items: - type: string - type: array - commands: - items: - type: string - type: array - env: - additionalProperties: - type: string - type: object - image: - type: string - labels: - additionalProperties: - type: string - type: object - podSecurityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - podTemplate: - properties: - labels: - additionalProperties: - type: string - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - type: object - exporterConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - mountPath: - type: string - type: object - inheritLabels: - items: - type: string - type: array - log: - properties: - destination: - type: string - disable: - type: boolean - filename: - type: string - volume: - properties: - name: - type: string - persistentVolumeClaim: - properties: - claimName: - type: string - type: object - type: object - type: object - metrics: - properties: - configMap: - items: - properties: - key: - type: string - name: - type: string - type: object - type: array - type: object - ociConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - mountPath: - type: string - privateKey: - properties: - secret: - type: string - type: object - type: object - replicas: - format: int32 - type: integer - service: - properties: - labels: - additionalProperties: - type: string - type: object - ports: - items: - properties: - appProtocol: - type: string - name: - type: string - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: array - type: object - serviceMonitor: - properties: - endpoints: - items: - properties: - authorization: - properties: - credentials: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: - type: string - type: object - basicAuth: - properties: - password: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - username: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - bearerTokenFile: - type: string - bearerTokenSecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - enableHttp2: - type: boolean - filterRunning: - type: boolean - followRedirects: - type: boolean - honorLabels: - type: boolean - honorTimestamps: - type: boolean - interval: - pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ - type: string - metricRelabelings: - items: - properties: - action: - default: replace - enum: - - replace - - Replace - - keep - - Keep - - drop - - Drop - - hashmod - - HashMod - - labelmap - - LabelMap - - labeldrop - - LabelDrop - - labelkeep - - LabelKeep - - lowercase - - Lowercase - - uppercase - - Uppercase - - keepequal - - KeepEqual - - dropequal - - DropEqual - type: string - modulus: - format: int64 - type: integer - regex: - type: string - replacement: - type: string - separator: - type: string - sourceLabels: - items: - type: string - type: array - targetLabel: - type: string - type: object - type: array - noProxy: - type: string - oauth2: - properties: - clientId: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - clientSecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - endpointParams: - additionalProperties: - type: string - type: object - noProxy: - type: string - proxyConnectHeader: - additionalProperties: - items: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: array - type: object - x-kubernetes-map-type: atomic - proxyFromEnvironment: - type: boolean - proxyUrl: - pattern: ^(http|https|socks5)://.+$ - type: string - scopes: - items: - type: string - type: array - tlsConfig: - properties: - ca: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - cert: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - insecureSkipVerify: - type: boolean - keySecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - maxVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - minVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - serverName: - type: string - type: object - tokenUrl: - minLength: 1 - type: string - required: - - clientId - - clientSecret - - tokenUrl - type: object - params: - additionalProperties: - items: - type: string - type: array - type: object - path: - type: string - port: - type: string - proxyConnectHeader: - additionalProperties: - items: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: array - type: object - x-kubernetes-map-type: atomic - proxyFromEnvironment: - type: boolean - proxyUrl: - pattern: ^(http|https|socks5)://.+$ - type: string - relabelings: - items: - properties: - action: - default: replace - enum: - - replace - - Replace - - keep - - Keep - - drop - - Drop - - hashmod - - HashMod - - labelmap - - LabelMap - - labeldrop - - LabelDrop - - labelkeep - - LabelKeep - - lowercase - - Lowercase - - uppercase - - Uppercase - - keepequal - - KeepEqual - - dropequal - - DropEqual - type: string - modulus: - format: int64 - type: integer - regex: - type: string - replacement: - type: string - separator: - type: string - sourceLabels: - items: - type: string - type: array - targetLabel: - type: string - type: object - type: array - scheme: - enum: - - http - - https - - HTTP - - HTTPS - type: string - scrapeTimeout: - pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - tlsConfig: - properties: - ca: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - caFile: - type: string - cert: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - certFile: - type: string - insecureSkipVerify: - type: boolean - keyFile: - type: string - keySecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - maxVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - minVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - serverName: - type: string - type: object - trackTimestampsStaleness: - type: boolean - type: object - type: array - labels: - additionalProperties: - type: string - type: object - namespaceSelector: - properties: - any: - type: boolean - matchNames: - items: - type: string - type: array - type: object - type: object - sidecar: - properties: - containers: - items: - properties: - args: - items: - type: string - type: array - x-kubernetes-list-type: atomic - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - envFrom: - items: - properties: - configMapRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - prefix: - type: string - secretRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - type: object - type: array - x-kubernetes-list-type: atomic - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - stopSignal: - type: string - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - default: TCP - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - required: - - resourceName - - restartPolicy - type: object - type: array - x-kubernetes-list-type: atomic - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - restartPolicy: - type: string - restartPolicyRules: - items: - properties: - action: - type: string - exitCodes: - properties: - operator: - type: string - values: - items: - format: int32 - type: integer - type: array - x-kubernetes-list-type: set - required: - - operator - type: object - required: - - action - type: object - type: array - x-kubernetes-list-type: atomic - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - devicePath - x-kubernetes-list-type: map - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - mountPath - x-kubernetes-list-type: map - workingDir: - type: string - required: - - name - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - default: ext4 - type: string - kind: - type: string - readOnly: - default: false - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - x-kubernetes-list-type: atomic - wwids: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - image: - properties: - pullPolicy: - type: string - reference: - type: string - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - default: default - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - x-kubernetes-list-type: atomic - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - clusterTrustBundle: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - name: - type: string - optional: - type: boolean - path: - type: string - signerName: - type: string - required: - - path - type: object - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - podCertificate: - properties: - certificateChainPath: - type: string - credentialBundlePath: - type: string - keyPath: - type: string - keyType: - type: string - maxExpirationSeconds: - format: int32 - type: integer - signerName: - type: string - required: - - keyType - - signerName - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - x-kubernetes-list-type: atomic - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - default: /etc/ceph/keyring - type: string - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - pool: - default: rbd - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - default: admin - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - default: xfs - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - default: ThinProvisioned - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - type: object - wallet: - properties: - additional: - items: - properties: - mountPath: - type: string - name: - type: string - secret: - type: string - type: object - type: array - mountPath: - type: string - secret: - type: string - type: object - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - metricsConfig: - type: string - replicas: - type: integer - status: - type: string - version: - type: string - required: - - conditions - - metricsConfig - - version - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.metricsConfig - name: MetricsConfig - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.version - name: Version - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - azureConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - type: object - database: - properties: - azure: - properties: - vaultID: - type: string - vaultPasswordSecret: - type: string - vaultUsernameSecret: - type: string - type: object - dbConnectionString: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbPassword: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbUser: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - oci: - properties: - vaultID: - type: string - vaultPasswordSecret: - type: string - type: object - type: object - databases: - additionalProperties: - properties: - dbConnectionString: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbPassword: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbUser: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - type: object - type: object - deployment: - properties: - args: - items: - type: string - type: array - commands: - items: - type: string - type: array - env: - additionalProperties: - type: string - type: object - image: - type: string - labels: - additionalProperties: - type: string - type: object - podSecurityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - podTemplate: - properties: - labels: - additionalProperties: - type: string - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - type: object - exporterConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - mountPath: - type: string - type: object - inheritLabels: - items: - type: string - type: array - log: - properties: - destination: - type: string - disable: - type: boolean - filename: - type: string - volume: - properties: - name: - type: string - persistentVolumeClaim: - properties: - claimName: - type: string - type: object - type: object - type: object - metrics: - properties: - configMap: - items: - properties: - key: - type: string - name: - type: string - type: object - type: array - type: object - ociConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - mountPath: - type: string - privateKey: - properties: - secret: - type: string - type: object - type: object - replicas: - format: int32 - type: integer - service: - properties: - labels: - additionalProperties: - type: string - type: object - ports: - items: - properties: - appProtocol: - type: string - name: - type: string - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: array - type: object - serviceMonitor: - properties: - endpoints: - items: - properties: - authorization: - properties: - credentials: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: - type: string - type: object - basicAuth: - properties: - password: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - username: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - bearerTokenFile: - type: string - bearerTokenSecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - enableHttp2: - type: boolean - filterRunning: - type: boolean - followRedirects: - type: boolean - honorLabels: - type: boolean - honorTimestamps: - type: boolean - interval: - pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ - type: string - metricRelabelings: - items: - properties: - action: - default: replace - enum: - - replace - - Replace - - keep - - Keep - - drop - - Drop - - hashmod - - HashMod - - labelmap - - LabelMap - - labeldrop - - LabelDrop - - labelkeep - - LabelKeep - - lowercase - - Lowercase - - uppercase - - Uppercase - - keepequal - - KeepEqual - - dropequal - - DropEqual - type: string - modulus: - format: int64 - type: integer - regex: - type: string - replacement: - type: string - separator: - type: string - sourceLabels: - items: - type: string - type: array - targetLabel: - type: string - type: object - type: array - noProxy: - type: string - oauth2: - properties: - clientId: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - clientSecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - endpointParams: - additionalProperties: - type: string - type: object - noProxy: - type: string - proxyConnectHeader: - additionalProperties: - items: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: array - type: object - x-kubernetes-map-type: atomic - proxyFromEnvironment: - type: boolean - proxyUrl: - pattern: ^(http|https|socks5)://.+$ - type: string - scopes: - items: - type: string - type: array - tlsConfig: - properties: - ca: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - cert: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - insecureSkipVerify: - type: boolean - keySecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - maxVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - minVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - serverName: - type: string - type: object - tokenUrl: - minLength: 1 - type: string - required: - - clientId - - clientSecret - - tokenUrl - type: object - params: - additionalProperties: - items: - type: string - type: array - type: object - path: - type: string - port: - type: string - proxyConnectHeader: - additionalProperties: - items: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: array - type: object - x-kubernetes-map-type: atomic - proxyFromEnvironment: - type: boolean - proxyUrl: - pattern: ^(http|https|socks5)://.+$ - type: string - relabelings: - items: - properties: - action: - default: replace - enum: - - replace - - Replace - - keep - - Keep - - drop - - Drop - - hashmod - - HashMod - - labelmap - - LabelMap - - labeldrop - - LabelDrop - - labelkeep - - LabelKeep - - lowercase - - Lowercase - - uppercase - - Uppercase - - keepequal - - KeepEqual - - dropequal - - DropEqual - type: string - modulus: - format: int64 - type: integer - regex: - type: string - replacement: - type: string - separator: - type: string - sourceLabels: - items: - type: string - type: array - targetLabel: - type: string - type: object - type: array - scheme: - enum: - - http - - https - - HTTP - - HTTPS - type: string - scrapeTimeout: - pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - tlsConfig: - properties: - ca: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - caFile: - type: string - cert: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - certFile: - type: string - insecureSkipVerify: - type: boolean - keyFile: - type: string - keySecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - maxVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - minVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - serverName: - type: string - type: object - trackTimestampsStaleness: - type: boolean - type: object - type: array - labels: - additionalProperties: - type: string - type: object - namespaceSelector: - properties: - any: - type: boolean - matchNames: - items: - type: string - type: array - type: object - type: object - sidecar: - properties: - containers: - items: - properties: - args: - items: - type: string - type: array - x-kubernetes-list-type: atomic - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - envFrom: - items: - properties: - configMapRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - prefix: - type: string - secretRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - type: object - type: array - x-kubernetes-list-type: atomic - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - stopSignal: - type: string - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - default: TCP - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - required: - - resourceName - - restartPolicy - type: object - type: array - x-kubernetes-list-type: atomic - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - restartPolicy: - type: string - restartPolicyRules: - items: - properties: - action: - type: string - exitCodes: - properties: - operator: - type: string - values: - items: - format: int32 - type: integer - type: array - x-kubernetes-list-type: set - required: - - operator - type: object - required: - - action - type: object - type: array - x-kubernetes-list-type: atomic - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - devicePath - x-kubernetes-list-type: map - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - mountPath - x-kubernetes-list-type: map - workingDir: - type: string - required: - - name - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - default: ext4 - type: string - kind: - type: string - readOnly: - default: false - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - x-kubernetes-list-type: atomic - wwids: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - image: - properties: - pullPolicy: - type: string - reference: - type: string - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - default: default - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - x-kubernetes-list-type: atomic - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - clusterTrustBundle: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - name: - type: string - optional: - type: boolean - path: - type: string - signerName: - type: string - required: - - path - type: object - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - podCertificate: - properties: - certificateChainPath: - type: string - credentialBundlePath: - type: string - keyPath: - type: string - keyType: - type: string - maxExpirationSeconds: - format: int32 - type: integer - signerName: - type: string - required: - - keyType - - signerName - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - x-kubernetes-list-type: atomic - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - default: /etc/ceph/keyring - type: string - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - pool: - default: rbd - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - default: admin - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - default: xfs - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - default: ThinProvisioned - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - type: object - wallet: - properties: - additional: - items: - properties: - mountPath: - type: string - name: - type: string - secret: - type: string - type: object - type: array - mountPath: - type: string - secret: - type: string - type: object - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - metricsConfig: - type: string - replicas: - type: integer - status: - type: string - version: - type: string - required: - - conditions - - metricsConfig - - version - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.metricsConfig - name: MetricsConfig - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.version - name: Version - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - azureConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - type: object - database: - properties: - azure: - properties: - vaultID: - type: string - vaultPasswordSecret: - type: string - vaultUsernameSecret: - type: string - type: object - dbConnectionString: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbPassword: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbUser: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - oci: - properties: - vaultID: - type: string - vaultPasswordSecret: - type: string - type: object - type: object - databases: - additionalProperties: - properties: - dbConnectionString: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbPassword: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - dbUser: - properties: - envName: - type: string - key: - type: string - secret: - type: string - type: object - type: object - type: object - deployment: - properties: - args: - items: - type: string - type: array - commands: - items: - type: string - type: array - env: - additionalProperties: - type: string - type: object - image: - type: string - labels: - additionalProperties: - type: string - type: object - podSecurityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - podTemplate: - properties: - labels: - additionalProperties: - type: string - type: object - type: object - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - type: object - exporterConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - mountPath: - type: string - type: object - inheritLabels: - items: - type: string - type: array - log: - properties: - destination: - type: string - disable: - type: boolean - filename: - type: string - volume: - properties: - name: - type: string - persistentVolumeClaim: - properties: - claimName: - type: string - type: object - type: object - type: object - metrics: - properties: - configMap: - items: - properties: - key: - type: string - name: - type: string - type: object - type: array - type: object - ociConfig: - properties: - configMap: - properties: - key: - type: string - name: - type: string - type: object - mountPath: - type: string - privateKey: - properties: - secret: - type: string - type: object - type: object - replicas: - format: int32 - type: integer - service: - properties: - labels: - additionalProperties: - type: string - type: object - ports: - items: - properties: - appProtocol: - type: string - name: - type: string - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: array - type: object - serviceMonitor: - properties: - endpoints: - items: - properties: - authorization: - properties: - credentials: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: - type: string - type: object - basicAuth: - properties: - password: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - username: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - bearerTokenFile: - type: string - bearerTokenSecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - enableHttp2: - type: boolean - filterRunning: - type: boolean - followRedirects: - type: boolean - honorLabels: - type: boolean - honorTimestamps: - type: boolean - interval: - pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ - type: string - metricRelabelings: - items: - properties: - action: - default: replace - enum: - - replace - - Replace - - keep - - Keep - - drop - - Drop - - hashmod - - HashMod - - labelmap - - LabelMap - - labeldrop - - LabelDrop - - labelkeep - - LabelKeep - - lowercase - - Lowercase - - uppercase - - Uppercase - - keepequal - - KeepEqual - - dropequal - - DropEqual - type: string - modulus: - format: int64 - type: integer - regex: - type: string - replacement: - type: string - separator: - type: string - sourceLabels: - items: - type: string - type: array - targetLabel: - type: string - type: object - type: array - noProxy: - type: string - oauth2: - properties: - clientId: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - clientSecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - endpointParams: - additionalProperties: - type: string - type: object - noProxy: - type: string - proxyConnectHeader: - additionalProperties: - items: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: array - type: object - x-kubernetes-map-type: atomic - proxyFromEnvironment: - type: boolean - proxyUrl: - pattern: ^(http|https|socks5)://.+$ - type: string - scopes: - items: - type: string - type: array - tlsConfig: - properties: - ca: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - cert: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - insecureSkipVerify: - type: boolean - keySecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - maxVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - minVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - serverName: - type: string - type: object - tokenUrl: - minLength: 1 - type: string - required: - - clientId - - clientSecret - - tokenUrl - type: object - params: - additionalProperties: - items: - type: string - type: array - type: object - path: - type: string - port: - type: string - proxyConnectHeader: - additionalProperties: - items: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: array - type: object - x-kubernetes-map-type: atomic - proxyFromEnvironment: - type: boolean - proxyUrl: - pattern: ^(http|https|socks5)://.+$ - type: string - relabelings: - items: - properties: - action: - default: replace - enum: - - replace - - Replace - - keep - - Keep - - drop - - Drop - - hashmod - - HashMod - - labelmap - - LabelMap - - labeldrop - - LabelDrop - - labelkeep - - LabelKeep - - lowercase - - Lowercase - - uppercase - - Uppercase - - keepequal - - KeepEqual - - dropequal - - DropEqual - type: string - modulus: - format: int64 - type: integer - regex: - type: string - replacement: - type: string - separator: - type: string - sourceLabels: - items: - type: string - type: array - targetLabel: - type: string - type: object - type: array - scheme: - enum: - - http - - https - - HTTP - - HTTPS - type: string - scrapeTimeout: - pattern: ^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$ - type: string - targetPort: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - tlsConfig: - properties: - ca: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - caFile: - type: string - cert: - properties: - configMap: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - secret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - certFile: - type: string - insecureSkipVerify: - type: boolean - keyFile: - type: string - keySecret: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - maxVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - minVersion: - enum: - - TLS10 - - TLS11 - - TLS12 - - TLS13 - type: string - serverName: - type: string - type: object - trackTimestampsStaleness: - type: boolean - type: object - type: array - labels: - additionalProperties: - type: string - type: object - namespaceSelector: - properties: - any: - type: boolean - matchNames: - items: - type: string - type: array - type: object - type: object - sidecar: - properties: - containers: - items: - properties: - args: - items: - type: string - type: array - x-kubernetes-list-type: atomic - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - env: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - envFrom: - items: - properties: - configMapRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - prefix: - type: string - secretRef: - properties: - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - type: object - type: array - x-kubernetes-list-type: atomic - image: - type: string - imagePullPolicy: - type: string - lifecycle: - properties: - postStart: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - preStop: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - sleep: - properties: - seconds: - format: int64 - type: integer - required: - - seconds - type: object - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - type: object - stopSignal: - type: string - type: object - livenessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - name: - type: string - ports: - items: - properties: - containerPort: - format: int32 - type: integer - hostIP: - type: string - hostPort: - format: int32 - type: integer - name: - type: string - protocol: - default: TCP - type: string - required: - - containerPort - type: object - type: array - x-kubernetes-list-map-keys: - - containerPort - - protocol - x-kubernetes-list-type: map - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resizePolicy: - items: - properties: - resourceName: - type: string - restartPolicy: - type: string - required: - - resourceName - - restartPolicy - type: object - type: array - x-kubernetes-list-type: atomic - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - restartPolicy: - type: string - restartPolicyRules: - items: - properties: - action: - type: string - exitCodes: - properties: - operator: - type: string - values: - items: - format: int32 - type: integer - type: array - x-kubernetes-list-type: set - required: - - operator - type: object - required: - - action - type: object - type: array - x-kubernetes-list-type: atomic - securityContext: - properties: - allowPrivilegeEscalation: - type: boolean - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - capabilities: - properties: - add: - items: - type: string - type: array - x-kubernetes-list-type: atomic - drop: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - privileged: - type: boolean - procMount: - type: string - readOnlyRootFilesystem: - type: boolean - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - startupProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - stdin: - type: boolean - stdinOnce: - type: boolean - terminationMessagePath: - type: string - terminationMessagePolicy: - type: string - tty: - type: boolean - volumeDevices: - items: - properties: - devicePath: - type: string - name: - type: string - required: - - devicePath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - devicePath - x-kubernetes-list-type: map - volumeMounts: - items: - properties: - mountPath: - type: string - mountPropagation: - type: string - name: - type: string - readOnly: - type: boolean - recursiveReadOnly: - type: string - subPath: - type: string - subPathExpr: - type: string - required: - - mountPath - - name - type: object - type: array - x-kubernetes-list-map-keys: - - mountPath - x-kubernetes-list-type: map - workingDir: - type: string - required: - - name - type: object - type: array - volumes: - items: - properties: - awsElasticBlockStore: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - azureDisk: - properties: - cachingMode: - type: string - diskName: - type: string - diskURI: - type: string - fsType: - default: ext4 - type: string - kind: - type: string - readOnly: - default: false - type: boolean - required: - - diskName - - diskURI - type: object - azureFile: - properties: - readOnly: - type: boolean - secretName: - type: string - shareName: - type: string - required: - - secretName - - shareName - type: object - cephfs: - properties: - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - path: - type: string - readOnly: - type: boolean - secretFile: - type: string - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - type: string - required: - - monitors - type: object - cinder: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeID: - type: string - required: - - volumeID - type: object - configMap: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - csi: - properties: - driver: - type: string - fsType: - type: string - nodePublishSecretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - readOnly: - type: boolean - volumeAttributes: - additionalProperties: - type: string - type: object - required: - - driver - type: object - downwardAPI: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - emptyDir: - properties: - medium: - type: string - sizeLimit: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - ephemeral: - properties: - volumeClaimTemplate: - properties: - metadata: - type: object - spec: - properties: - accessModes: - items: - type: string - type: array - x-kubernetes-list-type: atomic - dataSource: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - required: - - kind - - name - type: object - x-kubernetes-map-type: atomic - dataSourceRef: - properties: - apiGroup: - type: string - kind: - type: string - name: - type: string - namespace: - type: string - required: - - kind - - name - type: object - resources: - properties: - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - selector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - storageClassName: - type: string - volumeAttributesClassName: - type: string - volumeMode: - type: string - volumeName: - type: string - type: object - required: - - spec - type: object - type: object - fc: - properties: - fsType: - type: string - lun: - format: int32 - type: integer - readOnly: - type: boolean - targetWWNs: - items: - type: string - type: array - x-kubernetes-list-type: atomic - wwids: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - flexVolume: - properties: - driver: - type: string - fsType: - type: string - options: - additionalProperties: - type: string - type: object - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - required: - - driver - type: object - flocker: - properties: - datasetName: - type: string - datasetUUID: - type: string - type: object - gcePersistentDisk: - properties: - fsType: - type: string - partition: - format: int32 - type: integer - pdName: - type: string - readOnly: - type: boolean - required: - - pdName - type: object - gitRepo: - properties: - directory: - type: string - repository: - type: string - revision: - type: string - required: - - repository - type: object - glusterfs: - properties: - endpoints: - type: string - path: - type: string - readOnly: - type: boolean - required: - - endpoints - - path - type: object - hostPath: - properties: - path: - type: string - type: - type: string - required: - - path - type: object - image: - properties: - pullPolicy: - type: string - reference: - type: string - type: object - iscsi: - properties: - chapAuthDiscovery: - type: boolean - chapAuthSession: - type: boolean - fsType: - type: string - initiatorName: - type: string - iqn: - type: string - iscsiInterface: - default: default - type: string - lun: - format: int32 - type: integer - portals: - items: - type: string - type: array - x-kubernetes-list-type: atomic - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - targetPortal: - type: string - required: - - iqn - - lun - - targetPortal - type: object - name: - type: string - nfs: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - persistentVolumeClaim: - properties: - claimName: - type: string - readOnly: - type: boolean - required: - - claimName - type: object - photonPersistentDisk: - properties: - fsType: - type: string - pdID: - type: string - required: - - pdID - type: object - portworxVolume: - properties: - fsType: - type: string - readOnly: - type: boolean - volumeID: - type: string - required: - - volumeID - type: object - projected: - properties: - defaultMode: - format: int32 - type: integer - sources: - items: - properties: - clusterTrustBundle: - properties: - labelSelector: - properties: - matchExpressions: - items: - properties: - key: - type: string - operator: - type: string - values: - items: - type: string - type: array - x-kubernetes-list-type: atomic - required: - - key - - operator - type: object - type: array - x-kubernetes-list-type: atomic - matchLabels: - additionalProperties: - type: string - type: object - type: object - x-kubernetes-map-type: atomic - name: - type: string - optional: - type: boolean - path: - type: string - signerName: - type: string - required: - - path - type: object - configMap: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - downwardAPI: - properties: - items: - items: - properties: - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - mode: - format: int32 - type: integer - path: - type: string - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - required: - - path - type: object - type: array - x-kubernetes-list-type: atomic - type: object - podCertificate: - properties: - certificateChainPath: - type: string - credentialBundlePath: - type: string - keyPath: - type: string - keyType: - type: string - maxExpirationSeconds: - format: int32 - type: integer - signerName: - type: string - required: - - keyType - - signerName - type: object - secret: - properties: - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - name: - default: "" - type: string - optional: - type: boolean - type: object - x-kubernetes-map-type: atomic - serviceAccountToken: - properties: - audience: - type: string - expirationSeconds: - format: int64 - type: integer - path: - type: string - required: - - path - type: object - type: object - type: array - x-kubernetes-list-type: atomic - type: object - quobyte: - properties: - group: - type: string - readOnly: - type: boolean - registry: - type: string - tenant: - type: string - user: - type: string - volume: - type: string - required: - - registry - - volume - type: object - rbd: - properties: - fsType: - type: string - image: - type: string - keyring: - default: /etc/ceph/keyring - type: string - monitors: - items: - type: string - type: array - x-kubernetes-list-type: atomic - pool: - default: rbd - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - user: - default: admin - type: string - required: - - image - - monitors - type: object - scaleIO: - properties: - fsType: - default: xfs - type: string - gateway: - type: string - protectionDomain: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - sslEnabled: - type: boolean - storageMode: - default: ThinProvisioned - type: string - storagePool: - type: string - system: - type: string - volumeName: - type: string - required: - - gateway - - secretRef - - system - type: object - secret: - properties: - defaultMode: - format: int32 - type: integer - items: - items: - properties: - key: - type: string - mode: - format: int32 - type: integer - path: - type: string - required: - - key - - path - type: object - type: array - x-kubernetes-list-type: atomic - optional: - type: boolean - secretName: - type: string - type: object - storageos: - properties: - fsType: - type: string - readOnly: - type: boolean - secretRef: - properties: - name: - default: "" - type: string - type: object - x-kubernetes-map-type: atomic - volumeName: - type: string - volumeNamespace: - type: string - type: object - vsphereVolume: - properties: - fsType: - type: string - storagePolicyID: - type: string - storagePolicyName: - type: string - volumePath: - type: string - required: - - volumePath - type: object - required: - - name - type: object - type: array - type: object - wallet: - properties: - additional: - items: - properties: - mountPath: - type: string - name: - type: string - secret: - type: string - type: object - type: array - mountPath: - type: string - secret: - type: string - type: object - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - metricsConfig: - type: string - replicas: - type: integer - status: - type: string - version: - type: string - required: - - conditions - - metricsConfig - - version - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: dataguardbrokers.database.oracle.com -spec: - group: database.oracle.com - names: - kind: DataguardBroker - listKind: DataguardBrokerList - plural: dataguardbrokers - shortNames: - - dgbroker - - dgbrokers - singular: dataguardbroker - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.primaryDatabase - name: Primary - type: string - - jsonPath: .status.standbyDatabases - name: Standbys - type: string - - jsonPath: .spec.protectionMode - name: Protection Mode - type: string - - jsonPath: .status.clusterConnectString - name: Cluster Connect Str - priority: 1 - type: string - - jsonPath: .status.externalConnectString - name: Connect Str - type: string - - jsonPath: .spec.primaryDatabaseRef - name: Primary Database - priority: 1 - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.fastStartFailover - name: FSFO - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - fastStartFailover: - type: boolean - loadBalancer: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - primaryDatabaseRef: - type: string - protectionMode: - enum: - - MaxPerformance - - MaxAvailability - type: string - serviceAnnotations: - additionalProperties: - type: string - type: object - setAsPrimaryDatabase: - type: string - standbyDatabaseRefs: - items: - type: string - type: array - required: - - primaryDatabaseRef - - protectionMode - - standbyDatabaseRefs - type: object - status: - properties: - clusterConnectString: - type: string - databasesInDataguardConfig: - additionalProperties: - type: string - type: object - externalConnectString: - type: string - fastStartFailover: - type: string - primaryDatabase: - type: string - primaryDatabaseRef: - type: string - protectionMode: - type: string - standbyDatabases: - type: string - status: - type: string - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.primaryDatabase - name: Primary - type: string - - jsonPath: .status.standbyDatabases - name: Standbys - type: string - - jsonPath: .spec.protectionMode - name: Protection Mode - type: string - - jsonPath: .status.clusterConnectString - name: Cluster Connect Str - priority: 1 - type: string - - jsonPath: .status.externalConnectString - name: Connect Str - type: string - - jsonPath: .spec.primaryDatabaseRef - name: Primary Database - priority: 1 - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.fastStartFailover - name: FSFO - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - fastStartFailover: - type: boolean - loadBalancer: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - primaryDatabaseRef: - type: string - protectionMode: - enum: - - MaxPerformance - - MaxAvailability - type: string - serviceAnnotations: - additionalProperties: - type: string - type: object - setAsPrimaryDatabase: - type: string - standbyDatabaseRefs: - items: - type: string - type: array - required: - - primaryDatabaseRef - - protectionMode - - standbyDatabaseRefs - type: object - status: - properties: - clusterConnectString: - type: string - databasesInDataguardConfig: - additionalProperties: - type: string - type: object - externalConnectString: - type: string - fastStartFailover: - type: string - primaryDatabase: - type: string - primaryDatabaseRef: - type: string - protectionMode: - type: string - standbyDatabases: - type: string - status: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: dbcssystems.database.oracle.com -spec: - group: database.oracle.com - names: - kind: DbcsSystem - listKind: DbcsSystemList - plural: dbcssystems - singular: dbcssystem - scope: Namespaced - versions: - - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - databaseId: - type: string - dbBackupId: - type: string - dbClone: - properties: - dbAdminPaswordSecret: - type: string - dbDbUniqueName: - type: string - dbName: - type: string - displayName: - type: string - domain: - type: string - hostName: - type: string - initialDataStorageSizeInGB: - type: integer - kmsKeyId: - type: string - kmsKeyVersionId: - type: string - licenseModel: - type: string - privateIp: - type: string - sidPrefix: - type: string - sshPublicKeys: - items: - type: string - type: array - subnetId: - type: string - tdeWalletPasswordSecret: - type: string - required: - - dbDbUniqueName - - dbName - - displayName - - hostName - - subnetId - type: object - dbSystem: - properties: - availabilityDomain: - type: string - backupSubnetId: - type: string - clusterName: - type: string - compartmentId: - type: string - cpuCoreCount: - type: integer - dbAdminPaswordSecret: - type: string - dbBackupConfig: - properties: - autoBackupEnabled: - type: boolean - autoBackupWindow: - type: string - backupDestinationDetails: - type: string - recoveryWindowsInDays: - type: integer - type: object - dbDomain: - type: string - dbEdition: - type: string - dbName: - type: string - dbUniqueName: - type: string - dbVersion: - type: string - dbWorkload: - type: string - diskRedundancy: - type: string - displayName: - type: string - domain: - type: string - faultDomains: - items: - type: string - type: array - hostName: - type: string - initialDataStorageSizeInGB: - type: integer - kmsConfig: - properties: - compartmentId: - type: string - encryptionAlgo: - type: string - keyName: - type: string - vaultName: - type: string - vaultType: - type: string - type: object - licenseModel: - type: string - nodeCount: - type: integer - pdbName: - type: string - privateIp: - type: string - shape: - type: string - sshPublicKeys: - items: - type: string - type: array - storageManagement: - type: string - subnetId: - type: string - tags: - additionalProperties: - type: string - type: object - tdeWalletPasswordSecret: - type: string - timeZone: - type: string - required: - - availabilityDomain - - compartmentId - - dbAdminPaswordSecret - - hostName - - shape - - subnetId - type: object - hardLink: - type: boolean - id: - type: string - kmsConfig: - properties: - compartmentId: - type: string - encryptionAlgo: - type: string - keyName: - type: string - vaultName: - type: string - vaultType: - type: string - type: object - ociConfigMap: - type: string - ociSecret: - type: string - pdbConfigs: - items: - properties: - freeformTags: - additionalProperties: - type: string - type: object - isDelete: - type: boolean - pdbAdminPassword: - type: string - pdbName: - type: string - pluggableDatabaseId: - type: string - shouldPdbAdminAccountBeLocked: - type: boolean - tdeWalletPassword: - type: string - required: - - freeformTags - - pdbAdminPassword - - pdbName - - shouldPdbAdminAccountBeLocked - - tdeWalletPassword - type: object - type: array - setupDBCloning: - type: boolean - required: - - ociConfigMap - type: object - status: - properties: - availabilityDomain: - type: string - cpuCoreCount: - type: integer - dataStoragePercentage: - type: integer - dataStorageSizeInGBs: - type: integer - dbCloneStatus: - properties: - dbAdminPaswordSecret: - type: string - dbDbUniqueName: - type: string - dbName: - type: string - displayName: - type: string - domain: - type: string - hostName: - type: string - id: - type: string - licenseModel: - type: string - sshPublicKeys: - items: - type: string - type: array - subnetId: - type: string - required: - - dbDbUniqueName - - hostName - type: object - dbEdition: - type: string - dbInfo: - items: - properties: - dbHomeId: - type: string - dbName: - type: string - dbUniqueName: - type: string - dbWorkload: - type: string - id: - type: string - type: object - type: array - displayName: - type: string - id: - type: string - kmsDetailsStatus: - properties: - compartmentId: - type: string - encryptionAlgo: - type: string - keyId: - type: string - keyName: - type: string - managementEndpoint: - type: string - vaultId: - type: string - vaultName: - type: string - vaultType: - type: string - type: object - licenseModel: - type: string - network: - properties: - clientSubnet: - type: string - domainName: - type: string - hostName: - type: string - listenerPort: - type: integer - networkSG: - type: string - scanDnsName: - type: string - vcnName: - type: string - type: object - nodeCount: - type: integer - pdbDetailsStatus: - items: - properties: - pdbConfigStatus: - items: - properties: - freeformTags: - additionalProperties: - type: string - type: object - pdbName: - type: string - pdbState: - type: string - pluggableDatabaseId: - type: string - shouldPdbAdminAccountBeLocked: - type: boolean - required: - - freeformTags - - pdbName - - shouldPdbAdminAccountBeLocked - type: object - type: array - type: object - type: array - recoStorageSizeInGB: - type: integer - shape: - type: string - state: - type: string - storageManagement: - type: string - subnetId: - type: string - timeZone: - type: string - workRequests: - items: - properties: - operationId: - type: string - operationType: - type: string - percentComplete: - type: string - timeAccepted: - type: string - timeFinished: - type: string - timeStarted: - type: string - required: - - operationId - - operationType - type: object - type: array - required: - - state - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.displayName - name: Display Name - type: string - - jsonPath: .status.dbInfo[0].dbName - name: DB Name - type: string - - jsonPath: .status.state - name: State - type: string - - jsonPath: .status.dbInfo[0].dbVersion - name: DB Version - type: string - - jsonPath: .status.dbInfo[0].connectionString - name: ConnString - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - dataGuard: - properties: - availabilityDomain: - type: string - dbAdminPasswordSecret: - type: string - dbName: - type: string - dbSystemFreeformTags: - additionalProperties: - type: string - type: object - displayName: - type: string - enabled: - type: boolean - hostName: - type: string - isDelete: - type: boolean - peerDbHomeId: - type: string - peerDbSystemId: - type: string - peerRole: - type: string - primaryDatabaseId: - type: string - protectionMode: - type: string - shape: - type: string - sidPrefix: - type: string - subnetId: - type: string - transportType: - type: string - type: object - databaseId: - type: string - dbBackupId: - type: string - dbClone: - properties: - dbAdminPasswordSecret: - type: string - dbName: - type: string - dbUniqueName: - type: string - displayName: - type: string - domain: - type: string - hostName: - type: string - initialDataStorageSizeInGB: - type: integer - kmsKeyId: - type: string - kmsKeyVersionId: - type: string - licenseModel: - type: string - privateIp: - type: string - sidPrefix: - type: string - sshPublicKeys: - items: - type: string - type: array - subnetId: - type: string - tdeWalletPasswordSecret: - type: string - required: - - dbName - - displayName - - hostName - - subnetId - type: object - dbSystem: - properties: - availabilityDomain: - type: string - backupDisplayName: - type: string - backupSubnetId: - type: string - clusterName: - type: string - compartmentId: - type: string - cpuCoreCount: - type: integer - dbAdminPasswordSecret: - type: string - dbBackupConfig: - properties: - autoBackupEnabled: - type: boolean - autoBackupWindow: - type: string - backupDestinationDetails: - type: string - recoveryWindowsInDays: - type: integer - type: object - dbDomain: - type: string - dbEdition: - type: string - dbHomeId: - type: string - dbName: - type: string - dbPatchOcid: - type: string - dbUniqueName: - type: string - dbUpgradeVersion: - type: string - dbVersion: - type: string - dbWorkload: - type: string - diskRedundancy: - type: string - displayName: - type: string - domain: - type: string - faultDomains: - items: - type: string - type: array - hostName: - type: string - initialDataStorageSizeInGB: - type: integer - kmsConfig: - properties: - compartmentId: - type: string - encryptionAlgo: - type: string - keyName: - type: string - vaultName: - type: string - vaultType: - type: string - type: object - licenseModel: - type: string - nodeCount: - type: integer - pdbName: - type: string - privateIp: - type: string - restoreConfig: - properties: - latest: - type: boolean - scn: - type: string - timestamp: - format: date-time - type: string - type: object - shape: - type: string - sshPublicKeys: - items: - type: string - type: array - storageManagement: - type: string - subnetId: - type: string - tags: - additionalProperties: - type: string - type: object - tdeWalletPasswordSecret: - type: string - timeZone: - type: string - type: object - enableBackup: - type: boolean - hardLink: - type: boolean - id: - type: string - isPatch: - type: boolean - isUpgrade: - type: boolean - kmsConfig: - properties: - compartmentId: - type: string - encryptionAlgo: - type: string - keyName: - type: string - vaultName: - type: string - vaultType: - type: string - type: object - ociConfigMap: - type: string - ociSecret: - type: string - pdbConfigs: - items: - properties: - freeformTags: - additionalProperties: - type: string - type: object - isDelete: - type: boolean - pdbAdminPassword: - type: string - pdbName: - type: string - pluggableDatabaseId: - type: string - shouldPdbAdminAccountBeLocked: - type: boolean - tdeWalletPassword: - type: string - required: - - freeformTags - - pdbAdminPassword - - pdbName - - shouldPdbAdminAccountBeLocked - - tdeWalletPassword - type: object - type: array - setupDBCloning: - type: boolean - required: - - ociConfigMap - type: object - status: - properties: - availabilityDomain: - type: string - backups: - items: - properties: - backupId: - type: string - name: - type: string - timestamp: - type: string - required: - - backupId - - name - - timestamp - type: object - type: array - cpuCoreCount: - type: integer - dataGuardStatus: - properties: - dbAdminPasswordSecret: - type: string - dbName: - type: string - dbWorkload: - type: string - id: - type: string - isActiveDataGuardEnabled: - type: boolean - lifecycleDetails: - type: string - lifecycleState: - type: string - peerDataGuardAssociationId: - type: string - peerDatabaseId: - type: string - peerDbHomeId: - type: string - peerDbSystemId: - type: string - peerRole: - type: string - primaryDatabaseId: - type: string - protectionMode: - type: string - shape: - type: string - subnetId: - type: string - transportType: - type: string - type: object - dataStoragePercentage: - type: integer - dataStorageSizeInGBs: - type: integer - dbCloneStatus: - properties: - dbAdminPasswordSecret: - type: string - dbName: - type: string - dbUniqueName: - type: string - displayName: - type: string - domain: - type: string - hostName: - type: string - id: - type: string - licenseModel: - type: string - sshPublicKeys: - items: - type: string - type: array - subnetId: - type: string - type: object - dbEdition: - type: string - dbInfo: - items: - properties: - connectionString: - type: string - connectionStringLong: - type: string - dbHomeId: - type: string - dbName: - type: string - dbUniqueName: - type: string - dbWorkload: - type: string - id: - type: string - type: object - type: array - dbVersion: - type: string - displayName: - type: string - id: - type: string - kmsDetailsStatus: - properties: - compartmentId: - type: string - encryptionAlgo: - type: string - keyId: - type: string - keyName: - type: string - managementEndpoint: - type: string - vaultId: - type: string - vaultName: - type: string - vaultType: - type: string - type: object - licenseModel: - type: string - message: - type: string - network: - properties: - clientSubnet: - type: string - domainName: - type: string - hostName: - type: string - listenerPort: - type: integer - networkSG: - type: string - scanDnsName: - type: string - vcnName: - type: string - type: object - nodeCount: - type: integer - pdbDetailsStatus: - items: - properties: - pdbConfigStatus: - items: - properties: - freeformTags: - additionalProperties: - type: string - type: object - pdbName: - type: string - pdbState: - type: string - pluggableDatabaseId: - type: string - shouldPdbAdminAccountBeLocked: - type: boolean - type: object - type: array - type: object - type: array - recoStorageSizeInGB: - type: integer - shape: - type: string - state: - type: string - storageManagement: - type: string - subnetId: - type: string - timeZone: - type: string - workRequests: - items: - properties: - operationId: - type: string - operationType: - type: string - percentComplete: - type: string - timeAccepted: - type: string - timeFinished: - type: string - timeStarted: - type: string - type: object - type: array - required: - - state - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: lrests.database.oracle.com -spec: - group: database.oracle.com - names: - kind: LREST - listKind: LRESTList - plural: lrests - singular: lrest - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Name of the LREST - jsonPath: .spec.cdbName - name: CDB NAME - type: string - - description: Status of the LREST Resource - jsonPath: .status.phase - name: STATUS - type: string - - description: Error message if any - jsonPath: .status.msg - name: MESSAGE - type: string - - description: Autodiscover - jsonPath: .spec.autodiscover - name: AUTODISCOVER - type: boolean - - description: Number of PDBS - jsonPath: .status.npdbscrd - name: PDB:CRD - type: string - - description: string of the tnsalias - jsonPath: .spec.dbTnsurl - name: TNS STRING - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - autodiscover: - type: boolean - cdbAdminPwd: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbAdminUser: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbName: - type: string - cdbPrvKey: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbPubKey: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbTlsCat: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbTlsCrt: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbTlsKey: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - clusterIp: - default: false - type: boolean - dbPort: - type: integer - dbServer: - type: string - dbTnsurl: - type: string - deletePdbCascade: - type: boolean - loadBalancer: - default: false - type: boolean - lrestImage: - type: string - lrestImagePullPolicy: - enum: - - Always - - Never - type: string - lrestImagePullSecret: - type: string - lrestPort: - default: 8888 - type: integer - lrestPwd: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - namespaceAutoDiscover: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - orapki: - properties: - secretName: - type: string - required: - - secretName - type: object - orapkitag: - default: orapkitag - type: string - passwordProtection: - default: NATIVE - enum: - - NATIVE - - OPENSSL3 - - ORAPKI - type: string - replicas: - type: integer - resetDbpassword: - type: boolean - serviceAccountName: - type: string - serviceName: - type: string - sysAdminPwd: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - trace_level_client: - default: 0 - type: integer - tracelevel: - type: integer - webServerPwd: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - webServerUser: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - required: - - passwordProtection - type: object - status: - properties: - msg: - type: string - ncrds: - type: integer - npdbs: - type: integer - npdbscrd: - type: string - phase: - type: string - status: - type: boolean - required: - - phase - - status - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: lrpdbs.database.oracle.com -spec: - group: database.oracle.com - names: - kind: LRPDB - listKind: LRPDBList - plural: lrpdbs - singular: lrpdb - scope: Namespaced - versions: - - additionalPrinterColumns: - - description: Name of the CDB - jsonPath: .spec.cdbName - name: CDB Name - type: string - - description: Name of the PDB - jsonPath: .spec.pdbName - name: PDB Name - type: string - - description: PDB Open Mode - jsonPath: .status.openMode - name: PDB State - type: string - - description: Total Size of the PDB - jsonPath: .status.totalSize - name: PDB Size - type: string - - description: Error message, if any - jsonPath: .status.msg - name: Message - type: string - - description: open restricted - jsonPath: .status.restricted - name: Restricted - type: string - - description: last sqlcode - jsonPath: .status.sqlCode - name: last sqlcode - type: integer - - description: last plsql applied - jsonPath: .status.lastplsql - name: last PLSQL - type: string - - description: Bitmask status - jsonPath: .status.pdbBitMaskStr - name: BITMASK STATUS - type: string - - description: The connect string to be used - jsonPath: .status.connString - name: Connect_String - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - action: - type: string - adminName: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - adminPwd: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - adminpdbPass: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - adminpdbUser: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - alterSystem: - type: string - alterSystemParameter: - type: string - alterSystemValue: - type: string - asClone: - type: boolean - cdbName: - type: string - cdbNamespace: - type: string - cdbPrvKey: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - cdbResName: - type: string - codeconfigmap: - type: string - copyAction: - enum: - - COPY - - NOCOPY - - MOVE - type: string - dropAction: - enum: - - INCLUDING - - KEEP - type: string - fileNameConversions: - type: string - getScript: - default: false - type: boolean - imperativeLrpdbDeletion: - type: boolean - lrpdbTlsCat: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - lrpdbTlsCrt: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - lrpdbTlsKey: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - modifyOption: - enum: - - IMMEDIATE - - NORMAL - - READ ONLY - - READ WRITE - - RESTRICTED - type: string - modifyOption2: - default: NONE - type: string - parameterScope: - type: string - passwordProtection: - default: NATIVE - enum: - - NATIVE - - OPENSSL3 - type: string - pdbName: - type: string - pdbState: - enum: - - OPEN - - CLOSE - - ALTER - - DELETE - - UNPLUG - - PLUG - - CLONE - - RESET - - NONE - type: string - pdbconfigmap: - type: string - plsqlexemode: - type: integer - reststate: - type: integer - reuseTempFile: - default: true - type: boolean - sourceFileNameConversions: - type: string - sparseClonePath: - type: string - srcPdbName: - type: string - tdeExport: - type: boolean - tdeImport: - type: boolean - tdeKeystorePath: - type: string - tdePassword: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - tdeSecret: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - tempSize: - type: string - totalSize: - type: string - tracelevel: - type: integer - unlimitedStorage: - default: true - type: boolean - webServerPwd: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - webServerUser: - properties: - secret: - properties: - key: - type: string - secretName: - type: string - required: - - key - - secretName - type: object - required: - - secret - type: object - xmlFileName: - type: string - required: - - imperativeLrpdbDeletion - - passwordProtection - type: object - status: - properties: - action: - type: string - alterSystem: - type: string - bitstat: - type: integer - bitstatstr: - type: string - connString: - type: string - lastplsql: - type: string - modifyOption: - type: string - msg: - type: string - openMode: - type: string - pdbBitMask: - type: integer - pdbBitMaskStr: - type: string - phase: - type: string - restricted: - type: string - sqlCode: - type: integer - status: - type: boolean - totalSize: - type: string - required: - - phase - - sqlCode - - status - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: oraclerestarts.database.oracle.com -spec: - group: database.oracle.com - names: - kind: OracleRestart - listKind: OracleRestartList - plural: oraclerestarts - singular: oraclerestart - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.configParams.dbName - name: DbName - type: string - - jsonPath: .status.dbState - name: DbState - type: string - - jsonPath: .status.role - name: Role - type: string - - jsonPath: .status.releaseUpdate - name: Version - type: string - - jsonPath: .status.pdbConnectString - name: Pdb Connect Str - type: string - - jsonPath: .status.state - name: State - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - asmDiskGroupDetails: - items: - properties: - autoUpdate: - type: string - disks: - items: - type: string - type: array - name: - type: string - redundancy: - type: string - storageClass: - type: string - type: - type: string - required: - - disks - type: object - type: array - asmStorageDetails: - properties: - autoUpdate: - type: string - disksBySize: - items: - properties: - diskNames: - items: - type: string - type: array - storageSizeInGb: - type: integer - type: object - type: array - type: object - asmStorageSizeInGb: - type: integer - configParams: - properties: - cpuCount: - type: integer - dbBase: - type: string - dbCharSet: - type: string - dbConfigType: - type: string - dbHome: - type: string - dbName: - type: string - dbOneOffIds: - type: string - dbResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - dbStorageType: - type: string - dbSwZipFile: - type: string - dbType: - type: string - dbUniqueName: - type: string - enableArchiveLog: - type: string - gridBase: - type: string - gridHome: - type: string - gridOneOffIds: - type: string - gridResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - gridSwZipFile: - type: string - hostSwStageLocation: - type: string - hugePages: - type: integer - inventory: - type: string - oPatchLocation: - type: string - oPatchSwZipFile: - type: string - oneOffLocation: - type: string - opType: - type: string - pdbName: - type: string - pgaSize: - type: string - processes: - type: integer - ruFolderName: - type: string - ruPatchLocation: - type: string - sgaSize: - type: string - stagingSoftwareLocation: - type: string - swMountLocation: - type: string - swStagePvc: - type: string - swStagePvcMountLocation: - type: string - type: object - crsDgStorageClass: - type: string - dataDgStorageClass: - type: string - dbSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - enableOns: - default: enable - enum: - - enable - - disable - type: string - image: - type: string - imagePullPolicy: - enum: - - Always - - IfNotPresent - - Never - type: string - imagePullSecret: - type: string - instDetails: - properties: - envFile: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - hostSwLocation: - type: string - isDelete: - type: string - isForceDelete: - type: string - isKeepPVC: - type: string - label: - type: string - name: - type: string - pvcName: - additionalProperties: - type: string - type: object - swLocStorageSizeInGb: - type: integer - workerNode: - items: - type: string - type: array - type: object - isDebug: - type: string - isDeleteTopology: - type: string - isFailed: - type: boolean - isManual: - type: boolean - lbService: - properties: - name: - type: string - onsLocalPort: - format: int32 - type: integer - onsTargetPort: - format: int32 - type: integer - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - enum: - - TCP - - UDP - - SCTP - type: string - targetPort: - format: int32 - type: integer - type: object - type: array - svcAnnotation: - additionalProperties: - type: string - type: object - svcLBIP: - type: string - svcType: - type: string - type: object - nodePortSvc: - properties: - name: - type: string - onsLocalPort: - format: int32 - type: integer - onsTargetPort: - format: int32 - type: integer - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - enum: - - TCP - - UDP - - SCTP - type: string - targetPort: - format: int32 - type: integer - type: object - type: array - svcAnnotation: - additionalProperties: - type: string - type: object - svcLBIP: - type: string - svcType: - type: string - type: object - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - recoDgStorageClass: - type: string - redoDgStorageClass: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - scriptsGetCmd: - type: string - scriptsLocation: - type: string - securityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - serviceDetails: - properties: - available: - items: - type: string - type: array - cardinality: - type: string - clbGoal: - type: string - commitOutComeFastPath: - type: string - commitOutcome: - type: string - drainTimeOut: - type: integer - dtp: - type: string - edition: - type: string - failBack: - type: string - failOverDelay: - type: integer - failOverRestore: - type: string - failOverRetry: - type: integer - failOverType: - type: string - name: - type: string - notification: - type: string - pdb: - type: string - preferred: - items: - type: string - type: array - retenion: - type: integer - rlbGoal: - type: string - role: - type: string - sessionState: - type: string - stopOption: - type: string - svcState: - type: string - tafPolicy: - type: string - required: - - name - type: object - sshKeySecret: - properties: - keyMountLocation: - type: string - name: - type: string - privKeySecretName: - type: string - pubKeySecretName: - type: string - type: object - swDgStorageClass: - type: string - tdeWalletSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - required: - - instDetails - type: object - x-kubernetes-validations: - - message: instDetails is required - rule: self.instDetails != null - status: - properties: - DbName: - type: string - OracleRestartNodes: - items: - properties: - name: - type: string - nodeDetails: - properties: - InstanceState: - type: string - PodState: - type: string - clusterState: - type: string - isDelete: - type: string - mountedDevices: - items: - type: string - type: array - nodePortSvc: - items: - properties: - name: - type: string - onsLocalPort: - format: int32 - type: integer - onsTargetPort: - format: int32 - type: integer - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - enum: - - TCP - - UDP - - SCTP - type: string - targetPort: - format: int32 - type: integer - type: object - type: array - svcAnnotation: - additionalProperties: - type: string - type: object - svcLBIP: - type: string - svcType: - type: string - type: object - type: array - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - default: TCP - enum: - - TCP - - UDP - - SCTP - type: string - targetPort: - format: int32 - type: integer - type: object - type: array - pvcName: - additionalProperties: - type: string - type: object - state: - type: string - workerNode: - type: string - type: object - type: object - type: array - asmDiskGroups: - items: - properties: - autoUpdate: - type: string - disks: - items: - properties: - name: - type: string - sizeInGb: - type: integer - valid: - type: boolean - type: object - type: array - name: - type: string - redundancy: - type: string - storageClass: - type: string - type: - type: string - type: object - type: array - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - configParams: - properties: - cpuCount: - type: integer - dbBase: - type: string - dbCharSet: - type: string - dbConfigType: - type: string - dbHome: - type: string - dbName: - type: string - dbOneOffIds: - type: string - dbResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - dbStorageType: - type: string - dbSwZipFile: - type: string - dbType: - type: string - dbUniqueName: - type: string - enableArchiveLog: - type: string - gridBase: - type: string - gridHome: - type: string - gridOneOffIds: - type: string - gridResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - gridSwZipFile: - type: string - hostSwStageLocation: - type: string - hugePages: - type: integer - inventory: - type: string - oPatchLocation: - type: string - oPatchSwZipFile: - type: string - oneOffLocation: - type: string - opType: - type: string - pdbName: - type: string - pgaSize: - type: string - processes: - type: integer - ruFolderName: - type: string - ruPatchLocation: - type: string - sgaSize: - type: string - stagingSoftwareLocation: - type: string - swMountLocation: - type: string - swStagePvc: - type: string - swStagePvcMountLocation: - type: string - type: object - connectString: - type: string - cpuCount: - type: integer - dbSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - dbState: - type: string - externalConnectString: - type: string - externalSvcType: - type: string - hugePages: - type: integer - image: - type: string - imagePullPolicy: - type: string - imagePullSecret: - type: string - instDetails: - properties: - envFile: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - hostSwLocation: - type: string - isDelete: - type: string - isForceDelete: - type: string - isKeepPVC: - type: string - label: - type: string - name: - type: string - pvcName: - additionalProperties: - type: string - type: object - swLocStorageSizeInGb: - type: integer - workerNode: - items: - type: string - type: array - type: object - installNode: - type: string - isDebug: - type: string - isDeleteOraPvc: - type: string - isDeleteTopology: - type: string - nfsStorageDetails: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - oldSpec: - type: string - pdbConnectString: - type: string - pgaSize: - type: string - processes: - type: integer - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - releaseUpdate: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - role: - type: string - scriptsGetCmd: - type: string - scriptsLocation: - type: string - securityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - serviceDetails: - properties: - available: - items: - type: string - type: array - cardinality: - type: string - clbGoal: - type: string - commitOutComeFastPath: - type: string - commitOutcome: - type: string - drainTimeOut: - type: integer - dtp: - type: string - edition: - type: string - failBack: - type: string - failOverDelay: - type: integer - failOverRestore: - type: string - failOverRetry: - type: integer - failOverType: - type: string - name: - type: string - notification: - type: string - pdb: - type: string - preferred: - items: - type: string - type: array - retenion: - type: integer - rlbGoal: - type: string - role: - type: string - sessionState: - type: string - stopOption: - type: string - svcState: - type: string - tafPolicy: - type: string - required: - - name - type: object - sgaSize: - type: string - sshKeySecret: - properties: - keyMountLocation: - type: string - name: - type: string - privKeySecretName: - type: string - pubKeySecretName: - type: string - type: object - state: - type: string - storageClass: - type: string - storageSizeInGB: - type: integer - tdeWalletSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - useNfsforSwStorage: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: oraclerestdataservices.database.oracle.com -spec: - group: database.oracle.com - names: - kind: OracleRestDataService - listKind: OracleRestDataServiceList - plural: oraclerestdataservices - shortNames: - - ords - singular: oraclerestdataservice - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .spec.databaseRef - name: Database - type: string - - jsonPath: .status.databaseApiUrl - name: Database API URL - type: string - - jsonPath: .status.databaseActionsUrl - name: Database Actions URL - type: string - - jsonPath: .status.apexUrl - name: Apex URL - type: string - - jsonPath: .status.mongoDbApiAccessUrl - name: MongoDbApi Access URL - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminPassword: - properties: - keepSecret: - type: boolean - secretKey: - default: oracle_pwd - type: string - secretName: - type: string - required: - - secretName - type: object - databaseRef: - type: string - image: - properties: - pullFrom: - type: string - pullSecrets: - type: string - version: - type: string - required: - - pullFrom - type: object - loadBalancer: - type: boolean - mongoDbApi: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - oracleService: - type: string - ordsPassword: - properties: - keepSecret: - type: boolean - secretKey: - default: oracle_pwd - type: string - secretName: - type: string - required: - - secretName - type: object - ordsUser: - type: string - persistence: - properties: - accessMode: - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - setWritePermissions: - type: boolean - size: - type: string - storageClass: - type: string - volumeName: - type: string - type: object - readinessCheckPeriod: - type: integer - replicas: - minimum: 1 - type: integer - restEnableSchemas: - items: - properties: - enable: - type: boolean - pdbName: - type: string - schemaName: - type: string - urlMapping: - type: string - required: - - enable - - schemaName - type: object - type: array - serviceAccountName: - type: string - serviceAnnotations: - additionalProperties: - type: string - type: object - required: - - adminPassword - - databaseRef - - ordsPassword - type: object - status: - properties: - apexConfigured: - type: boolean - apexUrl: - type: string - commonUsersCreated: - type: boolean - databaseActionsUrl: - type: string - databaseApiUrl: - type: string - databaseRef: - type: string - image: - properties: - pullFrom: - type: string - pullSecrets: - type: string - version: - type: string - required: - - pullFrom - type: object - loadBalancer: - type: string - mongoDbApi: - type: boolean - mongoDbApiAccessUrl: - type: string - ordsInstalled: - type: boolean - replicas: - type: integer - serviceIP: - type: string - status: - type: string - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .spec.databaseRef - name: Database - type: string - - jsonPath: .status.databaseApiUrl - name: Database API URL - type: string - - jsonPath: .status.databaseActionsUrl - name: Database Actions URL - type: string - - jsonPath: .status.apexUrl - name: Apex URL - type: string - - jsonPath: .status.mongoDbApiAccessUrl - name: MongoDbApi Access URL - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminPassword: - properties: - keepSecret: - type: boolean - secretKey: - default: oracle_pwd - type: string - secretName: - type: string - required: - - secretName - type: object - databaseRef: - type: string - image: - properties: - pullFrom: - type: string - pullSecrets: - type: string - version: - type: string - required: - - pullFrom - type: object - loadBalancer: - type: boolean - mongoDbApi: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - oracleService: - type: string - ordsPassword: - properties: - keepSecret: - type: boolean - secretKey: - default: oracle_pwd - type: string - secretName: - type: string - required: - - secretName - type: object - ordsUser: - type: string - persistence: - properties: - accessMode: - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - setWritePermissions: - type: boolean - size: - type: string - storageClass: - type: string - volumeName: - type: string - type: object - readinessCheckPeriod: - type: integer - replicas: - minimum: 1 - type: integer - restEnableSchemas: - items: - properties: - enable: - type: boolean - pdbName: - type: string - schemaName: - type: string - urlMapping: - type: string - required: - - enable - - schemaName - type: object - type: array - serviceAccountName: - type: string - serviceAnnotations: - additionalProperties: - type: string - type: object - required: - - adminPassword - - databaseRef - - ordsPassword - type: object - status: - properties: - apexConfigured: - type: boolean - apexUrl: - type: string - commonUsersCreated: - type: boolean - databaseActionsUrl: - type: string - databaseApiUrl: - type: string - databaseRef: - type: string - image: - properties: - pullFrom: - type: string - pullSecrets: - type: string - version: - type: string - required: - - pullFrom - type: object - loadBalancer: - type: string - mongoDbApi: - type: boolean - mongoDbApiAccessUrl: - type: string - ordsInstalled: - type: boolean - replicas: - type: integer - serviceIP: - type: string - status: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: ordssrvs.database.oracle.com -spec: - group: database.oracle.com - names: - kind: OrdsSrvs - listKind: OrdsSrvsList - plural: ordssrvs - singular: ordssrvs - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.status - name: status - type: string - - jsonPath: .status.workloadType - name: workloadType - type: string - - jsonPath: .status.ordsVersion - name: ordsVersion - type: string - - jsonPath: .status.httpPort - name: httpPort - type: integer - - jsonPath: .status.httpsPort - name: httpsPort - type: integer - - jsonPath: .status.mongoPort - name: MongoPort - type: integer - - jsonPath: .status.restartRequired - name: restartRequired - type: boolean - - jsonPath: .metadata.creationTimestamp - name: AGE - type: date - - jsonPath: .status.ordsInstalled - name: OrdsInstalled - type: boolean - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - encPrivKey: - properties: - passwordKey: - default: password - type: string - secretName: - type: string - required: - - secretName - type: object - forceRestart: - type: boolean - globalSettings: - default: {} - properties: - apex.download: - default: false - type: boolean - apex.download.url: - default: https://download.oracle.com/otn_software/apex/apex-latest.zip - type: string - apex.installation.persistence: - properties: - accessMode: - default: ReadWriteOnce - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - size: - default: 2Gi - type: string - storageClass: - type: string - volumeName: - type: string - type: object - cache.metadata.enabled: - type: boolean - cache.metadata.graphql.expireAfterAccess: - type: string - cache.metadata.graphql.expireAfterWrite: - type: string - cache.metadata.jwks.enabled: - type: boolean - cache.metadata.jwks.expireAfterAccess: - type: string - cache.metadata.jwks.expireAfterWrite: - type: string - cache.metadata.jwks.initialCapacity: - format: int32 - type: integer - cache.metadata.jwks.maximumSize: - format: int32 - type: integer - cache.metadata.timeout: - type: string - central.config.url: - type: string - certSecret: - properties: - cert: - type: string - key: - type: string - secretName: - type: string - required: - - cert - - key - - secretName - type: object - database.api.enabled: - type: boolean - database.api.management.services.disabled: - type: boolean - db.invalidPoolTimeout: - type: string - debug.printDebugToScreen: - type: boolean - enable.mongo.access.log: - default: false - type: boolean - enable.standalone.access.log: - default: false - type: boolean - error.responseFormat: - type: string - feature.grahpql.max.nesting.depth: - format: int32 - type: integer - icap.port: - format: int32 - type: integer - icap.secure.port: - format: int32 - type: integer - icap.server: - type: string - instance.api.enabled: - type: boolean - log.procedure: - type: boolean - mongo.enabled: - type: boolean - mongo.idle.timeout: - type: string - mongo.op.timeout: - type: string - mongo.port: - default: 27017 - format: int32 - type: integer - request.traceHeaderName: - type: string - security.credentials.attempts: - format: int32 - type: integer - security.credentials.lock.time: - type: string - security.disableDefaultExclusionList: - type: boolean - security.exclusionList: - type: string - security.externalSessionTrustedOrigins: - type: string - security.forceHTTPS: - type: boolean - security.httpsHeaderCheck: - type: string - security.inclusionList: - type: string - security.maxEntries: - format: int32 - type: integer - security.verifySSL: - type: boolean - standalone.context.path: - default: /ords - type: string - standalone.http.port: - default: 8080 - format: int32 - type: integer - standalone.https.host: - type: string - standalone.https.port: - default: 8443 - format: int32 - type: integer - standalone.stop.timeout: - type: string - zipWalletsSecretName: - type: string - type: object - image: - type: string - imagePullPolicy: - default: IfNotPresent - enum: - - IfNotPresent - - Always - - Never - type: string - imagePullSecrets: - type: string - poolSettings: - items: - properties: - apex.security.administrator.roles: - type: string - apex.security.user.roles: - type: string - autoUpgradeAPEX: - default: false - type: boolean - autoUpgradeORDS: - default: false - type: boolean - db.adminUser: - type: string - db.adminUser.secret: - properties: - passwordKey: - default: password - type: string - secretName: - type: string - required: - - secretName - type: object - db.cdb.adminUser: - type: string - db.cdb.adminUser.secret: - properties: - passwordKey: - default: password - type: string - secretName: - type: string - required: - - secretName - type: object - db.connectionType: - enum: - - basic - - tns - - customurl - type: string - db.credentialsSource: - enum: - - pool - - request - type: string - db.customURL: - type: string - db.hostname: - type: string - db.poolDestroyTimeout: - type: string - db.port: - format: int32 - type: integer - db.secret: - properties: - passwordKey: - default: password - type: string - secretName: - type: string - required: - - secretName - type: object - db.servicename: - type: string - db.sid: - type: string - db.tnsAliasName: - type: string - db.username: - type: string - db.wallet.zip.service: - type: string - dbWalletSecret: - properties: - secretName: - type: string - walletName: - type: string - required: - - secretName - - walletName - type: object - debug.trackResources: - type: boolean - feature.openservicebroker.exclude: - type: boolean - feature.sdw: - type: boolean - http.cookie.filter: - type: string - jdbc.DriverType: - enum: - - thin - - oci8 - type: string - jdbc.InactivityTimeout: - format: int32 - type: integer - jdbc.InitialLimit: - format: int32 - type: integer - jdbc.MaxConnectionReuseCount: - format: int32 - type: integer - jdbc.MaxConnectionReuseTime: - type: string - jdbc.MaxLimit: - format: int32 - type: integer - jdbc.MaxStatementsLimit: - format: int32 - type: integer - jdbc.MinLimit: - format: int32 - type: integer - jdbc.SecondsToTrustIdleConnection: - format: int32 - type: integer - jdbc.auth.admin.role: - type: string - jdbc.auth.enabled: - type: boolean - jdbc.cleanup.mode: - type: string - jdbc.statementTimeout: - format: int32 - type: integer - misc.defaultPage: - type: string - misc.pagination.maxRows: - format: int32 - type: integer - owa.trace.sql: - type: boolean - plsql.gateway.mode: - enum: - - disabled - - direct - - proxied - type: string - poolName: - type: string - procedure.preProcess: - type: string - procedure.rest.preHook: - type: string - procedurePostProcess: - type: string - restEnabledSql.active: - type: boolean - security.jwks.connection.timeout: - type: string - security.jwks.read.timeout: - type: string - security.jwks.refresh.interval: - type: string - security.jwks.size: - format: int32 - type: integer - security.jwt.allowed.age: - type: string - security.jwt.allowed.skew: - type: string - security.jwt.profile.enabled: - type: boolean - security.requestAuthenticationFunction: - type: string - security.requestValidationFunction: - default: ords_util.authorize_plsql_gateway - type: string - security.validationFunctionType: - enum: - - plsql - - javascript - type: string - soda.defaultLimit: - type: string - soda.maxLimit: - type: string - tnsAdminSecret: - properties: - secretName: - type: string - required: - - secretName - type: object - zipWalletName: - type: string - required: - - poolName - type: object - type: array - replicas: - default: 1 - format: int32 - minimum: 1 - type: integer - serviceAccountName: - type: string - workloadType: - default: Deployment - enum: - - Deployment - - StatefulSet - - DaemonSet - type: string - required: - - image - type: object - status: - properties: - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - httpPort: - format: int32 - type: integer - httpsPort: - format: int32 - type: integer - mongoPort: - format: int32 - type: integer - ordsInstalled: - type: boolean - ordsVersion: - type: string - restartRequired: - type: boolean - status: - type: string - workloadType: - type: string - required: - - restartRequired - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: privateais.privateai.oracle.com -spec: - group: privateai.oracle.com - names: - kind: PrivateAi - listKind: PrivateAiList - plural: privateais - singular: privateai - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.replicas - name: Replicas - type: number - - jsonPath: .status.paiSecret.apiKey - name: ApiKey - type: string - - jsonPath: .status.podIP - name: PodIP - type: string - - jsonPath: .status.loadBalancerIP - name: LbIP - type: string - - jsonPath: .status.releaseUpdate - name: ReleaseUpdate - priority: 1 - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - isDebug: - type: boolean - isDeleteOraPvc: - type: boolean - isDownloadScripts: - type: boolean - isExternalSvc: - default: "true" - enum: - - "true" - - "false" - type: string - livenessCheckPeriod: - type: integer - nodePortSvc: - items: - properties: - name: - type: string - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - svcType: - type: string - type: object - type: array - paiConfigFile: - properties: - mountLocation: - type: string - name: - type: string - type: object - paiEnableAuthentication: - default: "false" - enum: - - "true" - - "false" - type: string - paiHTTPEnabled: - enum: - - "true" - - "false" - type: string - paiHTTPPort: - format: int32 - type: integer - paiHTTPSEnabled: - enum: - - "true" - - "false" - type: string - paiHTTPSPort: - format: int32 - type: integer - paiImage: - type: string - paiImagePullSecret: - type: string - paiInternalLB: - default: "false" - enum: - - "true" - - "false" - type: string - paiLBExternalTrafficPolicy: - default: local - enum: - - local - - cluster - type: string - paiLBIP: - type: string - paiLBPort: - format: int32 - type: integer - paiLogLocation: - type: string - paiSecret: - properties: - mountLocation: - type: string - name: - type: string - type: object - paiService: - properties: - name: - type: string - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - svcType: - type: string - type: object - pailbAnnotation: - additionalProperties: - type: string - type: object - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - pvcList: - additionalProperties: - type: string - type: object - readinessCheckPeriod: - type: integer - replicas: - format: int32 - type: integer - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storageClass: - type: string - storageSizeInGb: - format: int32 - type: integer - workerNodes: - items: - type: string - type: array - type: object - status: - properties: - NodeIP: - type: string - clusterIP: - type: string - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - loadBalancerIP: - type: string - paiConfigMap: - properties: - name: - type: string - resourceVersion: - type: string - type: object - paiSecret: - properties: - apiKey: - type: string - certpem: - type: string - name: - type: string - resourceVersion: - type: string - type: object - podIP: - type: string - releaseUpdate: - type: string - replicas: - type: integer - status: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: racdatabases.database.oracle.com -spec: - group: database.oracle.com - names: - kind: RacDatabase - listKind: RacDatabaseList - plural: racdatabases - singular: racdatabase - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.configParams.dbName - name: DbName - type: string - - jsonPath: .status.dbState - name: DbState - type: string - - jsonPath: .status.role - name: Role - type: string - - jsonPath: .status.releaseUpdate - name: Version - type: string - - jsonPath: .status.pdbConnectString - name: Pdb Connect Str - type: string - - jsonPath: .status.state - name: State - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - asmDiskGroupDetails: - items: - properties: - autoUpdate: - type: string - disks: - items: - type: string - type: array - name: - type: string - redundancy: - type: string - storageClass: - type: string - type: - type: string - required: - - disks - type: object - type: array - asmStorageDetails: - properties: - autoUpdate: - type: string - disksBySize: - items: - properties: - diskNames: - items: - type: string - type: array - storageSizeInGb: - type: integer - type: object - type: array - workerNodes: - items: - type: string - type: array - type: object - configParams: - properties: - cpuCount: - type: integer - dbBase: - type: string - dbCharSet: - type: string - dbConfigType: - type: string - dbHome: - type: string - dbName: - type: string - dbOneOffIds: - type: string - dbResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - dbStorageType: - type: string - dbSwZipFile: - type: string - dbType: - type: string - dbUniqueName: - type: string - enableArchiveLog: - type: string - gridBase: - type: string - gridHome: - type: string - gridOneOffIds: - type: string - gridResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - gridSwZipFile: - type: string - hostSwStageLocation: - type: string - hugePages: - type: integer - inventory: - type: string - oPatchLocation: - type: string - oPatchSwZipFile: - type: string - oneOffLocation: - type: string - opType: - type: string - pdbName: - type: string - pgaSize: - type: string - processes: - type: integer - ruFolderName: - type: string - ruPatchLocation: - type: string - sgaSize: - type: string - stagingSoftwareLocation: - type: string - swMountLocation: - type: string - type: object - dbSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - envVars: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - externalSvcType: - type: string - image: - type: string - imagePullPolicy: - type: string - imagePullSecret: - type: string - instDetails: - items: - properties: - envFile: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - hostSwLocation: - type: string - isDelete: - type: string - isForceDelete: - type: string - isKeepPVC: - type: string - label: - type: string - lsnrLocalPort: - format: int32 - type: integer - lsnrTargetPort: - format: int32 - type: integer - name: - type: string - nodePortSvc: - items: - properties: - name: - type: string - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - svcType: - type: string - required: - - name - - svcType - type: object - type: array - onsLocalPort: - format: int32 - type: integer - onsTargetPort: - format: int32 - type: integer - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - privateIPDetails: - items: - properties: - interface: - type: string - ip: - type: string - mac: - type: string - name: - type: string - namespace: - type: string - type: - type: string - type: object - type: array - pvcName: - additionalProperties: - type: string - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - vipSvcName: - type: string - workerNode: - items: - type: string - type: array - required: - - name - - vipSvcName - type: object - type: array - instanceDetails: - properties: - baseLsnrTargetPort: - format: int32 - type: integer - baseOnsTargetPort: - format: int32 - type: integer - nodeCount: - type: integer - privateIPDetails: - items: - properties: - interface: - type: string - ip: - type: string - mac: - type: string - name: - type: string - namespace: - type: string - type: - type: string - type: object - type: array - racHostSwLocation: - type: string - racNodeName: - type: string - workerNodeSelector: - additionalProperties: - type: string - type: object - required: - - nodeCount - - racHostSwLocation - - racNodeName - type: object - isDebug: - type: string - isDeleteOraPvc: - type: string - isDeleteTopology: - type: string - isFailed: - type: boolean - isManual: - type: boolean - nfsStorageDetails: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - scanSvcLocalPort: - format: int32 - type: integer - scanSvcName: - type: string - scanSvcTargetPort: - format: int32 - type: integer - scriptsGetCmd: - type: string - scriptsLocation: - type: string - securityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - serviceAccountName: - type: string - serviceDetails: - properties: - available: - items: - type: string - type: array - cardinality: - type: string - clbGoal: - type: string - commitOutComeFastPath: - type: string - commitOutcome: - type: string - drainTimeOut: - type: integer - dtp: - type: string - edition: - type: string - failBack: - type: string - failOverDelay: - type: integer - failOverRestore: - type: string - failOverRetry: - type: integer - failOverType: - type: string - name: - type: string - notification: - type: string - pdb: - type: string - preferred: - items: - type: string - type: array - retenion: - type: integer - rlbGoal: - type: string - role: - type: string - sessionState: - type: string - stopOption: - type: string - svcState: - type: string - tafPolicy: - type: string - required: - - name - type: object - sshKeySecret: - properties: - keyMountLocation: - type: string - name: - type: string - privKeySecretName: - type: string - pubKeySecretName: - type: string - required: - - name - type: object - storageClass: - type: string - storageSizeInGB: - type: integer - tdeWalletSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - useNfsforSwStorage: - type: string - required: - - asmDiskGroupDetails - - configParams - - scanSvcName - type: object - status: - properties: - DbName: - type: string - asmDiskGroups: - items: - properties: - autoUpdate: - type: string - disks: - items: - properties: - name: - type: string - sizeInGb: - type: integer - valid: - type: boolean - type: object - type: array - name: - type: string - redundancy: - type: string - storageClass: - type: string - type: - type: string - type: object - type: array - clientEtcHost: - items: - type: string - type: array - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - configParams: - properties: - cpuCount: - type: integer - dbBase: - type: string - dbCharSet: - type: string - dbConfigType: - type: string - dbHome: - type: string - dbName: - type: string - dbOneOffIds: - type: string - dbResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - dbStorageType: - type: string - dbSwZipFile: - type: string - dbType: - type: string - dbUniqueName: - type: string - enableArchiveLog: - type: string - gridBase: - type: string - gridHome: - type: string - gridOneOffIds: - type: string - gridResponseFile: - properties: - configMapName: - type: string - name: - type: string - type: object - gridSwZipFile: - type: string - hostSwStageLocation: - type: string - hugePages: - type: integer - inventory: - type: string - oPatchLocation: - type: string - oPatchSwZipFile: - type: string - oneOffLocation: - type: string - opType: - type: string - pdbName: - type: string - pgaSize: - type: string - processes: - type: integer - ruFolderName: - type: string - ruPatchLocation: - type: string - sgaSize: - type: string - stagingSoftwareLocation: - type: string - swMountLocation: - type: string - type: object - connectString: - type: string - dbSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - dbState: - type: string - externalConnectString: - type: string - externalSvcType: - type: string - image: - type: string - imagePullPolicy: - type: string - imagePullSecret: - type: string - instDetails: - items: - properties: - envFile: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - valueFrom: - properties: - configMapKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - fieldRef: - properties: - apiVersion: - type: string - fieldPath: - type: string - required: - - fieldPath - type: object - x-kubernetes-map-type: atomic - fileKeyRef: - properties: - key: - type: string - optional: - default: false - type: boolean - path: - type: string - volumeName: - type: string - required: - - key - - path - - volumeName - type: object - x-kubernetes-map-type: atomic - resourceFieldRef: - properties: - containerName: - type: string - divisor: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - resource: - type: string - required: - - resource - type: object - x-kubernetes-map-type: atomic - secretKeyRef: - properties: - key: - type: string - name: - default: "" - type: string - optional: - type: boolean - required: - - key - type: object - x-kubernetes-map-type: atomic - type: object - required: - - name - type: object - type: array - hostSwLocation: - type: string - isDelete: - type: string - isForceDelete: - type: string - isKeepPVC: - type: string - label: - type: string - lsnrLocalPort: - format: int32 - type: integer - lsnrTargetPort: - format: int32 - type: integer - name: - type: string - nodePortSvc: - items: - properties: - name: - type: string - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - svcType: - type: string - required: - - name - - svcType - type: object - type: array - onsLocalPort: - format: int32 - type: integer - onsTargetPort: - format: int32 - type: integer - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - privateIPDetails: - items: - properties: - interface: - type: string - ip: - type: string - mac: - type: string - name: - type: string - namespace: - type: string - type: - type: string - type: object - type: array - pvcName: - additionalProperties: - type: string - type: object - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - vipSvcName: - type: string - workerNode: - items: - type: string - type: array - required: - - name - - vipSvcName - type: object - type: array - installNode: - type: string - isDebug: - type: string - isDeleteOraPvc: - type: string - isDeleteTopology: - type: string - nfsStorageDetails: - properties: - path: - type: string - readOnly: - type: boolean - server: - type: string - required: - - path - - server - type: object - observedGeneration: - format: int64 - type: integer - oldSpec: - type: string - pdbConnectString: - type: string - racNodes: - items: - properties: - name: - type: string - nodeDetails: - properties: - InstanceState: - type: string - PodState: - type: string - clusterState: - type: string - isDelete: - type: string - mountedDevices: - items: - type: string - type: array - nodePortSvc: - items: - properties: - name: - type: string - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - svcType: - type: string - required: - - name - - svcType - type: object - type: array - portMappings: - items: - properties: - nodePort: - format: int32 - type: integer - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - pvcName: - additionalProperties: - type: string - type: object - state: - type: string - vipDetails: - additionalProperties: - type: string - type: object - workerNode: - type: string - type: object - type: object - type: array - readinessProbe: - properties: - exec: - properties: - command: - items: - type: string - type: array - x-kubernetes-list-type: atomic - type: object - failureThreshold: - format: int32 - type: integer - grpc: - properties: - port: - format: int32 - type: integer - service: - default: "" - type: string - required: - - port - type: object - httpGet: - properties: - host: - type: string - httpHeaders: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - path: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - scheme: - type: string - required: - - port - type: object - initialDelaySeconds: - format: int32 - type: integer - periodSeconds: - format: int32 - type: integer - successThreshold: - format: int32 - type: integer - tcpSocket: - properties: - host: - type: string - port: - anyOf: - - type: integer - - type: string - x-kubernetes-int-or-string: true - required: - - port - type: object - terminationGracePeriodSeconds: - format: int64 - type: integer - timeoutSeconds: - format: int32 - type: integer - type: object - releaseUpdate: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - role: - type: string - scanDetails: - additionalProperties: - type: string - type: object - scanSvcLocalPort: - format: int32 - type: integer - scanSvcName: - type: string - scanSvcTargetPort: - format: int32 - type: integer - scriptsGetCmd: - type: string - scriptsLocation: - type: string - securityContext: - properties: - appArmorProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - fsGroup: - format: int64 - type: integer - fsGroupChangePolicy: - type: string - runAsGroup: - format: int64 - type: integer - runAsNonRoot: - type: boolean - runAsUser: - format: int64 - type: integer - seLinuxChangePolicy: - type: string - seLinuxOptions: - properties: - level: - type: string - role: - type: string - type: - type: string - user: - type: string - type: object - seccompProfile: - properties: - localhostProfile: - type: string - type: - type: string - required: - - type - type: object - supplementalGroups: - items: - format: int64 - type: integer - type: array - x-kubernetes-list-type: atomic - supplementalGroupsPolicy: - type: string - sysctls: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - x-kubernetes-list-type: atomic - windowsOptions: - properties: - gmsaCredentialSpec: - type: string - gmsaCredentialSpecName: - type: string - hostProcess: - type: boolean - runAsUserName: - type: string - type: object - type: object - serviceDetails: - properties: - available: - items: - type: string - type: array - cardinality: - type: string - clbGoal: - type: string - commitOutComeFastPath: - type: string - commitOutcome: - type: string - drainTimeOut: - type: integer - dtp: - type: string - edition: - type: string - failBack: - type: string - failOverDelay: - type: integer - failOverRestore: - type: string - failOverRetry: - type: integer - failOverType: - type: string - name: - type: string - notification: - type: string - pdb: - type: string - preferred: - items: - type: string - type: array - retenion: - type: integer - rlbGoal: - type: string - role: - type: string - sessionState: - type: string - stopOption: - type: string - svcState: - type: string - tafPolicy: - type: string - required: - - name - type: object - sshKeySecret: - properties: - keyMountLocation: - type: string - name: - type: string - privKeySecretName: - type: string - pubKeySecretName: - type: string - required: - - name - type: object - state: - type: string - storageClass: - type: string - tdeWalletSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - type: object - useNfsforSwStorage: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: shardingdatabases.database.oracle.com -spec: - group: database.oracle.com - names: - kind: ShardingDatabase - listKind: ShardingDatabaseList - plural: shardingdatabases - singular: shardingdatabase - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.gsm.state - name: Gsm State - type: string - - jsonPath: .status.gsm.services - name: Services - type: string - - jsonPath: .status.gsm.shards - name: shards - priority: 1 - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - InvitedNodeSubnet: - type: string - catalog: - items: - properties: - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - imagePullPolicy: - type: string - isDelete: - type: string - label: - type: string - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - pvAnnotations: - additionalProperties: - type: string - type: object - pvMatchLabels: - additionalProperties: - type: string - type: object - pvcName: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storageSizeInGb: - format: int32 - type: integer - required: - - name - type: object - type: array - dbEdition: - type: string - dbImage: - type: string - dbImagePullSecret: - type: string - dbSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - nsConfigMap: - type: string - nsSecret: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - required: - - name - - pwdFileName - type: object - fssStorageClass: - type: string - gsm: - items: - properties: - directorName: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - imagePullPolicy: - type: string - isDelete: - type: string - label: - type: string - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - pvAnnotations: - additionalProperties: - type: string - type: object - pvMatchLabels: - additionalProperties: - type: string - type: object - pvcName: - type: string - region: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storageSizeInGb: - format: int32 - type: integer - required: - - name - type: object - type: array - gsmDevMode: - type: string - gsmImage: - type: string - gsmImagePullSecret: - type: string - gsmService: - items: - properties: - available: - type: string - clbGoal: - type: string - commitOutcome: - type: string - drainTimeout: - type: string - dtp: - type: string - edition: - type: string - failoverDelay: - type: string - failoverMethod: - type: string - failoverPrimary: - type: string - failoverRestore: - type: string - failoverRetry: - type: string - failoverType: - type: string - gdsPool: - type: string - lag: - type: integer - locality: - type: string - name: - type: string - notification: - type: string - pdbName: - type: string - policy: - type: string - preferred: - type: string - prferredAll: - type: string - regionFailover: - type: string - retention: - type: string - role: - type: string - sessionState: - type: string - sqlTransactionProfile: - type: string - stopOption: - type: string - tableFamily: - type: string - tfaPolicy: - type: string - required: - - name - type: object - type: array - gsmShardGroup: - items: - properties: - deployAs: - type: string - name: - type: string - region: - type: string - required: - - name - type: object - type: array - gsmShardSpace: - items: - properties: - chunks: - type: integer - name: - type: string - protectionMode: - type: string - shardGroup: - type: string - required: - - name - type: object - type: array - invitedNodeSubnetFlag: - type: string - isClone: - type: boolean - isDataGuard: - type: boolean - isDebug: - type: boolean - isDeleteOraPvc: - type: boolean - isDownloadScripts: - type: boolean - isExternalSvc: - type: boolean - isTdeWallet: - type: string - liveinessCheckPeriod: - type: integer - portMappings: - items: - properties: - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - readinessCheckPeriod: - type: integer - replicationType: - type: string - scriptsLocation: - type: string - shard: - items: - properties: - deployAs: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - imagePullPolicy: - type: string - isDelete: - enum: - - enable - - disable - - failed - - force - type: string - label: - type: string - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - pvAnnotations: - additionalProperties: - type: string - type: object - pvMatchLabels: - additionalProperties: - type: string - type: object - pvcName: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - shardGroup: - type: string - shardRegion: - type: string - shardSpace: - type: string - storageSizeInGb: - format: int32 - type: integer - required: - - name - type: object - type: array - shardBuddyRegion: - type: string - shardConfigName: - type: string - shardRegion: - items: - type: string - type: array - shardingType: - type: string - stagePvcName: - type: string - storageClass: - type: string - tdeWalletPvc: - type: string - tdeWalletPvcMountLocation: - type: string - topicId: - type: string - required: - - catalog - - dbImage - - gsm - - gsmImage - - shard - type: object - status: - properties: - catalogs: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - gsm: - properties: - details: - additionalProperties: - type: string - type: object - externalConnectStr: - type: string - internalConnectStr: - type: string - services: - type: string - shards: - additionalProperties: - type: string - type: object - state: - type: string - type: object - shards: - additionalProperties: - type: string - type: object - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.gsm.state - name: Gsm State - type: string - - jsonPath: .status.gsm.services - name: Services - type: string - - jsonPath: .status.gsm.shards - name: shards - priority: 1 - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - InvitedNodeSubnet: - type: string - catalog: - items: - properties: - catalogConfigData: - properties: - mountPath: - type: string - name: - type: string - type: object - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - imagePullPolicy: - type: string - isDelete: - type: string - label: - type: string - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - pvAnnotations: - additionalProperties: - type: string - type: object - pvMatchLabels: - additionalProperties: - type: string - type: object - pvcName: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storageSizeInGb: - format: int32 - type: integer - required: - - name - type: object - type: array - dbEdition: - type: string - dbImage: - type: string - dbImagePullSecret: - type: string - dbSecret: - properties: - encryptionType: - type: string - keyFileMountLocation: - type: string - keyFileName: - type: string - keySecretName: - type: string - name: - type: string - nsConfigMap: - type: string - nsSecret: - type: string - pwdFileMountLocation: - type: string - pwdFileName: - type: string - tdeKeyFileName: - type: string - tdePwdFileName: - type: string - required: - - name - - pwdFileName - - tdePwdFileName - type: object - fssStorageClass: - type: string - gsm: - items: - properties: - directorName: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - gsmConfigData: - properties: - mountPath: - type: string - name: - type: string - type: object - imagePullPolicy: - type: string - isDelete: - type: string - label: - type: string - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - pvAnnotations: - additionalProperties: - type: string - type: object - pvMatchLabels: - additionalProperties: - type: string - type: object - pvcName: - type: string - region: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - storageSizeInGb: - format: int32 - type: integer - required: - - name - type: object - type: array - gsmDevMode: - type: string - gsmImage: - type: string - gsmImagePullSecret: - type: string - gsmService: - items: - properties: - available: - type: string - clbGoal: - type: string - commitOutcome: - type: string - drainTimeout: - type: string - dtp: - type: string - edition: - type: string - failoverDelay: - type: string - failoverMethod: - type: string - failoverPrimary: - type: string - failoverRestore: - type: string - failoverRetry: - type: string - failoverType: - type: string - gdsPool: - type: string - lag: - type: integer - locality: - type: string - name: - type: string - notification: - type: string - pdbName: - type: string - policy: - type: string - preferred: - type: string - prferredAll: - type: string - regionFailover: - type: string - retention: - type: string - role: - type: string - ruMode: - type: string - sessionState: - type: string - sqlTransactionProfile: - type: string - stopOption: - type: string - tableFamily: - type: string - tfaPolicy: - type: string - required: - - name - type: object - type: array - gsmShardGroup: - items: - properties: - deployAs: - type: string - name: - type: string - region: - type: string - required: - - name - type: object - type: array - gsmShardSpace: - items: - properties: - chunks: - type: integer - name: - type: string - protectionMode: - type: string - shardGroup: - type: string - required: - - name - type: object - type: array - invitedNodeSubnetFlag: - type: string - isClone: - type: boolean - isDataGuard: - type: boolean - isDebug: - type: boolean - isDeleteOraPvc: - type: boolean - isDownloadScripts: - type: boolean - isExternalSvc: - type: boolean - isTdeWallet: - type: string - liveinessCheckPeriod: - type: integer - portMappings: - items: - properties: - port: - format: int32 - type: integer - protocol: - type: string - targetPort: - format: int32 - type: integer - required: - - port - - protocol - - targetPort - type: object - type: array - readinessCheckPeriod: - type: integer - replicationType: - type: string - scriptsLocation: - type: string - serviceAccountName: - type: string - shard: - items: - properties: - deployAs: - type: string - envVars: - items: - properties: - name: - type: string - value: - type: string - required: - - name - - value - type: object - type: array - imagePullPolicy: - type: string - isDelete: - enum: - - enable - - disable - - failed - - force - type: string - label: - type: string - name: - type: string - nodeSelector: - additionalProperties: - type: string - type: object - pvAnnotations: - additionalProperties: - type: string - type: object - pvMatchLabels: - additionalProperties: - type: string - type: object - pvcName: - type: string - resources: - properties: - claims: - items: - properties: - name: - type: string - request: - type: string - required: - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - limits: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - requests: - additionalProperties: - anyOf: - - type: integer - - type: string - pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ - x-kubernetes-int-or-string: true - type: object - type: object - shardConfigData: - properties: - mountPath: - type: string - name: - type: string - type: object - shardGroup: - type: string - shardRegion: - type: string - shardSpace: - type: string - storageSizeInGb: - format: int32 - type: integer - required: - - name - type: object - type: array - shardBuddyRegion: - type: string - shardConfigName: - type: string - shardInfo: - items: - properties: - replicas: - format: int32 - type: integer - shape: - type: string - shardGroupDetails: - properties: - ShardSpace: - type: string - deployAs: - type: string - isDelete: - type: string - region: - type: string - repFactor: - type: integer - shardGroupName: - type: string - type: object - shardPreFixName: - type: string - shardSpaceDetails: - properties: - Chnuks: - type: integer - protectMode: - type: string - shardSpaceName: - type: string - type: object - storageSizeInGb: - format: int32 - type: integer - required: - - shardPreFixName - type: object - type: array - shardRegion: - items: - type: string - type: array - shardingType: - type: string - stagePvcName: - type: string - storageClass: - type: string - tdeWalletPvc: - type: string - tdeWalletPvcMountLocation: - type: string - topicId: - type: string - required: - - catalog - - dbImage - - gsm - - gsmImage - type: object - status: - properties: - catalogs: - additionalProperties: - type: string - type: object - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - gsm: - properties: - details: - additionalProperties: - type: string - type: object - externalConnectStr: - type: string - internalConnectStr: - type: string - services: - type: string - shards: - additionalProperties: - type: string - type: object - state: - type: string - type: object - shards: - additionalProperties: - type: string - type: object - type: object - type: object - served: true - storage: true - subresources: - status: {} ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: oracle-database-operator-system/oracle-database-operator-serving-cert - controller-gen.kubebuilder.io/version: v0.18.0 - name: singleinstancedatabases.database.oracle.com -spec: - group: database.oracle.com - names: - kind: SingleInstanceDatabase - listKind: SingleInstanceDatabaseList - plural: singleinstancedatabases - shortNames: - - sidb - - sidbs - singular: singleinstancedatabase - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.edition - name: Edition - type: string - - jsonPath: .status.sid - name: Sid - priority: 1 - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.role - name: Role - type: string - - jsonPath: .status.releaseUpdate - name: Version - type: string - - jsonPath: .status.connectString - name: Connect Str - type: string - - jsonPath: .status.pdbConnectString - name: Pdb Connect Str - priority: 1 - type: string - - jsonPath: .status.tcpsConnectString - name: TCPS Connect Str - type: string - - jsonPath: .status.tcpsPdbConnectString - name: TCPS Pdb Connect Str - priority: 1 - type: string - - jsonPath: .status.oemExpressUrl - name: Oem Express Url - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminPassword: - properties: - keepSecret: - type: boolean - secretKey: - default: oracle_pwd - type: string - secretName: - type: string - required: - - secretName - type: object - archiveLog: - type: boolean - charset: - type: string - convertToSnapshotStandby: - type: boolean - createAs: - enum: - - primary - - standby - - clone - - truecache - type: string - edition: - enum: - - standard - - enterprise - - express - - free - type: string - enableTCPS: - type: boolean - flashBack: - type: boolean - forceLog: - type: boolean - image: - properties: - prebuiltDB: - type: boolean - pullFrom: - type: string - pullSecrets: - type: string - version: - type: string - required: - - pullFrom - type: object - initParams: - properties: - cpuCount: - type: integer - pgaAggregateTarget: - type: integer - processes: - type: integer - sgaTarget: - type: integer - type: object - listenerPort: - type: integer - loadBalancer: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - pdbName: - type: string - persistence: - properties: - accessMode: - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - datafilesVolumeName: - type: string - scriptsVolumeName: - type: string - setWritePermissions: - type: boolean - size: - type: string - storageClass: - type: string - volumeClaimAnnotation: - type: string - type: object - primaryDatabaseRef: - type: string - readinessCheckPeriod: - type: integer - replicas: - type: integer - resources: - properties: - limits: - properties: - cpu: - type: string - memory: - type: string - type: object - requests: - properties: - cpu: - type: string - memory: - type: string - type: object - type: object - serviceAccountName: - type: string - serviceAnnotations: - additionalProperties: - type: string - type: object - sid: - maxLength: 12 - pattern: ^[a-zA-Z0-9]+$ - type: string - tcpsCertRenewInterval: - type: string - tcpsListenerPort: - type: integer - tcpsTlsSecret: - type: string - trueCacheServices: - items: - type: string - type: array - required: - - image - type: object - status: - properties: - apexInstalled: - type: boolean - archiveLog: - type: string - certCreationTimestamp: - type: string - certRenewInterval: - type: string - charset: - type: string - clientWalletLoc: - type: string - clusterConnectString: - type: string - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - connectString: - type: string - convertToSnapshotStandby: - type: boolean - createdAs: - type: string - datafilesCreated: - default: "false" - type: string - datafilesPatched: - default: "false" - type: string - dgBroker: - type: string - edition: - type: string - flashBack: - type: string - forceLog: - type: string - initParams: - properties: - cpuCount: - type: integer - pgaAggregateTarget: - type: integer - processes: - type: integer - sgaTarget: - type: integer - type: object - initPgaSize: - type: integer - initSgaSize: - type: integer - isTcpsEnabled: - default: false - type: boolean - nodes: - items: - type: string - type: array - oemExpressUrl: - type: string - ordsReference: - type: string - pdbConnectString: - type: string - pdbName: - type: string - persistence: - properties: - accessMode: - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - datafilesVolumeName: - type: string - scriptsVolumeName: - type: string - setWritePermissions: - type: boolean - size: - type: string - storageClass: - type: string - volumeClaimAnnotation: - type: string - type: object - prebuiltDB: - type: boolean - primaryDatabase: - type: string - releaseUpdate: - type: string - replicas: - type: integer - role: - type: string - sid: - type: string - standbyDatabases: - additionalProperties: - type: string - type: object - status: - type: string - tcpsConnectString: - type: string - tcpsPdbConnectString: - type: string - tcpsTlsSecret: - default: "" - type: string - required: - - isTcpsEnabled - - persistence - - tcpsTlsSecret - type: object - type: object - served: true - storage: false - subresources: - scale: - specReplicasPath: .spec.replicas - statusReplicasPath: .status.replicas - status: {} - - additionalPrinterColumns: - - jsonPath: .status.edition - name: Edition - type: string - - jsonPath: .status.sid - name: Sid - priority: 1 - type: string - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.role - name: Role - type: string - - jsonPath: .status.releaseUpdate - name: Version - type: string - - jsonPath: .status.connectString - name: Connect Str - type: string - - jsonPath: .status.pdbConnectString - name: Pdb Connect Str - priority: 1 - type: string - - jsonPath: .status.tcpsConnectString - name: TCPS Connect Str - type: string - - jsonPath: .status.tcpsPdbConnectString - name: TCPS Pdb Connect Str - priority: 1 - type: string - - jsonPath: .status.oemExpressUrl - name: Oem Express Url - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - adminPassword: - properties: - keepSecret: - type: boolean - secretKey: - default: oracle_pwd - type: string - secretName: - type: string - required: - - secretName - type: object - archiveLog: - type: boolean - charset: - type: string - convertToSnapshotStandby: - type: boolean - createAs: - enum: - - primary - - standby - - clone - - truecache - type: string - edition: - enum: - - standard - - enterprise - - express - - free - type: string - enableTCPS: - type: boolean - flashBack: - type: boolean - forceLog: - type: boolean - image: - properties: - prebuiltDB: - type: boolean - pullFrom: - type: string - pullSecrets: - type: string - version: - type: string - required: - - pullFrom - type: object - initParams: - properties: - cpuCount: - type: integer - pgaAggregateTarget: - type: integer - processes: - type: integer - sgaTarget: - type: integer - type: object - listenerPort: - type: integer - loadBalancer: - type: boolean - nodeSelector: - additionalProperties: - type: string - type: object - pdbName: - type: string - persistence: - properties: - accessMode: - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - datafilesVolumeName: - type: string - scriptsVolumeName: - type: string - setWritePermissions: - type: boolean - size: - type: string - storageClass: - type: string - volumeClaimAnnotation: - type: string - type: object - primaryDatabaseRef: - type: string - readinessCheckPeriod: - type: integer - replicas: - type: integer - resources: - properties: - limits: - properties: - cpu: - type: string - memory: - type: string - type: object - requests: - properties: - cpu: - type: string - memory: - type: string - type: object - type: object - serviceAccountName: - type: string - serviceAnnotations: - additionalProperties: - type: string - type: object - sid: - maxLength: 12 - pattern: ^[a-zA-Z0-9]+$ - type: string - tcpsCertRenewInterval: - type: string - tcpsListenerPort: - type: integer - tcpsTlsSecret: - type: string - trueCacheServices: - items: - type: string - type: array - required: - - image - type: object - status: - properties: - apexInstalled: - type: boolean - archiveLog: - type: string - certCreationTimestamp: - type: string - certRenewInterval: - type: string - charset: - type: string - clientWalletLoc: - type: string - clusterConnectString: - type: string - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - connectString: - type: string - convertToSnapshotStandby: - type: boolean - createdAs: - type: string - datafilesCreated: - default: "false" - type: string - datafilesPatched: - default: "false" - type: string - dgBroker: - type: string - edition: - type: string - flashBack: - type: string - forceLog: - type: string - initParams: - properties: - cpuCount: - type: integer - pgaAggregateTarget: - type: integer - processes: - type: integer - sgaTarget: - type: integer - type: object - initPgaSize: - type: integer - initSgaSize: - type: integer - isTcpsEnabled: - default: false - type: boolean - nodes: - items: - type: string - type: array - oemExpressUrl: - type: string - ordsReference: - type: string - pdbConnectString: - type: string - pdbName: - type: string - persistence: - properties: - accessMode: - enum: - - ReadWriteOnce - - ReadWriteMany - type: string - datafilesVolumeName: - type: string - scriptsVolumeName: - type: string - setWritePermissions: - type: boolean - size: - type: string - storageClass: - type: string - volumeClaimAnnotation: - type: string - type: object - prebuiltDB: - type: boolean - primaryDatabase: - type: string - releaseUpdate: - type: string - replicas: - type: integer - role: - type: string - sid: - type: string - standbyDatabases: - additionalProperties: - type: string - type: object - status: - type: string - tcpsConnectString: - type: string - tcpsPdbConnectString: - type: string - tcpsTlsSecret: - default: "" - type: string - required: - - isTcpsEnabled - - persistence - - tcpsTlsSecret - type: object - type: object - served: true - storage: true - subresources: - scale: - specReplicasPath: .spec.replicas - statusReplicasPath: .status.replicas - status: {} \ No newline at end of file diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/standalone-cert-manager-custom-ns.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/standalone-cert-manager-custom-ns.yaml deleted file mode 100644 index 003a695fd..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/standalone-cert-manager-custom-ns.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# USE-CASE 2: Standalone cert-manager in custom namespace -# -# Pre-requisite: Install cert-manager separately -# helm repo add jetstack https://charts.jetstack.io -# helm install cert-manager jetstack/cert-manager \ -# --namespace my-cert-manager --create-namespace \ -# --set crds.enabled=true -# -# Install operator: -# helm install oraop . -f examples/standalone-cert-manager-custom-ns.yaml - -cert-manager: - enabled: false - namespace: "my-cert-manager" - -certManagerWaitJob: - externalWebhookServiceName: "cert-manager-webhook" diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/standalone-cert-manager-default-ns.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/standalone-cert-manager-default-ns.yaml deleted file mode 100644 index a754558cd..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/standalone-cert-manager-default-ns.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# USE-CASE 1: Standalone cert-manager in "cert-manager" namespace -# -# Pre-requisite: Install cert-manager separately -# helm repo add jetstack https://charts.jetstack.io -# helm install cert-manager jetstack/cert-manager \ -# --namespace cert-manager --create-namespace \ -# --set crds.enabled=true -# -# Install operator: -# helm install oraop . -f examples/standalone-cert-manager-default-ns.yaml - -cert-manager: - enabled: false - namespace: "cert-manager" - -certManagerWaitJob: - externalWebhookServiceName: "cert-manager-webhook" diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/subchart-cert-manager-custom-ns.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/subchart-cert-manager-custom-ns.yaml deleted file mode 100644 index e035e75d1..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/subchart-cert-manager-custom-ns.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# USE-CASE 4: Subchart cert-manager in custom namespace -# -# Install operator (cert-manager installed automatically): -# helm install oraop . -f examples/subchart-cert-manager-custom-ns.yaml -# -# Or: -# helm install oraop . --set cert-manager.namespace=my-cert-manager - -cert-manager: - enabled: true - namespace: "my-cert-manager" - crds: - enabled: true diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/subchart-cert-manager-default-ns.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/subchart-cert-manager-default-ns.yaml deleted file mode 100644 index 096596c2c..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/examples/subchart-cert-manager-default-ns.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# USE-CASE 3: Subchart cert-manager in "cert-manager" namespace (default) -# -# Install operator (cert-manager installed automatically): -# helm install oraop . -f examples/subchart-cert-manager-default-ns.yaml -# -# Or simply: -# helm install oraop . - -cert-manager: - enabled: true - namespace: "cert-manager" - crds: - enabled: true diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/NOTES.txt b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/NOTES.txt deleted file mode 100644 index 7062b8d81..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/NOTES.txt +++ /dev/null @@ -1,14 +0,0 @@ -Oracle Database Operator has been installed. - -Namespace: {{ include "oracle-database-operator.namespace" . }} - -To verify the installation: - - kubectl -n {{ include "oracle-database-operator.namespace" . }} get all - -To check the operator logs: - - kubectl -n {{ include "oracle-database-operator.namespace" . }} logs -l control-plane=controller-manager -f - -For more information, visit: - https://github.com/oracle/oracle-database-operator diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/_helpers.tpl b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/_helpers.tpl deleted file mode 100644 index 2353a9225..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/_helpers.tpl +++ /dev/null @@ -1,155 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "oracle-database-operator.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -*/}} -{{- define "oracle-database-operator.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "oracle-database-operator.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Namespace for operator resources -Defaults to release namespace, can be overridden via .Values.namespace -*/}} -{{- define "oracle-database-operator.namespace" -}} -{{- default .Release.Namespace .Values.namespace }} -{{- end }} - -{{/* -Namespace for cert-manager -Defaults to release namespace, can be overridden via cert-manager.namespace -*/}} -{{- define "oracle-database-operator.certManagerNamespace" -}} -{{- default .Release.Namespace (index .Values "cert-manager" "namespace") }} -{{- end }} - -{{/* -cert-manager webhook service name -When subchart: uses release name prefix -When external: uses externalWebhookServiceName -*/}} -{{- define "oracle-database-operator.certManagerWebhookService" -}} -{{- if index .Values "cert-manager" "enabled" -}} -{{- printf "%s-cert-manager-webhook" .Release.Name -}} -{{- else -}} -{{- .Values.certManagerWaitJob.externalWebhookServiceName | default "cert-manager-webhook" -}} -{{- end -}} -{{- end }} - -{{/* -cert-manager ValidatingWebhookConfiguration name -When subchart: uses release name prefix -When external: uses default cert-manager-webhook -*/}} -{{- define "oracle-database-operator.certManagerWebhookConfig" -}} -{{- if index .Values "cert-manager" "enabled" -}} -{{- printf "%s-cert-manager-webhook" .Release.Name -}} -{{- else -}} -cert-manager-webhook -{{- end -}} -{{- end }} - -{{/* -Validate namespace-scoped configuration. -Fails if scope.mode is "namespace" but watchNamespaces is empty. -*/}} -{{- define "oracle-database-operator.validateScopeConfig" -}} -{{- if and (eq .Values.scope.mode "namespace") (empty .Values.scope.watchNamespaces) -}} -{{- fail "scope.watchNamespaces must not be empty when scope.mode is 'namespace'. Specify at least one namespace to watch." -}} -{{- end -}} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "oracle-database-operator.labels" -}} -helm.sh/chart: {{ include "oracle-database-operator.chart" . }} -{{ include "oracle-database-operator.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "oracle-database-operator.selectorLabels" -}} -app.kubernetes.io/name: {{ include "oracle-database-operator.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -control-plane: controller-manager -{{- end }} - -{{/* -Service account name -*/}} -{{- define "oracle-database-operator.serviceAccountName" -}} -{{- if .Values.serviceAccount.name }} -{{- .Values.serviceAccount.name }} -{{- else }} -{{- "default" }} -{{- end }} -{{- end }} - -{{/* -Controller manager image -*/}} -{{- define "oracle-database-operator.image" -}} -{{- printf "%s:%s" .Values.image.repository .Values.image.tag }} -{{- end }} - -{{/* -Webhook service name -*/}} -{{- define "oracle-database-operator.webhookServiceName" -}} -{{- printf "%s-webhook-service" (include "oracle-database-operator.name" .) }} -{{- end }} - -{{/* -Metrics service name -*/}} -{{- define "oracle-database-operator.metricsServiceName" -}} -{{- printf "%s-controller-manager-metrics-service" (include "oracle-database-operator.name" .) }} -{{- end }} - -{{/* -Certificate name -*/}} -{{- define "oracle-database-operator.certificateName" -}} -{{- printf "%s-serving-cert" (include "oracle-database-operator.name" .) }} -{{- end }} - -{{/* -Issuer name -*/}} -{{- define "oracle-database-operator.issuerName" -}} -{{- printf "%s-selfsigned-issuer" (include "oracle-database-operator.name" .) }} -{{- end }} - -{{/* -Cert-manager inject annotation value -*/}} -{{- define "oracle-database-operator.certManagerInjectAnnotation" -}} -{{- printf "%s/%s" (include "oracle-database-operator.namespace" .) (include "oracle-database-operator.certificateName" .) }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/cert-manager-namespace.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/cert-manager-namespace.yaml deleted file mode 100644 index 39520a76c..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/cert-manager-namespace.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{- if index .Values "cert-manager" "enabled" }} -{{- $ns := index .Values "cert-manager" "namespace" }} -{{- if and $ns (ne $ns $.Release.Namespace) }} -apiVersion: v1 -kind: Namespace -metadata: - name: {{ $ns }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -{{- end }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/certificate.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/certificate.yaml deleted file mode 100644 index f5a9a1eb3..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/certificate.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: {{ include "oracle-database-operator.certificateName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -spec: - dnsNames: - - {{ include "oracle-database-operator.webhookServiceName" . }}.{{ include "oracle-database-operator.namespace" . }}.svc - - {{ include "oracle-database-operator.webhookServiceName" . }}.{{ include "oracle-database-operator.namespace" . }}.svc.cluster.local - issuerRef: - kind: Issuer - name: {{ include "oracle-database-operator.issuerName" . }} - secretName: webhook-server-cert - privateKey: - rotationPolicy: Always diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/clusterrole.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/clusterrole.yaml deleted file mode 100644 index 941473563..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/clusterrole.yaml +++ /dev/null @@ -1,358 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-manager-role - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -# Core API group resources -- apiGroups: - - "" - resources: - - configmaps - - containers - - deployments - - endpoints - - events - - namespaces - - persistentvolumeclaim - - persistentvolumeclaims - - persistentvolumes - - pods - - pods/exec - - pods/log - - replicasets - - secrets - - services - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - "" - resources: - - configmaps/status - - daemonsets/status - - deployments/status - - persistentvolumeclaim/status - - services/status - - statefulsets/status - verbs: - - get - - patch - - update -- apiGroups: - - "" - resources: - - secrets/status - verbs: - - get -- apiGroups: - - '''''' - resources: - - statefulsets/finalizers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - apps - resources: - - configmaps - verbs: - - get - - list -- apiGroups: - - apps - resources: - - daemonsets - - deployments - - pods - - replicasets - - services - - statefulsets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - create - - get - - list - - update -- apiGroups: - - database.oracle.com - resources: - - autonomouscontainerdatabases - - autonomousdatabases - - dataguardbrokers - - dbcssystems - - events - - lrests - - lrpdbs - - oraclerestarts - - oraclerestdataservices - - ordssrvs - - racdatabases - - shardingdatabases - - singleinstancedatabases - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - database.oracle.com - resources: - - autonomouscontainerdatabases/status - - autonomousdatabasebackups/status - - autonomousdatabaserestores/status - - dataguardbrokers/status - - dbcssystems/status - - lrests/status - - lrpdbs/status - - oraclerestarts/status - - oraclerestdataservices/status - - ordssrvs/status - - racdatabases/status - - shardingdatabases/status - - singleinstancedatabases/status - verbs: - - get - - patch - - update -- apiGroups: - - database.oracle.com - resources: - - autonomousdatabasebackups - - autonomousdatabaserestores - verbs: - - create - - delete - - get - - list - - update - - watch -- apiGroups: - - database.oracle.com - resources: - - autonomousdatabases/status - verbs: - - patch - - update -- apiGroups: - - database.oracle.com - resources: - - dataguardbrokers/finalizers - - lrests/finalizers - - oraclerestdataservices/finalizers - - ordssrvs/finalizers - - singleinstancedatabases/finalizers - verbs: - - update -- apiGroups: - - database.oracle.com - resources: - - dbcssystems/finalizers - - lrpdbs/configmaps - - lrpdbs/finalizers - - oraclerestarts/finalizers - - racdatabases/finalizers - - shardingdatabases/finalizers - verbs: - - create - - delete - - get - - patch - - update -- apiGroups: - - monitoring.coreos.com - resources: - - servicemonitors - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - observability.oracle.com - resources: - - databaseobservers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - observability.oracle.com - resources: - - databaseobservers/finalizers - verbs: - - update -- apiGroups: - - observability.oracle.com - resources: - - databaseobservers/status - verbs: - - get - - patch - - update -- apiGroups: - - privateai.oracle.com - resources: - - privateais - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - privateai.oracle.com - resources: - - privateais/finalizers - verbs: - - update -- apiGroups: - - privateai.oracle.com - resources: - - privateais/status - verbs: - - get - - patch - - update -- apiGroups: - - storage.k8s.io - resources: - - storageclasses - verbs: - - get - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-metrics-reader - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- nonResourceURLs: - - /metrics - verbs: - - get ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-proxy-role - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- apiGroups: - - authentication.k8s.io - resources: - - tokenreviews - verbs: - - create -- apiGroups: - - authorization.k8s.io - resources: - - subjectaccessreviews - verbs: - - create ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-privateai-privateai-admin-role - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- apiGroups: - - privateai.oracle.com - resources: - - privateais - verbs: - - '*' -- apiGroups: - - privateai.oracle.com - resources: - - privateais/status - verbs: - - get ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-privateai-privateai-editor-role - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- apiGroups: - - privateai.oracle.com - resources: - - privateais - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - privateai.oracle.com - resources: - - privateais/status - verbs: - - get ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-privateai-privateai-viewer-role - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- apiGroups: - - privateai.oracle.com - resources: - - privateais - verbs: - - get - - list - - watch -- apiGroups: - - privateai.oracle.com - resources: - - privateais/status - verbs: - - get \ No newline at end of file diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/clusterrolebinding.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/clusterrolebinding.yaml deleted file mode 100644 index 610242db7..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/clusterrolebinding.yaml +++ /dev/null @@ -1,32 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ include "oracle-database-operator.name" . }}-proxy-rolebinding - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ include "oracle-database-operator.name" . }}-proxy-role -subjects: -- kind: ServiceAccount - name: {{ include "oracle-database-operator.serviceAccountName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} -{{- if eq .Values.scope.mode "cluster" }} ---- -# ClusterRoleBinding for cluster-scoped deployment (watch all namespaces) -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ include "oracle-database-operator.name" . }}-manager-rolebinding - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ include "oracle-database-operator.name" . }}-manager-role -subjects: -- kind: ServiceAccount - name: {{ include "oracle-database-operator.serviceAccountName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomouscontainerdatabases.database.oracle.com.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomouscontainerdatabases.database.oracle.com.yaml deleted file mode 100644 index ec92b776f..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomouscontainerdatabases.database.oracle.com.yaml +++ /dev/null @@ -1,172 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: {{ include "oracle-database-operator.certManagerInjectAnnotation" . }} - controller-gen.kubebuilder.io/version: v0.18.0 - name: autonomouscontainerdatabases.database.oracle.com -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1 - - v4 - group: database.oracle.com - names: - kind: AutonomousContainerDatabase - listKind: AutonomousContainerDatabaseList - plural: autonomouscontainerdatabases - shortNames: - - acd - - acds - singular: autonomouscontainerdatabase - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .spec.displayName - name: DisplayName - type: string - - jsonPath: .status.lifecycleState - name: State - type: string - - jsonPath: .status.timeCreated - name: Created - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - action: - enum: - - SYNC - - RESTART - - TERMINATE - type: string - autonomousContainerDatabaseOCID: - type: string - autonomousExadataVMClusterOCID: - type: string - compartmentOCID: - type: string - displayName: - type: string - freeformTags: - additionalProperties: - type: string - type: object - hardLink: - default: false - type: boolean - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - patchModel: - enum: - - RELEASE_UPDATES - - RELEASE_UPDATE_REVISIONS - type: string - type: object - status: - properties: - lifecycleState: - type: string - timeCreated: - type: string - required: - - lifecycleState - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .spec.displayName - name: DisplayName - type: string - - jsonPath: .status.lifecycleState - name: State - type: string - - jsonPath: .status.timeCreated - name: Created - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - action: - enum: - - SYNC - - RESTART - - TERMINATE - type: string - autonomousContainerDatabaseOCID: - type: string - autonomousExadataVMClusterOCID: - type: string - compartmentOCID: - type: string - displayName: - type: string - freeformTags: - additionalProperties: - type: string - type: object - hardLink: - default: false - type: boolean - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - patchModel: - enum: - - RELEASE_UPDATES - - RELEASE_UPDATE_REVISIONS - type: string - type: object - status: - properties: - lifecycleState: - type: string - timeCreated: - type: string - required: - - lifecycleState - type: object - type: object - served: true - storage: true - subresources: - status: {} - diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabasebackups.database.oracle.com.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabasebackups.database.oracle.com.yaml deleted file mode 100644 index 6e4c86153..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabasebackups.database.oracle.com.yaml +++ /dev/null @@ -1,213 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: {{ include "oracle-database-operator.certManagerInjectAnnotation" . }} - controller-gen.kubebuilder.io/version: v0.18.0 - name: autonomousdatabasebackups.database.oracle.com -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1 - - v4 - group: database.oracle.com - names: - kind: AutonomousDatabaseBackup - listKind: AutonomousDatabaseBackupList - plural: autonomousdatabasebackups - shortNames: - - adbbu - - adbbus - singular: autonomousdatabasebackup - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.lifecycleState - name: State - type: string - - jsonPath: .status.dbDisplayName - name: DB DisplayName - type: string - - jsonPath: .status.type - name: Type - type: string - - jsonPath: .status.timeStarted - name: Started - type: string - - jsonPath: .status.timeEnded - name: Ended - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - autonomousDatabaseBackupOCID: - type: string - displayName: - type: string - isLongTermBackup: - type: boolean - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - retentionPeriodInDays: - type: integer - target: - properties: - k8sAdb: - properties: - name: - type: string - type: object - ociAdb: - properties: - id: - type: string - type: object - type: object - type: object - status: - properties: - autonomousDatabaseOCID: - type: string - compartmentOCID: - type: string - dbDisplayName: - type: string - dbName: - type: string - isAutomatic: - type: boolean - lifecycleState: - type: string - timeEnded: - type: string - timeStarted: - type: string - type: - type: string - required: - - autonomousDatabaseOCID - - compartmentOCID - - dbDisplayName - - dbName - - isAutomatic - - lifecycleState - - type - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.lifecycleState - name: State - type: string - - jsonPath: .status.dbDisplayName - name: DB DisplayName - type: string - - jsonPath: .status.type - name: Type - type: string - - jsonPath: .status.timeStarted - name: Started - type: string - - jsonPath: .status.timeEnded - name: Ended - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - autonomousDatabaseBackupOCID: - type: string - displayName: - type: string - isLongTermBackup: - type: boolean - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - retentionPeriodInDays: - type: integer - target: - properties: - k8sAdb: - properties: - name: - type: string - type: object - ociAdb: - properties: - id: - type: string - type: object - type: object - type: object - status: - properties: - autonomousDatabaseOCID: - type: string - compartmentOCID: - type: string - dbDisplayName: - type: string - dbName: - type: string - isAutomatic: - type: boolean - lifecycleState: - type: string - timeEnded: - type: string - timeStarted: - type: string - type: - type: string - required: - - autonomousDatabaseOCID - - compartmentOCID - - dbDisplayName - - dbName - - isAutomatic - - lifecycleState - - type - type: object - type: object - served: true - storage: true - subresources: - status: {} \ No newline at end of file diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabaserestores.database.oracle.com.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabaserestores.database.oracle.com.yaml deleted file mode 100644 index de47b4fe7..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabaserestores.database.oracle.com.yaml +++ /dev/null @@ -1,203 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: {{ include "oracle-database-operator.certManagerInjectAnnotation" . }} - controller-gen.kubebuilder.io/version: v0.18.0 - name: autonomousdatabaserestores.database.oracle.com -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1 - - v4 - group: database.oracle.com - names: - kind: AutonomousDatabaseRestore - listKind: AutonomousDatabaseRestoreList - plural: autonomousdatabaserestores - shortNames: - - adbr - - adbrs - singular: autonomousdatabaserestore - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.displayName - name: DbDisplayName - type: string - - jsonPath: .status.dbName - name: DbName - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - source: - properties: - k8sAdbBackup: - properties: - name: - type: string - type: object - pointInTime: - properties: - timestamp: - type: string - type: object - type: object - target: - properties: - k8sAdb: - properties: - name: - type: string - type: object - ociAdb: - properties: - id: - type: string - type: object - type: object - required: - - source - - target - type: object - status: - properties: - dbName: - type: string - displayName: - type: string - status: - type: string - timeAccepted: - type: string - timeEnded: - type: string - timeStarted: - type: string - workRequestOCID: - type: string - required: - - dbName - - displayName - - status - - workRequestOCID - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .status.status - name: Status - type: string - - jsonPath: .status.displayName - name: DbDisplayName - type: string - - jsonPath: .status.dbName - name: DbName - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - source: - properties: - k8sAdbBackup: - properties: - name: - type: string - type: object - pointInTime: - properties: - timestamp: - type: string - type: object - type: object - target: - properties: - k8sAdb: - properties: - name: - type: string - type: object - ociAdb: - properties: - id: - type: string - type: object - type: object - required: - - source - - target - type: object - status: - properties: - dbName: - type: string - displayName: - type: string - status: - type: string - timeAccepted: - type: string - timeEnded: - type: string - timeStarted: - type: string - workRequestOCID: - type: string - required: - - dbName - - displayName - - status - - workRequestOCID - type: object - type: object - served: true - storage: true - subresources: - status: {} \ No newline at end of file diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabases.database.oracle.com.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabases.database.oracle.com.yaml deleted file mode 100644 index 868acc762..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/crds/autonomousdatabases.database.oracle.com.yaml +++ /dev/null @@ -1,705 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - cert-manager.io/inject-ca-from: {{ include "oracle-database-operator.certManagerInjectAnnotation" . }} - controller-gen.kubebuilder.io/version: v0.18.0 - name: autonomousdatabases.database.oracle.com -spec: - conversion: - strategy: Webhook - webhook: - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - path: /convert - conversionReviewVersions: - - v1alpha1 - - v1 - - v4 - group: database.oracle.com - names: - kind: AutonomousDatabase - listKind: AutonomousDatabaseList - plural: autonomousdatabases - shortNames: - - adb - - adbs - singular: autonomousdatabase - scope: Namespaced - versions: - - additionalPrinterColumns: - - jsonPath: .spec.details.displayName - name: Display Name - type: string - - jsonPath: .spec.details.dbName - name: Db Name - type: string - - jsonPath: .status.lifecycleState - name: State - type: string - - jsonPath: .spec.details.isDedicated - name: Dedicated - type: string - - jsonPath: .spec.details.computeCount - name: Compute Count - type: number - - jsonPath: .spec.details.dataStorageSizeInTBs - name: Storage (TB) - type: integer - - jsonPath: .spec.details.dbWorkload - name: Workload Type - type: string - - jsonPath: .status.timeCreated - name: Created - type: string - name: v1alpha1 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - action: - enum: - - "" - - Create - - Sync - - Update - - Stop - - Start - - Terminate - - Clone - - Switchover - - Failover - type: string - clone: - properties: - adminPassword: - properties: - k8sSecret: - properties: - name: - type: string - type: object - ociSecret: - properties: - id: - type: string - type: object - type: object - autonomousContainerDatabase: - properties: - k8sAcd: - properties: - name: - type: string - type: object - ociAcd: - properties: - id: - type: string - type: object - type: object - cloneType: - enum: - - FULL - - METADATA - type: string - compartmentId: - type: string - computeCount: - type: number - computeModel: - enum: - - ECPU - - OCPU - type: string - cpuCoreCount: - type: integer - dataStorageSizeInTBs: - type: integer - dbName: - type: string - dbVersion: - type: string - dbWorkload: - enum: - - OLTP - - DW - - AJD - - APEX - - LH - type: string - displayName: - type: string - freeformTags: - additionalProperties: - type: string - type: object - isAccessControlEnabled: - type: boolean - isAutoScalingEnabled: - type: boolean - isDedicated: - type: boolean - isFreeTier: - type: boolean - isMtlsConnectionRequired: - type: boolean - licenseModel: - enum: - - LICENSE_INCLUDED - - BRING_YOUR_OWN_LICENSE - type: string - nsgIds: - items: - type: string - type: array - ocpuCount: - type: number - privateEndpointLabel: - type: string - subnetId: - type: string - whitelistedIps: - items: - type: string - type: array - type: object - details: - properties: - adminPassword: - properties: - k8sSecret: - properties: - name: - type: string - type: object - ociSecret: - properties: - id: - type: string - type: object - type: object - autonomousContainerDatabase: - properties: - k8sAcd: - properties: - name: - type: string - type: object - ociAcd: - properties: - id: - type: string - type: object - type: object - compartmentId: - type: string - computeCount: - type: number - computeModel: - enum: - - ECPU - - OCPU - type: string - cpuCoreCount: - type: integer - dataStorageSizeInTBs: - type: integer - dbName: - type: string - dbVersion: - type: string - dbWorkload: - enum: - - OLTP - - DW - - AJD - - APEX - - LH - type: string - displayName: - type: string - freeformTags: - additionalProperties: - type: string - type: object - id: - type: string - isAccessControlEnabled: - type: boolean - isAutoScalingEnabled: - type: boolean - isDedicated: - type: boolean - isFreeTier: - type: boolean - isMtlsConnectionRequired: - type: boolean - licenseModel: - enum: - - LICENSE_INCLUDED - - BRING_YOUR_OWN_LICENSE - type: string - nsgIds: - items: - type: string - type: array - ocpuCount: - type: number - privateEndpointLabel: - type: string - subnetId: - type: string - whitelistedIps: - items: - type: string - type: array - type: object - hardLink: - default: false - type: boolean - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - wallet: - properties: - name: - type: string - password: - properties: - k8sSecret: - properties: - name: - type: string - type: object - ociSecret: - properties: - id: - type: string - type: object - type: object - type: object - required: - - action - type: object - status: - properties: - allConnectionStrings: - items: - properties: - connectionStrings: - items: - properties: - connectionString: - type: string - tnsName: - type: string - type: object - type: array - tlsAuthentication: - type: string - required: - - connectionStrings - type: object - type: array - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - lifecycleState: - type: string - timeCreated: - type: string - walletExpiringDate: - type: string - type: object - type: object - served: true - storage: false - subresources: - status: {} - - additionalPrinterColumns: - - jsonPath: .spec.details.displayName - name: Display Name - type: string - - jsonPath: .spec.details.dbName - name: Db Name - type: string - - jsonPath: .status.lifecycleState - name: State - type: string - - jsonPath: .spec.details.isDedicated - name: Dedicated - type: string - - jsonPath: .spec.details.computeCount - name: Compute Count - type: number - - jsonPath: .spec.details.dataStorageSizeInTBs - name: Storage (TB) - type: integer - - jsonPath: .spec.details.dbWorkload - name: Workload Type - type: string - - jsonPath: .status.timeCreated - name: Created - type: string - name: v4 - schema: - openAPIV3Schema: - properties: - apiVersion: - type: string - kind: - type: string - metadata: - type: object - spec: - properties: - action: - enum: - - "" - - Create - - Sync - - Update - - Stop - - Start - - Terminate - - Clone - - Switchover - - Failover - type: string - clone: - properties: - adminPassword: - properties: - k8sSecret: - properties: - name: - type: string - type: object - ociSecret: - properties: - id: - type: string - type: object - type: object - autonomousContainerDatabase: - properties: - k8sAcd: - properties: - name: - type: string - type: object - ociAcd: - properties: - id: - type: string - type: object - type: object - cloneType: - enum: - - FULL - - METADATA - type: string - compartmentId: - type: string - computeCount: - type: number - computeModel: - enum: - - ECPU - - OCPU - type: string - cpuCoreCount: - type: integer - dataStorageSizeInTBs: - type: integer - dbName: - type: string - dbVersion: - type: string - dbWorkload: - enum: - - OLTP - - DW - - AJD - - APEX - - LH - type: string - displayName: - type: string - freeformTags: - additionalProperties: - type: string - type: object - isAccessControlEnabled: - type: boolean - isAutoScalingEnabled: - type: boolean - isDedicated: - type: boolean - isFreeTier: - type: boolean - isMtlsConnectionRequired: - type: boolean - licenseModel: - enum: - - LICENSE_INCLUDED - - BRING_YOUR_OWN_LICENSE - type: string - nsgIds: - items: - type: string - type: array - ocpuCount: - type: number - privateEndpointLabel: - type: string - subnetId: - type: string - whitelistedIps: - items: - type: string - type: array - type: object - details: - properties: - adminPassword: - properties: - k8sSecret: - properties: - name: - type: string - type: object - ociSecret: - properties: - id: - type: string - type: object - type: object - autonomousContainerDatabase: - properties: - k8sAcd: - properties: - name: - type: string - type: object - ociAcd: - properties: - id: - type: string - type: object - type: object - compartmentId: - type: string - computeCount: - type: number - computeModel: - enum: - - ECPU - - OCPU - type: string - cpuCoreCount: - type: integer - dataStorageSizeInTBs: - type: integer - dbName: - type: string - dbVersion: - type: string - dbWorkload: - enum: - - OLTP - - DW - - AJD - - APEX - - LH - type: string - displayName: - type: string - freeformTags: - additionalProperties: - type: string - type: object - id: - type: string - isAccessControlEnabled: - type: boolean - isAutoScalingEnabled: - type: boolean - isDedicated: - type: boolean - isFreeTier: - type: boolean - isMtlsConnectionRequired: - type: boolean - licenseModel: - enum: - - LICENSE_INCLUDED - - BRING_YOUR_OWN_LICENSE - type: string - nsgIds: - items: - type: string - type: array - ocpuCount: - type: number - privateEndpointLabel: - type: string - subnetId: - type: string - whitelistedIps: - items: - type: string - type: array - type: object - hardLink: - default: false - type: boolean - ociConfig: - properties: - configMapName: - type: string - secretName: - type: string - type: object - wallet: - properties: - name: - type: string - password: - properties: - k8sSecret: - properties: - name: - type: string - type: object - ociSecret: - properties: - id: - type: string - type: object - type: object - type: object - required: - - action - type: object - status: - properties: - allConnectionStrings: - items: - properties: - connectionStrings: - items: - properties: - connectionString: - type: string - tnsName: - type: string - type: object - type: array - tlsAuthentication: - type: string - required: - - connectionStrings - type: object - type: array - conditions: - items: - properties: - lastTransitionTime: - format: date-time - type: string - message: - maxLength: 32768 - type: string - observedGeneration: - format: int64 - minimum: 0 - type: integer - reason: - maxLength: 1024 - minLength: 1 - pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ - type: string - status: - enum: - - "True" - - "False" - - Unknown - type: string - type: - maxLength: 316 - pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ - type: string - required: - - lastTransitionTime - - message - - reason - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - lifecycleState: - type: string - timeCreated: - type: string - walletExpiringDate: - type: string - type: object - type: object - served: true - storage: true - subresources: - status: {} \ No newline at end of file diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/deployment.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/deployment.yaml deleted file mode 100644 index 0bb8ea4f0..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/deployment.yaml +++ /dev/null @@ -1,114 +0,0 @@ -{{- include "oracle-database-operator.validateScopeConfig" . -}} -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "oracle-database-operator.name" . }}-controller-manager - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -spec: - replicas: {{ .Values.replicas }} - selector: - matchLabels: - {{- include "oracle-database-operator.selectorLabels" . | nindent 6 }} - template: - metadata: - labels: - {{- include "oracle-database-operator.selectorLabels" . | nindent 8 }} - spec: - securityContext: - runAsNonRoot: true - seccompProfile: - type: RuntimeDefault - serviceAccountName: {{ include "oracle-database-operator.serviceAccountName" . }} - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- if or .Values.affinity (gt (int .Values.replicas) 1) }} - affinity: - {{- if .Values.affinity }} - {{- toYaml .Values.affinity | nindent 8 }} - {{- else }} - podAntiAffinity: - preferredDuringSchedulingIgnoredDuringExecution: - - weight: 100 - podAffinityTerm: - labelSelector: - matchLabels: - {{- include "oracle-database-operator.selectorLabels" . | nindent 18 }} - topologyKey: kubernetes.io/hostname - {{- end }} - {{- end }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - containers: - - name: manager - image: {{ include "oracle-database-operator.image" . }} - imagePullPolicy: {{ .Values.image.pullPolicy }} - command: - - /manager - args: - {{- if .Values.leaderElection }} - - --enable-leader-election - {{- end }} - env: - - name: WATCH_NAMESPACE - {{- if eq .Values.scope.mode "namespace" }} - value: {{ .Values.scope.watchNamespaces | join "," | quote }} - {{- else }} - value: "" - {{- end }} - {{- with .Values.extraEnv }} - {{- toYaml . | nindent 8 }} - {{- end }} - ports: - - containerPort: {{ .Values.webhook.port | default 9443 }} - name: webhook-server - protocol: TCP - - containerPort: 8080 - name: metrics - protocol: TCP - livenessProbe: - httpGet: - path: /metrics - port: 8080 - scheme: HTTP - initialDelaySeconds: {{ .Values.probes.liveness.initialDelaySeconds | default 15 }} - periodSeconds: {{ .Values.probes.liveness.periodSeconds | default 20 }} - timeoutSeconds: {{ .Values.probes.liveness.timeoutSeconds | default 3 }} - failureThreshold: {{ .Values.probes.liveness.failureThreshold | default 3 }} - readinessProbe: - httpGet: - path: /metrics - port: 8080 - scheme: HTTP - initialDelaySeconds: {{ .Values.probes.readiness.initialDelaySeconds | default 5 }} - periodSeconds: {{ .Values.probes.readiness.periodSeconds | default 10 }} - timeoutSeconds: {{ .Values.probes.readiness.timeoutSeconds | default 3 }} - failureThreshold: {{ .Values.probes.readiness.failureThreshold | default 3 }} - resources: - {{- toYaml .Values.resources | nindent 10 }} - securityContext: - allowPrivilegeEscalation: false - capabilities: - drop: - - ALL - readOnlyRootFilesystem: false - runAsUser: 1002 - volumeMounts: - - mountPath: /tmp/k8s-webhook-server/serving-certs - name: cert - readOnly: true - terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds | default 10 }} - volumes: - - name: cert - secret: - defaultMode: 420 - secretName: {{ .Values.webhook.certificateSecretName | default "webhook-server-cert" }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/issuer.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/issuer.yaml deleted file mode 100644 index 473ff50af..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/issuer.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: {{ include "oracle-database-operator.issuerName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -spec: - selfSigned: {} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/mutatingwebhookconfiguration.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/mutatingwebhookconfiguration.yaml deleted file mode 100644 index b08447e3e..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/mutatingwebhookconfiguration.yaml +++ /dev/null @@ -1,257 +0,0 @@ -apiVersion: admissionregistration.k8s.io/v1 -kind: MutatingWebhookConfiguration -metadata: - annotations: - cert-manager.io/inject-ca-from: {{ include "oracle-database-operator.certManagerInjectAnnotation" . }} - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "3" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded - name: {{ include "oracle-database-operator.name" . }}-mutating-webhook-configuration - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -webhooks: -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-dbcssystem - failurePolicy: Fail - name: mdbcssystemv4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - dbcssystems - sideEffects: None -- admissionReviewVersions: - - v4 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-lrest - failurePolicy: Fail - name: mlrest.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - lrests - sideEffects: None -- admissionReviewVersions: - - v4 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-lrpdb - failurePolicy: Fail - name: mlrpdb.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - lrpdbs - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-oraclerestart - failurePolicy: Fail - name: moraclerestart.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - oraclerestarts - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-racdatabase - failurePolicy: Fail - name: mracdatabase.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - racdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-shardingdatabase - failurePolicy: Fail - name: mshardingdatabasev4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - shardingdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v1alpha1-dataguardbroker - failurePolicy: Fail - name: mdataguardbroker.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - dataguardbrokers - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v4-dbcssystem - failurePolicy: Fail - name: mdbcssystemv1alpha1.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - dbcssystems - sideEffects: None -- admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v1alpha1-oraclerestdataservice - failurePolicy: Fail - name: moraclerestdataservice.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - oraclerestdataservices - sideEffects: None -- admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-database-oracle-com-v1alpha1-singleinstancedatabase - failurePolicy: Fail - name: msingleinstancedatabase.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - singleinstancedatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-observability-oracle-com-v4-databaseobserver - failurePolicy: Fail - name: mdatabaseobserver.kb.io - rules: - - apiGroups: - - observability.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - databaseobservers - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /mutate-privateai-oracle-com-v4-privateai - failurePolicy: Fail - name: mprivateai-v4.kb.io - rules: - - apiGroups: - - privateai.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - privateais - sideEffects: None diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/namespace.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/namespace.yaml deleted file mode 100644 index 3338cf1a9..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/namespace.yaml +++ /dev/null @@ -1,8 +0,0 @@ -{{- if and .Values.namespace (ne .Values.namespace .Release.Namespace) }} -apiVersion: v1 -kind: Namespace -metadata: - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} - name: {{ .Values.namespace }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/node-rbac.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/node-rbac.yaml deleted file mode 100644 index 10d63e63b..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/node-rbac.yaml +++ /dev/null @@ -1,32 +0,0 @@ -{{- if .Values.rbac.nodeAccess }} -# ClusterRole for NodePort services - grants permission to list/watch nodes -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "oracle-database-operator.name" . }}-manager-role-node - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- apiGroups: - - "" - resources: - - nodes - verbs: - - list - - watch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ include "oracle-database-operator.name" . }}-manager-role-node-binding - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ include "oracle-database-operator.name" . }}-manager-role-node -subjects: -- kind: ServiceAccount - name: {{ include "oracle-database-operator.serviceAccountName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/oci-credentials.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/oci-credentials.yaml deleted file mode 100644 index 89383d646..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/oci-credentials.yaml +++ /dev/null @@ -1,18 +0,0 @@ -{{- if and (not .Values.ociCredentials.existingSecretName) .Values.ociCredentials.tenancy }} -apiVersion: v1 -kind: Secret -metadata: - name: oci-cred - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -type: Opaque -stringData: - tenancy: {{ .Values.ociCredentials.tenancy | quote }} - user: {{ .Values.ociCredentials.user | quote }} - fingerprint: {{ .Values.ociCredentials.fingerprint | quote }} - region: {{ .Values.ociCredentials.region | quote }} - {{- if .Values.ociCredentials.passphrase }} - passphrase: {{ .Values.ociCredentials.passphrase | quote }} - {{- end }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/poddisruptionbudget.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/poddisruptionbudget.yaml deleted file mode 100644 index a5e1cba54..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/poddisruptionbudget.yaml +++ /dev/null @@ -1,20 +0,0 @@ -{{- if and .Values.pdb.enabled (gt (int .Values.replicas) 1) }} -apiVersion: policy/v1 -kind: PodDisruptionBudget -metadata: - name: {{ include "oracle-database-operator.name" . }}-controller-manager - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -spec: - {{- if .Values.pdb.minAvailable }} - minAvailable: {{ .Values.pdb.minAvailable }} - {{- else if .Values.pdb.maxUnavailable }} - maxUnavailable: {{ .Values.pdb.maxUnavailable }} - {{- else }} - minAvailable: 1 - {{- end }} - selector: - matchLabels: - {{- include "oracle-database-operator.selectorLabels" . | nindent 6 }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/role.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/role.yaml deleted file mode 100644 index c50524aed..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/role.yaml +++ /dev/null @@ -1,47 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: {{ include "oracle-database-operator.name" . }}-leader-election-role - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -rules: -- apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - coordination.k8s.io - resources: - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete -- apiGroups: - - "" - resources: - - configmaps/status - verbs: - - get - - update - - patch -- apiGroups: - - "" - resources: - - events - verbs: - - create - - patch diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/rolebinding.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/rolebinding.yaml deleted file mode 100644 index 571a3e132..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/rolebinding.yaml +++ /dev/null @@ -1,54 +0,0 @@ -# Leader election RoleBinding (always required in operator namespace) -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: {{ include "oracle-database-operator.name" . }}-leader-election-rolebinding - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: {{ include "oracle-database-operator.name" . }}-leader-election-role -subjects: -- kind: ServiceAccount - name: {{ include "oracle-database-operator.serviceAccountName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} ---- -# Manager RoleBinding in operator namespace (always required) -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: {{ include "oracle-database-operator.name" . }}-manager-rolebinding - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ include "oracle-database-operator.name" . }}-manager-role -subjects: -- kind: ServiceAccount - name: {{ include "oracle-database-operator.serviceAccountName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} -{{- if eq .Values.scope.mode "namespace" }} -{{- range .Values.scope.watchNamespaces }} ---- -# Manager RoleBinding for namespace-scoped deployment in {{ . }} -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: {{ include "oracle-database-operator.name" $ }}-manager-rolebinding - namespace: {{ . }} - labels: - {{- include "oracle-database-operator.labels" $ | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: {{ include "oracle-database-operator.name" $ }}-manager-role -subjects: -- kind: ServiceAccount - name: {{ include "oracle-database-operator.serviceAccountName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} -{{- end }} -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/service.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/service.yaml deleted file mode 100644 index 3df5ebfb6..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/service.yaml +++ /dev/null @@ -1,29 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "oracle-database-operator.metricsServiceName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -spec: - ports: - - name: https - port: 8443 - targetPort: https - selector: - {{- include "oracle-database-operator.selectorLabels" . | nindent 4 }} ---- -apiVersion: v1 -kind: Service -metadata: - name: {{ include "oracle-database-operator.webhookServiceName" . }} - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -spec: - ports: - - port: 443 - protocol: TCP - targetPort: 9443 - selector: - {{- include "oracle-database-operator.selectorLabels" . | nindent 4 }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/validatingwebhookconfiguration.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/validatingwebhookconfiguration.yaml deleted file mode 100644 index 70ab91306..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/validatingwebhookconfiguration.yaml +++ /dev/null @@ -1,402 +0,0 @@ -apiVersion: admissionregistration.k8s.io/v1 -kind: ValidatingWebhookConfiguration -metadata: - annotations: - cert-manager.io/inject-ca-from: {{ include "oracle-database-operator.certManagerInjectAnnotation" . }} - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "3" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded - name: {{ include "oracle-database-operator.name" . }}-validating-webhook-configuration - labels: - {{- include "oracle-database-operator.labels" . | nindent 4 }} -webhooks: -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-autonomouscontainerdatabase - failurePolicy: Fail - name: vautonomouscontainerdatabasev4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - autonomouscontainerdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-autonomousdatabasebackup - failurePolicy: Fail - name: vautonomousdatabasebackupv4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - autonomousdatabasebackups - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-autonomousdatabaserestore - failurePolicy: Fail - name: vautonomousdatabaserestorev4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - autonomousdatabaserestores - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-autonomousdatabase - failurePolicy: Fail - name: vautonomousdatabasev4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - autonomousdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-dbcssystem - failurePolicy: Fail - name: vdbcssystemv4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - - DELETE - resources: - - dbcssystems - sideEffects: None -- admissionReviewVersions: - - v4 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-lrest - failurePolicy: Fail - name: vlrest.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - lrests - sideEffects: None -- admissionReviewVersions: - - v4 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-lrpdb - failurePolicy: Fail - name: vlrpdb.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - lrpdbs - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-oraclerestart - failurePolicy: Fail - name: voraclerestart.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - - DELETE - resources: - - oraclerestarts - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-racdatabase - failurePolicy: Fail - name: vracdatabase.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - - DELETE - resources: - - racdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v4-shardingdatabase - failurePolicy: Fail - name: vshardingdatabasev4.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - - DELETE - resources: - - shardingdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-autonomouscontainerdatabase - failurePolicy: Fail - name: vautonomouscontainerdatabasev1alpha1.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - autonomouscontainerdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-autonomousdatabasebackup - failurePolicy: Fail - name: vautonomousdatabasebackupv1alpha1.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - autonomousdatabasebackups - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-autonomousdatabaserestore - failurePolicy: Fail - name: vautonomousdatabaserestorev1alpha1.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - autonomousdatabaserestores - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-autonomousdatabase - failurePolicy: Fail - name: vautonomousdatabasev1alpha1.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - autonomousdatabases - sideEffects: None -- admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-dataguardbroker - failurePolicy: Fail - name: vdataguardbroker.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - dataguardbrokers - sideEffects: None -- admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-oraclerestdataservice - failurePolicy: Fail - name: voraclerestdataservice.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - resources: - - oraclerestdataservices - sideEffects: None -- admissionReviewVersions: - - v1 - - v1beta1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-database-oracle-com-v1alpha1-singleinstancedatabase - failurePolicy: Fail - name: vsingleinstancedatabase.kb.io - rules: - - apiGroups: - - database.oracle.com - apiVersions: - - v1alpha1 - operations: - - CREATE - - UPDATE - - DELETE - resources: - - singleinstancedatabases - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-observability-oracle-com-v4-databaseobserver - failurePolicy: Fail - name: vdatabaseobserver.kb.io - rules: - - apiGroups: - - observability.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - databaseobservers - sideEffects: None -- admissionReviewVersions: - - v1 - clientConfig: - service: - name: {{ include "oracle-database-operator.webhookServiceName" $ }} - namespace: {{ include "oracle-database-operator.namespace" $ }} - path: /validate-privateai-oracle-com-v4-privateai - failurePolicy: Fail - name: vprivateai-v4.kb.io - rules: - - apiGroups: - - privateai.oracle.com - apiVersions: - - v4 - operations: - - CREATE - - UPDATE - resources: - - privateais - sideEffects: None diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/wait-for-cert-manager.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/wait-for-cert-manager.yaml deleted file mode 100644 index a5e2b5b66..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/templates/wait-for-cert-manager.yaml +++ /dev/null @@ -1,115 +0,0 @@ -{{- if .Values.certManagerWaitJob.enabled }} -{{- $webhookConfigName := include "oracle-database-operator.certManagerWebhookConfig" . -}} -{{- $maxAttempts := .Values.certManagerWaitJob.maxAttempts | default 60 -}} -{{- $sleepSeconds := .Values.certManagerWaitJob.sleepSeconds | default 5 -}} -{{- $timeoutSeconds := mul $maxAttempts $sleepSeconds -}} -# Wait for cert-manager webhook to be ready before creating Issuer resources -# Uses kubectl wait to check for caBundle injection (no shell required) -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ .Release.Name }}-wait-for-cert-manager - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - app.kubernetes.io/name: {{ .Chart.Name }} - app.kubernetes.io/instance: {{ .Release.Name }} - annotations: - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "-5" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ .Release.Name }}-wait-for-cert-manager - labels: - app.kubernetes.io/name: {{ .Chart.Name }} - app.kubernetes.io/instance: {{ .Release.Name }} - annotations: - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "-5" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded -rules: -- apiGroups: ["admissionregistration.k8s.io"] - resources: ["validatingwebhookconfigurations"] - verbs: ["get", "list", "watch"] ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ .Release.Name }}-wait-for-cert-manager - labels: - app.kubernetes.io/name: {{ .Chart.Name }} - app.kubernetes.io/instance: {{ .Release.Name }} - annotations: - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "-5" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded -subjects: -- kind: ServiceAccount - name: {{ .Release.Name }}-wait-for-cert-manager - namespace: {{ include "oracle-database-operator.namespace" . }} -roleRef: - kind: ClusterRole - name: {{ .Release.Name }}-wait-for-cert-manager - apiGroup: rbac.authorization.k8s.io ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: {{ .Release.Name }}-wait-for-cert-manager - namespace: {{ include "oracle-database-operator.namespace" . }} - labels: - app.kubernetes.io/name: {{ .Chart.Name }} - app.kubernetes.io/instance: {{ .Release.Name }} - annotations: - "helm.sh/hook": post-install,post-upgrade - "helm.sh/hook-weight": "-1" - "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded -spec: - backoffLimit: 3 - template: - metadata: - labels: - app.kubernetes.io/name: {{ .Chart.Name }} - app.kubernetes.io/instance: {{ .Release.Name }} - spec: - serviceAccountName: {{ .Release.Name }}-wait-for-cert-manager - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - restartPolicy: OnFailure - securityContext: - runAsNonRoot: true - runAsUser: 65534 - seccompProfile: - type: RuntimeDefault - containers: - - name: wait-for-webhook - image: {{ .Values.certManagerWaitJob.image.repository | default "registry.k8s.io/kubectl" }}:{{ .Values.certManagerWaitJob.image.tag }} - imagePullPolicy: {{ .Values.certManagerWaitJob.image.pullPolicy | default "IfNotPresent" }} - securityContext: - allowPrivilegeEscalation: false - readOnlyRootFilesystem: true - capabilities: - drop: - - ALL - {{- with .Values.certManagerWaitJob.resources }} - resources: - {{- toYaml . | nindent 10 }} - {{- else }} - resources: - limits: - cpu: 100m - memory: 128Mi - requests: - cpu: 50m - memory: 64Mi - {{- end }} - args: - - wait - - --for=jsonpath={.webhooks[0].clientConfig.caBundle} - - validatingwebhookconfiguration/{{ $webhookConfigName }} - - --timeout={{ $timeoutSeconds }}s -{{- end }} diff --git a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/values.yaml b/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/values.yaml deleted file mode 100644 index 1d77941a6..000000000 --- a/helm/infra-charts/obaas-prereqs/charts/oracle-database-operator/values.yaml +++ /dev/null @@ -1,176 +0,0 @@ -# Default values for oracle-database-operator -replicas: 3 - -# Namespace for Oracle Database Operator resources -# Defaults to the release namespace if not specified -namespace: "oracle-database-operator-system" - -# Image pull secrets for private registries (shared with cert-manager subchart) -imagePullSecrets: &imagePullSecrets [] -# Example: -# imagePullSecrets: &imagePullSecrets -# - name: my-registry-secret -image: - repository: container-registry.oracle.com/database/operator - # Specify a version tag for reproducible deployments - tag: "2.1.0" - pullPolicy: IfNotPresent - -# Deployment scope configuration -scope: - # "cluster" = watch all namespaces (default), creates ClusterRoleBinding - # "namespace" = watch specific namespaces only, creates RoleBindings in those namespaces - mode: cluster - - # For namespace-scoped mode: list of namespaces to watch - # RoleBindings will be created in each of these namespaces - watchNamespaces: [] - # Example: ["default", "my-app-namespace"] - -# RBAC configuration -rbac: - # Grant operator permission to list/watch nodes - # Required if database CRs will use NodePort service type - nodeAccess: false - -# Resource limits and requests -resources: - limits: - cpu: 400m - memory: 400Mi - requests: - cpu: 400m - memory: 400Mi - -# Enable leader election for controller manager -leaderElection: true - -# Health probe configuration -probes: - liveness: - initialDelaySeconds: 15 - periodSeconds: 20 - timeoutSeconds: 3 - failureThreshold: 3 - readiness: - initialDelaySeconds: 5 - periodSeconds: 10 - timeoutSeconds: 3 - failureThreshold: 3 - -# Pod Disruption Budget (only applies when replicas > 1) -pdb: - enabled: true - minAvailable: 1 - # maxUnavailable: 1 # Alternative to minAvailable - -# Pod affinity/anti-affinity rules -# If not set and replicas > 1, a default soft anti-affinity is applied -affinity: {} -# Example custom affinity: -# affinity: -# podAntiAffinity: -# requiredDuringSchedulingIgnoredDuringExecution: -# - labelSelector: -# matchLabels: -# app.kubernetes.io/name: oracle-database-operator -# topologyKey: kubernetes.io/hostname - -# Node selector for pod scheduling -nodeSelector: {} -# Example: -# nodeSelector: -# kubernetes.io/os: linux - -# Tolerations for pod scheduling -tolerations: [] -# Example: -# tolerations: -# - key: "dedicated" -# operator: "Equal" -# value: "database-operator" -# effect: "NoSchedule" - -# Termination grace period in seconds -terminationGracePeriodSeconds: 10 - -# Extra environment variables for the controller manager container -extraEnv: [] -# Example: -# extraEnv: -# - name: LOG_LEVEL -# value: "debug" -# - name: MY_SECRET -# valueFrom: -# secretKeyRef: -# name: my-secret -# key: password - -# Service Account configuration -serviceAccount: - # The name of the service account to use - # If empty, uses the existing "default" service account - # If specifying a custom name, ensure the service account exists before installing - name: "" - -# Webhook configuration -webhook: - # Failure policy for webhooks (Fail or Ignore) - failurePolicy: Fail - # Webhook server port - port: 9443 - # Secret name containing the webhook TLS certificate - certificateSecretName: webhook-server-cert - # Webhook timeout in seconds (optional) - timeoutSeconds: 10 - -# OCI Credentials for Autonomous Database -# Required for ADB provisioning/binding. See: set_ocicredentials.sh -ociCredentials: - # Option 1: Reference an existing Secret containing OCI credentials - existingSecretName: "" - - # Option 2: Provide values to create a Secret (used if existingSecretName is empty) - tenancy: "" - user: "" - fingerprint: "" - region: "" - passphrase: "" # optional, for encrypted private keys - - # Reference an existing Secret containing the OCI API private key - # User must create this separately (e.g., using set_ocicredentials.sh or kubectl) - secretName: "" - -# Wait job configuration for cert-manager webhook readiness (not passed to subchart) -certManagerWaitJob: - # Waits for cert-manager webhook before creating Issuer/Certificate resources - # Set to false only if cert-manager is known to be ready (e.g., pre-installed and running) - enabled: true - image: - repository: registry.k8s.io/kubectl - tag: "v1.28.0" - pullPolicy: IfNotPresent - - # Timeout configuration: maxAttempts * sleepSeconds = total wait time - maxAttempts: 60 - sleepSeconds: 5 - - # Resource limits for the wait job (defaults applied in template if empty) - resources: {} - - # External cert-manager webhook service name (only used when cert-manager.enabled=false) - externalWebhookServiceName: "cert-manager-webhook" - -# cert-manager subchart values (passed to subchart when enabled=true) -# See README.md and examples/ for installation scenarios -cert-manager: - enabled: true - # Namespace for cert-manager (subchart install location and webhook lookup) - # Defaults to the release namespace if not specified - namespace: "cert-manager" - crds: - enabled: true - # Allow CRDs to be deleted on uninstall (WARNING: deletes all cert-manager resources) - keep: false - global: - imagePullSecrets: *imagePullSecrets diff --git a/helm/infra-charts/obaas-prereqs/charts/strimzi-kafka-operator-helm-3-chart-1.1.0.tgz b/helm/infra-charts/obaas-prereqs/charts/strimzi-kafka-operator-helm-3-chart-1.1.0.tgz deleted file mode 100644 index b9d3ce7d3..000000000 Binary files a/helm/infra-charts/obaas-prereqs/charts/strimzi-kafka-operator-helm-3-chart-1.1.0.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas-prereqs/charts/strimzi-kafka-operator-helm-3-chart-1.2.0.tgz b/helm/infra-charts/obaas-prereqs/charts/strimzi-kafka-operator-helm-3-chart-1.2.0.tgz new file mode 100644 index 000000000..afeb96500 Binary files /dev/null and b/helm/infra-charts/obaas-prereqs/charts/strimzi-kafka-operator-helm-3-chart-1.2.0.tgz differ diff --git a/helm/infra-charts/obaas-prereqs/examples/values-aks.yaml b/helm/infra-charts/obaas-prereqs/examples/values-aks.yaml index 30c4aeece..8e7d008b9 100644 --- a/helm/infra-charts/obaas-prereqs/examples/values-aks.yaml +++ b/helm/infra-charts/obaas-prereqs/examples/values-aks.yaml @@ -18,4 +18,3 @@ # disable metrics-server in obaas-prereqs. metrics-server: enabled: true - diff --git a/helm/infra-charts/obaas-prereqs/examples/values-private-registry.yaml b/helm/infra-charts/obaas-prereqs/examples/values-private-registry.yaml index 3214c3572..a681a44dc 100644 --- a/helm/infra-charts/obaas-prereqs/examples/values-private-registry.yaml +++ b/helm/infra-charts/obaas-prereqs/examples/values-private-registry.yaml @@ -21,6 +21,7 @@ # -n # # 2. Mirror the required images to your private registry +# 3. Configure images and pull secrets in the separate cert-manager installation # # Usage: # helm install obaas-prereqs ./obaas-prereqs -n -f examples/values-private-registry.yaml @@ -40,7 +41,7 @@ global: # Image pull secret for private registry authentication # This is automatically propagated to all subcharts via YAML anchors - imagePullSecrets: &imagePullSecrets + imagePullSecrets: &imagePullSecrets - name: myregistry-secret # ------------------------------------ @@ -59,23 +60,26 @@ global: # ------------------------- # ============================================================================= -# Oracle Database Operatior (and its prereq cert-manager) +# Oracle Database Operator # ============================================================================= -# Default registry: quay.io -# Has multiple components, each needs registry override +# Default operator registry: container-registry.oracle.com +# Default CRD configuration Job registry: registry.k8s.io oracle-database-operator: enabled: true # Empty namespace will cause the use of .Release.Namespace - namespace: "" + namespaceOverride: "" replicas: 1 - # Image pull secrets for private registries (shared with cert-manager subchart) + # Image pull secrets for the operator and CRD configuration Job imagePullSecrets: *imagePullSecrets image: - repository: myregistry.example.com/database/operator + registry: myregistry.example.com + repository: database/operator # Specify a version tag for reproducible deployments - tag: "2.1.0" + tag: "2.2.0" pullPolicy: IfNotPresent + crdConfiguration: + image: myregistry.example.com/alpine/k8s:1.36.4 # Deployment scope configuration scope: mode: cluster @@ -88,42 +92,7 @@ oracle-database-operator: pdb: enabled: true minAvailable: 1 - # maxUnavailable: 1 # Alternative to minAvailable - # Wait job configuration for cert-manager webhook readiness (not passed to subchart) - certManagerWaitJob: - # Waits for cert-manager webhook before creating Issuer/Certificate resources - # Set to false only if cert-manager is known to be ready (e.g., pre-installed and running) - enabled: true - image: - repository: myregistry.example.com/kubectl - tag: "v1.28.0" - pullPolicy: IfNotPresent - # cert-manager subchart values (passed to subchart when enabled=true) - cert-manager: - enabled: true - # Empty namespace will cause the use of .Release.Namespace - namespace: "" - crds: - enabled: true - # Allow CRDs to be deleted on uninstall (WARNING: deletes all cert-manager resources) - keep: false - global: - imagePullSecrets: *imagePullSecrets - image: - repository: myregistry.example.com/jetstack/cert-manager-controller - tag: v1.21.1 - webhook: - image: - repository: myregistry.example.com/jetstack/cert-manager-webhook - tag: v1.21.1 - cainjector: - image: - repository: myregistry.example.com/jetstack/cert-manager-cainjector - tag: v1.21.1 - startupapicheck: - image: - repository: myregistry.example.com/jetstack/cert-manager-startupapicheck - tag: v1.21.1 + # maxUnavailable: 1 # Requires minAvailable: null # ============================================================================= # external-secrets @@ -202,14 +171,14 @@ strimzi-kafka-operator: # Uncomment to override the default image registry and repository defaultImageRegistry: "myregistry.example.com" # Default: quay.io defaultImageRepository: "strimzi" # Default: strimzi - defaultImageTag: 1.1.0 + defaultImageTag: 1.2.0 image: # Uses global.imagePullSecrets imagePullSecrets: *imagePullSecrets registry: myregistry.example.com repository: strimzi name: operator - tag: 1.1.0 + tag: 1.2.0 # ============================================================================= # coherence-operator @@ -224,14 +193,15 @@ coherence-operator: image: registry: "myregistry.example.com/middleware" name: "coherence-operator" - tag: "3.5.14" + tag: "3.5.17" # Default Coherence image for applications defaultCoherenceImage: registry: "myregistry.example.com/middleware" name: "coherence-ce" tag: "22.06.13" - # Operator replicas (HA by default) - replicas: 3 + # One operator replica is sufficient for evaluation/development clusters. + # Increase to 3 for highly available operator reconciliation. + replicas: 1 # Namespaces to watch (empty string = all namespaces) # Override to limit operator scope: "namespace1,namespace2" watchNamespaces: "" @@ -239,13 +209,17 @@ coherence-operator: resources: {} opentelemetry-operator: - enabled: true + enabled: true # Uses global.imagePullSecrets imagePullSecrets: *imagePullSecrets manager: collectorImage: repository: "myregistry.example.com/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s" - tag: "0.154.0" + tag: "0.160.0" + image: + repository: "myregistry.example.com/open-telemetry/opentelemetry-operator/opentelemetry-operator" + tag: "0.158.0" + testFramework: image: - repository: "myregistry.example.com/open-telemetry/opentelemetry-operator" - tag: "0.154.0" + repository: "myregistry.example.com/busybox" + tag: "1.37" diff --git a/helm/infra-charts/obaas-prereqs/tests/test-coherence-operator.sh b/helm/infra-charts/obaas-prereqs/tests/test-coherence-operator.sh index 9f8f4a235..ff8cfde75 100755 --- a/helm/infra-charts/obaas-prereqs/tests/test-coherence-operator.sh +++ b/helm/infra-charts/obaas-prereqs/tests/test-coherence-operator.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -66,6 +69,11 @@ kubectl rollout status deployment/coherence-operator \ -n "${OBAAS_PREREQS_NAMESPACE}" \ --timeout "${TIMEOUT}" +kubectl get deployment/coherence-operator \ + -n "${OBAAS_PREREQS_NAMESPACE}" \ + -o jsonpath='{.spec.template.spec.containers[?(@.name=="manager")].image}{"\n"}' \ + | grep -Fx 'container-registry.oracle.com/middleware/coherence-operator:3.5.17' + kubectl wait --for=condition=Established \ crd/coherence.coherence.oracle.com \ crd/coherencejob.coherence.oracle.com \ diff --git a/helm/infra-charts/obaas-prereqs/tests/test-kube-state-metrics-upgrade.sh b/helm/infra-charts/obaas-prereqs/tests/test-kube-state-metrics-upgrade.sh new file mode 100755 index 000000000..b0557575d --- /dev/null +++ b/helm/infra-charts/obaas-prereqs/tests/test-kube-state-metrics-upgrade.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +ARCHIVE="${CHART_DIR}/charts/kube-state-metrics-8.4.2.tgz" +RENDERED="$(mktemp /private/tmp/obaas-prereqs-kube-state-metrics-test.XXXXXX.yaml)" +METRICS="$(mktemp /private/tmp/obaas-prereqs-kube-state-metrics-metrics.XXXXXX.txt)" +DASHBOARD="${CHART_DIR}/../obaas/dashboards/2/kube-state-metrics-v2.json" +trap 'rm -f "${RENDERED}" "${METRICS}"' EXIT + +fail() { + echo "Kube State Metrics upgrade regression test failed: $*" >&2 + exit 1 +} + +require_command() { + command -v "$1" >/dev/null 2>&1 || fail "missing required command: $1" +} + +require_command helm +require_command jq +require_command rg + +rg -q 'version: "8\.4\.2"' "${CHART_DIR}/Chart.yaml" \ + || fail "Chart.yaml does not pin chart 8.4.2" +rg -q 'version: 8\.4\.2' "${CHART_DIR}/Chart.lock" \ + || fail "Chart.lock does not pin chart 8.4.2" +[[ -f "${ARCHIVE}" ]] || fail "vendored chart archive is missing: ${ARCHIVE}" + +[[ "$(helm show chart "${ARCHIVE}" | awk '$1 == "version:" {print $2}')" == "8.4.2" ]] \ + || fail "vendored archive metadata is not chart 8.4.2" +[[ "$(helm show chart "${ARCHIVE}" | awk '$1 == "appVersion:" {print $2}')" == "2.20.0" ]] \ + || fail "vendored archive metadata is not KSM 2.20.0" + +helm lint "${CHART_DIR}" >/dev/null +helm template obaas-prereqs "${CHART_DIR}" -n obaas-system >"${RENDERED}" + +rg -q 'image: registry\.k8s\.io/kube-state-metrics/kube-state-metrics:v2\.20\.0' "${RENDERED}" \ + || fail "rendered kube-state-metrics image is not v2.20.0" +rg -q 'app\.kubernetes\.io/version: "2\.20\.0"' "${RENDERED}" \ + || fail "rendered kube-state-metrics version is not 2.20.0" +rg -q -- '--resources=.*endpointslices' "${RENDERED}" \ + || fail "rendered kube-state-metrics collectors do not include EndpointSlices" +! rg -q -- '--resources=.*(^|,)endpoints(,|$)' "${RENDERED}" \ + || fail "rendered kube-state-metrics collectors still include deprecated Endpoints" +rg -q 'name: obaas-prereqs-kube-state-metrics' "${RENDERED}" \ + || fail "kube-state-metrics Service name changed unexpectedly" +rg -q 'app\.kubernetes\.io/name: kube-state-metrics' "${RENDERED}" \ + || fail "kube-state-metrics selector label is missing" + +jq empty "${DASHBOARD}" >/dev/null +jq -r '.. | strings | select(contains("kube_"))' "${DASHBOARD}" \ + | rg -o 'kube_[A-Za-z0-9_]+' | sort -u >"${METRICS}" +[[ "$(wc -l <"${METRICS}" | tr -d ' ')" == "29" ]] \ + || fail "unexpected kube-state-metrics dashboard metric count" +! rg -q 'kube_endpoint' "${METRICS}" \ + || fail "dashboard still references removed endpoint metrics" + +rg -q 'resources: \["endpointslices"\]' "${CHART_DIR}/../obaas/values.yaml" \ + || fail "the observability collector is not authorized to watch EndpointSlices" +rg -q 'role: endpointslice' "${CHART_DIR}/../obaas/values.yaml" \ + || fail "the observability collector is not discovering EndpointSlices" + +echo "Kube State Metrics 8.4.2 / 2.20.0 regression test passed" diff --git a/helm/infra-charts/obaas-prereqs/tests/test-metrics-server-upgrade.sh b/helm/infra-charts/obaas-prereqs/tests/test-metrics-server-upgrade.sh new file mode 100755 index 000000000..67030ff79 --- /dev/null +++ b/helm/infra-charts/obaas-prereqs/tests/test-metrics-server-upgrade.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +ARCHIVE="${CHART_DIR}/charts/metrics-server-3.14.0.tgz" +RENDERED="$(mktemp /private/tmp/obaas-prereqs-metrics-test.XXXXXX.yaml)" +trap 'rm -f "${RENDERED}"' EXIT + +fail() { + echo "Metrics Server upgrade regression test failed: $*" >&2 + exit 1 +} + +require_command() { + command -v "$1" >/dev/null 2>&1 || fail "missing required command: $1" +} + +require_command helm +require_command rg + +rg -q 'version: "3\.14\.0"' "${CHART_DIR}/Chart.yaml" \ + || fail "Chart.yaml does not pin chart 3.14.0" +rg -q 'version: 3\.14\.0' "${CHART_DIR}/Chart.lock" \ + || fail "Chart.lock does not pin chart 3.14.0" +[[ -f "${ARCHIVE}" ]] || fail "vendored chart archive is missing: ${ARCHIVE}" + +[[ "$(helm show chart "${ARCHIVE}" | awk '$1 == "version:" {print $2}')" == "3.14.0" ]] \ + || fail "vendored archive metadata is not chart 3.14.0" +[[ "$(helm show chart "${ARCHIVE}" | awk '$1 == "appVersion:" {print $2}')" == "0.9.0" ]] \ + || fail "vendored archive metadata is not Metrics Server 0.9.0" + +helm lint "${CHART_DIR}" >/dev/null +helm template obaas-prereqs "${CHART_DIR}" -n obaas-system >"${RENDERED}" + +rg -q 'image: registry\.k8s\.io/metrics-server/metrics-server:v0\.9\.0' "${RENDERED}" \ + || fail "rendered Metrics Server image is not v0.9.0" +rg -q 'name: v1beta1\.metrics\.k8s\.io' "${RENDERED}" \ + || fail "rendered metrics APIService is missing" +rg -q 'app\.kubernetes\.io/version: "0\.9\.0"' "${RENDERED}" \ + || fail "rendered Metrics Server version is not 0.9.0" +! rg -q 'metrics-server-3\.13\.1|metrics-server/metrics-server:v0\.8\.1' "${RENDERED}" \ + || fail "rendered output contains stale Metrics Server versions" + +echo "Metrics Server 3.14.0 / 0.9.0 regression test passed" diff --git a/helm/infra-charts/obaas-prereqs/tests/test-opentelemetry-operator-upgrade.sh b/helm/infra-charts/obaas-prereqs/tests/test-opentelemetry-operator-upgrade.sh new file mode 100755 index 000000000..96eecdd27 --- /dev/null +++ b/helm/infra-charts/obaas-prereqs/tests/test-opentelemetry-operator-upgrade.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +ARCHIVE="${CHART_DIR}/charts/opentelemetry-operator-0.122.0.tgz" +RENDERED="$(mktemp /private/tmp/obaas-prereqs-otel-test.XXXXXX.yaml)" +trap 'rm -f "${RENDERED}"' EXIT + +fail() { + echo "OpenTelemetry Operator upgrade regression test failed: $*" >&2 + exit 1 +} + +require_command() { + command -v "$1" >/dev/null 2>&1 || fail "missing required command: $1" +} + +require_command helm +require_command rg + +rg -q 'version: "0\.122\.0"' "${CHART_DIR}/Chart.yaml" \ + || fail "Chart.yaml does not pin chart 0.122.0" +rg -q 'version: 0\.122\.0' "${CHART_DIR}/Chart.lock" \ + || fail "Chart.lock does not pin chart 0.122.0" +[[ -f "${ARCHIVE}" ]] || fail "vendored chart archive is missing: ${ARCHIVE}" + +[[ "$(helm show chart "${ARCHIVE}" | awk '$1 == "version:" {print $2}')" == "0.122.0" ]] \ + || fail "vendored archive metadata is not chart 0.122.0" +[[ "$(helm show chart "${ARCHIVE}" | awk '$1 == "appVersion:" {print $2}')" == "0.158.0" ]] \ + || fail "vendored archive metadata is not operator 0.158.0" + +helm lint "${CHART_DIR}" >/dev/null +helm template obaas-prereqs "${CHART_DIR}" -n obaas-system >"${RENDERED}" + +rg -q -- '--collector-image=ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s:0\.160\.0' "${RENDERED}" \ + || fail "rendered collector image is not 0.160.0" +rg -q -- '--feature-gates=-operand\.networkpolicy,-operator\.networkpolicy' "${RENDERED}" \ + || fail "rendered network-policy compatibility gates are not disabled" +rg -q 'app\.kubernetes\.io/version: "0\.158\.0"' "${RENDERED}" \ + || fail "rendered operator version is not 0.158.0" +! rg -q 'opentelemetry-operator-0\.119\.0|:0\.154\.0' "${RENDERED}" \ + || fail "rendered output contains stale OpenTelemetry Operator versions" + +echo "OpenTelemetry Operator 0.122.0 / 0.158.0 with collector 0.160.0 regression test passed" diff --git a/helm/infra-charts/obaas-prereqs/values.yaml b/helm/infra-charts/obaas-prereqs/values.yaml index 1c6ffe4c8..517793997 100644 --- a/helm/infra-charts/obaas-prereqs/values.yaml +++ b/helm/infra-charts/obaas-prereqs/values.yaml @@ -27,16 +27,19 @@ global: # -- SubChart Configuration oracle-database-operator: enabled: true - # Empty namespace will cause the use of .Release.Namespace - namespace: "" + # Empty namespaceOverride will cause the use of .Release.Namespace + namespaceOverride: "" replicas: 1 - # Image pull secrets for private registries (shared with cert-manager subchart) + # Image pull secrets for private registries imagePullSecrets: &imagePullSecrets [] image: - repository: container-registry.oracle.com/database/operator + registry: container-registry.oracle.com + repository: database/operator # Specify a version tag for reproducible deployments - tag: "2.1.0" + tag: "2.2.0" pullPolicy: IfNotPresent + crdConfiguration: + image: docker.io/alpine/k8s:1.36.4 # Deployment scope configuration scope: mode: cluster @@ -49,19 +52,7 @@ oracle-database-operator: pdb: enabled: true minAvailable: 1 - # maxUnavailable: 1 # Alternative to minAvailable - # Wait job configuration for cert-manager webhook readiness (not passed to subchart) - certManagerWaitJob: - # Waits for cert-manager webhook before creating Issuer/Certificate resources - # Set to false only if cert-manager is known to be ready (e.g., pre-installed and running) - enabled: true - image: - repository: registry.k8s.io/kubectl - tag: "v1.28.0" - pullPolicy: IfNotPresent - # don't use the cert-manager subchart - cert-manager: - enabled: false + # maxUnavailable: 1 # Requires minAvailable: null external-secrets: enabled: true @@ -108,7 +99,7 @@ strimzi-kafka-operator: imagePullSecrets: *imagePullSecrets defaultImageRegistry: quay.io defaultImageRepository: strimzi - defaultImageTag: 1.1.0 + defaultImageTag: 1.2.0 coherence-operator: enabled: true @@ -118,16 +109,34 @@ coherence-operator: image: registry: "container-registry.oracle.com/middleware" name: "coherence-operator" - tag: "3.5.14" + tag: "3.5.17" # Default Coherence image for applications defaultCoherenceImage: registry: "container-registry.oracle.com/middleware" name: "coherence-ce" tag: "22.06.13" - # Operator replicas (HA by default) - replicas: 3 + # One operator replica is sufficient for evaluation/development clusters. + # Increase to 3 for highly available operator reconciliation. + replicas: 1 # Namespaces to watch (empty string = all namespaces) # Override to limit operator scope: "namespace1,namespace2" watchNamespaces: "" # Override default resources if needed resources: {} + +opentelemetry-operator: + enabled: true + # Keep network-policy rollout separate from the operator and + # auto-instrumentation upgrade. + manager: + # Pin the collector operand independently from the operator version. + collectorImage: + repository: ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s + tag: "0.160.0" + featureGatesMap: + operator.networkpolicy: false + operand.networkpolicy: false + testFramework: + image: + repository: docker.io/busybox + tag: "1.37" diff --git a/helm/infra-charts/obaas/Chart.lock b/helm/infra-charts/obaas/Chart.lock index 3b1a57a89..71b48fc4e 100644 --- a/helm/infra-charts/obaas/Chart.lock +++ b/helm/infra-charts/obaas/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: gateway-helm repository: file://charts/gateway-helm - version: 1.8.2 + version: 1.9.1 - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx version: 4.15.1 @@ -10,12 +10,12 @@ dependencies: version: 0.15.0 - name: signoz repository: https://charts.signoz.io - version: 0.134.0 + version: 0.142.1 - name: apisix repository: https://apache.github.io/apisix-helm-chart - version: 2.16.0 + version: 2.17.0 - name: ai-optimizer repository: https://oracle.github.io/ai-optimizer/helm - version: 2.4.1 -digest: sha256:de18c535fc3f7ff47a2499a66b6a106b4d429b0b2408c29844fd63ffc7511613 -generated: "2026-08-20T15:08:32.107175+01:00" + version: 2.0.3 +digest: sha256:96a730e04bfacb7ca855433ca539b6abd8367a435139493bf323a7200568231c +generated: "2026-09-18T10:41:32.708737-07:00" diff --git a/helm/infra-charts/obaas/Chart.yaml b/helm/infra-charts/obaas/Chart.yaml index 06bbb7912..3b5236b0a 100644 --- a/helm/infra-charts/obaas/Chart.yaml +++ b/helm/infra-charts/obaas/Chart.yaml @@ -3,7 +3,7 @@ apiVersion: v2 type: application name: "obaas" -kubeVersion: ">= 1.34.0" +kubeVersion: ">=1.36.0-0 <1.38.0-0" description: A Helm chart for Oracle Backend as a Service home: https://oracle.github.io/microservices-backend maintainers: @@ -11,9 +11,9 @@ maintainers: email: obaas_ww@oracle.com url: https://oracle.github.io/microservices-backend # This is the chart version. -version: 0.2.0 +version: 0.1.2 # This is the version number of the application being deployed. -appVersion: "2.2.0" +appVersion: "2.1.2" # SubCharts # Note: Cluster-singleton prerequisites (oracle-database-operator, external-secrets, metrics-server, @@ -22,7 +22,7 @@ appVersion: "2.2.0" dependencies: - name: gateway-helm repository: "file://charts/gateway-helm" - version: "1.8.2" + version: "1.9.1" condition: gateway-helm.enabled - name: ingress-nginx version: "4.15.1" @@ -33,14 +33,14 @@ dependencies: repository: https://charts.signoz.io condition: signoz.enabled - name: signoz - version: "0.134.0" + version: "0.142.1" repository: https://charts.signoz.io condition: signoz.enabled - name: apisix - version: "2.16.0" + version: "2.17.0" repository: https://apache.github.io/apisix-helm-chart condition: apisix.enabled - name: ai-optimizer - version: "2.4.1" + version: "2.0.3" repository: https://oracle.github.io/ai-optimizer/helm condition: ai-optimizer.enabled diff --git a/helm/infra-charts/obaas/charts/ai-optimizer-2.0.3.tgz b/helm/infra-charts/obaas/charts/ai-optimizer-2.0.3.tgz new file mode 100644 index 000000000..d353d13f4 Binary files /dev/null and b/helm/infra-charts/obaas/charts/ai-optimizer-2.0.3.tgz differ diff --git a/helm/infra-charts/obaas/charts/apisix-2.16.0.tgz b/helm/infra-charts/obaas/charts/apisix-2.16.0.tgz deleted file mode 100644 index 3256b87cf..000000000 Binary files a/helm/infra-charts/obaas/charts/apisix-2.16.0.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas/charts/apisix-2.17.0.tgz b/helm/infra-charts/obaas/charts/apisix-2.17.0.tgz new file mode 100644 index 000000000..6f5a4c047 Binary files /dev/null and b/helm/infra-charts/obaas/charts/apisix-2.17.0.tgz differ diff --git a/helm/infra-charts/obaas/charts/gateway-helm-1.8.2.tgz b/helm/infra-charts/obaas/charts/gateway-helm-1.8.2.tgz deleted file mode 100644 index 12a5df425..000000000 Binary files a/helm/infra-charts/obaas/charts/gateway-helm-1.8.2.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas/charts/gateway-helm-1.9.1.tgz b/helm/infra-charts/obaas/charts/gateway-helm-1.9.1.tgz new file mode 100644 index 000000000..607306e55 Binary files /dev/null and b/helm/infra-charts/obaas/charts/gateway-helm-1.9.1.tgz differ diff --git a/helm/infra-charts/obaas/charts/gateway-helm/Chart.lock b/helm/infra-charts/obaas/charts/gateway-helm/Chart.lock index 4dfd74d12..07ab2b946 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/Chart.lock +++ b/helm/infra-charts/obaas/charts/gateway-helm/Chart.lock @@ -2,5 +2,5 @@ dependencies: - name: crds repository: "" version: 0.0.0 -digest: sha256:aeada3fbffa2565a325406ad014001fd2685f7c0c9cfc1167da4f10c75a1bd65 -generated: "2026-07-14T13:33:00.767186-07:00" +digest: sha256:16cbbceffe2a6946ae7cbb20b5a8313267bc77f4669caba20fffb3ff64a773a6 +generated: "2026-05-22T21:27:32.703929139-03:00" diff --git a/helm/infra-charts/obaas/charts/gateway-helm/Chart.yaml b/helm/infra-charts/obaas/charts/gateway-helm/Chart.yaml index e3997320b..fc527bc21 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/Chart.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/Chart.yaml @@ -3,7 +3,7 @@ name: gateway-helm description: The Helm chart for Envoy Gateway type: application -version: 1.8.2 +version: 1.9.1 appVersion: "latest" icon: https://raw.githubusercontent.com/envoyproxy/gateway/main/site/assets/icons/logo.svg @@ -27,3 +27,4 @@ sources: dependencies: - name: crds version: "0.0.0" + condition: crds.enabled diff --git a/helm/infra-charts/obaas/charts/gateway-helm/README.md b/helm/infra-charts/obaas/charts/gateway-helm/README.md index 2ac130ad4..e3d7b9e3b 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/README.md +++ b/helm/infra-charts/obaas/charts/gateway-helm/README.md @@ -35,10 +35,13 @@ Once Helm has been set up correctly, install the chart from dockerhub: ``` shell helm install eg oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --create-namespace ``` + +Image overrides target different components. `global.images.envoyGateway.*` configures the Envoy Gateway control plane Deployment rendered by this chart. `global.images.envoyProxy.*` configures the managed Envoy Proxy data plane through the generated `EnvoyGateway` config. + This command installs both Gateway API CRDs and Envoy Gateway CRDs. If your Kubernetes provider already manages Gateway API CRDs for the cluster, confirm that the provider-installed Gateway API version and channel are compatible with the Envoy Gateway release and the Gateway API resources you plan to use. If they are compatible, install only the -Envoy Gateway CRDs separately and use `--skip-crds` when installing this chart. +Envoy Gateway CRDs separately and use `--set crds.enabled=false` when installing this chart. You can find all helm chart release in [Dockerhub](https://hub.docker.com/r/envoyproxy/gateway-helm/tags) @@ -54,8 +57,9 @@ make kube-deploy TAG=latest ### Skip install CRDs -You can install the eg chart without Gateway API CRDs and Envoy Gateway CRDs. Make sure the CRDs exist in the cluster -before installing the chart with `--skip-crds`, otherwise Envoy Gateway may fail to start. +You can install the eg chart without the bundled Gateway API CRDs, Envoy Gateway CRDs, and Gateway API safe upgrade +policy resources by setting `crds.enabled=false`. Make sure these resources exist in the cluster before installing the +chart with `--set crds.enabled=false`, otherwise Envoy Gateway may fail to start. If your Kubernetes provider manages compatible Gateway API CRDs, install only the Envoy Gateway CRDs from the `gateway-crds-helm` chart first: @@ -66,14 +70,14 @@ helm template eg-crds oci://docker.io/envoyproxy/gateway-crds-helm --set 'crds.g ``` If the provider-managed Gateway API CRDs are not compatible, use a compatible Gateway API CRD installation method for -the cluster first, then install this chart with `--skip-crds`. +the cluster first, then install this chart with `--set crds.enabled=false`. -After the required CRDs are installed, install the eg chart with `--skip-crds`. Gateway API safe upgrade policy -resources (the safe-upgrades ValidatingAdmissionPolicy and binding shipped with the Gateway API bundle) are rendered -from the chart templates on install by default, so disable them when these resources are managed outside this chart: +After the required CRDs are installed, install the eg chart with `--set crds.enabled=false`. Setting `crds.enabled=false` +also skips the Gateway API safe upgrade policy resources (the safe-upgrades ValidatingAdmissionPolicy and binding shipped +with the Gateway API bundle), so manage them outside this chart when these resources are owned elsewhere: ``` shell -helm install eg --create-namespace oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --skip-crds --set crds.gatewayAPI.safeUpgradePolicy.enabled=false +helm install eg --create-namespace oci://docker.io/envoyproxy/gateway-helm --version v0.0.0-latest -n envoy-gateway-system --set crds.enabled=false ``` To uninstall the chart: @@ -86,9 +90,10 @@ helm uninstall eg -n envoy-gateway-system | Key | Type | Default | Description | |-----|------|---------|-------------| -| certgen | object | `{"job":{"affinity":{},"annotations":{},"args":[],"nodeSelector":{},"pod":{"annotations":{},"labels":{}},"resources":{},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"privileged":false,"readOnlyRootFilesystem":true,"runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}},"tolerations":[],"ttlSecondsAfterFinished":30},"rbac":{"annotations":{},"labels":{}}}` | Certgen is used to generate the certificates required by EnvoyGateway. If you want to construct a custom certificate, you can generate a custom certificate through Cert-Manager before installing EnvoyGateway. Certgen will not overwrite the custom certificate. Please do not manually modify `values.yaml` to disable certgen, it may cause EnvoyGateway OIDC,OAuth2,etc. to not work as expected. | +| certgen | object | `{"job":{"affinity":{},"annotations":{},"args":[],"nodeSelector":{},"pod":{"annotations":{},"labels":{},"securityContext":{"fsGroup":65532,"runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}}},"resources":{},"securityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"privileged":false,"readOnlyRootFilesystem":true,"runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}},"tolerations":[],"ttlSecondsAfterFinished":30},"rbac":{"annotations":{},"labels":{}}}` | Certgen is used to generate the certificates required by EnvoyGateway. If you want to construct a custom certificate, you can generate a custom certificate through Cert-Manager before installing EnvoyGateway. Certgen will not overwrite the custom certificate. Please do not manually modify `values.yaml` to disable certgen, it may cause EnvoyGateway OIDC,OAuth2,etc. to not work as expected. | | commonLabels | object | `{}` | Labels to apply to all resources | | config.envoyGateway | object | `{"extensionApis":{},"gateway":{"controllerName":"gateway.envoyproxy.io/gatewayclass-controller"},"logging":{"level":{"default":"info"}},"provider":{"type":"Kubernetes"}}` | EnvoyGateway configuration. Visit https://gateway.envoyproxy.io/docs/api/extension_types/#envoygateway to view all options. | +| crds.enabled | bool | `true` | Install Envoy Gateway CRDs, Gateway API CRDs, and Gateway API safe upgrade policy resources. Set to false when these resources are managed separately. | | createNamespace | bool | `false` | | | deployment.annotations | object | `{}` | | | deployment.envoyGateway.extraEnv | list | `[]` | Additional environment variables for the envoy-gateway container. | @@ -96,16 +101,35 @@ helm uninstall eg -n envoy-gateway-system | deployment.envoyGateway.image.tag | string | `""` | | | deployment.envoyGateway.imagePullPolicy | string | `""` | | | deployment.envoyGateway.imagePullSecrets | list | `[]` | | +| deployment.envoyGateway.livenessProbe.httpGet.path | string | `"/healthz"` | | +| deployment.envoyGateway.livenessProbe.httpGet.port | int | `8081` | | +| deployment.envoyGateway.livenessProbe.periodSeconds | int | `20` | | +| deployment.envoyGateway.livenessProbe.successThreshold | int | `1` | | +| deployment.envoyGateway.livenessProbe.timeoutSeconds | int | `1` | | +| deployment.envoyGateway.readinessProbe.httpGet.path | string | `"/readyz"` | | +| deployment.envoyGateway.readinessProbe.httpGet.port | int | `8081` | | +| deployment.envoyGateway.readinessProbe.periodSeconds | int | `10` | | +| deployment.envoyGateway.readinessProbe.successThreshold | int | `1` | | +| deployment.envoyGateway.readinessProbe.timeoutSeconds | int | `1` | | | deployment.envoyGateway.resources.limits.memory | string | `"1024Mi"` | | | deployment.envoyGateway.resources.requests.cpu | string | `"100m"` | | | deployment.envoyGateway.resources.requests.memory | string | `"256Mi"` | | | deployment.envoyGateway.securityContext.allowPrivilegeEscalation | bool | `false` | | | deployment.envoyGateway.securityContext.capabilities.drop[0] | string | `"ALL"` | | | deployment.envoyGateway.securityContext.privileged | bool | `false` | | +| deployment.envoyGateway.securityContext.readOnlyRootFilesystem | bool | `true` | | | deployment.envoyGateway.securityContext.runAsGroup | int | `65532` | | | deployment.envoyGateway.securityContext.runAsNonRoot | bool | `true` | | | deployment.envoyGateway.securityContext.runAsUser | int | `65532` | | | deployment.envoyGateway.securityContext.seccompProfile.type | string | `"RuntimeDefault"` | | +| deployment.envoyGateway.startupProbe.failureThreshold | int | `30` | | +| deployment.envoyGateway.startupProbe.httpGet.path | string | `"/healthz"` | | +| deployment.envoyGateway.startupProbe.httpGet.port | int | `8081` | | +| deployment.envoyGateway.startupProbe.periodSeconds | int | `1` | | +| deployment.envoyGateway.startupProbe.successThreshold | int | `1` | | +| deployment.envoyGateway.startupProbe.timeoutSeconds | int | `1` | | +| deployment.envoyGateway.strategy | object | `{}` | Volume source for the Wasm module cache mounted at /var/lib/eg/wasm. Defaults to an emptyDir when left empty. Example: persist the Wasm module cache across controller restarts by backing it with a PersistentVolumeClaim: wasmCacheVolume: persistentVolumeClaim: claimName: envoy-gateway-wasm-cache | +| deployment.envoyGateway.wasmCacheVolume | object | `{}` | | | deployment.pod.affinity | object | `{}` | | | deployment.pod.annotations."prometheus.io/port" | string | `"19001"` | | | deployment.pod.annotations."prometheus.io/scrape" | string | `"true"` | | @@ -113,6 +137,7 @@ helm uninstall eg -n envoy-gateway-system | deployment.pod.extraVolumes | list | `[]` | | | deployment.pod.labels | object | `{}` | | | deployment.pod.nodeSelector | object | `{}` | | +| deployment.pod.securityContext.fsGroup | int | `65532` | | | deployment.pod.securityContext.runAsGroup | int | `65532` | | | deployment.pod.securityContext.runAsNonRoot | bool | `true` | | | deployment.pod.securityContext.runAsUser | int | `65532` | | @@ -135,13 +160,13 @@ helm uninstall eg -n envoy-gateway-system | deployment.replicas | int | `1` | | | global.imagePullSecrets | list | `[]` | Global override for image pull secrets | | global.imageRegistry | string | `""` | Global override for image registry | -| global.images.envoyGateway.image | string | `nil` | | -| global.images.envoyGateway.pullPolicy | string | `nil` | | -| global.images.envoyGateway.pullSecrets | list | `[]` | | -| global.images.envoyProxy.image | string | `""` | | -| global.images.envoyProxy.pullPolicy | string | `""` | | -| global.images.envoyProxy.pullSecrets | list | `[]` | | -| global.images.ratelimit.image | string | `"docker.io/envoyproxy/ratelimit:master"` | | +| global.images.envoyGateway.image | string | `nil` | Full image for the Envoy Gateway control plane Deployment installed by this chart. | +| global.images.envoyGateway.pullPolicy | string | `nil` | Image pull policy for the Envoy Gateway control plane Deployment. Default behavior: latest images will be Always else IfNotPresent. | +| global.images.envoyGateway.pullSecrets | list | `[]` | Pull secrets for the Envoy Gateway control plane Deployment. | +| global.images.envoyProxy.image | string | `""` | Full image for the managed Envoy Proxy data plane. This updates the generated `envoyProxy` config and does not change the `envoy-gateway` control plane Deployment image. If not specified, the default image built into `envoy-gateway` is used. | +| global.images.envoyProxy.pullPolicy | string | `""` | Image pull policy for the managed Envoy Proxy data plane. Default behavior: IfNotPresent. | +| global.images.envoyProxy.pullSecrets | list | `[]` | Pull secrets for the managed Envoy Proxy data plane. | +| global.images.ratelimit.image | string | `"docker.io/envoyproxy/ratelimit:8fe6ea42"` | | | global.images.ratelimit.pullPolicy | string | `"IfNotPresent"` | | | global.images.ratelimit.pullSecrets | list | `[]` | | | hpa.behavior | object | `{}` | | diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/gatewayapi-crds.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/gatewayapi-crds.yaml index 9fe9f5ceb..0d6bafe71 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/gatewayapi-crds.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/gatewayapi-crds.yaml @@ -24,7 +24,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental labels: gateway.networking.k8s.io/policy: Direct @@ -1440,7 +1440,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: gatewayclasses.gateway.networking.k8s.io spec: @@ -1956,7 +1956,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: gateways.gateway.networking.k8s.io spec: @@ -5297,7 +5297,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: grpcroutes.gateway.networking.k8s.io spec: @@ -7573,7 +7573,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: httproutes.gateway.networking.k8s.io spec: @@ -16106,7 +16106,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: listenersets.gateway.networking.k8s.io spec: @@ -16884,7 +16884,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: referencegrants.gateway.networking.k8s.io spec: @@ -17239,7 +17239,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: tcproutes.gateway.networking.k8s.io spec: @@ -18707,7 +18707,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: tlsroutes.gateway.networking.k8s.io spec: @@ -21090,7 +21090,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: udproutes.gateway.networking.k8s.io spec: @@ -22558,7 +22558,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: xbackends.gateway.networking.x-k8s.io spec: @@ -23230,7 +23230,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental labels: gateway.networking.k8s.io/policy: Direct @@ -23827,7 +23827,7 @@ kind: CustomResourceDefinition metadata: annotations: api-approved.kubernetes.io: https://github.com/kubernetes-sigs/gateway-api/pull/4530 - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: experimental name: xmeshes.gateway.networking.x-k8s.io spec: diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml index a79ec46e6..2c8a4b444 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_backendtrafficpolicies.yaml @@ -614,6 +614,73 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType specifies + which health check probe outcomes produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success type must both + be specified together + rule: self.exists(e, e == 'Failure' || e == 'FailureSeriesStart') + == self.exists(e, e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink defines a destination + for health check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink type is File, + file field needs to be set. + rule: 'self.type == ''File'' ? has(self.file) : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the number of healthy @@ -1101,6 +1168,43 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop using the reported weight. Defaults to @@ -1434,8 +1538,9 @@ spec: description: |- MergeType determines how this configuration is merged with existing BackendTrafficPolicy configurations targeting a parent resource. When set, this configuration will be merged - into a parent BackendTrafficPolicy (i.e. the one targeting a Gateway or Listener). - This field cannot be set when targeting a parent resource (Gateway). + into the closest parent BackendTrafficPolicy in the route's attachment hierarchy (for + example, one targeting a Gateway, Gateway listener, ListenerSet, or ListenerSet listener). + Currently, this field can only be set when targeting xRoute resources. If unset, no merging occurs, and only the most specific configuration takes effect. type: string x-kubernetes-validations: @@ -1544,7 +1649,7 @@ spec: required: - name type: object - maxItems: 64 + maxItems: 128 type: array methods: description: |- @@ -1828,17 +1933,18 @@ spec: cost-based rate limiting) allowed per Unit. format: int64 maximum: 4294967295 - minimum: 1 + minimum: 0 type: integer unit: description: |- RateLimitUnit specifies the intervals for setting rate limits. - Valid RateLimitUnit values are "Second", "Minute", "Hour", "Day", "Month" and "Year". + Valid RateLimitUnit values are "Second", "Minute", "Hour", "Day", "Week", "Month" and "Year". enum: - Second - Minute - Hour - Day + - Week - Month - Year type: string @@ -1955,7 +2061,7 @@ spec: required: - name type: object - maxItems: 64 + maxItems: 128 type: array methods: description: |- @@ -2239,17 +2345,18 @@ spec: cost-based rate limiting) allowed per Unit. format: int64 maximum: 4294967295 - minimum: 1 + minimum: 0 type: integer unit: description: |- RateLimitUnit specifies the intervals for setting rate limits. - Valid RateLimitUnit values are "Second", "Minute", "Hour", "Day", "Month" and "Year". + Valid RateLimitUnit values are "Second", "Minute", "Hour", "Day", "Week", "Month" and "Year". enum: - Second - Minute - Hour - Day + - Week - Month - Year type: string @@ -2343,6 +2450,52 @@ spec: match: description: Match configuration. properties: + responseHeaders: + description: Response headers to match on. The match evaluates + to true if all matches are successful. + items: + description: ResponseOverrideHeaderMatch defines the configuration + for matching a response header. + properties: + name: + description: |- + Name of the HTTP header. + The header name is case-insensitive. + For example, "Foo" and "foo" are considered the same header. + maxLength: 256 + minLength: 1 + pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ + type: string + value: + description: Value within the HTTP header to match + against. + properties: + type: + default: Exact + description: Type specifies how to match against + a string. + enum: + - Exact + - Prefix + - Suffix + - RegularExpression + type: string + value: + description: Value specifies the string value + that the match must have. + maxLength: 1024 + minLength: 1 + type: string + required: + - value + type: object + required: + - name + - value + type: object + maxItems: 16 + minItems: 1 + type: array statusCodes: description: Status code to match on. The match evaluates to true if any of the matches are successful. @@ -2398,9 +2551,11 @@ spec: maxItems: 50 minItems: 1 type: array - required: - - statusCodes type: object + x-kubernetes-validations: + - message: at least one of statusCodes or responseHeaders must + be specified + rule: has(self.statusCodes) || has(self.responseHeaders) redirect: description: Redirect configuration properties: @@ -3151,6 +3306,28 @@ spec: This takes precedence over EnvoyProxy tracing when set. properties: + clientSamplingFraction: + description: |- + ClientSamplingFraction represents the fraction of requests that should be + selected for tracing when requested by the client. + If unspecified, client-forced tracing is disabled by default and users must + set this field to opt in. + properties: + denominator: + default: 100 + format: int32 + minimum: 1 + type: integer + numerator: + format: int32 + minimum: 0 + type: integer + required: + - numerator + type: object + x-kubernetes-validations: + - message: numerator must be less than or equal to denominator + rule: self.numerator <= self.denominator customTags: additionalProperties: properties: @@ -3215,6 +3392,26 @@ spec: Deprecated: Use Tags instead. type: object + overallSamplingFraction: + description: |- + OverallSamplingFraction represents the fraction of requests that should be + selected for tracing after all other sampling checks have been applied. + properties: + denominator: + default: 100 + format: int32 + minimum: 1 + type: integer + numerator: + format: int32 + minimum: 0 + type: integer + required: + - numerator + type: object + x-kubernetes-validations: + - message: numerator must be less than or equal to denominator + rule: self.numerator <= self.denominator samplingFraction: description: |- SamplingFraction represents the fraction of requests that should be @@ -3334,28 +3531,37 @@ spec: - message: this policy can only have a targetRef.group of gateway.networking.k8s.io rule: 'has(self.targetRef) ? self.targetRef.group == ''gateway.networking.k8s.io'' : true ' - - message: this policy can only have a targetRef.kind of Gateway/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute - rule: 'has(self.targetRef) ? self.targetRef.kind in [''Gateway'', ''HTTPRoute'', - ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''] : true' + - message: this policy can only have a targetRef.kind of Gateway/ListenerSet/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute + rule: 'has(self.targetRef) ? self.targetRef.kind in [''Gateway'', ''ListenerSet'', + ''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''] + : true' - message: this policy can only have a targetRefs[*].group of gateway.networking.k8s.io rule: 'has(self.targetRefs) ? self.targetRefs.all(ref, ref.group == ''gateway.networking.k8s.io'') : true ' - - message: this policy can only have a targetRefs[*].kind of Gateway/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute + - message: this policy can only have a targetRefs[*].kind of Gateway/ListenerSet/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute rule: 'has(self.targetRefs) ? self.targetRefs.all(ref, ref.kind in [''Gateway'', - ''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute'']) - : true ' + ''ListenerSet'', ''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', + ''TLSRoute'']) : true ' + - message: mergeType can only be used with xRoute targets + rule: '!has(self.mergeType) || ((!has(self.targetRef) || self.targetRef.kind + in [''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute'']) + && (!has(self.targetRefs) || self.targetRefs.all(ref, ref.kind in + [''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''])) + && (!has(self.targetSelectors) || self.targetSelectors.all(sel, sel.kind + in [''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''])))' - message: either compression or compressor can be set, not both rule: '!has(self.compression) || !has(self.compressor)' - message: requestBuffer cannot be used together with httpUpgrade rule: '!has(self.requestBuffer) || !has(self.httpUpgrade) || self.httpUpgrade.size() == 0' - message: admissionControl can only be used with HTTPRoute, GRPCRoute, - or Gateway targets + Gateway, or ListenerSet targets rule: '!has(self.admissionControl) || ((!has(self.targetRef) || self.targetRef.kind - in [''Gateway'', ''HTTPRoute'', ''GRPCRoute'']) && (!has(self.targetRefs) - || self.targetRefs.all(ref, ref.kind in [''Gateway'', ''HTTPRoute'', - ''GRPCRoute''])) && (!has(self.targetSelectors) || self.targetSelectors.all(sel, - sel.kind in [''Gateway'', ''HTTPRoute'', ''GRPCRoute''])))' + in [''Gateway'', ''ListenerSet'', ''HTTPRoute'', ''GRPCRoute'']) && + (!has(self.targetRefs) || self.targetRefs.all(ref, ref.kind in [''Gateway'', + ''ListenerSet'', ''HTTPRoute'', ''GRPCRoute''])) && (!has(self.targetSelectors) + || self.targetSelectors.all(sel, sel.kind in [''Gateway'', ''ListenerSet'', + ''HTTPRoute'', ''GRPCRoute''])))' - message: predictivePercent in preconnect policy only works with RoundRobin or Random load balancers rule: '!((has(self.connection) && has(self.connection.preconnect) && diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml index 43ddd97c0..cbcd1090c 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_clienttrafficpolicies.yaml @@ -498,6 +498,21 @@ spec: EnableEnvoyHeaders configures Envoy Proxy to add the "X-Envoy-" headers to requests and responses. type: boolean + host: + description: Host enables managing how the Host/Authority header + set by clients can be normalized. + properties: + stripTrailingHostDot: + description: |- + StripTrailingHostDot determines if the trailing dot of the host should be removed + from the Host/Authority header before any processing of the request. + This affects the upstream host header as well. Without this option, incoming requests + with host "example.com." will not match routes with domains set to "example.com". + When the host includes a port (for example "example.com.:443"), only the trailing dot + from the host section is stripped, leaving the port as-is ("example.com:443"). + Defaults to false. + type: boolean + type: object lateResponseHeaders: description: LateResponseHeaders defines settings for global response header modification. @@ -1320,6 +1335,14 @@ spec: Default: 1 hour. pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ type: string + requestHeadersReceivedTimeout: + description: |- + RequestHeadersReceivedTimeout is the duration envoy waits for the request headers to arrive. + The timer is activated when the first byte of the headers is received, + and is disarmed when the last byte of the headers has been received. + If not specified or set to 0, this timeout is disabled. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string requestReceivedTimeout: description: |- RequestReceivedTimeout is the duration envoy waits for the complete request reception. This timer starts upon request @@ -1336,6 +1359,14 @@ spec: tcp: description: Timeout settings for TCP. properties: + connectionInspectionTimeout: + description: |- + ConnectionInspectionTimeout is the maximum time to wait for initial inspection + (TLS / SNI and protocol detection, or HTTP protocol parsing) of an incoming connection on the listener socket. + If exceeded, the connection is dropped. + Default: 15 seconds. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string idleTimeout: description: |- IdleTimeout for a TCP connection. Idle time is defined as a period in which there are no @@ -1343,6 +1374,13 @@ spec: Default: 1 hour. pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ type: string + tlsHandshakeTimeout: + description: |- + TLSHandshakeTimeout for a TCP connection. The maximum time to complete transport level connection negotiation + (e.g. the TLS handshake) after a connection is accepted. + If this expires before the transport reports connection establishment, the connection is summarily closed. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string type: object type: object tls: diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml index e774cc60a..28cd46e0c 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyextensionpolicies.yaml @@ -506,6 +506,77 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check probe outcomes + produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success type + must both be specified together + rule: self.exists(e, e == 'Failure' || e == + 'FailureSeriesStart') == self.exists(e, + e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink defines + a destination for health check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type of + sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink type + is File, file field needs to be set. + rule: 'self.type == ''File'' ? has(self.file) + : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the number @@ -976,6 +1047,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater than + 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop using the reported @@ -1608,6 +1717,14 @@ spec: type: string type: object type: object + shadowMode: + description: |- + ShadowMode sets if envoy gateway should treat this external processor as "send and go". + When enabled, Envoy forwards request/response data to the external processor but does + not wait for or apply any response from it. This maps to Envoy's `observability_mode` + on the ext_proc filter. + Defaults to false. + type: boolean statusOnError: description: |- Sets the HTTP status that is returned to the client when the external processor returns an error @@ -1674,6 +1791,13 @@ spec: && self.processingMode.request.body == ''FullDuplexStreamed'') || (has(self.processingMode.response) && has(self.processingMode.response.body) && self.processingMode.response.body == ''FullDuplexStreamed'')))' + - message: If shadowMode is enabled, body processing mode must be + Streamed or unset. + rule: '!(has(self.shadowMode) && self.shadowMode == true && has(self.processingMode) + && ((has(self.processingMode.request) && has(self.processingMode.request.body) + && self.processingMode.request.body != ''Streamed'') || (has(self.processingMode.response) + && has(self.processingMode.response.body) && self.processingMode.response.body + != ''Streamed'')))' maxItems: 16 type: array lua: @@ -1750,6 +1874,19 @@ spec: || (self.type == 'ValueRef' && !has(self.inline) && has(self.valueRef)) maxItems: 16 type: array + mergeType: + description: |- + MergeType determines how this configuration is merged with existing EnvoyExtensionPolicy + configurations targeting a parent resource. When set, this configuration will be merged + into the closest parent EnvoyExtensionPolicy in the route's attachment hierarchy (for + example, one targeting a Gateway, Gateway listener, ListenerSet, or ListenerSet + listener). + Currently, this field can only be set when targeting xRoute resources. + If unset, no merging occurs, and only the most specific configuration takes effect. + type: string + x-kubernetes-validations: + - message: Replace is not a valid MergeType for EnvoyExtensionPolicy + rule: self != 'Replace' targetRef: description: |- TargetRef is the name of the resource this policy is being attached to. @@ -2023,8 +2160,9 @@ spec: kubebuilder:validation:Pattern=`^[a-f0-9]{64}$` type: string tls: - description: TLS configuration when connecting to the - Wasm code source. + description: |- + TLS configuration when connecting to the Wasm code source. + If unset, system trust store is used for HTTPS url. properties: caCertificateRef: description: |- @@ -2146,8 +2284,9 @@ spec: kubebuilder:validation:Pattern=`^[a-f0-9]{64}$` type: string tls: - description: TLS configuration when connecting to the - Wasm code source. + description: |- + TLS configuration when connecting to the Wasm code source. + If unset, system trust store is used. properties: caCertificateRef: description: |- @@ -2301,16 +2440,24 @@ spec: - message: this policy can only have a targetRef.group of gateway.networking.k8s.io rule: 'has(self.targetRef) ? self.targetRef.group == ''gateway.networking.k8s.io'' : true' - - message: this policy can only have a targetRef.kind of Gateway/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute - rule: 'has(self.targetRef) ? self.targetRef.kind in [''Gateway'', ''HTTPRoute'', - ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''] : true' + - message: this policy can only have a targetRef.kind of Gateway/ListenerSet/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute + rule: 'has(self.targetRef) ? self.targetRef.kind in [''Gateway'', ''ListenerSet'', + ''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''] + : true' - message: this policy can only have a targetRefs[*].group of gateway.networking.k8s.io rule: 'has(self.targetRefs) ? self.targetRefs.all(ref, ref.group == ''gateway.networking.k8s.io'') : true ' - - message: this policy can only have a targetRefs[*].kind of Gateway/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute + - message: this policy can only have a targetRefs[*].kind of Gateway/ListenerSet/HTTPRoute/GRPCRoute/TCPRoute/UDPRoute/TLSRoute rule: 'has(self.targetRefs) ? self.targetRefs.all(ref, ref.kind in [''Gateway'', - ''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute'']) - : true ' + ''ListenerSet'', ''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', + ''TLSRoute'']) : true ' + - message: mergeType can only be used with xRoute targets + rule: '!has(self.mergeType) || ((!has(self.targetRef) || self.targetRef.kind + in [''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute'']) + && (!has(self.targetRefs) || self.targetRefs.all(ref, ref.kind in + [''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''])) + && (!has(self.targetSelectors) || self.targetSelectors.all(sel, sel.kind + in [''HTTPRoute'', ''GRPCRoute'', ''UDPRoute'', ''TCPRoute'', ''TLSRoute''])))' status: description: Status defines the current status of EnvoyExtensionPolicy. properties: diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml index eafaa9486..ebc1a3b48 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml @@ -509,6 +509,7 @@ spec: - envoy.filters.http.health_check - envoy.filters.http.fault - envoy.filters.http.cors + - envoy.filters.http.csrf - envoy.filters.http.header_mutation - envoy.filters.http.ext_authz - envoy.filters.http.api_key_auth @@ -541,6 +542,7 @@ spec: - envoy.filters.http.health_check - envoy.filters.http.fault - envoy.filters.http.cors + - envoy.filters.http.csrf - envoy.filters.http.header_mutation - envoy.filters.http.ext_authz - envoy.filters.http.api_key_auth @@ -571,6 +573,7 @@ spec: - envoy.filters.http.health_check - envoy.filters.http.fault - envoy.filters.http.cors + - envoy.filters.http.csrf - envoy.filters.http.header_mutation - envoy.filters.http.ext_authz - envoy.filters.http.api_key_auth @@ -758,6 +761,8 @@ spec: - info - warn - error + - "off" + - critical type: string default: default: warn @@ -775,12 +780,75 @@ spec: - InsecureSyntax - Disabled type: string + mergeBackends: + description: |- + MergeBackends configures cluster deduplication: routes that reference the same backend + share a single Envoy cluster instead of Envoy Gateway generating one cluster per route + rule. This reduces xDS size, active health-check traffic, and stats cardinality, and + improves upstream connection pooling. + + Disabled when unset; specifying this field at all (even without further configuration) + enables it. Mutually exclusive with MergeGateways. + properties: + selector: + description: |- + Selector restricts cluster deduplication to backends whose target Service, ServiceImport, + or Backend resource matches this label selector. When unset, every otherwise-eligible + backend is merged. Use this to opt individual backends into deduplication gradually + instead of enabling it for every backend at once. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + type: object + x-kubernetes-map-type: atomic + type: object mergeGateways: description: |- MergeGateways defines if Gateway resources should be merged onto the same Envoy Proxy Infrastructure. Setting this field to true would merge all Gateway Listeners under the parent Gateway Class. This means that the port, protocol and hostname tuple must be unique for every listener. If a duplicate listener is detected, the newer listener (based on timestamp) will be rejected and its status will be updated with a "Accepted=False" condition. + + Mutually exclusive with MergeBackends. type: boolean mergeType: description: |- @@ -10385,8 +10453,11 @@ spec: type: object type: object envoyHpa: - description: EnvoyHpa defines the Horizontal Pod Autoscaler - settings for Envoy Proxy Deployment. + description: |- + EnvoyHpa defines the Horizontal Pod Autoscaler settings for Envoy Proxy Deployment. + If the HPA is set, the Replicas field from EnvoyDeployment will be ignored, and the + number of replicas is solely managed by the HPA. Use MinReplicas to control the + lower bound of the replica count instead. properties: behavior: description: |- @@ -11265,7 +11336,7 @@ spec: description: |- Type is the type of resource provider to use. A resource provider provides infrastructure resources for running the data plane, e.g. Envoy proxy, and - optional auxiliary control planes. Supported types are "Kubernetes"and "Host". + optional auxiliary control planes. Supported types are "Kubernetes" and "Host". enum: - Kubernetes - Host @@ -11288,6 +11359,12 @@ spec: If unspecified, defaults to 60 seconds. pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ type: string + healthCheckFailureDelay: + description: |- + HealthCheckFailureDelay defines the delay before failing health checks during the graceful drain process. + If unspecified, defaults to 0 seconds. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string minDrainDuration: description: |- MinDrainDuration defines the minimum drain duration allowing time for endpoint deprogramming to complete. @@ -11795,6 +11872,83 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health + check probe outcomes produce + a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type + and a success type must + both be specified together + rule: self.exists(e, e == + 'Failure' || e == 'FailureSeriesStart') + == self.exists(e, e == + 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink + defines a destination + for health check event + logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines + the type of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink + type is File, file field + needs to be set. + rule: 'self.type == ''File'' + ? has(self.file) : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold @@ -12313,6 +12467,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod + must be greater than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics @@ -13374,6 +13566,83 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health + check probe outcomes produce + a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type + and a success type must + both be specified together + rule: self.exists(e, e == + 'Failure' || e == 'FailureSeriesStart') + == self.exists(e, e == + 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink + defines a destination + for health check event + logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines + the type of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink + type is File, file field + needs to be set. + rule: 'self.type == ''File'' + ? has(self.file) : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold @@ -13892,6 +14161,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod + must be greater than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics @@ -14602,6 +14909,71 @@ spec: minItems: 1 type: array type: object + healthCheckLog: + description: HealthCheckLog defines health check event logging + for xRoute-backed clusters. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType specifies which + health check probe outcomes produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success type must both be + specified together + rule: self.exists(e, e == 'Failure' || e == 'FailureSeriesStart') + == self.exists(e, e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink defines a destination + for health check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink type is File, file + field needs to be set. + rule: 'self.type == ''File'' ? has(self.file) : !has(self.file)' + maxItems: 1 + type: array + type: object metrics: description: Metrics defines metrics configuration for managed proxies. @@ -15143,6 +15515,82 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check + probe outcomes produce a log + entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a + success type must both be specified + together + rule: self.exists(e, e == 'Failure' + || e == 'FailureSeriesStart') + == self.exists(e, e == 'Success' + || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink + defines a destination for health + check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines + the type of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink + type is File, file field needs + to be set. + rule: 'self.type == ''File'' + ? has(self.file) : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines @@ -15637,6 +16085,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must + be greater than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this @@ -16326,6 +16812,28 @@ spec: Tracing defines tracing configuration for managed proxies. If unspecified, will not send tracing data. properties: + clientSamplingFraction: + description: |- + ClientSamplingFraction represents the fraction of requests that should be + selected for tracing when requested by the client. + If unspecified, client-forced tracing is disabled by default and users must + set this field to opt in. + properties: + denominator: + default: 100 + format: int32 + minimum: 1 + type: integer + numerator: + format: int32 + minimum: 0 + type: integer + required: + - numerator + type: object + x-kubernetes-validations: + - message: numerator must be less than or equal to denominator + rule: self.numerator <= self.denominator customTags: additionalProperties: properties: @@ -16390,6 +16898,26 @@ spec: Deprecated: Use Tags instead. type: object + overallSamplingFraction: + description: |- + OverallSamplingFraction represents the fraction of requests that should be + selected for tracing after all other sampling checks have been applied. + properties: + denominator: + default: 100 + format: int32 + minimum: 1 + type: integer + numerator: + format: int32 + minimum: 0 + type: integer + required: + - numerator + type: object + x-kubernetes-validations: + - message: numerator must be less than or equal to denominator + rule: self.numerator <= self.denominator provider: description: Provider defines the tracing provider. properties: @@ -16797,6 +17325,79 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check probe + outcomes produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success + type must both be specified together + rule: self.exists(e, e == 'Failure' + || e == 'FailureSeriesStart') == self.exists(e, + e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink + defines a destination for health check + event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type + of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink + type is File, file field needs to + be set. + rule: 'self.type == ''File'' ? has(self.file) + : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the @@ -17288,6 +17889,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater + than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop using the @@ -18067,6 +18706,9 @@ spec: rule: '!(has(self.samplingRate) && has(self.samplingFraction))' type: object type: object + x-kubernetes-validations: + - message: mergeGateways and mergeBackends cannot both be enabled + rule: '!(has(self.mergeGateways) && self.mergeGateways && has(self.mergeBackends))' status: description: EnvoyProxyStatus defines the actual state of EnvoyProxy. properties: diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml index b213232c6..1ca1eb715 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_httproutefilters.yaml @@ -423,12 +423,48 @@ spec: description: Header is the name of the header whose value would be used to rewrite the Host header type: string + pathRegex: + description: |- + PathRegex defines a regex match and substitution applied to the request path to compute + the rewritten Host header. + For example, with: + pathRegex: + pattern: "^/tenant/([a-z0-9-]+)/.*" + substitution: "\\1.example.internal" + a request to "http://foo.bar.com/tenant/tenant1/api/v1" has its upstream Host header rewritten + to "tenant1.example.internal" (the request path "/tenant/tenant1/api/v1" is preserved). + properties: + pattern: + description: |- + Pattern matches a regular expression against the value of the HTTP Path. The regex string must + adhere to the syntax documented in https://github.com/google/re2/wiki/Syntax. + minLength: 1 + type: string + substitution: + description: |- + Substitution is an expression that replaces the matched portion. The expression may include numbered + capture groups that adhere to syntax documented in https://github.com/google/re2/wiki/Syntax. + + The resulting value is used as the upstream Host header and should be constrained to a valid + DNS hostname by using explicit regex capture groups in Pattern. + + The NUL, CR, and LF characters are not allowed: they are invalid in an HTTP header value and are + rejected by the Envoy proto (well_known_regex HTTP_HEADER_VALUE), which would otherwise cause the + generated configuration to be rejected by the data plane. + minLength: 1 + pattern: ^[^\r\n\x00]*$ + type: string + required: + - pattern + - substitution + type: object type: description: HTTPPathModifierType defines the type of Hostname rewrite. enum: - Header - Backend + - PathRegex type: string required: - type @@ -438,6 +474,10 @@ spec: rule: '!(has(self.header) && self.type != ''Header'')' - message: header must be specified for Header type rule: '!(!has(self.header) && self.type == ''Header'')' + - message: pathRegex must be nil if the type is not PathRegex + rule: '!(has(self.pathRegex) && self.type != ''PathRegex'')' + - message: pathRegex must be specified for PathRegex type + rule: '!(!has(self.pathRegex) && self.type == ''PathRegex'')' path: description: Path defines a path rewrite. properties: diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml index ca726d65d..a3e93bc18 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_securitypolicies.yaml @@ -668,9 +668,11 @@ spec: - http://foo.example.com:8080 - http://*.example.com:8080 - https://* + - moz-extension://example.com + - foo://*.example.com:8080 maxLength: 253 minLength: 1 - pattern: ^(\*|https?:\/\/(\*|(\*\.)?(([\w-]+\.?)+)?[\w-]+)(:\d{1,5})?)$ + pattern: ^(\*|[A-Za-z][A-Za-z0-9+.-]*:\/\/(\*|(\*\.)?(([\w-]+\.?)+)?[\w-]+)(:\d{1,5})?)$ type: string type: array exposeHeaders: @@ -689,6 +691,75 @@ spec: pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ type: string type: object + csrf: + description: |- + CSRF defines the configuration for Cross-Site Request Forgery (CSRF) protection. + When enabled, the CSRF filter checks that the Origin header matches the destination + or one of the additional allowed origins on mutating requests (POST, PUT, DELETE, PATCH). + properties: + additionalOrigins: + description: |- + AdditionalOrigins specifies additional origins that are allowed to make mutating + requests, beyond the destination origin. A request whose Origin header matches one + of them is allowed. The value "*" allows any origin, which effectively disables + origin validation. + + Note: Envoy's CSRF filter compares the host and port of the origin only, so the + scheme is ignored: "https://www.example.com" and "http://www.example.com" are + equivalent here, and both allow the request regardless of the scheme the client + used. + items: + description: |- + Origin is defined by the scheme (protocol), hostname (domain), and port of + the URL used to access it. The hostname can be "precise" which is just the + domain name or "wildcard" which is a domain name prefixed with a single + wildcard label such as "*.example.com". + In addition to that a single wildcard (with or without scheme) can be + configured to match any origin. + + For example, the following are valid origins: + - https://foo.example.com + - https://*.example.com + - http://foo.example.com:8080 + - http://*.example.com:8080 + - https://* + - moz-extension://example.com + - foo://*.example.com:8080 + maxLength: 253 + minLength: 1 + pattern: ^(\*|[A-Za-z][A-Za-z0-9+.-]*:\/\/(\*|(\*\.)?(([\w-]+\.?)+)?[\w-]+)(:\d{1,5})?)$ + type: string + maxItems: 16 + type: array + shadowFraction: + description: |- + ShadowFraction represents the fraction of requests for which the CSRF policy is + evaluated in shadow (dry-run) mode. For these requests, the filter records whether + the request would have been allowed or rejected in the `csrf.request_valid` and + `csrf.request_invalid` stats, but always lets the request through. The remaining + requests are enforced, i.e. a mutating request with a missing or non-matching + Origin header is rejected with a 403. + + Defaults to 0% (all requests are enforced) if not specified. Set it to 100% to + dry run the filter, watch the stats to find origins that would be rejected, then + lower it to roll enforcement out gradually. + properties: + denominator: + default: 100 + format: int32 + minimum: 1 + type: integer + numerator: + format: int32 + minimum: 0 + type: integer + required: + - numerator + type: object + x-kubernetes-validations: + - message: numerator must be less than or equal to denominator + rule: self.numerator <= self.denominator + type: object extAuth: description: ExtAuth defines the configuration for External Authorization. properties: @@ -1205,6 +1276,77 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check probe outcomes + produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success type + must both be specified together + rule: self.exists(e, e == 'Failure' || e + == 'FailureSeriesStart') == self.exists(e, + e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink defines + a destination for health check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type of + sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink type + is File, file field needs to be set. + rule: 'self.type == ''File'' ? has(self.file) + : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the number @@ -1680,6 +1822,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater + than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop using the reported @@ -2650,6 +2830,77 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check probe outcomes + produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success type + must both be specified together + rule: self.exists(e, e == 'Failure' || e + == 'FailureSeriesStart') == self.exists(e, + e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink defines + a destination for health check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type of + sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink type + is File, file field needs to be set. + rule: 'self.type == ''File'' ? has(self.file) + : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the number @@ -3125,6 +3376,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater + than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop using the reported @@ -3795,10 +4084,26 @@ spec: description: JWT defines the configuration for JSON Web Token (JWT) authentication. properties: + failOpen: + description: |- + FailOpen lets a request pass JWT authentication even when its JWT is + missing or invalid, rather than being rejected. This helps when a header + that clients use to carry a JWT may also legitimately hold a non-JWT value + that the backend relies on. + + A valid JWT is still verified and its claims forwarded as usual; only the + rejection of requests with a missing or invalid JWT is relaxed. Because this + does not enforce authentication on its own, pair it with an Authorization + policy when access needs to be restricted. + + This is broader than Optional (which tolerates a missing JWT but still + rejects an invalid one) and takes precedence over it. + type: boolean optional: description: |- Optional determines whether a missing JWT is acceptable, defaulting to false if not specified. - Note: Even if optional is set to true, JWT authentication will still fail if an invalid JWT is presented. + Note: Even if optional is set to true, JWT authentication will still fail if an invalid JWT + is presented. See FailOpen if this is necessary for your use case. type: boolean providers: description: |- @@ -4371,6 +4676,80 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check probe + outcomes produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success + type must both be specified together + rule: self.exists(e, e == 'Failure' + || e == 'FailureSeriesStart') == + self.exists(e, e == 'Success' || + e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink + defines a destination for health + check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the + type of sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink + type is File, file field needs + to be set. + rule: 'self.type == ''File'' ? has(self.file) + : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the @@ -4862,6 +5241,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater + than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop @@ -5458,6 +5875,10 @@ spec: required: - providers type: object + x-kubernetes-validations: + - message: optional and failOpen cannot both be set; failOpen already + tolerates a missing JWT + rule: '!(has(self.optional) && has(self.failOpen))' mergeType: description: |- MergeType determines how this configuration is merged with existing SecurityPolicy @@ -5594,7 +6015,7 @@ spec: If not set, the cookies will default to the host of the request, not including the subdomains. If set, the cookies will be set on the specified domain and all subdomains. This means that requests to any subdomain will not require reauthentication after users log in to the parent domain. - pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9]))*$ + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ type: string cookieNames: description: |- @@ -5708,12 +6129,24 @@ spec: If the configured header is "Authorization", EG forwards the ID token using the "Bearer " prefix. For any other header, EG forwards the raw token value. If not specified, the ID token will not be forwarded. + + Note: when passThroughAuthHeader is enabled, this header must not be the same + as a header a JWT provider extracts from (the "Authorization" header by + default). The forwarded ID token header is owned by Envoy, and Envoy rejects + an OAuth2 configuration whose pass-through matcher keys on it. properties: header: - description: Header is the upstream request header that will - carry the ID token. + description: |- + Header is the upstream request header that will carry the ID token. + It must be a valid HTTP header name. Pseudo-headers (names starting with ":") + and the "Host" header are not allowed. + maxLength: 256 minLength: 1 + pattern: ^[A-Za-z0-9!#$%&'*+\-.^_\x60|~]+$ type: string + x-kubernetes-validations: + - message: header cannot be the Host header + rule: self.lowerAscii() != 'host' required: - header type: object @@ -6143,6 +6576,77 @@ spec: server and not to a specific service. type: string type: object + healthCheckLog: + description: |- + HealthCheckLog defines health check event logging configuration for this cluster. + When set, HC probe outcomes are logged to the configured sinks. + Takes precedence over the gateway-level EnvoyProxy.spec.telemetry.healthCheckLog. + properties: + matches: + description: |- + Matches defines which health check probe outcomes produce a log entry. + When omitted or empty, all events are logged. + + Each value must be unique. Multiple values are ORed. If any failure type is + specified then a success type must also be specified, and vice versa. + items: + description: ProxyHealthCheckLogEventType + specifies which health check probe outcomes + produce a log entry. + enum: + - Failure + - FailureSeriesStart + - Success + - HealthyTransition + type: string + maxItems: 4 + type: array + x-kubernetes-list-type: set + x-kubernetes-validations: + - message: a failure type and a success type + must both be specified together + rule: self.exists(e, e == 'Failure' || e + == 'FailureSeriesStart') == self.exists(e, + e == 'Success' || e == 'HealthyTransition') + sinks: + description: |- + Sinks defines where health check events are written. + When omitted, events are written to /dev/stdout. + items: + description: ProxyHealthCheckLogSink defines + a destination for health check event logs. + properties: + file: + description: |- + File defines the file sink configuration. + Required when type is File. + properties: + path: + description: |- + Path specifies the file path for health check event output. + Use /dev/stdout to write to standard output. + minLength: 1 + type: string + required: + - path + type: object + type: + description: Type defines the type of + sink. + enum: + - File + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: If ProxyHealthCheckLogSink type + is File, file field needs to be set. + rule: 'self.type == ''File'' ? has(self.file) + : !has(self.file)' + maxItems: 1 + type: array + type: object healthyThreshold: default: 1 description: HealthyThreshold defines the number @@ -6618,6 +7122,44 @@ spec: items: type: string type: array + outOfBand: + description: |- + OutOfBand enables out-of-band ORCA load reporting. When set, Envoy opens a + server-streaming gRPC connection to each endpoint's + xds.service.orca.v3.OpenRcaService/StreamCoreMetrics and pulls load + reports periodically, instead of relying on in-band ORCA metrics + carried in response headers/trailers. + + The backend must implement OpenRcaService for this to take effect. + properties: + authority: + description: |- + Authority overrides the :authority header on the OutOfBand gRPC stream. + If unset, Envoy uses the endpoint hostname, then the dialed address, then + the cluster name. + maxLength: 259 + minLength: 1 + pattern: ^[^\x00\n\r]*$ + type: string + port: + description: |- + Port overrides the port used for the OutOfBand reporting connection, e.g. to + reach a separate reporting sidecar. Defaults to the endpoint's port. + format: int32 + maximum: 65535 + minimum: 1 + type: integer + reportingPeriod: + description: |- + ReportingPeriod is how often Envoy requests load reports from the server. + Must be greater than 0. Defaults to 10s. + pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$ + type: string + x-kubernetes-validations: + - message: reportingPeriod must be greater + than 0 + rule: duration(self) > duration('0s') + type: object weightExpirationPeriod: description: If a given endpoint has not reported load metrics in this long, stop using the reported @@ -7164,7 +7706,7 @@ spec: Issuer MUST be a URI RFC 3986 [RFC3986] with a scheme component that MUST be https, a host component, and optionally, port and path components and no query or fragment components. - minLength: 1 + pattern: ^https://[^/?#@]+(/[^?#]*)?$ type: string tokenEndpoint: description: |- diff --git a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/templates/gatewayapi-safe-upgrade-policy.yaml b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/templates/gatewayapi-safe-upgrade-policy.yaml index 4a3513b78..bcf5595da 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/templates/gatewayapi-safe-upgrade-policy.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/charts/crds/templates/gatewayapi-safe-upgrade-policy.yaml @@ -35,22 +35,22 @@ apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicy metadata: annotations: - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: standard name: "safe-upgrades.gateway.networking.k8s.io" spec: failurePolicy: Fail matchConstraints: resourceRules: - - apiGroups: ["apiextensions.k8s.io"] - apiVersions: ["v1"] - operations: ["CREATE", "UPDATE"] - resources: ["*"] + - apiGroups: ["apiextensions.k8s.io"] + apiVersions: ["v1"] + operations: ["CREATE", "UPDATE"] + resources: ["*"] validations: - expression: "object.spec.group != 'gateway.networking.k8s.io' || oldObject == null || ( - has(object.metadata.annotations) && object.metadata.annotations.exists(k, k == 'gateway.networking.k8s.io/channel') && + has(object.metadata.annotations) && object.metadata.annotations.exists(k, k == 'gateway.networking.k8s.io/channel') && object.metadata.annotations['gateway.networking.k8s.io/channel'] == 'standard' ) || ( - oldObject != null && has(oldObject.metadata.annotations) && oldObject.metadata.annotations.exists(k, k == 'gateway.networking.k8s.io/channel') && + oldObject != null && has(oldObject.metadata.annotations) && oldObject.metadata.annotations.exists(k, k == 'gateway.networking.k8s.io/channel') && oldObject.metadata.annotations['gateway.networking.k8s.io/channel'] == 'experimental' )" message: "Installing experimental CRDs on top of standard channel CRDs is prohibited by default. Uninstall ValidatingAdmissionPolicy safe-upgrades.gateway.networking.k8s.io to install experimental CRDs on top of standard channel CRDs." reason: Invalid @@ -69,7 +69,7 @@ apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicyBinding metadata: annotations: - gateway.networking.k8s.io/bundle-version: v1.6.0 + gateway.networking.k8s.io/bundle-version: v1.6.1 gateway.networking.k8s.io/channel: standard name: safe-upgrades.gateway.networking.k8s.io spec: @@ -77,9 +77,9 @@ spec: validationActions: [Deny] matchResources: resourceRules: - - apiGroups: ["apiextensions.k8s.io"] - apiVersions: ["v1"] - resources: ["customresourcedefinitions"] - operations: ["CREATE", "UPDATE"] + - apiGroups: ["apiextensions.k8s.io"] + apiVersions: ["v1"] + resources: ["customresourcedefinitions"] + operations: ["CREATE", "UPDATE"] {{- end }} {{- end }} diff --git a/helm/infra-charts/obaas/charts/gateway-helm/templates/_helpers.tpl b/helm/infra-charts/obaas/charts/gateway-helm/templates/_helpers.tpl index 4afb36aa2..8f99abecf 100755 --- a/helm/infra-charts/obaas/charts/gateway-helm/templates/_helpers.tpl +++ b/helm/infra-charts/obaas/charts/gateway-helm/templates/_helpers.tpl @@ -112,49 +112,38 @@ Pull policy for the Envoy Gateway image. {{- end }} {{/* -Pull secrets for the Envoy Gateway image. +Normalize the string-list form used by OBaaS private-registry values to the +LocalObjectReference form required by Kubernetes PodSpec and EnvoyProxy. +Object-shaped entries are preserved for standalone gateway-helm values. */}} -{{- define "eg.normalizedImagePullSecrets" -}} -{{- $secrets := default (list) .secrets -}} -{{- if kindIs "string" $secrets -}} -{{- $secrets = list $secrets -}} -{{- end -}} -{{- if and (not $secrets) .secretName -}} -{{- $secrets = list .secretName -}} -{{- end -}} +{{- define "eg.pullSecrets.yaml" -}} {{- $normalized := list -}} -{{- range $secrets -}} -{{- if kindIs "string" . -}} -{{- if . -}} -{{- $normalized = append $normalized (dict "name" .) -}} -{{- end -}} -{{- else -}} -{{- $normalized = append $normalized . -}} -{{- end -}} +{{- range . -}} + {{- if kindIs "string" . -}} + {{- $normalized = append $normalized (dict "name" .) -}} + {{- else -}} + {{- $normalized = append $normalized . -}} + {{- end -}} {{- end -}} {{- toYaml $normalized -}} -{{- end }} - -{{- define "eg.renderImagePullSecrets" -}} -{{- $pullSecrets := include "eg.normalizedImagePullSecrets" . | trim -}} -{{- if eq $pullSecrets "[]" -}} -imagePullSecrets: [] -{{- else -}} -imagePullSecrets: -{{ $pullSecrets }} {{- end -}} -{{- end }} +{{/* +Pull secrets for the Envoy Gateway image. +*/}} {{- define "eg.image.pullSecrets" -}} -{{- $secrets := list -}} {{- if .Values.global.imagePullSecrets -}} -{{- $secrets = .Values.global.imagePullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.global.imagePullSecrets | nindent 2 }} {{- else if .Values.deployment.envoyGateway.imagePullSecrets -}} -{{- $secrets = .Values.deployment.envoyGateway.imagePullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.deployment.envoyGateway.imagePullSecrets | nindent 2 }} {{- else if .Values.global.images.envoyGateway.pullSecrets -}} -{{- $secrets = .Values.global.images.envoyGateway.pullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.global.images.envoyGateway.pullSecrets | nindent 2 }} +{{- else -}} +imagePullSecrets: [] {{- end }} -{{ include "eg.renderImagePullSecrets" (dict "secrets" $secrets "secretName" .Values.global.imagePullSecretName) }} {{- end }} {{/* @@ -167,7 +156,7 @@ The name of the Envoy Ratelimit image. {{- $repositoryTag := $imageParts._1 -}} {{- $repositoryParts := splitn ":" 2 $repositoryTag -}} {{- $repositoryName := $repositoryParts._0 -}} -{{- $imageTag := default "master" $repositoryParts._1 -}} +{{- $imageTag := default "8fe6ea42" $repositoryParts._1 -}} {{- printf "%s/%s:%s" $registryName $repositoryName $imageTag -}} {{- end -}} @@ -175,13 +164,15 @@ The name of the Envoy Ratelimit image. Pull secrets for the Envoy Ratelimit image. */}} {{- define "eg.ratelimit.image.pullSecrets" -}} -{{- $secrets := list -}} {{- if .Values.global.imagePullSecrets }} -{{- $secrets = .Values.global.imagePullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.global.imagePullSecrets | nindent 2 }} {{- else if .Values.global.images.ratelimit.pullSecrets -}} -{{- $secrets = .Values.global.images.ratelimit.pullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.global.images.ratelimit.pullSecrets | nindent 2 }} +{{- else }} +imagePullSecrets: [] {{- end }} -{{ include "eg.renderImagePullSecrets" (dict "secrets" $secrets "secretName" .Values.global.imagePullSecretName) }} {{- end }} {{/* @@ -194,7 +185,7 @@ Resolve the Envoy Proxy image. {{- $repositoryTag := $imageParts._1 -}} {{- $repositoryParts := splitn ":" 2 $repositoryTag -}} {{- $repositoryName := $repositoryParts._0 -}} -{{- $imageTag := default "distroless-dev" $repositoryParts._1 -}} +{{- $imageTag := default "distroless-v1.39.1" $repositoryParts._1 -}} {{- printf "%s/%s:%s" $registryName $repositoryName $imageTag -}} {{- end -}} @@ -202,13 +193,15 @@ Resolve the Envoy Proxy image. Resolve the Envoy Proxy image pull secrets. */}} {{- define "eg.envoyProxy.image.pullSecrets" -}} -{{- $secrets := list -}} {{- if .Values.global.imagePullSecrets }} -{{- $secrets = .Values.global.imagePullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.global.imagePullSecrets | nindent 2 }} {{- else if .Values.global.images.envoyProxy.pullSecrets -}} -{{- $secrets = .Values.global.images.envoyProxy.pullSecrets -}} +imagePullSecrets: +{{ include "eg.pullSecrets.yaml" .Values.global.images.envoyProxy.pullSecrets | nindent 2 }} +{{- else }} +imagePullSecrets: [] {{- end }} -{{ include "eg.renderImagePullSecrets" (dict "secrets" $secrets "secretName" .Values.global.imagePullSecretName) }} {{- end }} {{/* @@ -224,7 +217,7 @@ The default Envoy Gateway configuration. {{- $_ := set $container "imagePullPolicy" .Values.global.images.envoyProxy.pullPolicy }} {{- end }} {{- $deployment := dict "container" $container }} - {{- if or .Values.global.imagePullSecrets .Values.global.images.envoyProxy.pullSecrets .Values.global.imagePullSecretName }} + {{- if or .Values.global.imagePullSecrets .Values.global.images.envoyProxy.pullSecrets }} {{- $pullSecretsYaml := include "eg.envoyProxy.image.pullSecrets" . }} {{- $pullSecrets := dict "imagePullSecrets" ($pullSecretsYaml | fromYaml).imagePullSecrets }} {{- $_ := set $deployment "pod" $pullSecrets }} @@ -243,7 +236,7 @@ provider: rateLimitDeployment: container: image: {{ include "eg.ratelimit.image" . }} - {{- if (or .Values.global.imagePullSecrets .Values.global.images.ratelimit.pullSecrets .Values.global.imagePullSecretName) }} + {{- if (or .Values.global.imagePullSecrets .Values.global.images.ratelimit.pullSecrets) }} pod: {{- include "eg.ratelimit.image.pullSecrets" . | nindent 8 }} {{- end }} diff --git a/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-deployment.yaml b/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-deployment.yaml index 9018fe750..d6218a026 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-deployment.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-deployment.yaml @@ -73,12 +73,10 @@ spec: {{- end }} image: {{ include "eg.image" . }} imagePullPolicy: {{ include "eg.image.pullPolicy" . }} + startupProbe: + {{- toYaml .Values.deployment.envoyGateway.startupProbe | nindent 10 }} livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 + {{- toYaml .Values.deployment.envoyGateway.livenessProbe | nindent 10 }} name: envoy-gateway ports: {{- range .Values.deployment.ports }} @@ -90,11 +88,7 @@ spec: containerPort: 9443 {{- end }} readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 + {{- toYaml .Values.deployment.envoyGateway.readinessProbe | nindent 10 }} resources: {{- toYaml .Values.deployment.envoyGateway.resources | nindent 10 }} securityContext: diff --git a/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-poddisruptionbudget.yaml b/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-poddisruptionbudget.yaml index b0f60f450..0c6b1b962 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-poddisruptionbudget.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/templates/envoy-gateway-poddisruptionbudget.yaml @@ -11,6 +11,9 @@ spec: {{- if .Values.podDisruptionBudget.maxUnavailable }} maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }} {{- end }} + {{- if .Values.podDisruptionBudget.unhealthyPodEvictionPolicy }} + unhealthyPodEvictionPolicy: {{ .Values.podDisruptionBudget.unhealthyPodEvictionPolicy }} + {{- end }} selector: matchLabels: control-plane: envoy-gateway diff --git a/helm/infra-charts/obaas/charts/gateway-helm/templates/infra-manager-rbac.yaml b/helm/infra-charts/obaas/charts/gateway-helm/templates/infra-manager-rbac.yaml index a39eb57b3..51a57e323 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/templates/infra-manager-rbac.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/templates/infra-manager-rbac.yaml @@ -42,9 +42,11 @@ metadata: {{- include "eg.labels" . | nindent 4 }} rules: {{ include "eg.rbac.infra.basic" . }} -{{ if and (.Values.config.envoyGateway.provider.kubernetes) (.Values.config.envoyGateway.provider.kubernetes.watch) (.Values.config.envoyGateway.provider.kubernetes.deploy) (eq .Values.config.envoyGateway.provider.kubernetes.deploy.type "GatewayNamespace") (.Values.config.envoyGateway.provider.kubernetes.watch.namespaces) (gt (len .Values.config.envoyGateway.provider.kubernetes.watch.namespaces) 0) }} -{{ include "eg.rbac.controllernamespace.secrets.read" . }} -{{ end }} +{{ with .Values.config.envoyGateway.provider.kubernetes -}} + {{- if and .watch .deploy (eq .deploy.type "GatewayNamespace") .watch.namespaces (gt (len .watch.namespaces) 0) }} +{{ include "eg.rbac.controllernamespace.secrets.read" $ }} + {{- end }} +{{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding diff --git a/helm/infra-charts/obaas/charts/gateway-helm/templates/namespaced-infra-manager-rbac.yaml b/helm/infra-charts/obaas/charts/gateway-helm/templates/namespaced-infra-manager-rbac.yaml index 859374b06..25750f79c 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/templates/namespaced-infra-manager-rbac.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/templates/namespaced-infra-manager-rbac.yaml @@ -1,7 +1,7 @@ {{ $watchedNamespaces := list }} {{ if .Values.config.envoyGateway.provider.kubernetes }} {{ $kube := .Values.config.envoyGateway.provider.kubernetes }} -{{ if and ($kube.watch) ($kube.deploy) (eq $kube.deploy.type "GatewayNamespace") }} +{{ if and ($kube.watch) ($kube.deploy) }}{{ if eq $kube.deploy.type "GatewayNamespace" }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -33,6 +33,7 @@ subjects: {{ end }} {{ end }} {{ end }} +{{ end }} {{ if gt (len $watchedNamespaces) 0 }} {{ range $_, $ns := $watchedNamespaces }} --- diff --git a/helm/infra-charts/obaas/charts/gateway-helm/values.tmpl.yaml b/helm/infra-charts/obaas/charts/gateway-helm/values.tmpl.yaml index 8bbc9e0e6..b2ab03feb 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/values.tmpl.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/values.tmpl.yaml @@ -10,37 +10,45 @@ global: # Override image-specific values directly if a global override is not desired. images: envoyGateway: - # This is the full image name including the hub, repo, and tag. + # -- Full image for the Envoy Gateway control plane Deployment installed by this chart. image: ${GatewayImage} - # Specify image pull policy if default behavior isn't desired. + # -- Image pull policy for the Envoy Gateway control plane Deployment. # Default behavior: latest images will be Always else IfNotPresent. pullPolicy: ${GatewayImagePullPolicy} - # List of secrets in the same namespace of the component that can be used to pull images from private repositories. + # -- Pull secrets for the Envoy Gateway control plane Deployment. pullSecrets: [] ratelimit: # This is the full image name including the hub, repo, and tag. - image: "docker.io/envoyproxy/ratelimit:master" + image: "docker.io/envoyproxy/ratelimit:8fe6ea42" # Specify image pull policy if default behavior isn't desired. # Default behavior: latest images will be Always else IfNotPresent. pullPolicy: IfNotPresent # List of secrets in the same namespace of the component that can be used to pull images from private repositories. pullSecrets: [] envoyProxy: - # This is the full image name including the hub, repo, and tag for the Envoy Proxy data plane. - # If not specified, uses the default image built into envoy-gateway. + # -- Full image for the managed Envoy Proxy data plane. + # This updates the generated `envoyProxy` config and does not change the `envoy-gateway` + # control plane Deployment image. If not specified, the default image built into + # `envoy-gateway` is used. image: "" - # Specify image pull policy if default behavior isn't desired. + # -- Image pull policy for the managed Envoy Proxy data plane. # Default behavior: IfNotPresent. pullPolicy: "" - # List of secrets in the same namespace of the component that can be used to pull images from private repositories. + # -- Pull secrets for the managed Envoy Proxy data plane. pullSecrets: [] +# Values for CRDs dependency +crds: + # -- Install Envoy Gateway CRDs, Gateway API CRDs, and Gateway API safe upgrade policy resources. Set to false when these resources are managed separately. + enabled: true + # -- Labels to apply to all resources commonLabels: {} podDisruptionBudget: minAvailable: 0 # maxUnavailable: 1 + # unhealthyPodEvictionPolicy: IfHealthyBudget deployment: annotations: {} @@ -65,11 +73,44 @@ deployment: drop: - ALL privileged: false + readOnlyRootFilesystem: true runAsNonRoot: true runAsGroup: 65532 runAsUser: 65532 seccompProfile: type: RuntimeDefault + # -- Volume source for the Wasm module cache mounted at /var/lib/eg/wasm. Defaults to an emptyDir when left empty. + # Example: persist the Wasm module cache across controller restarts by backing it with a PersistentVolumeClaim: + # wasmCacheVolume: + # persistentVolumeClaim: + # claimName: envoy-gateway-wasm-cache + strategy: {} + wasmCacheVolume: {} + # Kubernetes best practice for controllers: use a startupProbe with a generous + # failure threshold to avoid premature liveness/readiness failures during initialization. + # Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-startup-probes + startupProbe: + httpGet: + path: /healthz + port: 8081 + failureThreshold: 30 + periodSeconds: 1 + successThreshold: 1 + timeoutSeconds: 1 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + periodSeconds: 20 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + httpGet: + path: /readyz + port: 8081 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 ports: - name: grpc port: 18000 @@ -108,6 +149,7 @@ deployment: runAsNonRoot: true runAsGroup: 65532 runAsUser: 65532 + fsGroup: 65532 seccompProfile: type: RuntimeDefault @@ -155,6 +197,13 @@ certgen: pod: annotations: {} labels: {} + securityContext: + runAsNonRoot: true + runAsGroup: 65532 + runAsUser: 65532 + fsGroup: 65532 + seccompProfile: + type: RuntimeDefault resources: {} affinity: {} tolerations: [] diff --git a/helm/infra-charts/obaas/charts/gateway-helm/values.yaml b/helm/infra-charts/obaas/charts/gateway-helm/values.yaml index eb7dd59b6..36394596e 100644 --- a/helm/infra-charts/obaas/charts/gateway-helm/values.yaml +++ b/helm/infra-charts/obaas/charts/gateway-helm/values.yaml @@ -10,29 +10,31 @@ global: # Override image-specific values directly if a global override is not desired. images: envoyGateway: - # This is the full image name including the hub, repo, and tag. - image: "docker.io/envoyproxy/gateway:v1.8.2" - # Specify image pull policy if default behavior isn't desired. + # -- Full image for the Envoy Gateway control plane Deployment installed by this chart. + image: docker.io/envoyproxy/gateway:v1.9.1 + # -- Image pull policy for the Envoy Gateway control plane Deployment. # Default behavior: latest images will be Always else IfNotPresent. - pullPolicy: Always - # List of secrets in the same namespace of the component that can be used to pull images from private repositories. + pullPolicy: IfNotPresent + # -- Pull secrets for the Envoy Gateway control plane Deployment. pullSecrets: [] ratelimit: # This is the full image name including the hub, repo, and tag. - image: "docker.io/envoyproxy/ratelimit:master" + image: "docker.io/envoyproxy/ratelimit:8fe6ea42" # Specify image pull policy if default behavior isn't desired. # Default behavior: latest images will be Always else IfNotPresent. pullPolicy: IfNotPresent # List of secrets in the same namespace of the component that can be used to pull images from private repositories. pullSecrets: [] envoyProxy: - # This is the full image name including the hub, repo, and tag for the Envoy Proxy data plane. - # If not specified, uses the default image built into envoy-gateway. - image: "docker.io/envoyproxy/envoy:distroless-v1.38.3" - # Specify image pull policy if default behavior isn't desired. + # -- Full image for the managed Envoy Proxy data plane. + # This updates the generated `envoyProxy` config and does not change the `envoy-gateway` + # control plane Deployment image. If not specified, the default image built into + # `envoy-gateway` is used. + image: "" + # -- Image pull policy for the managed Envoy Proxy data plane. # Default behavior: IfNotPresent. - pullPolicy: IfNotPresent - # List of secrets in the same namespace of the component that can be used to pull images from private repositories. + pullPolicy: "" + # -- Pull secrets for the managed Envoy Proxy data plane. pullSecrets: [] # Values for CRDs dependency @@ -46,6 +48,7 @@ commonLabels: {} podDisruptionBudget: minAvailable: 0 # maxUnavailable: 1 + # unhealthyPodEvictionPolicy: IfHealthyBudget deployment: annotations: {} @@ -68,7 +71,7 @@ deployment: allowPrivilegeEscalation: false capabilities: drop: - - ALL + - ALL privileged: false readOnlyRootFilesystem: true runAsNonRoot: true @@ -83,6 +86,31 @@ deployment: # claimName: envoy-gateway-wasm-cache strategy: {} wasmCacheVolume: {} + # Kubernetes best practice for controllers: use a startupProbe with a generous + # failure threshold to avoid premature liveness/readiness failures during initialization. + # Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-startup-probes + startupProbe: + httpGet: + path: /healthz + port: 8081 + failureThreshold: 30 + periodSeconds: 1 + successThreshold: 1 + timeoutSeconds: 1 + livenessProbe: + httpGet: + path: /healthz + port: 8081 + periodSeconds: 20 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + httpGet: + path: /readyz + port: 8081 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 ports: - name: grpc port: 18000 @@ -142,7 +170,7 @@ hpa: behavior: {} config: - # -- EnvoyGateway configuration. Visit https://gateway.envoyproxy.io/docs/api/extension_types/#envoygateway to view all options. +# -- EnvoyGateway configuration. Visit https://gateway.envoyproxy.io/docs/api/extension_types/#envoygateway to view all options. envoyGateway: gateway: controllerName: gateway.envoyproxy.io/gatewayclass-controller @@ -185,7 +213,7 @@ certgen: allowPrivilegeEscalation: false capabilities: drop: - - ALL + - ALL privileged: false readOnlyRootFilesystem: true runAsNonRoot: true diff --git a/helm/infra-charts/obaas/charts/signoz-0.134.0.tgz b/helm/infra-charts/obaas/charts/signoz-0.134.0.tgz deleted file mode 100644 index eb5e7806f..000000000 Binary files a/helm/infra-charts/obaas/charts/signoz-0.134.0.tgz and /dev/null differ diff --git a/helm/infra-charts/obaas/charts/signoz-0.142.1.tgz b/helm/infra-charts/obaas/charts/signoz-0.142.1.tgz new file mode 100644 index 000000000..7f0411b02 Binary files /dev/null and b/helm/infra-charts/obaas/charts/signoz-0.142.1.tgz differ diff --git a/helm/infra-charts/obaas/dashboards/1/apache-apisix.json b/helm/infra-charts/obaas/dashboards/1/apache-apisix.json index 7fbe4e1db..9594bb6c9 100644 --- a/helm/infra-charts/obaas/dashboards/1/apache-apisix.json +++ b/helm/infra-charts/obaas/dashboards/1/apache-apisix.json @@ -1,2926 +1,1614 @@ { - "description": "MicroService API Gateway Apache APISIX", - "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", - "layout": [ - { - "h": 1, - "i": "2488460f-94df-47f4-903f-b2c8a92778a0", - "maxH": 1, - "minH": 1, - "minW": 12, - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 0 - }, - { - "h": 8, - "i": "51d09349-b65e-42e6-8871-488e98a5cab5", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 1 - }, - { - "h": 8, - "i": "7becb23c-250a-4bb4-aefd-a3e7f4908d9f", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 1 - }, - { - "h": 8, - "i": "7d6a6e7d-1a17-4f49-9aad-6c0c81a8c0ce", - "moved": false, - "static": false, - "w": 2, - "x": 4, - "y": 1 - }, - { - "h": 8, - "i": "8e49aded-11b2-45b4-918d-2659e2fe15c8", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 1 - }, - { - "h": 1, - "i": "93c65502-cc44-4cac-9f78-752153b45b76", - "maxH": 1, - "minH": 1, - "minW": 12, - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 9 - }, - { - "h": 8, - "i": "a8d0d914-2f47-4db4-b0ce-a1e166e62d6c", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 10 - }, - { - "h": 8, - "i": "052e360a-4099-4610-ac9d-421188eceafd", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 18 - }, - { - "h": 8, - "i": "af0924a0-17a2-4e53-84e5-3741320a05ab", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 18 - }, - { - "h": 1, - "i": "6efdc9e3-cd59-4b41-b124-4f8767186f9e", - "maxH": 1, - "minH": 1, - "minW": 12, - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 26 - }, - { - "h": 8, - "i": "072d5f2a-191c-40f4-8d58-351ab8058513", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 27 - }, - { - "h": 8, - "i": "753f44e6-473f-48da-9c37-11bfda3517d9", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 35 - }, - { - "h": 8, - "i": "d3a7e234-83fe-499b-8846-243e8d8718fc", - "moved": false, - "static": false, - "w": 4, - "x": 0, - "y": 43 - }, - { - "h": 8, - "i": "f55874f1-8979-46e1-b787-f74cee23d509", - "moved": false, - "static": false, - "w": 4, - "x": 4, - "y": 43 - }, - { - "h": 8, - "i": "46cdbcad-8d52-4f63-9130-bc03230b77ab", - "moved": false, - "static": false, - "w": 4, - "x": 8, - "y": 43 - }, - { - "h": 1, - "i": "5939d2eb-42ea-42b4-ad43-b149abc6f17d", - "maxH": 1, - "minH": 1, - "minW": 12, - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 51 - }, - { - "h": 9, - "i": "7e254b81-e050-4650-8aad-7e2691b5cb16", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 52 - }, - { - "h": 9, - "i": "73017c8b-29c6-4493-b274-6a8a2cfd6b32", - "moved": false, - "static": false, - "w": 3, - "x": 6, - "y": 52 - }, - { - "h": 9, - "i": "19ba4ab0-a2fd-4135-be0b-070de0ea6dc2", - "moved": false, - "static": false, - "w": 3, - "x": 9, - "y": 52 + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Apache APISIX", + "description": "MicroService API Gateway Apache APISIX" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "apisix_instance", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'hostname')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')" + } + }, + "name": "apisix_instance" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "gateway_ip_port", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'http_host')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'hostname') in {{.apisix_instance}})" + } + }, + "name": "gateway_ip_port" } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "uri", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'uri')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'uri') != '')\nand (JSONExtractString(labels, 'hostname') in {{.apisix_instance}})\nand (JSONExtractString(labels, 'http_host') in {{.gateway_ip_port}})\n\n" + } + }, + "name": "uri" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "route_id", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'route')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'uri') != '')\nand (JSONExtractString(labels, 'route') != '')\n\n" + } + }, + "name": "route_id" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "target_pod_ip_port", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'upstream_addr')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'uri') in {{.uri}})\nand (JSONExtractString(labels, 'route') in {{.route_id}})" + } + }, + "name": "target_pod_ip_port" + } + } ], - "panelMap": { - "2488460f-94df-47f4-903f-b2c8a92778a0": { - "collapsed": false, - "widgets": [ - { - "h": 8, - "i": "51d09349-b65e-42e6-8871-488e98a5cab5", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 1 - }, - { - "h": 8, - "i": "7becb23c-250a-4bb4-aefd-a3e7f4908d9f", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 1 - }, - { - "h": 8, - "i": "7d6a6e7d-1a17-4f49-9aad-6c0c81a8c0ce", - "moved": false, - "static": false, - "w": 2, - "x": 4, - "y": 1 - }, - { - "h": 8, - "i": "8e49aded-11b2-45b4-918d-2659e2fe15c8", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 1 + "panels": { + "052e360a-4099-4610-ac9d-421188eceafd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Ingress per uri", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ] - }, - "5939d2eb-42ea-42b4-ad43-b149abc6f17d": { - "collapsed": false, - "widgets": [ - { - "h": 8, - "i": "7e254b81-e050-4650-8aad-7e2691b5cb16", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 287 - }, - { - "h": 9, - "i": "73017c8b-29c6-4493-b274-6a8a2cfd6b32", - "moved": false, - "static": false, - "w": 3, - "x": 6, - "y": 287 - }, - { - "h": 9, - "i": "19ba4ab0-a2fd-4135-be0b-070de0ea6dc2", - "moved": false, - "static": false, - "w": 3, - "x": 9, - "y": 287 + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_bandwidth", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(uri = '.uri' AND route = '.route_id' AND hostname = '.apisix_instance' AND type = 'ingress')" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{uri}}" + } } - ] - }, - "6efdc9e3-cd59-4b41-b124-4f8767186f9e": { - "collapsed": false, - "widgets": [ - { - "h": 8, - "i": "072d5f2a-191c-40f4-8d58-351ab8058513", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 107 - }, - { - "h": 8, - "i": "753f44e6-473f-48da-9c37-11bfda3517d9", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 115 - }, - { - "h": 8, - "i": "d3a7e234-83fe-499b-8846-243e8d8718fc", - "moved": false, - "static": false, - "w": 4, - "x": 0, - "y": 123 - }, - { - "h": 8, - "i": "f55874f1-8979-46e1-b787-f74cee23d509", - "moved": false, - "static": false, - "w": 4, - "x": 4, - "y": 123 - }, - { - "h": 8, - "i": "227a0ce2-2ed5-4a53-90d1-74a907313b97", - "moved": false, - "static": false, - "w": 4, - "x": 8, - "y": 123 + } + } + ], + "links": [] + } + }, + "072d5f2a-191c-40f4-8d58-351ab8058513": { + "kind": "Panel", + "spec": { + "display": { + "name": "Requests per second (RPS) by status code", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ] - }, - "93c65502-cc44-4cac-9f78-752153b45b76": { - "collapsed": false, - "widgets": [ - { - "h": 8, - "i": "a8d0d914-2f47-4db4-b0ce-a1e166e62d6c", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 26 - }, - { - "h": 8, - "i": "052e360a-4099-4610-ac9d-421188eceafd", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 34 - }, - { - "h": 8, - "i": "af0924a0-17a2-4e53-84e5-3741320a05ab", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 34 + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_status", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(uri = '.uri' AND route = '.route_id' AND hostname = '.apisix_instance')" + }, + "groupBy": [ + { + "name": "code", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{code}}" + } } - ] + } + } + ], + "links": [] } - }, - "tags": [], - "title": "Apache APISIX", - "uploadedGrafana": false, - "uuid": "01997ae1-3264-7d4c-ae07-f29969f14fdf", - "variables": { - "08e2079f-4fe6-4625-b920-d17689985de3": { - "allSelected": true, - "customValue": "", - "defaultValue": "", - "description": "", - "id": "08e2079f-4fe6-4625-b920-d17689985de3", - "key": "08e2079f-4fe6-4625-b920-d17689985de3", - "modificationUUID": "0a0cde8f-0ff1-4ac2-9d56-41b73f17c7a2", - "multiSelect": true, - "name": "apisix_instance", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'hostname')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - }, - "183c6709-cbdc-4af1-8413-2dc26d0458d8": { - "allSelected": true, - "customValue": "", - "defaultValue": "", - "description": "", - "id": "183c6709-cbdc-4af1-8413-2dc26d0458d8", - "modificationUUID": "0f7e5c98-14fe-45ce-af54-961d012fb5a6", - "multiSelect": true, - "name": "uri", - "order": 2, - "queryValue": "SELECT distinct JSONExtractString(labels, 'uri')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'uri') != '')\nand (JSONExtractString(labels, 'hostname') in {{.apisix_instance}})\nand (JSONExtractString(labels, 'http_host') in {{.gateway_ip_port}})\n\n", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - }, - "40bbb6c8-b187-4757-b436-40a25da3073c": { - "allSelected": true, - "customValue": "", - "defaultValue": "", - "description": "", - "id": "40bbb6c8-b187-4757-b436-40a25da3073c", - "key": "40bbb6c8-b187-4757-b436-40a25da3073c", - "modificationUUID": "b4d5c37a-0c76-4718-a27b-194534b83535", - "multiSelect": true, - "name": "gateway_ip_port", - "order": 1, - "queryValue": "SELECT distinct JSONExtractString(labels, 'http_host')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'hostname') in {{.apisix_instance}})", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - }, - "87107f68-fdbb-489f-9bd7-bbed6db26e03": { - "allSelected": true, - "customValue": "", - "description": "", - "id": "87107f68-fdbb-489f-9bd7-bbed6db26e03", - "key": "87107f68-fdbb-489f-9bd7-bbed6db26e03", - "modificationUUID": "d6694a09-3d29-46f9-bcc5-1b85ec35ff82", - "multiSelect": true, - "name": "target_pod_ip_port", - "order": 4, - "queryValue": "SELECT distinct JSONExtractString(labels, 'upstream_addr')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'uri') in {{.uri}})\nand (JSONExtractString(labels, 'route') in {{.route_id}})", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - }, - "c6fa20bb-6d5b-43f4-a76d-1a66b18a6a5f": { - "allSelected": true, - "customValue": "", - "description": "", - "id": "c6fa20bb-6d5b-43f4-a76d-1a66b18a6a5f", - "key": "c6fa20bb-6d5b-43f4-a76d-1a66b18a6a5f", - "modificationUUID": "5eb854de-5f09-4537-b4fb-6b4215d352a9", - "multiSelect": true, - "name": "route_id", - "order": 3, - "queryValue": "SELECT distinct JSONExtractString(labels, 'route')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'apisix_http_status')\nand (JSONExtractString(labels, 'uri') != '')\nand (JSONExtractString(labels, 'route') != '')\n\n", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" + }, + "19ba4ab0-a2fd-4135-be0b-070de0ea6dc2": { + "kind": "Panel", + "spec": { + "display": { + "name": "Nginx metric errors", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_nginx_metric_errors_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] } - }, - "version": "v4", - "widgets": [ - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] - }, - "customLegendColors": {}, - "description": "", - "fillSpans": false, - "id": "51d09349-b65e-42e6-8871-488e98a5cab5", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_http_requests_total", - "reduceTo": "last", - "spaceAggregation": "sum", - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60 + }, + "46cdbcad-8d52-4f63-9130-bc03230b77ab": { + "kind": "Panel", + "spec": { + "display": { + "name": "Upstream Latency", + "description": "" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "type IN ['upstream'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "c02b27cc-0290-433b-8555-6271a8e282ae", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p95", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "type IN ['upstream'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p99", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "type IN ['upstream'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + } + ] + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "51d09349-b65e-42e6-8871-488e98a5cab5": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Requests", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_requests_total", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Requests", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] - }, - "customLegendColors": {}, - "description": "", - "fillSpans": false, - "id": "7becb23c-250a-4bb4-aefd-a3e7f4908d9f", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_nginx_http_current_connections", - "reduceTo": "last", - "spaceAggregation": "sum", - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "state = 'accepted'" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60 - } + } + } + ], + "links": [] + } + }, + "73017c8b-29c6-4493-b274-6a8a2cfd6b32": { + "kind": "Panel", + "spec": { + "display": { + "name": "Etcd reachable", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "bool_yes_no", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_etcd_reachable", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "a4f372f0-57c1-40da-80c8-adb925989eea", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "753f44e6-473f-48da-9c37-11bfda3517d9": { + "kind": "Panel", + "spec": { + "display": { + "name": "Requests per second (RPS) by uri", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Accepted Connections", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] - }, - "customLegendColors": {}, - "description": "", - "fillSpans": false, - "id": "7d6a6e7d-1a17-4f49-9aad-6c0c81a8c0ce", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_nginx_http_current_connections", - "reduceTo": "last", - "spaceAggregation": "sum", - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "state = 'handled'" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60 - } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_status", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "8fea6d57-7e73-42a4-9716-6cd7e4972eaa", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "disabled": false, + "filter": { + "expression": "(uri = '.uri' AND route = '.route_id' AND hostname = '.apisix_instance')" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{uri}}" + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "7becb23c-250a-4bb4-aefd-a3e7f4908d9f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Accepted Connections", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_nginx_http_current_connections", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'accepted'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Handled Connections", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] - }, - "customLegendColors": {}, - "description": "", - "fillSpans": true, - "id": "8e49aded-11b2-45b4-918d-2659e2fe15c8", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_nginx_http_current_connections", - "reduceTo": "avg", - "spaceAggregation": "sum", - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "state--string--tag", - "isColumn": false, - "isJSON": false, - "key": "state", - "type": "tag" - } - ], - "having": { - "expression": "" - }, - "legend": "{{state}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60 - } + } + } + ], + "links": [] + } + }, + "7d6a6e7d-1a17-4f49-9aad-6c0c81a8c0ce": { + "kind": "Panel", + "spec": { + "display": { + "name": "Handled Connections", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_nginx_http_current_connections", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "a324041f-b39d-45b2-8ca3-13890724a876", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "disabled": false, + "filter": { + "expression": "state = 'handled'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "7e254b81-e050-4650-8aad-7e2691b5cb16": { + "kind": "Panel", + "spec": { + "display": { + "name": "Etcd modify indexes", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Nginx connection state", - "yAxisUnit": "none" - }, - { - "description": "", - "id": "2488460f-94df-47f4-903f-b2c8a92778a0", - "panelTypes": "row", - "title": "Nginx" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "a8d0d914-2f47-4db4-b0ce-a1e166e62d6c", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_bandwidth--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_bandwidth", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [ - { - "id": "c0afff11", - "key": { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - }, - "op": "in", - "value": [ - ".uri" - ] - }, - { - "id": "b79e3e7c", - "key": { - "dataType": "string", - "id": "route--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "route", - "type": "tag" - }, - "op": "in", - "value": [ - ".route_id" - ] - }, - { - "id": "b687186d", - "key": { - "dataType": "string", - "id": "hostname--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "hostname", - "type": "tag" - }, - "op": "in", - "value": [ - ".apisix_instance" - ] - } - ], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "type--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "type", - "type": "tag" - } - ], - "having": [], - "legend": "{{type}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate" - } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_etcd_modify_indexes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "1411e1de-7936-4fb6-b573-81df5daee785", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "disabled": false, + "groupBy": [ + { + "name": "key", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{key}}" + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "8e49aded-11b2-45b4-918d-2659e2fe15c8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Nginx connection state", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Bandwidth", - "yAxisUnit": "decbytes" - }, - { - "description": "", - "id": "93c65502-cc44-4cac-9f78-752153b45b76", - "panelTypes": "row", - "title": "Bandwidth" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "052e360a-4099-4610-ac9d-421188eceafd", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_bandwidth--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_bandwidth", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [ - { - "id": "a3a298bb", - "key": { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - }, - "op": "in", - "value": [ - ".uri" - ] - }, - { - "id": "a497951b", - "key": { - "dataType": "string", - "id": "route--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "route", - "type": "tag" - }, - "op": "in", - "value": [ - ".route_id" - ] - }, - { - "id": "caa65f7a", - "key": { - "dataType": "string", - "id": "hostname--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "hostname", - "type": "tag" - }, - "op": "in", - "value": [ - ".apisix_instance" - ] - }, - { - "id": "1ef71685", - "key": { - "dataType": "string", - "id": "type--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "type", - "type": "tag" - }, - "op": "=", - "value": "ingress" - } - ], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - } - ], - "having": [], - "legend": "{{uri}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate" - } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_nginx_http_current_connections", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "127ed4e8-d307-4776-8990-056a9905cc0a", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "disabled": false, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{state}}" + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "a8d0d914-2f47-4db4-b0ce-a1e166e62d6c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Bandwidth", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Ingress per uri", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "af0924a0-17a2-4e53-84e5-3741320a05ab", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_bandwidth--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_bandwidth", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [ - { - "id": "8f33e907", - "key": { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - }, - "op": "in", - "value": [ - ".uri" - ] - }, - { - "id": "98b5df67", - "key": { - "dataType": "string", - "id": "route--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "route", - "type": "tag" - }, - "op": "in", - "value": [ - ".route_id" - ] - }, - { - "id": "58522b29", - "key": { - "dataType": "string", - "id": "hostname--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "hostname", - "type": "tag" - }, - "op": "in", - "value": [ - ".apisix_instance" - ] - }, - { - "id": "6abd32ae", - "key": { - "dataType": "string", - "id": "type--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "type", - "type": "tag" - }, - "op": "=", - "value": "egress" - } - ], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - } - ], - "having": [], - "legend": "{{uri}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate" - } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_bandwidth", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "87db93d9-9a8f-44f9-9fc5-4cbcc8d331c0", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "disabled": false, + "filter": { + "expression": "(uri = '.uri' AND route = '.route_id' AND hostname = '.apisix_instance')" + }, + "groupBy": [ + { + "name": "type", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{type}}" + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "af0924a0-17a2-4e53-84e5-3741320a05ab": { + "kind": "Panel", + "spec": { + "display": { + "name": "Egress per uri", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Egress per uri", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "072d5f2a-191c-40f4-8d58-351ab8058513", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_http_status--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_http_status", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [ - { - "id": "78c425e2", - "key": { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - }, - "op": "in", - "value": [ - ".uri" - ] - }, - { - "id": "adc9f3d1", - "key": { - "dataType": "string", - "id": "route--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "route", - "type": "tag" - }, - "op": "in", - "value": [ - ".route_id" - ] - }, - { - "id": "69d66b58", - "key": { - "dataType": "string", - "id": "hostname--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "hostname", - "type": "tag" - }, - "op": "in", - "value": [ - ".apisix_instance" - ] - } - ], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "code--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "code", - "type": "tag" - } - ], - "having": [], - "legend": "{{code}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate" - } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_bandwidth", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "aec29f0c-5338-49f6-9e8f-fae1f79acddc", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "disabled": false, + "filter": { + "expression": "(uri = '.uri' AND route = '.route_id' AND hostname = '.apisix_instance' AND type = 'egress')" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{uri}}" + } } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Requests per second (RPS) by status code", - "yAxisUnit": "reqps" - }, - { - "description": "", - "id": "6efdc9e3-cd59-4b41-b124-4f8767186f9e", - "panelTypes": "row", - "title": "HTTP" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "753f44e6-473f-48da-9c37-11bfda3517d9", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_http_status--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_http_status", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [ - { - "id": "b23335c5", - "key": { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - }, - "op": "in", - "value": [ - ".uri" - ] - }, - { - "id": "1be3c31f", - "key": { - "dataType": "string", - "id": "route--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "route", - "type": "tag" - }, - "op": "in", - "value": [ - ".route_id" - ] - }, - { - "id": "47d1ce0b", - "key": { - "dataType": "string", - "id": "hostname--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "hostname", - "type": "tag" - }, - "op": "in", - "value": [ - ".apisix_instance" - ] - } - ], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "uri--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "uri", - "type": "tag" - } - ], - "having": [], - "legend": "{{uri}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate" + } + } + ], + "links": [] + } + }, + "d3a7e234-83fe-499b-8846-243e8d8718fc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Request Latency", + "description": "" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "uri in ['.uri'] AND hostname in ['.apisix_instance'] AND type IN ['request']" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "0a69c7a6-2ad9-48b3-895f-ce43a15dfe54", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p95", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "uri in ['.uri'] AND hostname in ['.apisix_instance'] AND type IN ['request']" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p99", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "uri in ['.uri'] AND hostname in ['.apisix_instance'] AND type IN ['request']" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + } + } + ], + "links": [] + } + }, + "f55874f1-8979-46e1-b787-f74cee23d509": { + "kind": "Panel", + "spec": { + "display": { + "name": "APISIX Latency", + "description": "" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "type IN ['apisix'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p95", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "type IN ['apisix'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "apisix_http_latency.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p99", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "type IN ['apisix'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + } + ] + } } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Requests per second (RPS) by uri", - "yAxisUnit": "reqps" - }, - { - "bucketCount": 100, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Nginx", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 2, + "height": 8, + "content": { + "$ref": "#/spec/panels/51d09349-b65e-42e6-8871-488e98a5cab5" + } }, - "customLegendColors": {}, - "description": "", - "fillSpans": false, - "id": "d3a7e234-83fe-499b-8846-243e8d8718fc", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "histogram", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p90", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "uri in ['.uri'] AND hostname in ['.apisix_instance'] AND type IN ['request']" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "le--string--tag", - "isColumn": false, - "isJSON": false, - "key": "le", - "type": "tag" - } - ], - "having": { - "expression": "" - }, - "legend": "p90", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60 - }, - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p95", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filter": { - "expression": "uri in ['.uri'] AND hostname in ['.apisix_instance'] AND type IN ['request']" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "le--string--tag", - "isColumn": false, - "isJSON": false, - "key": "le", - "type": "tag" - } - ], - "having": { - "expression": "" - }, - "legend": "p95", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": 60 - }, - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p99", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filter": { - "expression": "uri in ['.uri'] AND hostname in ['.apisix_instance'] AND type IN ['request']" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "le--string--tag", - "isColumn": false, - "isJSON": false, - "key": "le", - "type": "tag" - } - ], - "having": { - "expression": "" - }, - "legend": "p99", - "limit": null, - "orderBy": [], - "queryName": "C", - "source": "", - "stepInterval": 60 - } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "61244c97-367d-4389-b0f8-1f5f098f8bce", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" + { + "x": 2, + "y": 0, + "width": 2, + "height": 8, + "content": { + "$ref": "#/spec/panels/7becb23c-250a-4bb4-aefd-a3e7f4908d9f" + } }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Request Latency", - "yAxisUnit": "ms" - }, - { - "bucketCount": 100, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] + { + "x": 4, + "y": 0, + "width": 2, + "height": 8, + "content": { + "$ref": "#/spec/panels/7d6a6e7d-1a17-4f49-9aad-6c0c81a8c0ce" + } }, - "customLegendColors": {}, - "description": "", - "fillSpans": false, - "id": "f55874f1-8979-46e1-b787-f74cee23d509", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "histogram", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p90", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "type IN ['apisix'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "p90", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": null - }, - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p95", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filter": { - "expression": "type IN ['apisix'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "p95", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": null - }, - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p99", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filter": { - "expression": "type IN ['apisix'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "p95", - "limit": null, - "orderBy": [], - "queryName": "C", - "source": "", - "stepInterval": null - } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "b6a31a91-ed33-458f-a111-581bb98d37ea", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" + { + "x": 6, + "y": 0, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/8e49aded-11b2-45b4-918d-2659e2fe15c8" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Bandwidth", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 8, + "content": { + "$ref": "#/spec/panels/a8d0d914-2f47-4db4-b0ce-a1e166e62d6c" + } }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "APISIX Latency", - "yAxisUnit": "ms" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "7e254b81-e050-4650-8aad-7e2691b5cb16", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_etcd_modify_indexes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_etcd_modify_indexes", - "type": "Gauge" - }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "key--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "key", - "type": "tag" - } - ], - "having": [], - "legend": "{{key}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "sum" - } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "27c619eb-38b0-4023-90dd-41ce2123d956", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" + { + "x": 0, + "y": 8, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/052e360a-4099-4610-ac9d-421188eceafd" + } }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Etcd modify indexes", - "yAxisUnit": "none" - }, - { - "description": "", - "id": "5939d2eb-42ea-42b4-ad43-b149abc6f17d", - "panelTypes": "row", - "title": "Misc." - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "73017c8b-29c6-4493-b274-6a8a2cfd6b32", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_etcd_reachable--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_etcd_reachable", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest" - } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "b7d8829c-4bef-4b2c-bbc8-8f5a05d3002b", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" + { + "x": 6, + "y": 8, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/af0924a0-17a2-4e53-84e5-3741320a05ab" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "HTTP", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 8, + "content": { + "$ref": "#/spec/panels/072d5f2a-191c-40f4-8d58-351ab8058513" + } }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Etcd reachable", - "yAxisUnit": "bool_yes_no" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": true, - "id": "19ba4ab0-a2fd-4135-be0b-070de0ea6dc2", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "apisix_nginx_metric_errors_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "apisix_nginx_metric_errors_total", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate" - } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "9a6c4af3-9301-422c-9c92-40ae366a885c", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" + { + "x": 0, + "y": 8, + "width": 12, + "height": 8, + "content": { + "$ref": "#/spec/panels/753f44e6-473f-48da-9c37-11bfda3517d9" + } }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Nginx metric errors", - "yAxisUnit": "none" - }, - { - "bucketCount": 100, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] + { + "x": 0, + "y": 16, + "width": 4, + "height": 8, + "content": { + "$ref": "#/spec/panels/d3a7e234-83fe-499b-8846-243e8d8718fc" + } }, - "customLegendColors": {}, - "description": "", - "fillSpans": false, - "id": "46cdbcad-8d52-4f63-9130-bc03230b77ab", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "histogram", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p90", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "type IN ['upstream'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "p90", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": null - }, - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p95", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filter": { - "expression": "type IN ['upstream'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "p95", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": null - }, - { - "aggregations": [ - { - "metricName": "apisix_http_latency.bucket", - "reduceTo": "avg", - "spaceAggregation": "p99", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filter": { - "expression": "type IN ['upstream'] AND hostname IN ['.apisix_instance'] AND uri IN ['.uri']" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "p95", - "limit": null, - "orderBy": [], - "queryName": "C", - "source": "", - "stepInterval": null - } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "7cdcdc4b-35cd-4210-9540-8ab366fd7455", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "queryType": "builder" + { + "x": 4, + "y": 16, + "width": 4, + "height": 8, + "content": { + "$ref": "#/spec/panels/f55874f1-8979-46e1-b787-f74cee23d509" + } }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Upstream Latency", - "yAxisUnit": "ms" + { + "x": 8, + "y": 16, + "width": 4, + "height": 8, + "content": { + "$ref": "#/spec/panels/46cdbcad-8d52-4f63-9130-bc03230b77ab" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Misc.", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 9, + "content": { + "$ref": "#/spec/panels/7e254b81-e050-4650-8aad-7e2691b5cb16" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 9, + "content": { + "$ref": "#/spec/panels/73017c8b-29c6-4493-b274-6a8a2cfd6b32" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 9, + "content": { + "$ref": "#/spec/panels/19ba4ab0-a2fd-4135-be0b-070de0ea6dc2" + } + } + ] } - ] -} \ No newline at end of file + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/db-calls-monitoring.json b/helm/infra-charts/obaas/dashboards/1/db-calls-monitoring.json index 0155257e3..7043dcdcd 100644 --- a/helm/infra-charts/obaas/dashboards/1/db-calls-monitoring.json +++ b/helm/infra-charts/obaas/dashboards/1/db-calls-monitoring.json @@ -1 +1,548 @@ -{"description":"Built on top of available DB attributes from opentelemetry: https://opentelemetry.io/docs/specs/semconv/attributes-registry/db/","dotMigrated":true,"image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":6,"i":"057b5e82-35ca-40fa-b8a3-c6f5d23433c0","moved":false,"static":false,"w":6,"x":0,"y":0},{"h":6,"i":"ba27811a-2716-4a25-9f84-dbf30896b2e8","moved":false,"static":false,"w":6,"x":6,"y":0},{"h":6,"i":"7522011f-7111-4707-9686-bb052dd827a7","moved":false,"static":false,"w":6,"x":6,"y":6},{"h":7,"i":"e3b48480-d15c-44eb-a054-13ffa59a9227","moved":false,"static":false,"w":12,"x":0,"y":12}],"panelMap":{},"tags":[],"title":"DB Calls Monitoring","uploadedGrafana":false,"uuid":"0199ec29-9c5d-79eb-a80e-6742f641d604","variables":{"4789176f-8aaa-40da-83f7-68fa152c0449":{"allSelected":false,"customValue":"","description":"","id":"4789176f-8aaa-40da-83f7-68fa152c0449","modificationUUID":"915613fb-a7ec-4feb-add0-1938f60eebab","multiSelect":false,"name":"service.name","order":0,"queryValue":"SELECT JSONExtractString(labels, 'service.name') AS `service.name` FROM signoz_metrics.time_series_v4_1day WHERE (metric_name = 'signoz_calls_total') AND (unix_milli >= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000)) GROUP BY `service.name`","showALLOption":false,"sort":"DISABLED","textboxValue":"","type":"QUERY"}},"version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"ns","C":"reqps"},"description":"","fillSpans":false,"id":"ba27811a-2716-4a25-9f84-dbf30896b2e8","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"count","dataSource":"traces","disabled":false,"expression":"A","filters":{"items":[{"id":"3b0cb173","key":{"dataType":"string","id":"dbSystem--string--tag--true","isColumn":true,"isJSON":false,"key":"dbSystem","type":"tag"},"op":"exists","value":""},{"id":"ae4b278f","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"=","value":"{{.service.name}}"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"dbName--string--tag--true","isColumn":true,"isJSON":false,"key":"dbName","type":"tag"},{"dataType":"string","id":"db.statement--string--tag--false","isColumn":false,"isJSON":false,"key":"db.statement","type":"tag"}],"having":[],"legend":"Total Calls","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"count"},{"aggregateAttribute":{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},"aggregateOperator":"p50","dataSource":"traces","disabled":false,"expression":"B","filters":{"items":[{"id":"db68f5e5","key":{"dataType":"string","id":"dbSystem--string--tag--true","isColumn":true,"isJSON":false,"key":"dbSystem","type":"tag"},"op":"exists","value":""},{"id":"222ede69","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"=","value":"{{.service.name}}"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"dbName--string--tag--true","isColumn":true,"isJSON":false,"key":"dbName","type":"tag"},{"dataType":"string","id":"db.statement--string--tag--false","isColumn":false,"isJSON":false,"key":"db.statement","type":"tag"}],"having":[],"legend":"Average Duration","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"p50"},{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"rate","dataSource":"traces","disabled":false,"expression":"C","filters":{"items":[{"id":"23e50257","key":{"dataType":"string","id":"dbSystem--string--tag--true","isColumn":true,"isJSON":false,"key":"dbSystem","type":"tag"},"op":"exists","value":""},{"id":"ba5fb30d","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"=","value":"{{.service.name}}"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"dbName--string--tag--true","isColumn":true,"isJSON":false,"key":"dbName","type":"tag"},{"dataType":"string","id":"db.statement--string--tag--false","isColumn":false,"isJSON":false,"key":"db.statement","type":"tag"}],"having":[],"legend":"Rate","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"9f83ebf2-7e19-4099-8f1c-67ab3dc9e434","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Top DB Statements","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"ns"},"columnWidths":{"date":145,"db.statement":145,"dbOperation":145,"durationNano":145,"name":145,"serviceName":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"e3b48480-d15c-44eb-a054-13ffa59a9227","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"list","query":{"builder":{"queryData":[{"aggregations":[{"expression":"count()"}],"dataSource":"traces","disabled":false,"expression":"B","filter":{"expression":"db.system exists AND service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"offset":0,"orderBy":[{"columnName":"durationNano","order":"desc"}],"pageSize":10,"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c1e93c87-fac4-4038-bc94-73542bdd47a0","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"db.statement--string--tag--false","isColumn":false,"isJSON":false,"key":"db.statement","type":"tag"},{"dataType":"string","id":"dbOperation--string--tag--true","isColumn":true,"isJSON":false,"key":"dbOperation","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Slowest DB Calls","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"ns"},"description":"","fillSpans":false,"id":"7522011f-7111-4707-9686-bb052dd827a7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"count","dataSource":"traces","disabled":true,"expression":"A","filters":{"items":[{"id":"b55f4560","key":{"dataType":"string","id":"dbSystem--string--tag--true","isColumn":true,"isJSON":false,"key":"dbSystem","type":"tag"},"op":"exists","value":""},{"id":"4fc2dec3","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"=","value":"{{.service.name}}"},{"id":"52c8e577","key":{"dataType":"bool","id":"hasError--bool--tag--true","isColumn":true,"isJSON":false,"key":"hasError","type":"tag"},"op":"=","value":"true"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"dbName--string--tag--true","isColumn":true,"isJSON":false,"key":"dbName","type":"tag"}],"having":[],"legend":"","limit":null,"orderBy":[],"pageSize":10,"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"count","dataSource":"traces","disabled":true,"expression":"B","filters":{"items":[{"id":"a2f21215","key":{"dataType":"string","id":"dbSystem--string--tag--true","isColumn":true,"isJSON":false,"key":"dbSystem","type":"tag"},"op":"exists","value":""}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"dbName--string--tag--true","isColumn":true,"isJSON":false,"key":"dbName","type":"tag"}],"having":[],"legend":"","limit":null,"orderBy":[],"pageSize":10,"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[{"disabled":false,"expression":"(A/B)","legend":"{{dbName}}","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2d618591-b379-4647-be65-a1700243a2a5","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"DB Error rate","yAxisUnit":"percent"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"ns"},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"057b5e82-35ca-40fa-b8a3-c6f5d23433c0","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"expression":"rate()"}],"dataSource":"traces","disabled":false,"expression":"A","filter":{"expression":"db.system exists AND service.name = '.service.name'"},"functions":[],"groupBy":[{"dataType":"string","id":"dbName--string--tag","isColumn":true,"isJSON":false,"key":"dbName","type":"tag"}],"having":{"expression":""},"legend":"{{dbName}}","limit":null,"orderBy":[],"pageSize":10,"queryName":"A","source":"","stepInterval":0}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"449f493c-3e31-43a1-997e-679b9373e5c8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"DB Transaction Rate","yAxisUnit":"reqps"}]} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "DB Calls Monitoring", + "description": "Built on top of available DB attributes from opentelemetry: https://opentelemetry.io/docs/specs/semconv/attributes-registry/db/" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "service.name", + "description": "" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'service.name') AS `service.name` FROM signoz_metrics.time_series_v4_1day WHERE (metric_name = 'signoz_calls_total') AND (unix_milli \u003e= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000)) GROUP BY `service.name`" + } + }, + "name": "service.name" + } + } + ], + "panels": { + "057b5e82-35ca-40fa-b8a3-c6f5d23433c0": { + "kind": "Panel", + "spec": { + "display": { + "name": "DB Transaction Rate", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "rate()" + } + ], + "disabled": false, + "filter": { + "expression": "db.system exists AND service.name = '.service.name'" + }, + "groupBy": [ + { + "name": "dbName", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{dbName}}" + } + } + } + } + ], + "links": [] + } + }, + "7522011f-7111-4707-9686-bb052dd827a7": { + "kind": "Panel", + "spec": { + "display": { + "name": "DB Error rate", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percent", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": true, + "filter": { + "expression": "(dbSystem EXISTS AND serviceName = $service.name AND hasError = 'true') dbName EXISTS" + }, + "groupBy": [ + { + "name": "dbName", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": true, + "filter": { + "expression": "dbSystem EXISTS dbName EXISTS" + }, + "groupBy": [ + { + "name": "dbName", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "(A/B)", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{dbName}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ba27811a-2716-4a25-9f84-dbf30896b2e8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Top DB Statements", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "B": "ns", + "C": "reqps" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "(dbSystem EXISTS AND serviceName = $service.name) dbName EXISTS AND db.statement EXISTS" + }, + "groupBy": [ + { + "name": "dbName", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "db.statement", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total Calls" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "p50(durationNano)" + } + ], + "disabled": false, + "filter": { + "expression": "(dbSystem EXISTS AND serviceName = $service.name) dbName EXISTS AND db.statement EXISTS" + }, + "groupBy": [ + { + "name": "dbName", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "db.statement", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Average Duration" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "rate()" + } + ], + "disabled": false, + "filter": { + "expression": "(dbSystem EXISTS AND serviceName = $service.name) dbName EXISTS AND db.statement EXISTS" + }, + "groupBy": [ + { + "name": "dbName", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "db.statement", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Rate" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "e3b48480-d15c-44eb-a054-13ffa59a9227": { + "kind": "Panel", + "spec": { + "display": { + "name": "Slowest DB Calls", + "description": "" + }, + "plugin": { + "kind": "signoz/ListPanel", + "spec": { + "selectFields": [ + { + "name": "serviceName", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "durationNano", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "number" + }, + { + "name": "db.statement", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "dbOperation", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ] + } + }, + "queries": [ + { + "kind": "raw", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "db.system exists AND service.name = '.service.name'" + }, + "groupBy": [], + "order": [ + { + "key": { + "name": "count()", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + }, + "direction": "desc" + } + ], + "limit": 10, + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/057b5e82-35ca-40fa-b8a3-c6f5d23433c0" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ba27811a-2716-4a25-9f84-dbf30896b2e8" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/7522011f-7111-4707-9686-bb052dd827a7" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/e3b48480-d15c-44eb-a054-13ffa59a9227" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/hostmetrics-k8s.json b/helm/infra-charts/obaas/dashboards/1/hostmetrics-k8s.json index 70102039e..6c637bb1b 100644 --- a/helm/infra-charts/obaas/dashboards/1/hostmetrics-k8s.json +++ b/helm/infra-charts/obaas/dashboards/1/hostmetrics-k8s.json @@ -1 +1,2357 @@ -{ "description" : "This dashboard uses the system metrics collected from the `hostmetrics` receiver to show CPU, Memory, Disk, Network and Filesystem usage", "dotMigrated" : true, "image" : "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout" : [ { "h" : 1, "i" : "f8abf828-e45d-4712-bb23-f6aec69bc4fa", "maxH" : 1, "minH" : 1, "minW" : 12, "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 0 }, { "h" : 3, "i" : "b33f0bad-e623-4c2b-b854-12270f211690", "moved" : false, "static" : false, "w" : 3, "x" : 0, "y" : 1 }, { "h" : 3, "i" : "5d89be47-9c43-4b0f-96c0-1dc72dbfa356", "moved" : false, "static" : false, "w" : 3, "x" : 3, "y" : 1 }, { "h" : 3, "i" : "0ce16128-ff8d-479d-8db2-10ac8fb47bc2", "moved" : false, "static" : false, "w" : 3, "x" : 6, "y" : 1 }, { "h" : 3, "i" : "f9df830b-cb02-4e70-b72a-f89a2e4f8196", "moved" : false, "static" : false, "w" : 3, "x" : 9, "y" : 1 }, { "h" : 1, "i" : "f9d3d624-01e9-430c-b4a8-a1371fe35628", "maxH" : 1, "minH" : 1, "minW" : 12, "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 4 }, { "h" : 6, "i" : "5f43aa0f-cc5f-4a29-9cd7-dd0505db35a9", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 5 }, { "h" : 6, "i" : "ea1d1541-7787-4e09-8e5b-69be7f6af1ce", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 5 }, { "h" : 6, "i" : "f4d0972c-6d7b-44b0-b813-8063f0bb7410", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 11 }, { "h" : 6, "i" : "fbc102af-88fb-488f-9c7a-c89551593c9e", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 11 }, { "h" : 6, "i" : "d497c2d7-372e-4670-9917-9bcbc25d0487", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 17 }, { "h" : 6, "i" : "45a54f00-081e-42b2-8134-c3848f4ac19e", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 17 }, { "h" : 1, "i" : "fbaade42-9fdb-4023-9a6b-b2a7000ab24c", "maxH" : 1, "minH" : 1, "minW" : 12, "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 23 }, { "h" : 6, "i" : "24e4d4c3-4ada-4e9d-bc3b-e19d314daa27", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 24 }, { "h" : 1, "i" : "94c3ba3e-b5de-49da-8a4d-f4572585d2e6", "maxH" : 1, "minH" : 1, "minW" : 12, "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 30 }, { "h" : 6, "i" : "3d74094e-241b-4560-9128-abb1af79ae3c", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 31 }, { "h" : 6, "i" : "9a8ac524-afe4-457a-b17a-45f11c4f0fcf", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 31 }, { "h" : 6, "i" : "f42a3a42-8099-4be9-a6b5-1528d1f1bdfa", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 37 }, { "h" : 6, "i" : "e796af4a-abe8-4ff4-9bba-0b7eb81c022a", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 37 }, { "h" : 6, "i" : "9abc2374-d1ef-4ad6-958b-2355addcb245", "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 43 }, { "h" : 1, "i" : "cdae1cea-ab16-46db-9100-af2fb7971198", "maxH" : 1, "minH" : 1, "minW" : 12, "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 49 }, { "h" : 6, "i" : "a9013487-0479-4a09-a613-b3fc20e4d666", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 50 }, { "h" : 6, "i" : "3f186d43-6b86-4b71-962b-4ccddd8d7481", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 50 }, { "h" : 6, "i" : "e2683847-faa3-42f6-bb3c-4367a3e76294", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 56 }, { "h" : 6, "i" : "64f1ea50-0c34-4e43-9912-0d9547e2e436", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 56 }, { "h" : 1, "i" : "a3b0f2cb-02de-41ef-b843-008e40b8f6d9", "maxH" : 1, "minH" : 1, "minW" : 12, "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 62 }, { "h" : 11, "i" : "92dd7aae-95eb-48ae-9d3a-6e062d468dab", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 63 }, { "h" : 11, "i" : "f984a994-50b8-4c1e-83b4-9a10ca128657", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 63 } ], "panelMap" : { "94c3ba3e-b5de-49da-8a4d-f4572585d2e6" : { "collapsed" : false, "widgets" : [ { "h" : 6, "i" : "3d74094e-241b-4560-9128-abb1af79ae3c", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 172 }, { "h" : 6, "i" : "9a8ac524-afe4-457a-b17a-45f11c4f0fcf", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 172 }, { "h" : 6, "i" : "f42a3a42-8099-4be9-a6b5-1528d1f1bdfa", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 178 }, { "h" : 6, "i" : "e796af4a-abe8-4ff4-9bba-0b7eb81c022a", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 178 }, { "h" : 6, "i" : "9abc2374-d1ef-4ad6-958b-2355addcb245", "moved" : false, "static" : false, "w" : 12, "x" : 0, "y" : 184 } ] }, "a3b0f2cb-02de-41ef-b843-008e40b8f6d9" : { "collapsed" : false, "widgets" : [ { "h" : 6, "i" : "92dd7aae-95eb-48ae-9d3a-6e062d468dab", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 57 }, { "h" : 6, "i" : "f984a994-50b8-4c1e-83b4-9a10ca128657", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 57 } ] }, "cdae1cea-ab16-46db-9100-af2fb7971198" : { "collapsed" : false, "widgets" : [ { "h" : 6, "i" : "a9013487-0479-4a09-a613-b3fc20e4d666", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 191 }, { "h" : 6, "i" : "3f186d43-6b86-4b71-962b-4ccddd8d7481", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 191 }, { "h" : 6, "i" : "e2683847-faa3-42f6-bb3c-4367a3e76294", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 197 }, { "h" : 6, "i" : "64f1ea50-0c34-4e43-9912-0d9547e2e436", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 197 } ] }, "f8abf828-e45d-4712-bb23-f6aec69bc4fa" : { "collapsed" : false, "widgets" : [ { "h" : 3, "i" : "b33f0bad-e623-4c2b-b854-12270f211690", "moved" : false, "static" : false, "w" : 3, "x" : 0, "y" : 1 }, { "h" : 3, "i" : "5d89be47-9c43-4b0f-96c0-1dc72dbfa356", "moved" : false, "static" : false, "w" : 3, "x" : 3, "y" : 1 }, { "h" : 3, "i" : "0ce16128-ff8d-479d-8db2-10ac8fb47bc2", "moved" : false, "static" : false, "w" : 3, "x" : 6, "y" : 1 }, { "h" : 3, "i" : "f9df830b-cb02-4e70-b72a-f89a2e4f8196", "moved" : false, "static" : false, "w" : 3, "x" : 9, "y" : 1 } ] }, "f9d3d624-01e9-430c-b4a8-a1371fe35628" : { "collapsed" : false, "widgets" : [ { "h" : 6, "i" : "5f43aa0f-cc5f-4a29-9cd7-dd0505db35a9", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 8 }, { "h" : 6, "i" : "ea1d1541-7787-4e09-8e5b-69be7f6af1ce", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 8 }, { "h" : 6, "i" : "d497c2d7-372e-4670-9917-9bcbc25d0487", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 14 }, { "h" : 6, "i" : "45a54f00-081e-42b2-8134-c3848f4ac19e", "moved" : false, "static" : false, "w" : 6, "x" : 6, "y" : 14 } ] }, "fbaade42-9fdb-4023-9a6b-b2a7000ab24c" : { "collapsed" : false, "widgets" : [ { "h" : 6, "i" : "24e4d4c3-4ada-4e9d-bc3b-e19d314daa27", "moved" : false, "static" : false, "w" : 6, "x" : 0, "y" : 33 } ] } }, "tags" : [ "hostmetrics", "k8s", "node" ], "title" : "Host Metrics (k8s)", "uploadedGrafana" : false, "variables" : { "251c0d09-804b-46fa-b3bf-6498251a53b1" : { "allSelected" : false, "customValue" : "", "description" : "The name of the Node", "id" : "251c0d09-804b-46fa-b3bf-6498251a53b1", "modificationUUID" : "471bf797-b3d7-47f5-bae0-fba335186682", "multiSelect" : false, "name" : "k8s.node.name", "order" : 1, "queryValue" : "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE metric_name = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`", "selectedValue" : "default", "showALLOption" : false, "sort" : "ASC", "textboxValue" : "", "type" : "QUERY" }, "575a7337-465b-4c76-895b-c3b769271ff0" : { "allSelected" : false, "customValue" : "", "description" : "Name of the cluster", "id" : "575a7337-465b-4c76-895b-c3b769271ff0", "key" : "575a7337-465b-4c76-895b-c3b769271ff0", "modificationUUID" : "d2284249-6ea8-4a36-a267-a321e9fc1cd8", "multiSelect" : false, "name" : "k8s.cluster.name", "order" : 0, "queryValue" : "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE metric_name = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`", "selectedValue" : "default", "showALLOption" : false, "sort" : "DISABLED", "textboxValue" : "", "type" : "QUERY" } }, "version" : "v4", "widgets" : [ { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "Node CPU utilization", "fillSpans" : false, "id" : "b33f0bad-e623-4c2b-b854-12270f211690", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "value", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.node.cpu.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.node.cpu.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "38668c10", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "4b373d60-2344-4981-8e1e-b7b0a57b8f36", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "CPU Used", "yAxisUnit" : "none" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "Available CPU for Node", "fillSpans" : false, "id" : "5d89be47-9c43-4b0f-96c0-1dc72dbfa356", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "value", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.node.allocatable_cpu--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.node.allocatable_cpu", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "690e3979", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "avg", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "85d1ce06-ce9e-4acd-a089-ccf04606d9c0", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Allocatable CPU", "yAxisUnit" : "none" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "f9df830b-cb02-4e70-b72a-f89a2e4f8196", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "value", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.node.allocatable_memory--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.node.allocatable_memory", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "f924335b", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "779c9ad2-e443-4564-bba4-81e9a7e11a1d", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Allocatable Memory", "yAxisUnit" : "bytes" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "0ce16128-ff8d-479d-8db2-10ac8fb47bc2", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "value", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.node.memory.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.node.memory.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "ff546c64", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "6accb643-2683-4de6-b93f-f52160dae0d5", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Memory Used", "yAxisUnit" : "bytes" }, { "description" : "", "id" : "f8abf828-e45d-4712-bb23-f6aec69bc4fa", "panelTypes" : "row", "title" : "Overview" }, { "description" : "", "id" : "f9d3d624-01e9-430c-b4a8-a1371fe35628", "panelTypes" : "row", "title" : "Resources" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "5f43aa0f-cc5f-4a29-9cd7-dd0505db35a9", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.cpu.time--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.cpu.time", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : true, "expression" : "A", "filters" : { "items" : [ { "id" : "ad316791", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "state--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "state", "type" : "tag" } ], "having" : [ ], "legend" : "{{state}}", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" }, { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.cpu.time--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.cpu.time", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : true, "expression" : "B", "filters" : { "items" : [ { "id" : "6baf116b", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "{{state}}", "limit" : null, "orderBy" : [ ], "queryName" : "B", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ { "disabled" : false, "expression" : "A/B", "legend" : "{{state}}", "queryName" : "F1" } ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "315b15fa-ff0c-442f-89f8-2bf4fb1af2f2", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "CPU Usage", "yAxisUnit" : "percentunit" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "ea1d1541-7787-4e09-8e5b-69be7f6af1ce", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.memory.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.memory.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "8026009e", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "state--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "state", "type" : "tag" } ], "having" : [ ], "legend" : "{{state}}", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "40218bfb-a9b7-4974-aead-5bf666e139bf", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Memory Usage", "yAxisUnit" : "bytes" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "d497c2d7-372e-4670-9917-9bcbc25d0487", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.pod.cpu.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.pod.cpu.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "2c44bbc1", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "k8s.pod.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.pod.name", "type" : "tag" } ], "having" : [ ], "legend" : "{{k8s.pod.name}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "37e8977b-fea4-4218-a6c7-c172bf958bf5", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "CPU Usage by Pod", "yAxisUnit" : "none" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "45a54f00-081e-42b2-8134-c3848f4ac19e", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.pod.memory.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.pod.memory.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "e1886dbf", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "k8s.pod.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.pod.name", "type" : "tag" } ], "having" : [ ], "legend" : "{{k8s.pod.name}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "a3eb769a-7c81-4f07-a6ce-f13a5196c32c", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Memory Usage by Pod", "yAxisUnit" : "bytes" }, { "description" : "", "id" : "fbaade42-9fdb-4023-9a6b-b2a7000ab24c", "panelTypes" : "row", "title" : "System" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "24e4d4c3-4ada-4e9d-bc3b-e19d314daa27", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.cpu.load_average.1m--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.cpu.load_average.1m", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "4167fbb1", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "1m", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" }, { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.cpu.load_average.5m--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.cpu.load_average.5m", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "B", "filters" : { "items" : [ { "id" : "0c2cfeca", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "5m", "limit" : 30, "orderBy" : [ ], "queryName" : "B", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" }, { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.cpu.load_average.15m--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.cpu.load_average.15m", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "C", "filters" : { "items" : [ { "id" : "28693375", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ ], "having" : [ ], "legend" : "15m", "limit" : 30, "orderBy" : [ ], "queryName" : "C", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "8e6485ea-7018-43b0-ab27-b210f77b59ad", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "System Load Average", "yAxisUnit" : "none" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "3d74094e-241b-4560-9128-abb1af79ae3c", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.network.io--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.network.io", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "3a03bc80", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" }, { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ { "columnName" : "SUM(system.network.io)", "op" : ">", "value" : 0 } ], "legend" : "{{device}}::{{direction}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "47173220-44df-4ef6-87f4-31e333c180c7", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Network usage (bytes)", "yAxisUnit" : "bytes" }, { "description" : "", "id" : "94c3ba3e-b5de-49da-8a4d-f4572585d2e6", "panelTypes" : "row", "title" : "Network" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "9a8ac524-afe4-457a-b17a-45f11c4f0fcf", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.network.packets--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.network.packets", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "3082ef53", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" }, { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ ], "legend" : "{{device}}::{{direction}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "62eedbc6-c8ad-4d13-80a8-129396e1d1dc", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Network usage (packet/s)", "yAxisUnit" : "pps" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "f42a3a42-8099-4be9-a6b5-1528d1f1bdfa", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.network.errors--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.network.errors", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "8859bc50", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" }, { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ ], "legend" : "{{device}}::{{direction}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "5ddb1b38-53bb-46f5-b4fe-fe832d6b9b24", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Network errors", "yAxisUnit" : "short" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "e796af4a-abe8-4ff4-9bba-0b7eb81c022a", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.network.dropped--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.network.dropped", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "40fec2e3", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" }, { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ ], "legend" : "{{device}}::{{direction}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "a849bcce-7684-4852-9134-530b45419b8f", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Network drops", "yAxisUnit" : "short" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "9abc2374-d1ef-4ad6-958b-2355addcb245", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.network.connections--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.network.connections", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "87f665b5", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "protocol--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "protocol", "type" : "tag" }, { "dataType" : "string", "id" : "state--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "state", "type" : "tag" } ], "having" : [ ], "legend" : "{{protocol}}::{{state}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "ab685a3d-fa4c-4663-8d94-c452e59038f3", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Network connections", "yAxisUnit" : "short" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "a9013487-0479-4a09-a613-b3fc20e4d666", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.disk.io--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.disk.io", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "8cf95cd6", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" }, { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ { "columnName" : "SUM(system.disk.io)", "op" : ">", "value" : 0 } ], "legend" : "{{device}}::{{direction}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "d2930e32-49e4-4f98-b727-4d010b2107b5", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "System disk io (bytes transferred)", "yAxisUnit" : "bytes" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "3f186d43-6b86-4b71-962b-4ccddd8d7481", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.disk.operations--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.disk.operations", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "5b47b8a7", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" }, { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ { "columnName" : "SUM(system.disk.operations)", "op" : ">", "value" : 0 } ], "legend" : "{{device}}::{{direction}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "a4527605-109a-4dc0-a065-54abcd7a6098", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "System disk operations/s", "yAxisUnit" : "short" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "The queue size of pending I/O operations.", "fillSpans" : false, "id" : "64f1ea50-0c34-4e43-9912-0d9547e2e436", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.disk.pending_operations--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.disk.pending_operations", "type" : "Gauge" }, "aggregateOperator" : "max", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "a1023af9", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" } ], "having" : [ { "columnName" : "SUM(system.disk.pending_operations)", "op" : ">", "value" : 0 } ], "legend" : "{{device}}", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "max" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "f4cfc2a5-78fc-42cc-8f4a-194c8c916132", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Queue size", "yAxisUnit" : "short" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "Time spent in disk operations.", "fillSpans" : false, "id" : "e2683847-faa3-42f6-bb3c-4367a3e76294", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.disk.operation_time--float64--Sum--true", "isColumn" : true, "isJSON" : false, "key" : "system.disk.operation_time", "type" : "Sum" }, "aggregateOperator" : "rate", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "d21dc017", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" }, { "dataType" : "string", "id" : "direction--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "direction", "type" : "tag" } ], "having" : [ { "columnName" : "SUM(system.disk.operation_time)", "op" : ">", "value" : 0 } ], "legend" : "{{device}}::{{direction}}", "limit" : null, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "9c6d18ad-89ff-4e38-a15a-440e72ed6ca8", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Disk operations time", "yAxisUnit" : "s" }, { "description" : "", "id" : "cdae1cea-ab16-46db-9100-af2fb7971198", "panelTypes" : "row", "title" : "Disk" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { "A" : "bytes" }, "description" : "", "fillSpans" : false, "id" : "92dd7aae-95eb-48ae-9d3a-6e062d468dab", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "table", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.filesystem.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.filesystem.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "fd59e881", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" }, { "dataType" : "string", "id" : "mountpoint--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "mountpoint", "type" : "tag" }, { "dataType" : "string", "id" : "state--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "state", "type" : "tag" }, { "dataType" : "string", "id" : "type--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "type", "type" : "tag" }, { "dataType" : "string", "id" : "mode--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "mode", "type" : "tag" } ], "having" : [ ], "legend" : "usage", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "rate" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "392d7c5e-8c50-44c7-871c-bb248e38c897", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "File system usage", "yAxisUnit" : "bytes" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { "A" : "short" }, "description" : "", "fillSpans" : false, "id" : "f984a994-50b8-4c1e-83b4-9a10ca128657", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "table", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "system.filesystem.inodes.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "system.filesystem.inodes.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "067a7df4", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "device--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "device", "type" : "tag" }, { "dataType" : "string", "id" : "mountpoint--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "mountpoint", "type" : "tag" }, { "dataType" : "string", "id" : "state--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "state", "type" : "tag" }, { "dataType" : "string", "id" : "type--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "type", "type" : "tag" }, { "dataType" : "string", "id" : "mode--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "mode", "type" : "tag" } ], "having" : [ ], "legend" : "usage", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "7203203b-4e04-4ce2-8a1b-7bd004adfc94", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "File system inode usage", "yAxisUnit" : "bytes" }, { "description" : "", "id" : "a3b0f2cb-02de-41ef-b843-008e40b8f6d9", "panelTypes" : "row", "title" : "File system" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "f4d0972c-6d7b-44b0-b813-8063f0bb7410", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.pod.cpu.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.pod.cpu.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "938b651c", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "k8s.namespace.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.namespace.name", "type" : "tag" } ], "having" : [ ], "legend" : "{{k8s.namespace.name}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "650931d8-8180-47ed-84b3-6efcdbb4f319", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "CPU Usage by namespace", "yAxisUnit" : "none" }, { "bucketCount" : 30, "bucketWidth" : 0, "columnUnits" : { }, "description" : "", "fillSpans" : false, "id" : "fbc102af-88fb-488f-9c7a-c89551593c9e", "isStacked" : false, "mergeAllActiveQueries" : false, "nullZeroValues" : "zero", "opacity" : "1", "panelTypes" : "graph", "query" : { "builder" : { "queryData" : [ { "aggregateAttribute" : { "dataType" : "float64", "id" : "k8s.pod.memory.usage--float64--Gauge--true", "isColumn" : true, "isJSON" : false, "key" : "k8s.pod.memory.usage", "type" : "Gauge" }, "aggregateOperator" : "avg", "dataSource" : "metrics", "disabled" : false, "expression" : "A", "filters" : { "items" : [ { "id" : "547f788a", "key" : { "dataType" : "string", "id" : "k8s.node.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.node.name", "type" : "tag" }, "op" : "=", "value" : "$k8s.node.name" } ], "op" : "AND" }, "functions" : [ ], "groupBy" : [ { "dataType" : "string", "id" : "k8s.namespace.name--string--tag--false", "isColumn" : false, "isJSON" : false, "key" : "k8s.namespace.name", "type" : "tag" } ], "having" : [ ], "legend" : "{{k8s.namespace.name}}", "limit" : 30, "orderBy" : [ ], "queryName" : "A", "reduceTo" : "avg", "spaceAggregation" : "sum", "stepInterval" : 60, "timeAggregation" : "avg" } ], "queryFormulas" : [ ] }, "clickhouse_sql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "id" : "bc226118-d65a-44cd-9ff2-80ff0c8724a6", "promql" : [ { "disabled" : false, "legend" : "", "name" : "A", "query" : "" } ], "queryType" : "builder" }, "selectedLogFields" : [ { "dataType" : "string", "name" : "body", "type" : "" }, { "dataType" : "string", "name" : "timestamp", "type" : "" } ], "selectedTracesFields" : [ { "dataType" : "string", "id" : "serviceName--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "serviceName", "type" : "tag" }, { "dataType" : "string", "id" : "name--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "name", "type" : "tag" }, { "dataType" : "float64", "id" : "durationNano--float64--tag--true", "isColumn" : true, "isJSON" : false, "key" : "durationNano", "type" : "tag" }, { "dataType" : "string", "id" : "httpMethod--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "httpMethod", "type" : "tag" }, { "dataType" : "string", "id" : "responseStatusCode--string--tag--true", "isColumn" : true, "isJSON" : false, "key" : "responseStatusCode", "type" : "tag" } ], "softMax" : 0, "softMin" : 0, "stackedBarChart" : false, "thresholds" : [ ], "timePreferance" : "GLOBAL_TIME", "title" : "Memory Usage by namespace", "yAxisUnit" : "bytes" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "hostmetrics" + }, + { + "key": "tag", + "value": "k8s" + }, + { + "key": "tag", + "value": "node" + } + ], + "spec": { + "display": { + "name": "Host Metrics (k8s)", + "description": "This dashboard uses the system metrics collected from the `hostmetrics` receiver to show CPU, Memory, Disk, Network and Filesystem usage" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "Name of the cluster" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE metric_name = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.node.name", + "description": "The name of the Node" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE metric_name = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`" + } + }, + "name": "k8s.node.name" + } + } + ], + "panels": { + "0ce16128-ff8d-479d-8db2-10ac8fb47bc2": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "24e4d4c3-4ada-4e9d-bc3b-e19d314daa27": { + "kind": "Panel", + "spec": { + "display": { + "name": "System Load Average", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.cpu.load_average.1m", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "1m" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.cpu.load_average.5m", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "5m" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.cpu.load_average.15m", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "15m" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "3d74094e-241b-4560-9128-abb1af79ae3c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Network usage (bytes)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "sum(system.network.io) \u003e 0" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "3f186d43-6b86-4b71-962b-4ccddd8d7481": { + "kind": "Panel", + "spec": { + "display": { + "name": "System disk operations/s", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.disk.operations", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "sum(system.disk.operations) \u003e 0" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "45a54f00-081e-42b2-8134-c3848f4ac19e": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage by Pod", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "5d89be47-9c43-4b0f-96c0-1dc72dbfa356": { + "kind": "Panel", + "spec": { + "display": { + "name": "Allocatable CPU", + "description": "Available CPU for Node" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.allocatable_cpu", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "5f43aa0f-cc5f-4a29-9cd7-dd0505db35a9": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.cpu.time", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{state}}" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.cpu.time", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{state}}" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{state}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "64f1ea50-0c34-4e43-9912-0d9547e2e436": { + "kind": "Panel", + "spec": { + "display": { + "name": "Queue size", + "description": "The queue size of pending I/O operations." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.disk.pending_operations", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "sum(system.disk.pending_operations) \u003e 0" + }, + "functions": [], + "legend": "{{device}}" + } + } + } + } + ], + "links": [] + } + }, + "92dd7aae-95eb-48ae-9d3a-6e062d468dab": { + "kind": "Panel", + "spec": { + "display": { + "name": "File system usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "bytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.filesystem.usage", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "mountpoint", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "type", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "mode", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "usage" + } + } + } + } + ], + "links": [] + } + }, + "9a8ac524-afe4-457a-b17a-45f11c4f0fcf": { + "kind": "Panel", + "spec": { + "display": { + "name": "Network usage (packet/s)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "pps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.packets", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "9abc2374-d1ef-4ad6-958b-2355addcb245": { + "kind": "Panel", + "spec": { + "display": { + "name": "Network connections", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.connections", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "protocol", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{protocol}}::{{state}}" + } + } + } + } + ], + "links": [] + } + }, + "a9013487-0479-4a09-a613-b3fc20e4d666": { + "kind": "Panel", + "spec": { + "display": { + "name": "System disk io (bytes transferred)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.disk.io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "sum(system.disk.io) \u003e 0" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "b33f0bad-e623-4c2b-b854-12270f211690": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Used", + "description": "Node CPU utilization" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "d497c2d7-372e-4670-9917-9bcbc25d0487": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Usage by Pod", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "e2683847-faa3-42f6-bb3c-4367a3e76294": { + "kind": "Panel", + "spec": { + "display": { + "name": "Disk operations time", + "description": "Time spent in disk operations." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.disk.operation_time", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "sum(system.disk.operation_time) \u003e 0" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "e796af4a-abe8-4ff4-9bba-0b7eb81c022a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Network drops", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.dropped", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "ea1d1541-7787-4e09-8e5b-69be7f6af1ce": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{state}}" + } + } + } + } + ], + "links": [] + } + }, + "f42a3a42-8099-4be9-a6b5-1528d1f1bdfa": { + "kind": "Panel", + "spec": { + "display": { + "name": "Network errors", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.errors", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{device}}::{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "f4d0972c-6d7b-44b0-b813-8063f0bb7410": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Usage by namespace", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}" + } + } + } + } + ], + "links": [] + } + }, + "f984a994-50b8-4c1e-83b4-9a10ca128657": { + "kind": "Panel", + "spec": { + "display": { + "name": "File system inode usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "short" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.filesystem.inodes.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "device", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "mountpoint", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "type", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "mode", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "usage" + } + } + } + } + ], + "links": [] + } + }, + "f9df830b-cb02-4e70-b72a-f89a2e4f8196": { + "kind": "Panel", + "spec": { + "display": { + "name": "Allocatable Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.allocatable_memory", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "fbc102af-88fb-488f-9c7a-c89551593c9e": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage by namespace", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.node.name = $k8s.node.name" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 30, + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Overview", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 3, + "content": { + "$ref": "#/spec/panels/b33f0bad-e623-4c2b-b854-12270f211690" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 3, + "content": { + "$ref": "#/spec/panels/5d89be47-9c43-4b0f-96c0-1dc72dbfa356" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 3, + "content": { + "$ref": "#/spec/panels/0ce16128-ff8d-479d-8db2-10ac8fb47bc2" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 3, + "content": { + "$ref": "#/spec/panels/f9df830b-cb02-4e70-b72a-f89a2e4f8196" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Resources", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/5f43aa0f-cc5f-4a29-9cd7-dd0505db35a9" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ea1d1541-7787-4e09-8e5b-69be7f6af1ce" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/f4d0972c-6d7b-44b0-b813-8063f0bb7410" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/fbc102af-88fb-488f-9c7a-c89551593c9e" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/d497c2d7-372e-4670-9917-9bcbc25d0487" + } + }, + { + "x": 6, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/45a54f00-081e-42b2-8134-c3848f4ac19e" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "System", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/24e4d4c3-4ada-4e9d-bc3b-e19d314daa27" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Network", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/3d74094e-241b-4560-9128-abb1af79ae3c" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/9a8ac524-afe4-457a-b17a-45f11c4f0fcf" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/f42a3a42-8099-4be9-a6b5-1528d1f1bdfa" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/e796af4a-abe8-4ff4-9bba-0b7eb81c022a" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/9abc2374-d1ef-4ad6-958b-2355addcb245" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Disk", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/a9013487-0479-4a09-a613-b3fc20e4d666" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/3f186d43-6b86-4b71-962b-4ccddd8d7481" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/e2683847-faa3-42f6-bb3c-4367a3e76294" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/64f1ea50-0c34-4e43-9912-0d9547e2e436" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "File system", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 11, + "content": { + "$ref": "#/spec/panels/92dd7aae-95eb-48ae-9d3a-6e062d468dab" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 11, + "content": { + "$ref": "#/spec/panels/f984a994-50b8-4c1e-83b4-9a10ca128657" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/http-api-monitoring.json b/helm/infra-charts/obaas/dashboards/1/http-api-monitoring.json index cce93de92..77db8b9a9 100644 --- a/helm/infra-charts/obaas/dashboards/1/http-api-monitoring.json +++ b/helm/infra-charts/obaas/dashboards/1/http-api-monitoring.json @@ -1 +1,619 @@ -{"description":"Built on top of available HTTP attributes from opentelemetry: https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/","dotMigrated":true,"image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":6,"i":"c1f9db31-4cef-48ba-9ed1-109dcfa01f8b","moved":false,"static":false,"w":6,"x":0,"y":0},{"h":6,"i":"ba27811a-2716-4a25-9f84-dbf30896b2e8","moved":false,"static":false,"w":6,"x":6,"y":0},{"h":6,"i":"9d8edd39-4fa6-4fdc-acc4-a23df0baa650","moved":false,"static":false,"w":6,"x":0,"y":6},{"h":6,"i":"7522011f-7111-4707-9686-bb052dd827a7","moved":false,"static":false,"w":6,"x":6,"y":6},{"h":7,"i":"e3b48480-d15c-44eb-a054-13ffa59a9227","moved":false,"static":false,"w":12,"x":0,"y":12}],"panelMap":{},"tags":[],"title":"HTTP API Monitoring","uploadedGrafana":false,"uuid":"0199ec29-9988-7d06-a91a-0091ffb3423e","variables":{"4789176f-8aaa-40da-83f7-68fa152c0449":{"allSelected":false,"customValue":"","description":"","id":"4789176f-8aaa-40da-83f7-68fa152c0449","modificationUUID":"915613fb-a7ec-4feb-add0-1938f60eebab","multiSelect":false,"name":"service.name","order":0,"queryValue":"SELECT JSONExtractString(labels, 'service.name') AS `service.name` FROM signoz_metrics.time_series_v4_1day WHERE (metric_name = 'signoz_calls_total') AND (unix_milli >= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000)) GROUP BY `service.name`","showALLOption":false,"sort":"DISABLED","textboxValue":"","type":"QUERY"}},"version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"","B":"ns"},"columnWidths":{"A":145,"B":145,"http.url":145,"httpMethod":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"ba27811a-2716-4a25-9f84-dbf30896b2e8","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregations":[{"expression":"count()"}],"dataSource":"traces","disabled":false,"expression":"A","filter":{"expression":"serviceName = '.service.name' AND httpMethod exists AND spanKind = 'Server'"},"functions":[],"groupBy":[{"dataType":"string","id":"httpMethod--string--tag","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"http.url--string--tag","isColumn":false,"isJSON":false,"key":"http.url","type":"tag"}],"having":{"expression":""},"legend":"Count","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"expression":"avg(durationNano)"}],"dataSource":"traces","disabled":false,"expression":"B","filter":{"expression":"serviceName = '.service.name' AND httpMethod exists AND spanKind = 'Server'"},"functions":[],"groupBy":[{"dataType":"string","id":"httpMethod--string--tag","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"http.url--string--tag","isColumn":false,"isJSON":false,"key":"http.url","type":"tag"}],"having":{"expression":""},"legend":"Avg Duration","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"7892a2db-6a03-4673-97a3-1da823432971","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Top HTTP Endpoints","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"ns"},"description":"","fillSpans":false,"id":"e3b48480-d15c-44eb-a054-13ffa59a9227","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"list","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"noop","dataSource":"traces","disabled":false,"expression":"B","filters":{"items":[{"id":"968efc1c","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"=","value":"{{.service.name}}"},{"id":"d4c0aa9d","key":{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},"op":"exists","value":""},{"id":"3397bdd9","key":{"dataType":"string","id":"spanKind--string--tag--true","isColumn":true,"isJSON":false,"key":"spanKind","type":"tag"},"op":"=","value":"Server"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"offset":0,"orderBy":[{"columnName":"durationNano","order":"desc"}],"pageSize":10,"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"280531a8-ae53-43c4-b932-cbf68b311583","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Slowest HTTP Calls","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"ns"},"description":"","fillSpans":false,"id":"7522011f-7111-4707-9686-bb052dd827a7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},"aggregateOperator":"p90","dataSource":"traces","disabled":false,"expression":"A","filters":{"items":[{"id":"fc30736a","key":{"dataType":"string","id":"spanKind--string--tag--true","isColumn":true,"isJSON":false,"key":"spanKind","type":"tag"},"op":"=","value":"Server"},{"id":"610d22a6","key":{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},"op":"exists","value":""},{"id":"da4948b5","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"=","value":"{{.service.name}}"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"httpRoute--string--tag--true","isColumn":true,"isJSON":false,"key":"httpRoute","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"}],"having":[],"legend":"{{httpRoute}} - {{httpMethod}}","limit":null,"orderBy":[],"pageSize":10,"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"p90"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"6efa5876-0c53-4ff2-8465-9fdd767917f2","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"HTTP Endpoint Latency - P90","yAxisUnit":"ns"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"c1f9db31-4cef-48ba-9ed1-109dcfa01f8b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"rate","dataSource":"traces","disabled":false,"expression":"A","filters":{"items":[{"id":"c0ed908c","key":{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},"op":"exists","value":""},{"id":"90e87ee5","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"in","value":["{{.service.name}}"]},{"id":"5b261cae","key":{"dataType":"string","id":"spanKind--string--tag--true","isColumn":true,"isJSON":false,"key":"spanKind","type":"tag"},"op":"=","value":"Server"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"},{"dataType":"string","id":"httpRoute--string--tag--true","isColumn":true,"isJSON":false,"key":"httpRoute","type":"tag"}],"having":[],"legend":"{{httpRoute}} - {{responseStatusCode}}","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"af26dc59-8995-4024-8521-bb2eb5db8392","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"HTTP Status Code distribution","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"B":"reqps","C":"ns"},"description":"","fillSpans":false,"id":"9d8edd39-4fa6-4fdc-acc4-a23df0baa650","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"count","dataSource":"traces","disabled":false,"expression":"A","filters":{"items":[{"id":"5887d521","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"in","value":["{{.service.name}}"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"externalHttpUrl--string--tag--true","isColumn":true,"isJSON":false,"key":"externalHttpUrl","type":"tag"},{"dataType":"string","id":"externalHttpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"externalHttpMethod","type":"tag"}],"having":[],"legend":"Total Calls","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"","id":"------false","isColumn":false,"isJSON":false,"key":"","type":""},"aggregateOperator":"rate","dataSource":"traces","disabled":false,"expression":"B","filters":{"items":[{"id":"d7501d61","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"in","value":["{{.service.name}}"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"externalHttpUrl--string--tag--true","isColumn":true,"isJSON":false,"key":"externalHttpUrl","type":"tag"},{"dataType":"string","id":"externalHttpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"externalHttpMethod","type":"tag"}],"having":[],"legend":"Request Rate","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},"aggregateOperator":"p90","dataSource":"traces","disabled":false,"expression":"C","filters":{"items":[{"id":"7d1fbc77","key":{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},"op":"in","value":["{{.service.name}}"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"externalHttpUrl--string--tag--true","isColumn":true,"isJSON":false,"key":"externalHttpUrl","type":"tag"},{"dataType":"string","id":"externalHttpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"externalHttpMethod","type":"tag"}],"having":[],"legend":"P90 Duration","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"p90"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"54240805-b23b-4d9c-8af4-a39124b8f60a","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"External HTTP APIs","yAxisUnit":"none"}]} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "HTTP API Monitoring", + "description": "Built on top of available HTTP attributes from opentelemetry: https://opentelemetry.io/docs/specs/semconv/attributes-registry/http/" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "service.name", + "description": "" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'service.name') AS `service.name` FROM signoz_metrics.time_series_v4_1day WHERE (metric_name = 'signoz_calls_total') AND (unix_milli \u003e= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000)) GROUP BY `service.name`" + } + }, + "name": "service.name" + } + } + ], + "panels": { + "7522011f-7111-4707-9686-bb052dd827a7": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Endpoint Latency - P90", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "ns", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "p90(durationNano)" + } + ], + "disabled": false, + "filter": { + "expression": "(spanKind = 'Server' AND httpMethod EXISTS AND serviceName = $service.name) httpRoute EXISTS AND httpMethod EXISTS" + }, + "groupBy": [ + { + "name": "httpRoute", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "httpMethod", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{httpRoute}} - {{httpMethod}}" + } + } + } + } + ], + "links": [] + } + }, + "9d8edd39-4fa6-4fdc-acc4-a23df0baa650": { + "kind": "Panel", + "spec": { + "display": { + "name": "External HTTP APIs", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "B": "reqps", + "C": "ns" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "serviceName IN $service.name externalHttpUrl EXISTS AND externalHttpMethod EXISTS" + }, + "groupBy": [ + { + "name": "externalHttpUrl", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "externalHttpMethod", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total Calls" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "rate()" + } + ], + "disabled": false, + "filter": { + "expression": "serviceName IN $service.name externalHttpUrl EXISTS AND externalHttpMethod EXISTS" + }, + "groupBy": [ + { + "name": "externalHttpUrl", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "externalHttpMethod", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Request Rate" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "p90(durationNano)" + } + ], + "disabled": false, + "filter": { + "expression": "serviceName IN $service.name externalHttpUrl EXISTS AND externalHttpMethod EXISTS" + }, + "groupBy": [ + { + "name": "externalHttpUrl", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "externalHttpMethod", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "P90 Duration" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ba27811a-2716-4a25-9f84-dbf30896b2e8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Top HTTP Endpoints", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "", + "B": "ns" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "serviceName = '.service.name' AND httpMethod exists AND spanKind = 'Server'" + }, + "groupBy": [ + { + "name": "httpMethod", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "http.url", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Count" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "avg(durationNano)" + } + ], + "disabled": false, + "filter": { + "expression": "serviceName = '.service.name' AND httpMethod exists AND spanKind = 'Server'" + }, + "groupBy": [ + { + "name": "httpMethod", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "http.url", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Avg Duration" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "c1f9db31-4cef-48ba-9ed1-109dcfa01f8b": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Status Code distribution", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "rate()" + } + ], + "disabled": false, + "filter": { + "expression": "(httpMethod EXISTS AND serviceName IN $service.name AND spanKind = 'Server') responseStatusCode EXISTS AND httpRoute EXISTS" + }, + "groupBy": [ + { + "name": "responseStatusCode", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "httpRoute", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{httpRoute}} - {{responseStatusCode}}" + } + } + } + } + ], + "links": [] + } + }, + "e3b48480-d15c-44eb-a054-13ffa59a9227": { + "kind": "Panel", + "spec": { + "display": { + "name": "Slowest HTTP Calls", + "description": "" + }, + "plugin": { + "kind": "signoz/ListPanel", + "spec": { + "selectFields": [ + { + "name": "serviceName", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "durationNano", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "number" + } + ] + } + }, + "queries": [ + { + "kind": "raw", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "traces", + "source": "", + "disabled": false, + "filter": { + "expression": "(serviceName = $service.name AND httpMethod EXISTS AND spanKind = 'Server')" + }, + "groupBy": [], + "order": [ + { + "key": { + "name": "durationNano", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + }, + "direction": "desc" + } + ], + "limit": 10, + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/c1f9db31-4cef-48ba-9ed1-109dcfa01f8b" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ba27811a-2716-4a25-9f84-dbf30896b2e8" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/9d8edd39-4fa6-4fdc-acc4-a23df0baa650" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/7522011f-7111-4707-9686-bb052dd827a7" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/e3b48480-d15c-44eb-a054-13ffa59a9227" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/jvm-metrics-by-service.json b/helm/infra-charts/obaas/dashboards/1/jvm-metrics-by-service.json index cd0f28fd9..248d8fd5f 100644 --- a/helm/infra-charts/obaas/dashboards/1/jvm-metrics-by-service.json +++ b/helm/infra-charts/obaas/dashboards/1/jvm-metrics-by-service.json @@ -1 +1,1920 @@ -{"description":"JVM Runtime metrics for service","layout":[{"h":1,"i":"62277d72-2555-48d9-a1a9-4ff1fac2f6ba","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":0},{"h":3,"i":"26688eaa-d76c-408a-a3b7-ffef8e05524d","moved":false,"static":false,"w":4,"x":0,"y":1},{"h":6,"i":"6a3a3c0f-5c71-4ec2-bde2-a62d57694b3d","moved":false,"static":false,"w":8,"x":4,"y":1},{"h":3,"i":"c4a35f2e-de61-4f51-96be-7367980911d0","moved":false,"static":false,"w":4,"x":0,"y":4},{"h":1,"i":"db01c41e-dff3-4fee-ae0f-074d5cd05191","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":7},{"h":6,"i":"1b7703ea-cfc7-4166-8718-bdc9f3c1b8e9","moved":false,"static":false,"w":6,"x":0,"y":8},{"h":6,"i":"b5ca214c-922f-4ded-984f-21c59e256550","moved":false,"static":false,"w":6,"x":6,"y":8},{"h":6,"i":"48bdbf42-0996-4850-9c90-1d426ce50b1a","moved":false,"static":false,"w":6,"x":0,"y":14},{"h":6,"i":"1d156d8b-3eaf-4754-aebc-8e14ada3258f","moved":false,"static":false,"w":6,"x":6,"y":14},{"h":6,"i":"29267574-7178-4bc1-b3df-460389b69c61","moved":false,"static":false,"w":6,"x":0,"y":20},{"h":1,"i":"00cd9b63-31f1-41b5-81dd-3eb9ef162b4f","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":26},{"h":6,"i":"b7e65ce1-3060-4ea8-9310-0dd1c2c4d250","moved":false,"static":false,"w":6,"x":0,"y":27},{"h":6,"i":"429ed9d8-f2a5-41bd-b45b-c45da5a65836","moved":false,"static":false,"w":6,"x":6,"y":27},{"h":6,"i":"2ef726fd-293c-490f-a423-f6c6583db817","moved":false,"static":false,"w":6,"x":0,"y":33},{"h":6,"i":"00419566-bf05-4587-9be7-d21d4c90f673","moved":false,"static":false,"w":6,"x":6,"y":33},{"h":6,"i":"8f483d11-9f87-41a7-b264-19a1a9fff2a8","moved":false,"static":false,"w":6,"x":0,"y":39},{"h":1,"i":"f82d4a32-f4f6-4f3b-bdfa-3dbb522610d9","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":45},{"h":6,"i":"27e894ba-d061-46a4-8437-72f4dffa99a6","moved":false,"static":false,"w":6,"x":0,"y":64},{"h":6,"i":"88aa1b6f-ef77-4968-9bdd-84cbc01528ec","moved":false,"static":false,"w":6,"x":6,"y":64},{"h":6,"i":"0a7c5e58-52e2-4a56-b244-c28934d2f666","moved":false,"static":false,"w":6,"x":0,"y":70},{"h":6,"i":"c1b456c9-90e8-466e-862b-486202a56586","moved":false,"static":false,"w":6,"x":6,"y":70},{"h":1,"i":"fbb04781-2a2e-4e06-a84e-c52e29e45262","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":76},{"h":6,"i":"6ef7c4dd-93cc-4981-b035-1dabeb64e880","moved":false,"static":false,"w":6,"x":0,"y":77},{"h":6,"i":"868c7559-6e86-4741-b232-073e182349ca","moved":false,"static":false,"w":6,"x":6,"y":77}],"name":"","panelMap":{"00cd9b63-31f1-41b5-81dd-3eb9ef162b4f":{"collapsed":false,"widgets":[{"h":6,"i":"b7e65ce1-3060-4ea8-9310-0dd1c2c4d250","moved":false,"static":false,"w":6,"x":0,"y":27},{"h":6,"i":"429ed9d8-f2a5-41bd-b45b-c45da5a65836","moved":false,"static":false,"w":6,"x":6,"y":27},{"h":6,"i":"2ef726fd-293c-490f-a423-f6c6583db817","moved":false,"static":false,"w":6,"x":0,"y":33},{"h":6,"i":"00419566-bf05-4587-9be7-d21d4c90f673","moved":false,"static":false,"w":6,"x":6,"y":33},{"h":6,"i":"8f483d11-9f87-41a7-b264-19a1a9fff2a8","moved":false,"static":false,"w":6,"x":0,"y":39}]},"62277d72-2555-48d9-a1a9-4ff1fac2f6ba":{"collapsed":false,"widgets":[{"h":3,"i":"26688eaa-d76c-408a-a3b7-ffef8e05524d","moved":false,"static":false,"w":4,"x":0,"y":1},{"h":6,"i":"6a3a3c0f-5c71-4ec2-bde2-a62d57694b3d","moved":false,"static":false,"w":8,"x":4,"y":1},{"h":3,"i":"c4a35f2e-de61-4f51-96be-7367980911d0","moved":false,"static":false,"w":4,"x":0,"y":4}]},"db01c41e-dff3-4fee-ae0f-074d5cd05191":{"collapsed":false,"widgets":[{"h":6,"i":"1b7703ea-cfc7-4166-8718-bdc9f3c1b8e9","moved":false,"static":false,"w":6,"x":0,"y":14},{"h":6,"i":"b5ca214c-922f-4ded-984f-21c59e256550","moved":false,"static":false,"w":6,"x":6,"y":14},{"h":6,"i":"48bdbf42-0996-4850-9c90-1d426ce50b1a","moved":false,"static":false,"w":6,"x":0,"y":20},{"h":6,"i":"1d156d8b-3eaf-4754-aebc-8e14ada3258f","moved":false,"static":false,"w":6,"x":6,"y":20},{"h":6,"i":"29267574-7178-4bc1-b3df-460389b69c61","moved":false,"static":false,"w":6,"x":0,"y":26}]},"f82d4a32-f4f6-4f3b-bdfa-3dbb522610d9":{"collapsed":false,"widgets":[{"h":6,"i":"27e894ba-d061-46a4-8437-72f4dffa99a6","moved":false,"static":false,"w":6,"x":0,"y":64},{"h":6,"i":"88aa1b6f-ef77-4968-9bdd-84cbc01528ec","moved":false,"static":false,"w":6,"x":6,"y":64},{"h":6,"i":"0a7c5e58-52e2-4a56-b244-c28934d2f666","moved":false,"static":false,"w":6,"x":0,"y":70},{"h":6,"i":"c1b456c9-90e8-466e-862b-486202a56586","moved":false,"static":false,"w":6,"x":6,"y":70}]},"fbb04781-2a2e-4e06-a84e-c52e29e45262":{"collapsed":false,"widgets":[{"h":6,"i":"6ef7c4dd-93cc-4981-b035-1dabeb64e880","moved":false,"static":false,"w":6,"x":0,"y":167},{"h":6,"i":"868c7559-6e86-4741-b232-073e182349ca","moved":false,"static":false,"w":6,"x":6,"y":167}]}},"tags":["jvm","runtime"],"title":"JVM Metrics","uploadedGrafana":false,"variables":{"e3d0421b-5a8f-457d-a694-64108dcc057d":{"allSelected":false,"customValue":"","defaultValue":"","description":"","id":"e3d0421b-5a8f-457d-a694-64108dcc057d","modificationUUID":"e15b3dd8-869b-4e56-9259-982a41d72abf","multiSelect":false,"name":"service.name","order":0,"queryValue":"SELECT JSONExtractString(labels, 'service.name') AS `service.name` FROM signoz_metrics.time_series_v4_1day WHERE (metric_name = 'jvm.class.loaded') AND (unix_milli >= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000)) GROUP BY `service.name`","showALLOption":false,"sort":"DISABLED","textboxValue":"","type":"QUERY"}},"version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"88aa1b6f-ef77-4968-9bdd-84cbc01528ec","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.gc.duration.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.gc.action contains 'minor'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"GC Minor collection count","limit":19,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm.gc.duration.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"service.name = '.service.name' AND jvm.gc.action contains 'major'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"GC Major collection count","limit":21,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2fa0473b-0c60-4587-ba15-7b1489d2fe22","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC Major & Minor Collection Count","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"b5ca214c-922f-4ded-984f-21c59e256550","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.memory.used","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.memory.type = 'non_heap'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Non-Heap Used","limit":10,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e0cf6ff4-274f-4fad-990b-b6636343b6cb","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Non-Heap Usage","yAxisUnit":"bytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"1b7703ea-cfc7-4166-8718-bdc9f3c1b8e9","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.memory.used","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.memory.type = 'heap'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Heap Used","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c46d1371-2972-496a-90e7-5a6f38e6b5b1","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Heap Usage","yAxisUnit":"bytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"27e894ba-d061-46a4-8437-72f4dffa99a6","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.gc.duration.bucket","reduceTo":"avg","spaceAggregation":"p90","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.gc.action contains 'minor'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"GC Minor collection time","limit":19,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm.gc.duration.bucket","reduceTo":"avg","spaceAggregation":"p90","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"service.name = '.service.name' AND jvm.gc.action contains 'major'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"GC Major collection time","limit":20,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"24d365c5-00d9-4fb6-bcad-fbd2956b5dec","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC Major & Minor Collection Time (p90)","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"429ed9d8-f2a5-41bd-b45b-c45da5a65836","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.thread.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.thread.state = 'blocked'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Blocked count","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"9b30fd85-17c4-4664-8a4e-bb29be827758","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Blocked threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"b7e65ce1-3060-4ea8-9310-0dd1c2c4d250","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.thread.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.thread.state = 'timed_waiting'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Count","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f13d958d-8fc8-403a-9a93-424e039e1eb0","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Timed waiting threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"00419566-bf05-4587-9be7-d21d4c90f673","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.thread.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.thread.state = 'runnable'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Runnable count","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"529ea116-f2af-4392-9c20-d4e1b1a90c40","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Runnable threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"8f483d11-9f87-41a7-b264-19a1a9fff2a8","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.thread.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.thread.daemon = 'false'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Live count","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"4a0482aa-3428-4617-8187-668aaf3141f8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Live threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"2ef726fd-293c-490f-a423-f6c6583db817","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.thread.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.thread.daemon = 'true'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Daemon","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"742e145d-cdd4-40a5-984a-55db579f8ddf","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Daemon threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"6ef7c4dd-93cc-4981-b035-1dabeb64e880","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.class.loaded","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Loaded","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"44f95d27-e726-40a7-a64c-87019cbfa7df","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Classed loaded","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"c1b456c9-90e8-466e-862b-486202a56586","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.gc.duration.bucket","reduceTo":"avg","spaceAggregation":"p90","timeAggregation":"count"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"GC Duration","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ebfae03a-abc6-45e3-b317-a2c5b5fa4c97","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC - p90 Duration","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"48bdbf42-0996-4850-9c90-1d426ce50b1a","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.memory.used","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"jvm.memory.pool.name = 'G1 Old Gen' AND service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"G1 Old Gen","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b21d4703-bdcf-4ccb-9f60-62722abd04d7","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Old gen size","yAxisUnit":"bytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"1d156d8b-3eaf-4754-aebc-8e14ada3258f","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.memory.used","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":" service.name = '.service.name' AND jvm.memory.pool.name = 'G1 Eden Space'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"G1 Eden Space","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c3a7e066-888b-4d04-9b1e-0b18db8944d3","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Eden size","yAxisUnit":"bytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"29267574-7178-4bc1-b3df-460389b69c61","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.memory.used","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name' AND jvm.memory.pool.name = 'G1 Survivor Space'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"G1 Survivor Size","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"685efc7b-066b-44b7-8656-e79397406a7d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Survivor size","yAxisUnit":"bytes"},{"description":"","id":"db01c41e-dff3-4fee-ae0f-074d5cd05191","panelTypes":"row","title":"JVM Memory"},{"description":"","id":"f82d4a32-f4f6-4f3b-bdfa-3dbb522610d9","panelTypes":"row","title":"JVM GC"},{"description":"","id":"00cd9b63-31f1-41b5-81dd-3eb9ef162b4f","panelTypes":"row","title":"JVM Threads"},{"description":"","id":"fbb04781-2a2e-4e06-a84e-c52e29e45262","panelTypes":"row","title":"JVM Classes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"s","B":"s","C":"s"},"columnWidths":{"A":145,"B":145,"C":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"0a7c5e58-52e2-4a56-b244-c28934d2f666","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.gc.duration.bucket","reduceTo":"avg","spaceAggregation":"p50","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"p50","limit":20,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm.gc.duration.bucket","reduceTo":"avg","spaceAggregation":"p90","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"p90","limit":20,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm.gc.duration.bucket","reduceTo":"avg","spaceAggregation":"p99","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"C","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"p99","limit":20,"orderBy":[],"queryName":"C","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"78616aa7-1592-406b-aff2-f23fa4397085","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC - Duration","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"868c7559-6e86-4741-b232-073e182349ca","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.class.unloaded","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Unloaded","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":240}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"5da6a286-46ee-4d30-8c33-7eebb58ce77c","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Classed loaded","yAxisUnit":"none"},{"description":"","id":"62277d72-2555-48d9-a1a9-4ff1fac2f6ba","panelTypes":"row","title":"JVM CPU"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"26688eaa-d76c-408a-a3b7-ffef8e05524d","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.cpu.count","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f67ae98e-0af7-40cb-8b46-42c54fc0ba4b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Count","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"6a3a3c0f-5c71-4ec2-bde2-a62d57694b3d","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.cpu.time","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Time","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b921e512-b3e3-4df8-9f9b-fea557701257","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Time","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"c4a35f2e-de61-4f51-96be-7367980911d0","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm.cpu.recent_utilization","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name = '.service.name'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a8ad3555-aba4-4f5d-b8bc-cdcee49c0d2f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Recent Utilization","yAxisUnit":"percentunit"}],"uuid":"0199ec29-98c7-7451-935b-03a66cbda732"} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "jvm" + }, + { + "key": "tag", + "value": "runtime" + } + ], + "spec": { + "display": { + "name": "JVM Metrics", + "description": "JVM Runtime metrics for service" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "service.name", + "description": "" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'service.name') AS `service.name` FROM signoz_metrics.time_series_v4_1day WHERE (metric_name = 'jvm.class.loaded') AND (unix_milli \u003e= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000)) GROUP BY `service.name`" + } + }, + "name": "service.name" + } + } + ], + "panels": { + "00419566-bf05-4587-9be7-d21d4c90f673": { + "kind": "Panel", + "spec": { + "display": { + "name": "Runnable threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.thread.count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.thread.state = 'runnable'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Runnable count" + } + } + } + } + ], + "links": [] + } + }, + "0a7c5e58-52e2-4a56-b244-c28934d2f666": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC - Duration", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "s", + "B": "s", + "C": "s" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p50", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.bucket", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "p99", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1b7703ea-cfc7-4166-8718-bdc9f3c1b8e9": { + "kind": "Panel", + "spec": { + "display": { + "name": "Heap Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.memory.used", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.memory.type = 'heap'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Heap Used" + } + } + } + } + ], + "links": [] + } + }, + "1d156d8b-3eaf-4754-aebc-8e14ada3258f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Eden size", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.memory.used", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": " service.name = '.service.name' AND jvm.memory.pool.name = 'G1 Eden Space'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "G1 Eden Space" + } + } + } + } + ], + "links": [] + } + }, + "26688eaa-d76c-408a-a3b7-ffef8e05524d": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.cpu.count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "27e894ba-d061-46a4-8437-72f4dffa99a6": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Major \u0026 Minor Collection Time (p90)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.bucket", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.gc.action contains 'minor'" + }, + "groupBy": [], + "order": [], + "limit": 19, + "having": { + "expression": "" + }, + "functions": [], + "legend": "GC Minor collection time" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.bucket", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.gc.action contains 'major'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "GC Major collection time" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "29267574-7178-4bc1-b3df-460389b69c61": { + "kind": "Panel", + "spec": { + "display": { + "name": "Survivor size", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.memory.used", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.memory.pool.name = 'G1 Survivor Space'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "G1 Survivor Size" + } + } + } + } + ], + "links": [] + } + }, + "2ef726fd-293c-490f-a423-f6c6583db817": { + "kind": "Panel", + "spec": { + "display": { + "name": "Daemon threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.thread.count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.thread.daemon = 'true'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Daemon" + } + } + } + } + ], + "links": [] + } + }, + "429ed9d8-f2a5-41bd-b45b-c45da5a65836": { + "kind": "Panel", + "spec": { + "display": { + "name": "Blocked threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.thread.count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.thread.state = 'blocked'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Blocked count" + } + } + } + } + ], + "links": [] + } + }, + "48bdbf42-0996-4850-9c90-1d426ce50b1a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Old gen size", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.memory.used", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "jvm.memory.pool.name = 'G1 Old Gen' AND service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "G1 Old Gen" + } + } + } + } + ], + "links": [] + } + }, + "6a3a3c0f-5c71-4ec2-bde2-a62d57694b3d": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.cpu.time", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Time" + } + } + } + } + ], + "links": [] + } + }, + "6ef7c4dd-93cc-4981-b035-1dabeb64e880": { + "kind": "Panel", + "spec": { + "display": { + "name": "Classed loaded", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.class.loaded", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Loaded" + } + } + } + } + ], + "links": [] + } + }, + "868c7559-6e86-4741-b232-073e182349ca": { + "kind": "Panel", + "spec": { + "display": { + "name": "Classed loaded", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.class.unloaded", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Unloaded" + } + } + } + } + ], + "links": [] + } + }, + "88aa1b6f-ef77-4968-9bdd-84cbc01528ec": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Major \u0026 Minor Collection Count", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.gc.action contains 'minor'" + }, + "groupBy": [], + "order": [], + "limit": 19, + "having": { + "expression": "" + }, + "functions": [], + "legend": "GC Minor collection count" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.gc.action contains 'major'" + }, + "groupBy": [], + "order": [], + "limit": 21, + "having": { + "expression": "" + }, + "functions": [], + "legend": "GC Major collection count" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "8f483d11-9f87-41a7-b264-19a1a9fff2a8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Live threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.thread.count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.thread.daemon = 'false'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Live count" + } + } + } + } + ], + "links": [] + } + }, + "b5ca214c-922f-4ded-984f-21c59e256550": { + "kind": "Panel", + "spec": { + "display": { + "name": "Non-Heap Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.memory.used", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.memory.type = 'non_heap'" + }, + "groupBy": [], + "order": [], + "limit": 10, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Non-Heap Used" + } + } + } + } + ], + "links": [] + } + }, + "b7e65ce1-3060-4ea8-9310-0dd1c2c4d250": { + "kind": "Panel", + "spec": { + "display": { + "name": "Timed waiting threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.thread.count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name' AND jvm.thread.state = 'timed_waiting'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Count" + } + } + } + } + ], + "links": [] + } + }, + "c1b456c9-90e8-466e-862b-486202a56586": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC - p90 Duration", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 240, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.gc.duration.bucket", + "temporality": "", + "timeAggregation": "count", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "limit": 20, + "having": { + "expression": "" + }, + "functions": [], + "legend": "GC Duration" + } + } + } + } + ], + "links": [] + } + }, + "c4a35f2e-de61-4f51-96be-7367980911d0": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Recent Utilization", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm.cpu.recent_utilization", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name = '.service.name'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM CPU", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 3, + "content": { + "$ref": "#/spec/panels/26688eaa-d76c-408a-a3b7-ffef8e05524d" + } + }, + { + "x": 4, + "y": 0, + "width": 8, + "height": 6, + "content": { + "$ref": "#/spec/panels/6a3a3c0f-5c71-4ec2-bde2-a62d57694b3d" + } + }, + { + "x": 0, + "y": 3, + "width": 4, + "height": 3, + "content": { + "$ref": "#/spec/panels/c4a35f2e-de61-4f51-96be-7367980911d0" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Memory", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/1b7703ea-cfc7-4166-8718-bdc9f3c1b8e9" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/b5ca214c-922f-4ded-984f-21c59e256550" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/48bdbf42-0996-4850-9c90-1d426ce50b1a" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/1d156d8b-3eaf-4754-aebc-8e14ada3258f" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/29267574-7178-4bc1-b3df-460389b69c61" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Threads", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/b7e65ce1-3060-4ea8-9310-0dd1c2c4d250" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/429ed9d8-f2a5-41bd-b45b-c45da5a65836" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/2ef726fd-293c-490f-a423-f6c6583db817" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/00419566-bf05-4587-9be7-d21d4c90f673" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/8f483d11-9f87-41a7-b264-19a1a9fff2a8" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM GC", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/27e894ba-d061-46a4-8437-72f4dffa99a6" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/88aa1b6f-ef77-4968-9bdd-84cbc01528ec" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/0a7c5e58-52e2-4a56-b244-c28934d2f666" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/c1b456c9-90e8-466e-862b-486202a56586" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Classes", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/6ef7c4dd-93cc-4981-b035-1dabeb64e880" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/868c7559-6e86-4741-b232-073e182349ca" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-detailed.json b/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-detailed.json index acf225df8..504b3805f 100644 --- a/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-detailed.json +++ b/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-detailed.json @@ -1 +1,1492 @@ -{ "collapsableRowsMigrated": true, "description": "", "dotMigrated": true, "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [ { "h": 8, "i": "c5f29b09-8a63-44ba-825f-db91a3c79a54", "moved": false, "static": false, "w": 6, "x": 0, "y": 0 }, { "h": 8, "i": "f5174a53-c201-4e17-aff7-33b1402b0d7b", "moved": false, "static": false, "w": 6, "x": 6, "y": 0 }, { "h": 7, "i": "4b9a4513-d7c8-4217-8d76-0714d96432e7", "moved": false, "static": false, "w": 12, "x": 0, "y": 8 }, { "h": 7, "i": "9d0f96dc-d744-4baa-9910-ac1aef63cc34", "moved": false, "static": false, "w": 6, "x": 0, "y": 15 }, { "h": 7, "i": "960ff49f-d73b-49c2-ab4a-69df1e1abc51", "moved": false, "static": false, "w": 6, "x": 6, "y": 15 }, { "h": 7, "i": "1c841c0b-be32-43ec-8bcb-bfd8a87edeef", "moved": false, "static": false, "w": 6, "x": 0, "y": 22 }, { "h": 7, "i": "75fdac11-19dd-472f-a155-63e4682b88df", "moved": false, "static": false, "w": 6, "x": 6, "y": 22 }, { "h": 7, "i": "2e864710-b418-4133-b248-2fa047e37fe3", "moved": false, "static": false, "w": 6, "x": 0, "y": 29 }, { "h": 7, "i": "1f8965fb-5ad1-4679-9d28-9bd31d4e4cac", "moved": false, "static": false, "w": 6, "x": 6, "y": 29 }, { "h": 7, "i": "8722151e-7690-4152-98c3-f2cc0f741d50", "moved": false, "static": false, "w": 6, "x": 0, "y": 36 }, { "h": 7, "i": "230f3562-5ac1-4fec-946d-0dd21057f4b3", "moved": false, "static": false, "w": 6, "x": 6, "y": 36 }, { "h": 7, "i": "7403ba8f-36bf-4c31-8b91-a447a36eeca0", "moved": false, "static": false, "w": 12, "x": 0, "y": 43 } ], "name": "", "panelMap": {}, "tags": [ "node", "k8s", "kubelet" ], "title": "Kubernetes Node Metrics - Detailed", "uploadedGrafana": false, "variables": { "8ccae12a-9f04-4d27-8940-374446050530": { "allSelected": false, "customValue": "", "description": "The k8s node name", "id": "8ccae12a-9f04-4d27-8940-374446050530", "modificationUUID": "4f18b48e-0d06-4f63-88fb-2299ca8a7b1f", "multiSelect": true, "name": "k8s.node.name", "order": 1, "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`", "selectedValue": [ "default" ], "showALLOption": true, "sort": "ASC", "textboxValue": "", "type": "QUERY" }, "e4232384-ad99-4479-8cec-e027a18921c4": { "allSelected": false, "customValue": "", "description": "The k8s cluster name", "id": "e4232384-ad99-4479-8cec-e027a18921c4", "key": "e4232384-ad99-4479-8cec-e027a18921c4", "modificationUUID": "c24c99c3-2390-4b53-860b-24dce4a7eab1", "multiSelect": false, "name": "k8s.cluster.name", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`", "selectedValue": "default", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" } }, "version": "v4", "widgets": [ { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "c5f29b09-8a63-44ba-825f-db91a3c79a54", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.cpu.usage--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.cpu.usage", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "14a0fa64", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "6c8b0b46-1bd5-49aa-a4f9-0e4fd4636eaa", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node CPU usage", "yAxisUnit": "none" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "230f3562-5ac1-4fec-946d-0dd21057f4b3", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "708a8633-bfaf-4bf4-b1e6-19ac4258c069", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node filesystem available", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": { "A": "bytes", "B": "bytes", "C": "bytes" }, "description": "", "fillSpans": false, "id": "7403ba8f-36bf-4c31-8b91-a447a36eeca0", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.usage--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.usage", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "fccfd920", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "usage", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "edde9188", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "available", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.capacity--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.capacity", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "C", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "3a849415", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "capacity", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "4687e699-1594-47e3-b674-dde0f7de295a", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node filesystem capacity", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "8722151e-7690-4152-98c3-f2cc0f741d50", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.usage--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.usage", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "985b3b6d", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "9138ac25-ad51-4de6-91f0-ab463542bee2", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node filesystem usage", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "1c841c0b-be32-43ec-8bcb-bfd8a87edeef", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "0b627b6e", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "4f7e31f7-0459-4aa6-aabc-26ad4ea07574", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node memory available", "yAxisUnit": "bytes" }, { "description": "", "id": "9d0f96dc-d744-4baa-9910-ac1aef63cc34", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.rss--float64----true", "isColumn": true, "key": "k8s.node.memory.rss", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "991cf360", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "avg", "stepInterval": 60, "timeAggregation": "sum" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "ba8a15ef-ef6e-43e7-949a-5f59f763d4e7", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Node memory rss", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "75fdac11-19dd-472f-a155-63e4682b88df", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.usage--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.usage", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "a41b8aba", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "72bb2f86-443f-4dbf-97b4-db4cfc083d11", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node memory usage", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "960ff49f-d73b-49c2-ab4a-69df1e1abc51", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.working_set--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.working_set", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "06ea5658", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "ef8b7768-8e5a-4db2-b084-f857ac58d289", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node memory working set", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "1f8965fb-5ad1-4679-9d28-9bd31d4e4cac", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.network.errors--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "k8s.node.network.errors", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "5ef4d1fe", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "interface--string--tag--false", "isColumn": false, "key": "interface", "type": "tag" }, { "dataType": "string", "id": "direction--string--tag--false", "isColumn": false, "key": "direction", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}-{{interface}}-{{direction}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "b997244c-136c-42d9-aeb6-2b3115202082", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node network errors", "yAxisUnit": "none" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "2e864710-b418-4133-b248-2fa047e37fe3", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "system.network.io--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "system.network.io", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "4ced7960", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "direction--string--tag--false", "isColumn": false, "key": "direction", "type": "tag" }, { "dataType": "string", "id": "interface--string--tag--false", "isColumn": false, "key": "interface", "type": "tag" }, { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}-{{interface}}-{{direction}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "88710842-8888-4225-b60f-eba516d16e07", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node network io", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "f5174a53-c201-4e17-aff7-33b1402b0d7b", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.cpu.usage--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.cpu.usage", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "efcdf556", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "average cpu usage", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.allocatable_cpu--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.allocatable_cpu", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "66676d66", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "allocatable", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "611f9e7a-a319-45f4-971b-a1548489fa36", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node CPU", "yAxisUnit": "short" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": { "A": "bytes", "B": "bytes", "C": "bytes", "D": "bytes", "E": "bytes" }, "description": "", "fillSpans": false, "id": "4b9a4513-d7c8-4217-8d76-0714d96432e7", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.usage--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.usage", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "7adc0e21", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "used", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.allocatable_memory--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.allocatable_memory", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "c721a7c9", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "allocatable", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.working_set--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.working_set", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "C", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "65ec1def", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "working set", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.rss--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.rss", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "D", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "a86caa2e", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "rss", "limit": null, "orderBy": [], "queryName": "D", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "E", "filters": { "items": [ { "id": "4995e999", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "3632aed5", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "available", "limit": null, "orderBy": [], "queryName": "E", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "c1a1c09c-d98c-456d-b579-0983fbed6318", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Memory usage", "yAxisUnit": "bytes" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "node" + }, + { + "key": "tag", + "value": "k8s" + }, + { + "key": "tag", + "value": "kubelet" + } + ], + "spec": { + "display": { + "name": "Kubernetes Node Metrics - Detailed", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "The k8s cluster name" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.node.name", + "description": "The k8s node name" + }, + "defaultValue": [ + "default" + ], + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`" + } + }, + "name": "k8s.node.name" + } + } + ], + "panels": { + "1c841c0b-be32-43ec-8bcb-bfd8a87edeef": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node memory available", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "1f8965fb-5ad1-4679-9d28-9bd31d4e4cac": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node network errors", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.network.errors", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "interface", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}-{{interface}}-{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "230f3562-5ac1-4fec-946d-0dd21057f4b3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node filesystem available", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "2e864710-b418-4133-b248-2fa047e37fe3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node network io", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "interface", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}-{{interface}}-{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "4b9a4513-d7c8-4217-8d76-0714d96432e7": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "bytes", + "B": "bytes", + "C": "bytes", + "D": "bytes", + "E": "bytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "used" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.allocatable_memory", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "allocatable" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.working_set", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "working set" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.rss", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "rss" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "available" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "7403ba8f-36bf-4c31-8b91-a447a36eeca0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node filesystem capacity", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "bytes", + "B": "bytes", + "C": "bytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "available" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.capacity", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "capacity" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "75fdac11-19dd-472f-a155-63e4682b88df": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node memory usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "8722151e-7690-4152-98c3-f2cc0f741d50": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node filesystem usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "960ff49f-d73b-49c2-ab4a-69df1e1abc51": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node memory working set", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.working_set", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "9d0f96dc-d744-4baa-9910-ac1aef63cc34": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node memory rss", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.rss", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "avg", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "c5f29b09-8a63-44ba-825f-db91a3c79a54": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node CPU usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + } + } + } + ], + "links": [] + } + }, + "f5174a53-c201-4e17-aff7-33b1402b0d7b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node CPU", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "average cpu usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.allocatable_cpu", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "allocatable" + } + } + ] + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/c5f29b09-8a63-44ba-825f-db91a3c79a54" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/f5174a53-c201-4e17-aff7-33b1402b0d7b" + } + }, + { + "x": 0, + "y": 8, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/4b9a4513-d7c8-4217-8d76-0714d96432e7" + } + }, + { + "x": 0, + "y": 15, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/9d0f96dc-d744-4baa-9910-ac1aef63cc34" + } + }, + { + "x": 6, + "y": 15, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/960ff49f-d73b-49c2-ab4a-69df1e1abc51" + } + }, + { + "x": 0, + "y": 22, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/1c841c0b-be32-43ec-8bcb-bfd8a87edeef" + } + }, + { + "x": 6, + "y": 22, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/75fdac11-19dd-472f-a155-63e4682b88df" + } + }, + { + "x": 0, + "y": 29, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/2e864710-b418-4133-b248-2fa047e37fe3" + } + }, + { + "x": 6, + "y": 29, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/1f8965fb-5ad1-4679-9d28-9bd31d4e4cac" + } + }, + { + "x": 0, + "y": 36, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/8722151e-7690-4152-98c3-f2cc0f741d50" + } + }, + { + "x": 6, + "y": 36, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/230f3562-5ac1-4fec-946d-0dd21057f4b3" + } + }, + { + "x": 0, + "y": 43, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/7403ba8f-36bf-4c31-8b91-a447a36eeca0" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-overall.json b/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-overall.json index ddb4490b2..45919badb 100644 --- a/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-overall.json +++ b/helm/infra-charts/obaas/dashboards/1/kubernetes-node-metrics-overall.json @@ -1 +1,650 @@ -{ "description": "", "dotMigrated": true, "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [ { "h": 7, "i": "e16d581d-1da9-49ff-9c3b-1bb51c2f7730", "moved": false, "static": false, "w": 6, "x": 0, "y": 0 }, { "h": 7, "i": "18c1653b-f826-460d-9302-90bc6d3f5e52", "moved": false, "static": false, "w": 6, "x": 6, "y": 0 }, { "h": 7, "i": "a2cd4e4a-0b81-4a85-937f-48ca5c9f183b", "moved": false, "static": false, "w": 6, "x": 0, "y": 7 }, { "h": 7, "i": "1406e6b6-0c99-46d4-9782-530f6e7e053a", "moved": false, "static": false, "w": 6, "x": 6, "y": 7 } ], "panelMap": {}, "tags": [ "node", "k8s", "kubelet" ], "title": "Kubernetes Node Metrics - Overall", "uploadedGrafana": false, "variables": { "3f0dd70c-828d-41bd-b3b0-8985f3bcc297": { "allSelected": false, "customValue": "", "description": "The k8s cluster name", "id": "3f0dd70c-828d-41bd-b3b0-8985f3bcc297", "key": "3f0dd70c-828d-41bd-b3b0-8985f3bcc297", "modificationUUID": "b65fb613-4cf8-4139-8168-dfbd35fa4bf3", "multiSelect": false, "name": "k8s.cluster.name", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`", "selectedValue": "default", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" }, "e5f00450-af60-4350-956b-5b06ee9d233f": { "allSelected": true, "customValue": "", "description": "The k8s node name", "id": "e5f00450-af60-4350-956b-5b06ee9d233f", "modificationUUID": "4645bf34-298b-433e-919f-b10ddad27935", "multiSelect": true, "name": "k8s.node.name", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`", "selectedValue": [ "default" ], "showALLOption": true, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" } }, "version": "v4", "widgets": [ { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "e16d581d-1da9-49ff-9c3b-1bb51c2f7730", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.cpu.time--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "k8s.node.cpu.time", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "91223422", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.allocatable_cpu--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.allocatable_cpu", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "0a54e48e", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [ { "disabled": false, "expression": "A/B", "legend": "{{k8s.node.name}}", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "0a09fa11-6dc4-4511-9cc9-befe7b6a6557", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node CPU usage", "yAxisUnit": "percentunit" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "1406e6b6-0c99-46d4-9782-530f6e7e053a", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "a5dffef6", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.filesystem.capacity--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.filesystem.capacity", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "c79d5a16", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [ { "disabled": false, "expression": "(B-A)/B", "legend": "{{k8s.node.name}}", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "57eeac15-615c-4a71-9c61-8e0c0c76b045", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node filesystem usage", "yAxisUnit": "percentunit" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "18c1653b-f826-460d-9302-90bc6d3f5e52", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.memory.working_set--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.memory.working_set", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "e8c2a60a", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.node.allocatable_memory--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.node.allocatable_memory", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "ee687840", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [ { "disabled": false, "expression": "A/B", "legend": "{{k8s.node.name}}", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "4cf56615-e357-4342-9a4f-ec6557477ff3", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node memory usage (WSS)", "yAxisUnit": "percentunit" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "a2cd4e4a-0b81-4a85-937f-48ca5c9f183b", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "system.network.io--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "system.network.io", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "91223422", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "66308505", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "interface--string--tag--false", "isColumn": false, "key": "interface", "type": "tag" }, { "dataType": "string", "id": "direction--string--tag--false", "isColumn": false, "key": "direction", "type": "tag" }, { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}-{{interface}}-{{direction}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "b56143c0-7d2f-4425-97c5-65ad6fc87366", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Node network IO", "yAxisUnit": "bytes" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "node" + }, + { + "key": "tag", + "value": "k8s" + }, + { + "key": "tag", + "value": "kubelet" + } + ], + "spec": { + "display": { + "name": "Kubernetes Node Metrics - Overall", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "The k8s cluster name" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.node.name", + "description": "The k8s node name" + }, + "defaultValue": [ + "default" + ], + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`" + } + }, + "name": "k8s.node.name" + } + } + ], + "panels": { + "1406e6b6-0c99-46d4-9782-530f6e7e053a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node filesystem usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.filesystem.capacity", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "(B-A)/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "18c1653b-f826-460d-9302-90bc6d3f5e52": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node memory usage (WSS)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.memory.working_set", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.allocatable_memory", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "a2cd4e4a-0b81-4a85-937f-48ca5c9f183b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node network IO", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system.network.io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "interface", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}-{{interface}}-{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "e16d581d-1da9-49ff-9c3b-1bb51c2f7730": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node CPU usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.cpu.time", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.node.allocatable_cpu", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.node.name}}" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/e16d581d-1da9-49ff-9c3b-1bb51c2f7730" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/18c1653b-f826-460d-9302-90bc6d3f5e52" + } + }, + { + "x": 0, + "y": 7, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/a2cd4e4a-0b81-4a85-937f-48ca5c9f183b" + } + }, + { + "x": 6, + "y": 7, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/1406e6b6-0c99-46d4-9782-530f6e7e053a" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-detailed.json b/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-detailed.json index f8b7a13e9..2623d93d3 100644 --- a/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-detailed.json +++ b/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-detailed.json @@ -1 +1,1102 @@ -{ "collapsableRowsMigrated": true, "description": "", "dotMigrated": true, "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [ { "h": 6, "i": "c5f29b09-8a63-44ba-825f-db91a3c79a54", "moved": false, "static": false, "w": 6, "x": 0, "y": 0 }, { "h": 6, "i": "960ff49f-d73b-49c2-ab4a-69df1e1abc51", "moved": false, "static": false, "w": 6, "x": 6, "y": 0 }, { "h": 6, "i": "9d0f96dc-d744-4baa-9910-ac1aef63cc34", "moved": false, "static": false, "w": 6, "x": 0, "y": 6 }, { "h": 6, "i": "75fdac11-19dd-472f-a155-63e4682b88df", "moved": false, "static": false, "w": 6, "x": 6, "y": 6 }, { "h": 6, "i": "2e864710-b418-4133-b248-2fa047e37fe3", "moved": false, "static": false, "w": 6, "x": 0, "y": 12 }, { "h": 6, "i": "1f8965fb-5ad1-4679-9d28-9bd31d4e4cac", "moved": false, "static": false, "w": 6, "x": 6, "y": 12 }, { "h": 6, "i": "8722151e-7690-4152-98c3-f2cc0f741d50", "moved": false, "static": false, "w": 6, "x": 0, "y": 18 }, { "h": 6, "i": "230f3562-5ac1-4fec-946d-0dd21057f4b3", "moved": false, "static": false, "w": 6, "x": 6, "y": 18 }, { "h": 5, "i": "7403ba8f-36bf-4c31-8b91-a447a36eeca0", "moved": false, "static": false, "w": 6, "x": 0, "y": 24 } ], "name": "", "panelMap": {}, "tags": [ "pod", "k8s" ], "title": "Kubernetes Pod Metrics - Detailed", "uploadedGrafana": false, "variables": { "6d37901c-2b81-4a6b-9143-c11bfda92c6f": { "allSelected": true, "customValue": "", "description": "The k8s node name.", "id": "6d37901c-2b81-4a6b-9143-c11bfda92c6f", "key": "6d37901c-2b81-4a6b-9143-c11bfda92c6f", "modificationUUID": "ddd1ad9a-e3fb-4383-a541-6f2d27bd195e", "multiSelect": true, "name": "k8s.node.name", "order": 1, "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`", "selectedValue": [ "default" ], "showALLOption": true, "sort": "ASC", "textboxValue": "", "type": "QUERY" }, "c80e3b31-d5cf-4cdf-9552-cf5e7c377102": { "allSelected": false, "customValue": "", "description": "Name of the cluster", "id": "c80e3b31-d5cf-4cdf-9552-cf5e7c377102", "key": "c80e3b31-d5cf-4cdf-9552-cf5e7c377102", "modificationUUID": "a98f6c5a-ff8d-40ea-ad08-98db1b0fcefb", "multiSelect": false, "name": "k8s.cluster.name", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`", "selectedValue": "default", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" }, "ecfbce9a-120d-423d-837d-ba0cb3455b42": { "allSelected": false, "customValue": "", "description": "The k8s namespace name.", "id": "ecfbce9a-120d-423d-837d-ba0cb3455b42", "modificationUUID": "29b548be-d676-475c-b038-7a624d2f6ab9", "multiSelect": false, "name": "k8s.namespace.name", "order": 2, "queryValue": "SELECT JSONExtractString(labels, 'k8s.namespace.name') AS `k8s.namespace.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.pod.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name AND JSONExtractString(labels, 'k8s.node.name') IN $k8s.node.name GROUP BY `k8s.namespace.name`", "selectedValue": "default", "showALLOption": false, "sort": "ASC", "textboxValue": "", "type": "QUERY" } }, "version": "v4", "widgets": [ { "description": "", "id": "c5f29b09-8a63-44ba-825f-db91a3c79a54", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.cpu.usage--float64----true", "isColumn": true, "key": "k8s.pod.cpu.usage", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "b5db2e8e", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "3fe84db4-8f8b-44ba-b903-2daaab59c756", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod CPU usage", "yAxisUnit": "none" }, { "description": "", "id": "230f3562-5ac1-4fec-946d-0dd21057f4b3", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.filesystem.available--float64----true", "isColumn": true, "key": "k8s.pod.filesystem.available", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "c7a202ed", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "3dcc5b09", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}-{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "ac5a77a7-ab36-4086-aeb2-3f2f37bf8578", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod filesystem available", "yAxisUnit": "bytes" }, { "description": "", "id": "7403ba8f-36bf-4c31-8b91-a447a36eeca0", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.filesystem.capacity--float64----true", "isColumn": true, "key": "k8s.pod.filesystem.capacity", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "35e72aa1", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "b5f79c98", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "f9f996b8-d538-4426-8707-5fece1289683", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod filesystem capacity", "yAxisUnit": "bytes" }, { "description": "", "id": "8722151e-7690-4152-98c3-f2cc0f741d50", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.filesystem.usage--float64----true", "isColumn": true, "key": "k8s.pod.filesystem.usage", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "ba47cf47", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "539e5b96", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.node.name}}-{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "5a709367-ad0b-4a0a-9f7e-884e555f7686", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod filesystem usage", "yAxisUnit": "bytes" }, { "description": "", "id": "9d0f96dc-d744-4baa-9910-ac1aef63cc34", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.memory.rss--float64----true", "isColumn": true, "key": "k8s.pod.memory.rss", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "8a0b922c", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "77d4b139", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "6ee7ce77-f719-4a41-b34f-c7d36d6010b7", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod memory rss", "yAxisUnit": "bytes" }, { "description": "", "id": "75fdac11-19dd-472f-a155-63e4682b88df", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.memory.usage--float64----true", "isColumn": true, "key": "k8s.pod.memory.usage", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "2d8022f6", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "3d87a431", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "59c73365-4180-4ddd-9406-2e2d8cfbc0d9", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod memory usage", "yAxisUnit": "bytes" }, { "description": "", "id": "960ff49f-d73b-49c2-ab4a-69df1e1abc51", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.memory.working_set--float64----true", "isColumn": true, "key": "k8s.pod.memory.working_set", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "a81010ad", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "79d14065", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "5f669961-7340-4f29-956d-af11587b0f07", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod memory working set", "yAxisUnit": "bytes" }, { "description": "", "id": "1f8965fb-5ad1-4679-9d28-9bd31d4e4cac", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.network.errors--float64----true", "isColumn": true, "key": "k8s.pod.network.errors", "type": "" }, "aggregateOperator": "sum_rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "56c93627", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "c284ecd1", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "interface--string--tag--false", "isColumn": false, "key": "interface", "type": "tag" }, { "dataType": "string", "id": "direction--string--tag--false", "isColumn": false, "key": "direction", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}-{{interface}}-{{direction}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "59401a56-061e-4d13-8c24-f7fee74818b2", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod network errors", "yAxisUnit": "none" }, { "description": "", "id": "2e864710-b418-4133-b248-2fa047e37fe3", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.network.io--float64----true", "isColumn": true, "key": "k8s.pod.network.io", "type": "" }, "aggregateOperator": "sum_rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "9a0ffaf3", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "c32821ed", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "c0d7e589", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "direction--string--tag--false", "isColumn": false, "key": "direction", "type": "tag" }, { "dataType": "string", "id": "interface--string--tag--false", "isColumn": false, "key": "interface", "type": "tag" }, { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}-{{interface}}-{{direction}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "534b461d-d992-4a30-ba17-ed7aac95a55b", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Pod network io", "yAxisUnit": "bytes" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "pod" + }, + { + "key": "tag", + "value": "k8s" + } + ], + "spec": { + "display": { + "name": "Kubernetes Pod Metrics - Detailed", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "Name of the cluster" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.node.name", + "description": "The k8s node name." + }, + "defaultValue": [ + "default" + ], + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`" + } + }, + "name": "k8s.node.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.namespace.name", + "description": "The k8s namespace name." + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.namespace.name') AS `k8s.namespace.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.pod.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name AND JSONExtractString(labels, 'k8s.node.name') IN $k8s.node.name GROUP BY `k8s.namespace.name`" + } + }, + "name": "k8s.namespace.name" + } + } + ], + "panels": { + "1f8965fb-5ad1-4679-9d28-9bd31d4e4cac": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod network errors", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.network.errors", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "interface", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}-{{interface}}-{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "230f3562-5ac1-4fec-946d-0dd21057f4b3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod filesystem available", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.filesystem.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}-{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "2e864710-b418-4133-b248-2fa047e37fe3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod network io", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.network.io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "interface", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}-{{interface}}-{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "7403ba8f-36bf-4c31-8b91-a447a36eeca0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod filesystem capacity", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.filesystem.capacity", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "75fdac11-19dd-472f-a155-63e4682b88df": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod memory usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "8722151e-7690-4152-98c3-f2cc0f741d50": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod filesystem usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.filesystem.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}-{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "960ff49f-d73b-49c2-ab4a-69df1e1abc51": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod memory working set", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.memory.working_set", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "9d0f96dc-d744-4baa-9910-ac1aef63cc34": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod memory rss", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.memory.rss", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "c5f29b09-8a63-44ba-825f-db91a3c79a54": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod CPU usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/c5f29b09-8a63-44ba-825f-db91a3c79a54" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/960ff49f-d73b-49c2-ab4a-69df1e1abc51" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/9d0f96dc-d744-4baa-9910-ac1aef63cc34" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/75fdac11-19dd-472f-a155-63e4682b88df" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/2e864710-b418-4133-b248-2fa047e37fe3" + } + }, + { + "x": 6, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/1f8965fb-5ad1-4679-9d28-9bd31d4e4cac" + } + }, + { + "x": 0, + "y": 18, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/8722151e-7690-4152-98c3-f2cc0f741d50" + } + }, + { + "x": 6, + "y": 18, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/230f3562-5ac1-4fec-946d-0dd21057f4b3" + } + }, + { + "x": 0, + "y": 24, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/7403ba8f-36bf-4c31-8b91-a447a36eeca0" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-overall.json b/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-overall.json index ce9c66b75..eafcbc043 100644 --- a/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-overall.json +++ b/helm/infra-charts/obaas/dashboards/1/kubernetes-pod-metrics-overall.json @@ -1 +1,620 @@ -{ "collapsableRowsMigrated": true, "description": "", "dotMigrated": true, "layout": [ { "h": 7, "i": "e16d581d-1da9-49ff-9c3b-1bb51c2f7730", "moved": false, "static": false, "w": 6, "x": 0, "y": 0 }, { "h": 7, "i": "18c1653b-f826-460d-9302-90bc6d3f5e52", "moved": false, "static": false, "w": 6, "x": 6, "y": 0 }, { "h": 7, "i": "a2cd4e4a-0b81-4a85-937f-48ca5c9f183b", "moved": false, "static": false, "w": 6, "x": 0, "y": 7 }, { "h": 7, "i": "1406e6b6-0c99-46d4-9782-530f6e7e053a", "moved": false, "static": false, "w": 6, "x": 6, "y": 7 } ], "name": "", "panelMap": {}, "tags": [ "pod", "k8s" ], "title": "Kubernetes Pod Metrics - Overall", "uploadedGrafana": false, "variables": { "05610c74-c8f3-495b-a7dc-8ec6e64f8bdb": { "allSelected": true, "customValue": "", "description": "The k8s node name.", "id": "05610c74-c8f3-495b-a7dc-8ec6e64f8bdb", "key": "05610c74-c8f3-495b-a7dc-8ec6e64f8bdb", "modificationUUID": "3506211c-4fd4-4873-a01e-d1ef986fb9d5", "multiSelect": true, "name": "k8s.node.name", "order": 1, "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`", "selectedValue": [ "default" ], "showALLOption": true, "sort": "ASC", "textboxValue": "", "type": "QUERY" }, "3c276fb0-b95b-42f8-b209-9953dd46d62c": { "allSelected": false, "customValue": "", "description": "The k8s namespace name", "id": "3c276fb0-b95b-42f8-b209-9953dd46d62c", "modificationUUID": "0923a01a-7e96-406b-ba9e-1a8c3610e65b", "multiSelect": false, "name": "k8s.namespace.name", "order": 2, "queryValue": "SELECT JSONExtractString(labels, 'k8s.namespace.name') AS `k8s.namespace.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.pod.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') IN $k8s.cluster.name AND JSONExtractString(labels, 'k8s.node.name') IN $k8s.node.name GROUP BY `k8s.namespace.name`", "selectedValue": "default", "showALLOption": false, "sort": "ASC", "textboxValue": "", "type": "QUERY" }, "4349d5be-eea6-41d2-9c8f-853ca85f018d": { "allSelected": false, "customValue": "", "description": "Name of the cluster", "id": "4349d5be-eea6-41d2-9c8f-853ca85f018d", "key": "4349d5be-eea6-41d2-9c8f-853ca85f018d", "modificationUUID": "2173224d-ec4e-4ede-b177-e1bacb34c8ea", "multiSelect": false, "name": "k8s.cluster.name", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`", "selectedValue": "default", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" } }, "version": "v4", "widgets": [ { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "e16d581d-1da9-49ff-9c3b-1bb51c2f7730", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.cpu.time--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "k8s.pod.cpu.time", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "877385bf", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "877385bf", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "61f9230d", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "8bc531e9-41fc-4989-9e45-75691903aafe", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Pod CPU usage", "yAxisUnit": "none" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "1406e6b6-0c99-46d4-9782-530f6e7e053a", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.filesystem.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.pod.filesystem.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "877385bf", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "cfd49200", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "a9fb8a7e", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" }, { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.filesystem.capacity--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.pod.filesystem.capacity", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "877385bf", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "c70ccfc4", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "58740964", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [ { "disabled": false, "expression": "(B-A)/B", "legend": "{{k8s.node.name}}-{{k8s.namespace.name}}-{{k8s.pod.name}}", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "16908d4e-1565-4847-8d87-01ebb8fc494a", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Pod filesystem usage", "yAxisUnit": "percentunit" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "18c1653b-f826-460d-9302-90bc6d3f5e52", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.memory.working_set--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.pod.memory.working_set", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "877385bf", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "c6107830", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "9e3c50e2", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "103626b5-910c-4262-88ed-0a136d0a0f0f", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Pod memory usage (WSS)", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "a2cd4e4a-0b81-4a85-937f-48ca5c9f183b", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.pod.network.io--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "k8s.pod.network.io", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "877385bf", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "9613b4da", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "7605354f", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "interface--string--tag--false", "isColumn": false, "key": "interface", "type": "tag" }, { "dataType": "string", "id": "direction--string--tag--false", "isColumn": false, "key": "direction", "type": "tag" }, { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}-{{interface}}-{{direction}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "4b255d6d-4cde-474d-8866-f4418583c18b", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Pod network IO", "yAxisUnit": "bytes" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "pod" + }, + { + "key": "tag", + "value": "k8s" + } + ], + "spec": { + "display": { + "name": "Kubernetes Pod Metrics - Overall", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "Name of the cluster" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.node.name", + "description": "The k8s node name." + }, + "defaultValue": [ + "default" + ], + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`" + } + }, + "name": "k8s.node.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.namespace.name", + "description": "The k8s namespace name" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.namespace.name') AS `k8s.namespace.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.pod.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') IN $k8s.cluster.name AND JSONExtractString(labels, 'k8s.node.name') IN $k8s.node.name GROUP BY `k8s.namespace.name`" + } + }, + "name": "k8s.namespace.name" + } + } + ], + "panels": { + "1406e6b6-0c99-46d4-9782-530f6e7e053a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod filesystem usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.filesystem.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.filesystem.capacity", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "(B-A)/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{k8s.node.name}}-{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "18c1653b-f826-460d-9302-90bc6d3f5e52": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod memory usage (WSS)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.memory.working_set", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "a2cd4e4a-0b81-4a85-937f-48ca5c9f183b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod network IO", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.network.io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "interface", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "direction", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}-{{interface}}-{{direction}}" + } + } + } + } + ], + "links": [] + } + }, + "e16d581d-1da9-49ff-9c3b-1bb51c2f7730": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pod CPU usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.pod.cpu.time", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name)" + }, + "groupBy": [ + { + "name": "k8s.node.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/e16d581d-1da9-49ff-9c3b-1bb51c2f7730" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/18c1653b-f826-460d-9302-90bc6d3f5e52" + } + }, + { + "x": 0, + "y": 7, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/a2cd4e4a-0b81-4a85-937f-48ca5c9f183b" + } + }, + { + "x": 6, + "y": 7, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/1406e6b6-0c99-46d4-9782-530f6e7e053a" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/kubernetes-pvc-metrics.json b/helm/infra-charts/obaas/dashboards/1/kubernetes-pvc-metrics.json index 2accd9df8..d4f8a8ffe 100644 --- a/helm/infra-charts/obaas/dashboards/1/kubernetes-pvc-metrics.json +++ b/helm/infra-charts/obaas/dashboards/1/kubernetes-pvc-metrics.json @@ -1 +1,626 @@ -{ "description": "", "dotMigrated": true, "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [ { "h": 6, "i": "94774ddd-6c72-4988-a7ed-07af51fab210", "moved": false, "static": false, "w": 6, "x": 0, "y": 0 }, { "h": 6, "i": "378ee8aa-898c-4de2-b710-ff747ce1614b", "moved": false, "static": false, "w": 6, "x": 6, "y": 0 }, { "h": 6, "i": "b1a1b62d-bbaa-4c49-a240-20e6f3a5c59d", "moved": false, "static": false, "w": 6, "x": 0, "y": 6 }, { "h": 6, "i": "3ddd26f4-886a-4e89-97a0-04e330e8647d", "moved": false, "static": false, "w": 6, "x": 6, "y": 6 }, { "h": 6, "i": "8a17665f-d533-4591-a2e8-9ea5ada56f78", "moved": false, "static": false, "w": 6, "x": 0, "y": 12 } ], "panelMap": {}, "tags": [ "pvc", "pod", "volume", "k8s" ], "title": "Kubernetes PVC Metrics", "uploadedGrafana": false, "variables": { "6492b479-9cce-41af-bd28-8cde5c24f513": { "allSelected": false, "customValue": "", "description": "The k8s cluster name", "id": "6492b479-9cce-41af-bd28-8cde5c24f513", "key": "6492b479-9cce-41af-bd28-8cde5c24f513", "modificationUUID": "75c4b76b-ce1c-40cc-80d1-efd0d5a15afe", "multiSelect": false, "name": "k8s.cluster.name", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`", "selectedValue": "default", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" }, "6a787b99-95f6-4d96-b667-eb74a65446ef": { "allSelected": true, "customValue": "", "description": "The k8s node name.", "id": "6a787b99-95f6-4d96-b667-eb74a65446ef", "key": "6a787b99-95f6-4d96-b667-eb74a65446ef", "modificationUUID": "5c32f543-c768-43c9-9de5-1acb1a4c6d3c", "multiSelect": true, "name": "k8s.node.name", "order": 1, "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`", "selectedValue": [ "default" ], "showALLOption": true, "sort": "ASC", "textboxValue": "", "type": "QUERY" }, "9a32bb87-d8b4-498f-88cf-65dfd25cd579": { "allSelected": false, "customValue": "", "description": "The k8s namespace name", "id": "9a32bb87-d8b4-498f-88cf-65dfd25cd579", "modificationUUID": "9c2f7f0f-67be-4963-b86c-ece5e645b0af", "multiSelect": false, "name": "k8s.namespace.name", "order": 2, "queryValue": "SELECT JSONExtractString(labels, 'k8s.namespace.name') AS `k8s.namespace.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.pod.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name AND JSONExtractString(labels, 'k8s.node.name') IN $k8s.node.name GROUP BY `k8s.namespace.name`", "selectedValue": "default", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" } }, "version": "v4", "widgets": [ { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "94774ddd-6c72-4988-a7ed-07af51fab210", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.volume.available--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.volume.available", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] }, { "id": "217757e9", "key": { "dataType": "string", "id": "k8s.volume.type--string--tag--false", "isColumn": false, "key": "k8s.volume.type", "type": "tag" }, "op": "in", "value": [ "persistentVolumeClaim" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "1f0f6b32-2d31-473c-9d09-8ff5ec235e55", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Volume available", "yAxisUnit": "bytes" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "378ee8aa-898c-4de2-b710-ff747ce1614b", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.volume.capacity--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "k8s.volume.capacity", "type": "Gauge" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "0cdebb88", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] }, { "id": "e0e880ce", "key": { "dataType": "string", "id": "k8s.volume.type--string--tag--false", "isColumn": false, "key": "k8s.volume.type", "type": "tag" }, "op": "in", "value": [ "persistentVolumeClaim" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "2b9730b5-864c-47da-b2f6-b8991b52814b", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [], "selectedTracesFields": [], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Volume capacity", "yAxisUnit": "bytes" }, { "description": "", "id": "3ddd26f4-886a-4e89-97a0-04e330e8647d", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.volume.inodes--float64----true", "isColumn": true, "key": "k8s.volume.inodes", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "5a604bad", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] }, { "id": "24b074f3", "key": { "dataType": "string", "id": "k8s.volume.type--string--tag--false", "isColumn": false, "key": "k8s.volume.type", "type": "tag" }, "op": "in", "value": [ "persistentVolumeClaim" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "fe9f67bd-b820-48f1-8676-e7505fa28834", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Volume inodes", "yAxisUnit": "short" }, { "description": "", "id": "8a17665f-d533-4591-a2e8-9ea5ada56f78", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.volume.inodes.free--float64----true", "isColumn": true, "key": "k8s.volume.inodes.free", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "8f01b14d", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] }, { "id": "a72c99da", "key": { "dataType": "string", "id": "k8s.volume.type--string--tag--false", "isColumn": false, "key": "k8s.volume.type", "type": "tag" }, "op": "in", "value": [ "persistentVolumeClaim" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "5662eaa7-159f-4007-b35d-08983d5c8602", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Volume inodes free", "yAxisUnit": "short" }, { "description": "", "id": "b1a1b62d-bbaa-4c49-a240-20e6f3a5c59d", "isStacked": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "k8s.volume.inodes.used--float64----true", "isColumn": true, "key": "k8s.volume.inodes.used", "type": "" }, "aggregateOperator": "avg", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.cluster.name--string--tag--false", "isColumn": false, "key": "k8s.cluster.name", "type": "tag" }, "op": "=", "value": "{{.k8s.cluster.name}}" }, { "id": "6077fbc2", "key": { "dataType": "string", "id": "k8s.node.name--string--tag--false", "isColumn": false, "key": "k8s.node.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.node.name}}" ] }, { "id": "46393c61", "key": { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, "op": "in", "value": [ "{{.k8s.namespace.name}}" ] }, { "id": "450ee3cb", "key": { "dataType": "string", "id": "k8s.volume.type--string--tag--false", "isColumn": false, "key": "k8s.volume.type", "type": "tag" }, "op": "in", "value": [ "persistentVolumeClaim" ] } ], "op": "AND" }, "groupBy": [ { "dataType": "string", "id": "k8s.namespace.name--string--tag--false", "isColumn": false, "key": "k8s.namespace.name", "type": "tag" }, { "dataType": "string", "id": "k8s.pod.name--string--tag--false", "isColumn": false, "key": "k8s.pod.name", "type": "tag" } ], "having": [], "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "sum", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "avg" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "4db01126-3a7f-4b27-8c91-fd822ac453e8", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "timePreferance": "GLOBAL_TIME", "title": "Volume inodes used", "yAxisUnit": "short" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "pvc" + }, + { + "key": "tag", + "value": "pod" + }, + { + "key": "tag", + "value": "volume" + }, + { + "key": "tag", + "value": "k8s" + } + ], + "spec": { + "display": { + "name": "Kubernetes PVC Metrics", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "The k8s cluster name" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.node.name", + "description": "The k8s node name." + }, + "defaultValue": [ + "default" + ], + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.node.name') AS `k8s.node.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name GROUP BY `k8s.node.name`" + } + }, + "name": "k8s.node.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.namespace.name", + "description": "The k8s namespace name" + }, + "defaultValue": "default", + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.namespace.name') AS `k8s.namespace.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.pod.cpu.time' AND JSONExtractString(labels, 'k8s.cluster.name') = $k8s.cluster.name AND JSONExtractString(labels, 'k8s.node.name') IN $k8s.node.name GROUP BY `k8s.namespace.name`" + } + }, + "name": "k8s.namespace.name" + } + } + ], + "panels": { + "378ee8aa-898c-4de2-b710-ff747ce1614b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Volume capacity", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.volume.capacity", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name AND k8s.volume.type = 'persistentVolumeClaim')" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "3ddd26f4-886a-4e89-97a0-04e330e8647d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Volume inodes", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.volume.inodes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name AND k8s.volume.type = 'persistentVolumeClaim')" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "8a17665f-d533-4591-a2e8-9ea5ada56f78": { + "kind": "Panel", + "spec": { + "display": { + "name": "Volume inodes free", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.volume.inodes.free", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name AND k8s.volume.type = 'persistentVolumeClaim')" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "94774ddd-6c72-4988-a7ed-07af51fab210": { + "kind": "Panel", + "spec": { + "display": { + "name": "Volume available", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "bytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.volume.available", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name AND k8s.volume.type = 'persistentVolumeClaim')" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + }, + "b1a1b62d-bbaa-4c49-a240-20e6f3a5c59d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Volume inodes used", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": null, + "softMax": null, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "k8s.volume.inodes.used", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.cluster.name = $k8s.cluster.name AND k8s.node.name IN $k8s.node.name AND k8s.namespace.name IN $k8s.namespace.name AND k8s.volume.type = 'persistentVolumeClaim')" + }, + "groupBy": [ + { + "name": "k8s.namespace.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "legend": "{{k8s.namespace.name}}-{{k8s.pod.name}}" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/94774ddd-6c72-4988-a7ed-07af51fab210" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/378ee8aa-898c-4de2-b710-ff747ce1614b" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/b1a1b62d-bbaa-4c49-a240-20e6f3a5c59d" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/3ddd26f4-886a-4e89-97a0-04e330e8647d" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/8a17665f-d533-4591-a2e8-9ea5ada56f78" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/nginx-metrics.json b/helm/infra-charts/obaas/dashboards/1/nginx-metrics.json index e453b7cee..af7c5eb14 100644 --- a/helm/infra-charts/obaas/dashboards/1/nginx-metrics.json +++ b/helm/infra-charts/obaas/dashboards/1/nginx-metrics.json @@ -1 +1,809 @@ -{"description":"","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":3,"i":"3f4ea86e-640f-469c-a4a2-bb5f89e838e3","moved":false,"static":false,"w":2,"x":0,"y":0},{"h":3,"i":"2b7eab13-c254-45c9-bfb2-c6c7c697bb87","moved":false,"static":false,"w":2,"x":2,"y":0},{"h":3,"i":"a5843ae7-01b6-4496-8d4f-833ad063f2f7","moved":false,"static":false,"w":2,"x":4,"y":0},{"h":3,"i":"c87b1a77-fef8-4646-82b2-2a125047ae88","moved":false,"static":false,"w":2,"x":6,"y":0},{"h":3,"i":"7b406be4-f1c5-4675-ae9b-41c0c3be4160","moved":false,"static":false,"w":2,"x":8,"y":0},{"h":3,"i":"375f9492-a159-4284-87d3-27b2b48b2b95","moved":false,"static":false,"w":2,"x":10,"y":0},{"h":6,"i":"5bc52eb7-775d-4798-a001-032824600280","moved":false,"static":false,"w":6,"x":0,"y":3},{"h":6,"i":"25fbd8ea-f8b9-4e94-9e9a-67f45004fb8b","moved":false,"static":false,"w":6,"x":6,"y":3},{"h":6,"i":"6e65bdf4-e865-47eb-b63f-5f1af5832960","moved":false,"static":false,"w":6,"x":0,"y":9},{"h":6,"i":"42712745-c418-40eb-b4b9-3b5466ddfea0","moved":false,"static":false,"w":6,"x":6,"y":9}],"panelMap":{},"tags":["nginx","otel"],"title":"NGINX (OTEL)","uploadedGrafana":false,"version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"25fbd8ea-f8b9-4e94-9e9a-67f45004fb8b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_requests_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_requests_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"count","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"7f2777f2-bfac-4199-918c-9f51c0cc73b1","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Requests","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"6e65bdf4-e865-47eb-b63f-5f1af5832960","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"ad8ee437","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"accepted"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"count","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"740efb55-5d58-45c1-a077-d696b8730f3b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Accepted conns","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":true,"id":"5bc52eb7-775d-4798-a001-032824600280","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"}],"having":[],"legend":"{{state}}","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"max","stepInterval":60,"timeAggregation":"max"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"9b258148-6767-4a4f-b920-f7baedf3e9fe","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Current conns","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"42712745-c418-40eb-b4b9-3b5466ddfea0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"faea948d","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"handled"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"count","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8ecd0c2d-db53-4f53-8078-89348c4e6981","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Handled conns","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"3f4ea86e-640f-469c-a4a2-bb5f89e838e3","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_requests_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_requests_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d2927427-a08c-45d4-9fa3-6d6d0d133f6e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"New requests","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"c87b1a77-fef8-4646-82b2-2a125047ae88","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"ef710eb1","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"active"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"max","stepInterval":60,"timeAggregation":"max"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e079b7ad-cdfc-46e3-8adf-f5117b67ad46","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Active","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"2b7eab13-c254-45c9-bfb2-c6c7c697bb87","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"3b79a55a","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"accepted"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b5db5ac7-1349-4b4b-ba4d-adc0582509cb","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Accepted connections","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"a5843ae7-01b6-4496-8d4f-833ad063f2f7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"1a2201fd","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"handled"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"6d70a908-3743-44e8-83e3-ee198c214299","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Handled connections","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"7b406be4-f1c5-4675-ae9b-41c0c3be4160","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"53d856e7","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"writing"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"max","stepInterval":60,"timeAggregation":"max"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0e028aec-0ca9-4c16-b54f-f69b10c8778e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Writing","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"375f9492-a159-4284-87d3-27b2b48b2b95","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"nginx_ingress_controller_nginx_process_connections--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"nginx_ingress_controller_nginx_process_connections","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"09b675ca","key":{"dataType":"string","id":"state--string--tag--false","isColumn":false,"isJSON":false,"key":"state","type":"tag"},"op":"=","value":"waiting"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"max","stepInterval":60,"timeAggregation":"max"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"10d33c53-84d6-42c2-9d8f-4525be838614","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Waiting","yAxisUnit":"none"}]} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "nginx" + }, + { + "key": "tag", + "value": "otel" + } + ], + "spec": { + "display": { + "name": "NGINX (OTEL)", + "description": "" + }, + "variables": [], + "panels": { + "25fbd8ea-f8b9-4e94-9e9a-67f45004fb8b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Requests", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_requests_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "count" + } + } + } + } + ], + "links": [] + } + }, + "2b7eab13-c254-45c9-bfb2-c6c7c697bb87": { + "kind": "Panel", + "spec": { + "display": { + "name": "Accepted connections", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'accepted'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "375f9492-a159-4284-87d3-27b2b48b2b95": { + "kind": "Panel", + "spec": { + "display": { + "name": "Waiting", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "max", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'waiting'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "3f4ea86e-640f-469c-a4a2-bb5f89e838e3": { + "kind": "Panel", + "spec": { + "display": { + "name": "New requests", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_requests_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "42712745-c418-40eb-b4b9-3b5466ddfea0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Handled conns", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'handled'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "count" + } + } + } + } + ], + "links": [] + } + }, + "5bc52eb7-775d-4798-a001-032824600280": { + "kind": "Panel", + "spec": { + "display": { + "name": "Current conns", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "max", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [ + { + "name": "state", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{state}}" + } + } + } + } + ], + "links": [] + } + }, + "6e65bdf4-e865-47eb-b63f-5f1af5832960": { + "kind": "Panel", + "spec": { + "display": { + "name": "Accepted conns", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'accepted'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "count" + } + } + } + } + ], + "links": [] + } + }, + "7b406be4-f1c5-4675-ae9b-41c0c3be4160": { + "kind": "Panel", + "spec": { + "display": { + "name": "Writing", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "max", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'writing'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "a5843ae7-01b6-4496-8d4f-833ad063f2f7": { + "kind": "Panel", + "spec": { + "display": { + "name": "Handled connections", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'handled'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "c87b1a77-fef8-4646-82b2-2a125047ae88": { + "kind": "Panel", + "spec": { + "display": { + "name": "Active", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "nginx_ingress_controller_nginx_process_connections", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "max", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "state = 'active'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 2, + "height": 3, + "content": { + "$ref": "#/spec/panels/3f4ea86e-640f-469c-a4a2-bb5f89e838e3" + } + }, + { + "x": 2, + "y": 0, + "width": 2, + "height": 3, + "content": { + "$ref": "#/spec/panels/2b7eab13-c254-45c9-bfb2-c6c7c697bb87" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 3, + "content": { + "$ref": "#/spec/panels/a5843ae7-01b6-4496-8d4f-833ad063f2f7" + } + }, + { + "x": 6, + "y": 0, + "width": 2, + "height": 3, + "content": { + "$ref": "#/spec/panels/c87b1a77-fef8-4646-82b2-2a125047ae88" + } + }, + { + "x": 8, + "y": 0, + "width": 2, + "height": 3, + "content": { + "$ref": "#/spec/panels/7b406be4-f1c5-4675-ae9b-41c0c3be4160" + } + }, + { + "x": 10, + "y": 0, + "width": 2, + "height": 3, + "content": { + "$ref": "#/spec/panels/375f9492-a159-4284-87d3-27b2b48b2b95" + } + }, + { + "x": 0, + "y": 3, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/5bc52eb7-775d-4798-a001-032824600280" + } + }, + { + "x": 6, + "y": 3, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/25fbd8ea-f8b9-4e94-9e9a-67f45004fb8b" + } + }, + { + "x": 0, + "y": 9, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/6e65bdf4-e865-47eb-b63f-5f1af5832960" + } + }, + { + "x": 6, + "y": 9, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/42712745-c418-40eb-b4b9-3b5466ddfea0" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/oracle_db_dashboard.json b/helm/infra-charts/obaas/dashboards/1/oracle_db_dashboard.json index 4d9219f21..2680206d7 100644 --- a/helm/infra-charts/obaas/dashboards/1/oracle_db_dashboard.json +++ b/helm/infra-charts/obaas/dashboards/1/oracle_db_dashboard.json @@ -1 +1,1372 @@ -{"description":"","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":1,"i":"86b8b18c-ef8d-47e4-b682-ef1523be9238","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":0},{"h":5,"i":"10534a91-3665-4db7-a40c-fc27c3bce0b7","moved":false,"static":false,"w":3,"x":0,"y":1},{"h":5,"i":"2483446b-b11f-4e4e-8aa2-7ffe0571091d","moved":false,"static":false,"w":3,"x":3,"y":1},{"h":5,"i":"a0a6972d-61db-4744-8827-765afd8530ab","moved":false,"static":false,"w":3,"x":6,"y":1},{"h":5,"i":"a03c88a5-04a2-4701-b1dd-c9acaadd33f0","moved":false,"static":false,"w":3,"x":9,"y":1},{"h":7,"i":"ea405917-0c3e-4ed5-90eb-d0a780f006fa","moved":false,"static":false,"w":9,"x":0,"y":6},{"h":7,"i":"df7bcde1-c7ff-44d0-99ab-ceb09b53b23c","moved":false,"static":false,"w":3,"x":9,"y":6},{"h":7,"i":"f08d8724-2634-4908-86c2-62748997ea4e","moved":false,"static":false,"w":9,"x":0,"y":13},{"h":7,"i":"01d3a060-cf42-4ce8-9d4d-4ec2fb6d1678","moved":false,"static":false,"w":3,"x":9,"y":13},{"h":8,"i":"eb54b8b4-c1af-418e-90f5-a4f8aede15bc","moved":false,"static":false,"w":9,"x":0,"y":20},{"h":8,"i":"3a10b624-d7fe-4748-99ae-45e09e790607","moved":false,"static":false,"w":3,"x":9,"y":20},{"h":1,"i":"672f1567-9f40-49cc-be8a-0acf7afb2371","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":28},{"h":1,"i":"f0c47b6c-4d58-4825-8d54-5864a59bcb81","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":29},{"h":9,"i":"a9e60405-e5db-4c29-b946-f04991c347ef","moved":false,"static":false,"w":12,"x":0,"y":30},{"h":1,"i":"5f07c6ae-ab1f-4729-8757-f74cffebb715","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":39},{"h":6,"i":"a253fe48-985c-4213-a056-a15121164b09","moved":false,"static":false,"w":12,"x":0,"y":40}],"panelMap":{"5f07c6ae-ab1f-4729-8757-f74cffebb715":{"collapsed":false,"widgets":[{"h":6,"i":"a253fe48-985c-4213-a056-a15121164b09","moved":false,"static":false,"w":12,"x":0,"y":154}]},"672f1567-9f40-49cc-be8a-0acf7afb2371":{"collapsed":true,"widgets":[{"h":9,"i":"428ce778-a948-4cea-b274-b27e31425a46","moved":false,"static":false,"w":12,"x":0,"y":56}]},"86b8b18c-ef8d-47e4-b682-ef1523be9238":{"collapsed":false,"widgets":[{"h":5,"i":"10534a91-3665-4db7-a40c-fc27c3bce0b7","moved":false,"static":false,"w":3,"x":0,"y":1},{"h":5,"i":"2483446b-b11f-4e4e-8aa2-7ffe0571091d","moved":false,"static":false,"w":3,"x":3,"y":1},{"h":5,"i":"a0a6972d-61db-4744-8827-765afd8530ab","moved":false,"static":false,"w":3,"x":6,"y":1},{"h":5,"i":"a03c88a5-04a2-4701-b1dd-c9acaadd33f0","moved":false,"static":false,"w":3,"x":9,"y":1},{"h":7,"i":"ea405917-0c3e-4ed5-90eb-d0a780f006fa","moved":false,"static":false,"w":9,"x":0,"y":6},{"h":7,"i":"df7bcde1-c7ff-44d0-99ab-ceb09b53b23c","moved":false,"static":false,"w":3,"x":9,"y":6},{"h":7,"i":"f08d8724-2634-4908-86c2-62748997ea4e","moved":false,"static":false,"w":9,"x":0,"y":13},{"h":7,"i":"01d3a060-cf42-4ce8-9d4d-4ec2fb6d1678","moved":false,"static":false,"w":3,"x":9,"y":13},{"h":8,"i":"eb54b8b4-c1af-418e-90f5-a4f8aede15bc","moved":false,"static":false,"w":9,"x":0,"y":20},{"h":8,"i":"3a10b624-d7fe-4748-99ae-45e09e790607","moved":false,"static":false,"w":3,"x":9,"y":20}]},"f0c47b6c-4d58-4825-8d54-5864a59bcb81":{"collapsed":false,"widgets":[{"h":9,"i":"a9e60405-e5db-4c29-b946-f04991c347ef","moved":false,"static":false,"w":12,"x":0,"y":138}]}},"tags":[],"title":"Oracle Database Dashboard","uploadedGrafana":false,"uuid":"019c43b7-1feb-7a70-b022-2e342b357c5c","variables":{"1a90ca5c-75a6-4d3b-a7ab-9a65f0bdc532":{"allSelected":false,"customValue":"","defaultValue":"","description":"The k8s cluster name","id":"1a90ca5c-75a6-4d3b-a7ab-9a65f0bdc532","key":"1a90ca5c-75a6-4d3b-a7ab-9a65f0bdc532","modificationUUID":"b892a099-e095-45d0-b44e-f2e12d3c34b4","multiSelect":false,"name":"k8s.cluster.name","order":0,"queryValue":"SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`","showALLOption":false,"sort":"DISABLED","textboxValue":"","type":"QUERY"}},"version":"v5","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"10534a91-3665-4db7-a40c-fc27c3bce0b7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_up","reduceTo":"avg","spaceAggregation":"avg","temporality":null,"timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a75386d0-62ea-4da2-876a-2f3eb6fc79a0","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"1620689e-1997-4c7c-ba14-a11b13625f62","isEditEnabled":false,"keyIndex":1,"selectedGraph":"value","thresholdColor":"Red","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":"<=","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0},{"index":"3f7bd3a2-19ea-4e3f-a7c6-cfc48c9de553","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Database Status","yAxisUnit":"bool_on_off"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"a0a6972d-61db-4744-8827-765afd8530ab","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_db_system_value","reduceTo":"last","spaceAggregation":"sum","temporality":null,"timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"name = 'sga_max_size'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"04d61c4f-7066-4ba5-8b32-8b5f05359025","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"SGA Max Size","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"a03c88a5-04a2-4701-b1dd-c9acaadd33f0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_db_system_value","reduceTo":"last","spaceAggregation":"sum","temporality":null,"timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"name = 'pga_aggregate_limit'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"257aaea1-25e2-40e6-82f5-e92cdef6c6dc","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"PGA Aggregate Limit","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"ea405917-0c3e-4ed5-90eb-d0a780f006fa","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_sessions_value","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"status = 'ACTIVE' "},"functions":[],"groupBy":[{"dataType":"string","id":"type--string--tag","isColumn":false,"isJSON":false,"key":"type","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"feda5f2d-88cf-4ad4-8d3b-64c74bd0e0f1","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Active Sessions","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"df7bcde1-c7ff-44d0-99ab-ceb09b53b23c","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_sessions_value","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"status = 'ACTIVE' "},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":null}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"776329d9-e04f-480a-8182-a837cc8f5460","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Latest Active Sessions Count","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"f08d8724-2634-4908-86c2-62748997ea4e","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_activity_user_commits","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"User Commits","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e35215a7-1822-4d74-a9c5-72f3bc671f5e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"User commits","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"01d3a060-cf42-4ce8-9d4d-4ec2fb6d1678","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_activity_user_commits","reduceTo":"last","spaceAggregation":"sum","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e8fa597e-8b7c-4ac1-81aa-48da4fdb405f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Latest User Commits Count","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"eb54b8b4-c1af-418e-90f5-a4f8aede15bc","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_activity_execute_count","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Execute Counts","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"cdfad060-90ac-4728-9843-1558126d087e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Execute Counts","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"3a10b624-d7fe-4748-99ae-45e09e790607","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_activity_execute_count","reduceTo":"avg","spaceAggregation":"avg","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Execute Counts","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"7b296522-64e9-4217-8053-e8ca8a097123","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"db.name--string--tag--false","isColumn":false,"isJSON":false,"key":"db.name","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Latest Execute Counts","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"2483446b-b11f-4e4e-8aa2-7ffe0571091d","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_db_system_value","reduceTo":"last","spaceAggregation":"sum","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"name = 'cpu_count'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"218d7034-4fbd-4828-b0ec-1c6ad36bfa83","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Count","yAxisUnit":"short"},{"description":"","id":"86b8b18c-ef8d-47e4-b682-ef1523be9238","panelTypes":"row","title":"Oracle Database Details"},{"description":"","id":"672f1567-9f40-49cc-be8a-0acf7afb2371","panelTypes":"row","title":"System Wait Classes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":true,"id":"428ce778-a948-4cea-b274-b27e31425a46","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_wait_time_administrative","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Administrative","limit":null,"orderBy":[],"queryName":"A","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_application","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"B","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Application","limit":null,"orderBy":[],"queryName":"B","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_cluster","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"C","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Cluster","limit":null,"orderBy":[],"queryName":"C","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_commit","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"D","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Commit","limit":null,"orderBy":[],"queryName":"D","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_concurrency","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"E","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Concurrency","limit":null,"orderBy":[],"queryName":"E","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_configuration","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"F","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Configuration","limit":null,"orderBy":[],"queryName":"F","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_network","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"G","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Network","limit":null,"orderBy":[],"queryName":"G","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_other","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"H","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Other","limit":null,"orderBy":[],"queryName":"H","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_scheduler","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"I","functions":[],"groupBy":[],"having":{"expression":""},"legend":"Scheduler","limit":null,"orderBy":[],"queryName":"I","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_user_io","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"J","functions":[],"groupBy":[],"having":{"expression":""},"legend":"User I/O","limit":null,"orderBy":[],"queryName":"J","stepInterval":60},{"aggregations":[{"metricName":"oracledb_wait_time_system_io","reduceTo":"avg","spaceAggregation":"sum","temporality":null,"timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"K","functions":[],"groupBy":[],"having":{"expression":""},"legend":"System I/O","limit":null,"orderBy":[],"queryName":"K","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"7f6e56a3-bfa7-467c-8e32-423f878bee07","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Database Wait Times","yAxisUnit":"s"},{"description":"","id":"f0c47b6c-4d58-4825-8d54-5864a59bcb81","panelTypes":"row","title":"Top SQL"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"ms"},"columnWidths":{"A":145,"sql_id":145,"sql_text":145},"description":"","fillSpans":false,"id":"a9e60405-e5db-4c29-b946-f04991c347ef","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"oracledb_top_sql_elapsed","reduceTo":"avg","spaceAggregation":"max","temporality":null,"timeAggregation":"max"}],"dataSource":"metrics","disabled":false,"expression":"A","functions":[],"groupBy":[{"dataType":"string","id":"sql_id--string--tag--false","isColumn":false,"isJSON":false,"key":"sql_id","type":"tag"},{"dataType":"string","id":"sql_text--string--tag--false","isColumn":false,"isJSON":false,"key":"sql_text","type":"tag"}],"having":{"expression":""},"legend":"Time Elapsed","limit":null,"orderBy":[],"queryName":"A","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"631ff07f-cc02-4b78-aaad-d6576e0eabd9","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Top SQL by elapsed time running","yAxisUnit":"none"},{"description":"","id":"5f07c6ae-ab1f-4729-8757-f74cffebb715","panelTypes":"row","title":"alert.log"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"body":350,"timestamp":100},"contextLinks":{"linksData":[]},"customLegendColors":{},"decimalPrecision":2,"description":"","fillSpans":false,"id":"a253fe48-985c-4213-a056-a15121164b09","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"list","query":{"builder":{"queryData":[{"aggregations":[{"expression":"count()"}],"dataSource":"logs","disabled":false,"expression":"A","filter":{"expression":"k8s.cluster.name = $k8s.cluster.name AND k8s.deployment.name like '%metrics-exporter%' AND k8s.container.name = 'alertlog'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"offset":0,"orderBy":[],"pageSize":10,"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8eb3b3a0-a194-4a43-a233-e80d342b0a77","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"timestamp","type":""},{"dataType":"string","name":"body","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"alert.log","yAxisUnit":"none"}]} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Oracle Database Dashboard", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "k8s.cluster.name", + "description": "The k8s cluster name" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'k8s.cluster.name') AS `k8s.cluster.name` FROM signoz_metrics.distributed_time_series_v4_1day WHERE `metric_name` = 'k8s.node.cpu.time' GROUP BY `k8s.cluster.name`" + } + }, + "name": "k8s.cluster.name" + } + } + ], + "panels": { + "01d3a060-cf42-4ce8-9d4d-4ec2fb6d1678": { + "kind": "Panel", + "spec": { + "display": { + "name": "Latest User Commits Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_activity_user_commits", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "10534a91-3665-4db7-a40c-fc27c3bce0b7": { + "kind": "Panel", + "spec": { + "display": { + "name": "Database Status", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "bool_on_off", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "below_or_equal", + "unit": "none", + "color": "Red", + "format": "text" + }, + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Green", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_up", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "2483446b-b11f-4e4e-8aa2-7ffe0571091d": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_db_system_value", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "name = 'cpu_count'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "3a10b624-d7fe-4748-99ae-45e09e790607": { + "kind": "Panel", + "spec": { + "display": { + "name": "Latest Execute Counts", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_activity_execute_count", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Execute Counts" + } + } + } + } + ], + "links": [] + } + }, + "428ce778-a948-4cea-b274-b27e31425a46": { + "kind": "Panel", + "spec": { + "display": { + "name": "Database Wait Times", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_administrative", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Administrative" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_application", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Application" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_cluster", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Cluster" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_commit", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Commit" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_concurrency", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Concurrency" + } + }, + { + "type": "builder_query", + "spec": { + "name": "F", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_configuration", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Configuration" + } + }, + { + "type": "builder_query", + "spec": { + "name": "G", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_network", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Network" + } + }, + { + "type": "builder_query", + "spec": { + "name": "H", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_other", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Other" + } + }, + { + "type": "builder_query", + "spec": { + "name": "I", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_scheduler", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Scheduler" + } + }, + { + "type": "builder_query", + "spec": { + "name": "J", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_user_io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "User I/O" + } + }, + { + "type": "builder_query", + "spec": { + "name": "K", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_wait_time_system_io", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "System I/O" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "a03c88a5-04a2-4701-b1dd-c9acaadd33f0": { + "kind": "Panel", + "spec": { + "display": { + "name": "PGA Aggregate Limit", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_db_system_value", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "name = 'pga_aggregate_limit'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "a0a6972d-61db-4744-8827-765afd8530ab": { + "kind": "Panel", + "spec": { + "display": { + "name": "SGA Max Size", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_db_system_value", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "name = 'sga_max_size'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "a253fe48-985c-4213-a056-a15121164b09": { + "kind": "Panel", + "spec": { + "display": { + "name": "alert.log", + "description": "" + }, + "plugin": { + "kind": "signoz/ListPanel", + "spec": { + "selectFields": [ + { + "name": "timestamp", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + }, + { + "name": "body", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + } + ] + } + }, + "queries": [ + { + "kind": "raw", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "logs", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.cluster.name = $k8s.cluster.name AND k8s.deployment.name like '%metrics-exporter%' AND k8s.container.name = 'alertlog'" + }, + "groupBy": [], + "order": [], + "limit": 10, + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "a9e60405-e5db-4c29-b946-f04991c347ef": { + "kind": "Panel", + "spec": { + "display": { + "name": "Top SQL by elapsed time running", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "ms" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_top_sql_elapsed", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "max", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [ + { + "name": "sql_id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "sql_text", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Time Elapsed" + } + } + } + } + ], + "links": [] + } + }, + "df7bcde1-c7ff-44d0-99ab-ceb09b53b23c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Latest Active Sessions Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_sessions_value", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "status = 'ACTIVE' " + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "ea405917-0c3e-4ed5-90eb-d0a780f006fa": { + "kind": "Panel", + "spec": { + "display": { + "name": "Active Sessions", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_sessions_value", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "status = 'ACTIVE' " + }, + "groupBy": [ + { + "name": "type", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "eb54b8b4-c1af-418e-90f5-a4f8aede15bc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Execute Counts", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_activity_execute_count", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Execute Counts" + } + } + } + } + ], + "links": [] + } + }, + "f08d8724-2634-4908-86c2-62748997ea4e": { + "kind": "Panel", + "spec": { + "display": { + "name": "User commits", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "oracledb_activity_user_commits", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "User Commits" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Oracle Database Details", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/10534a91-3665-4db7-a40c-fc27c3bce0b7" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/2483446b-b11f-4e4e-8aa2-7ffe0571091d" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/a0a6972d-61db-4744-8827-765afd8530ab" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/a03c88a5-04a2-4701-b1dd-c9acaadd33f0" + } + }, + { + "x": 0, + "y": 5, + "width": 9, + "height": 7, + "content": { + "$ref": "#/spec/panels/ea405917-0c3e-4ed5-90eb-d0a780f006fa" + } + }, + { + "x": 9, + "y": 5, + "width": 3, + "height": 7, + "content": { + "$ref": "#/spec/panels/df7bcde1-c7ff-44d0-99ab-ceb09b53b23c" + } + }, + { + "x": 0, + "y": 12, + "width": 9, + "height": 7, + "content": { + "$ref": "#/spec/panels/f08d8724-2634-4908-86c2-62748997ea4e" + } + }, + { + "x": 9, + "y": 12, + "width": 3, + "height": 7, + "content": { + "$ref": "#/spec/panels/01d3a060-cf42-4ce8-9d4d-4ec2fb6d1678" + } + }, + { + "x": 0, + "y": 19, + "width": 9, + "height": 8, + "content": { + "$ref": "#/spec/panels/eb54b8b4-c1af-418e-90f5-a4f8aede15bc" + } + }, + { + "x": 9, + "y": 19, + "width": 3, + "height": 8, + "content": { + "$ref": "#/spec/panels/3a10b624-d7fe-4748-99ae-45e09e790607" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "System Wait Classes", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 9, + "content": { + "$ref": "#/spec/panels/428ce778-a948-4cea-b274-b27e31425a46" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Top SQL", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 9, + "content": { + "$ref": "#/spec/panels/a9e60405-e5db-4c29-b946-f04991c347ef" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "alert.log", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/a253fe48-985c-4213-a056-a15121164b09" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/spring_boot_observability.json b/helm/infra-charts/obaas/dashboards/1/spring_boot_observability.json index 7d11223f5..6698159d6 100644 --- a/helm/infra-charts/obaas/dashboards/1/spring_boot_observability.json +++ b/helm/infra-charts/obaas/dashboards/1/spring_boot_observability.json @@ -1 +1,1104 @@ -{"description":"Observe Spring Boot application with three pillars of observability: Traces , Metrics, Logs on SigNoz through OpenTelemetry and OpenMetrics.","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":6,"i":"40ddac45-2193-4611-8b44-f87b98a0524a","moved":false,"static":false,"w":3,"x":0,"y":0},{"h":6,"i":"449a6a9c-7032-4c77-bc41-75ef541c2544","moved":false,"static":false,"w":3,"x":3,"y":0},{"h":6,"i":"7bf67824-f756-448f-b2ad-1aab8fff1441","moved":false,"static":false,"w":6,"x":6,"y":0},{"h":6,"i":"c9c76541-92c5-49f8-b063-9a0f8466bf7b","moved":false,"static":false,"w":6,"x":0,"y":6},{"h":6,"i":"5abfc55c-b548-4e20-9391-dba783fbb381","moved":false,"static":false,"w":6,"x":6,"y":6},{"h":6,"i":"397f979c-54b0-4bd7-a589-e77b2c19f60a","moved":false,"static":false,"w":6,"x":0,"y":12},{"h":6,"i":"07b48e52-6fda-4a9d-99f1-aa9d5e5b0132","moved":false,"static":false,"w":6,"x":6,"y":12},{"h":5,"i":"cbe78413-ff82-4f14-98fd-2b94c2eaf60f","moved":false,"static":false,"w":12,"x":0,"y":18},{"h":5,"i":"eb78fd79-ccad-47e5-aa75-6ef77cc73b23","moved":false,"static":false,"w":12,"x":0,"y":23}],"panelMap":{},"tags":[],"title":"Spring Boot Observability","uploadedGrafana":false,"variables":{"b6c6e07d-b816-4dc5-9dc7-1604c4a36343":{"allSelected":false,"customValue":"","description":"Log Keyword","id":"b6c6e07d-b816-4dc5-9dc7-1604c4a36343","key":"b6c6e07d-b816-4dc5-9dc7-1604c4a36343","modificationUUID":"d3e3852b-2c50-445e-81bf-f22cf48ff478","multiSelect":false,"name":"log_keyword","order":0,"queryValue":"","showALLOption":false,"sort":"DISABLED","textboxValue":"","type":"TEXTBOX"},"d7571790-4c28-475a-aba6-31ebf1777244":{"allSelected":false,"customValue":"","defaultValue":"","description":"Application Name","id":"d7571790-4c28-475a-aba6-31ebf1777244","modificationUUID":"bea14d13-ef27-4fee-8db5-d7b67ff108ab","multiSelect":false,"name":"app_name","order":0,"queryValue":"\nSELECT JSONExtractString(labels, 'service.name') AS service_name\nFROM signoz_metrics.time_series_v4_1day\nWHERE (metric_name = 'signoz_calls_total') AND (unix_milli >= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000))\nGROUP BY service_name","showALLOption":false,"sort":"ASC","textboxValue":"","type":"QUERY"}},"version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"40ddac45-2193-4611-8b44-f87b98a0524a","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"sum","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"pageSize":10,"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"40099908-70e9-45f4-b71b-413c2eb392de","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(http_server_requests_seconds_count{application=\"$app_name\", uri !~ \".*actuator.*\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"b6606b15-409f-4f67-b679-60d87592b214","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Background","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"short","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Total Requests","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":""},"columnWidths":{"A":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"7bf67824-f756-448f-b2ad-1aab8fff1441","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"count","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"75053530-6152-4f67-a284-1a57ae2391c0","promql":[{"disabled":false,"legend":"{{uri}}","name":"A","query":"sum by (uri)(http_server_requests_seconds_count{application=\"$app_name\", uri !~ \".*actuator.*\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Requests Count","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"397f979c-54b0-4bd7-a589-e77b2c19f60a","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator' "},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator' "},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0b580e89-7c45-4f04-87c8-f0ebec2d7f34","promql":[{"disabled":false,"legend":"{{method}} {{uri}}","name":"A","query":"sum by(uri,method)(http_server_requests_seconds_sum{application=\"$app_name\"}) / sum by(uri,method)(http_server_requests_seconds_count{application=\"$app_name\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Requests Average Duration","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"string"},"columnWidths":{"body":350,"timestamp":100,"trace_id":100},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"eb78fd79-ccad-47e5-aa75-6ef77cc73b23","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"list","query":{"builder":{"queryData":[{"aggregations":[{"expression":"count()"}],"dataSource":"logs","disabled":false,"expression":"A","filter":{"expression":"service.name IN ['.app_name'] AND body CONTAINS '.log_keyword'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"offset":0,"orderBy":[{"columnName":"timestamp","order":"desc"},{"columnName":"id","order":"desc"}],"pageSize":10,"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8325eb00-4f98-42b2-a3eb-2fddca60eb2e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"timestamp","type":""},{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"trace_id","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Logs Explorer","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"449a6a9c-7032-4c77-bc41-75ef541c2544","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"sum","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"application in ['.app_name'] AND uri not regexp '/actuator' AND outcome = 'SERVER_ERROR'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"pageSize":10,"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"72ea0b0e-f88d-445e-b28e-af5c3bb4aa7a","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(http_server_requests_seconds_count{application=\"$app_name\", uri !~ \".*actuator.*\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"2e70c392-9341-4a36-9ab7-8c2b6249ce65","isEditEnabled":false,"keyIndex":1,"selectedGraph":"value","thresholdColor":"Red","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0},{"index":"b6606b15-409f-4f67-b679-60d87592b214","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Background","thresholdLabel":"","thresholdOperator":"<=","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Total Exceptions","yAxisUnit":"short"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"c9c76541-92c5-49f8-b063-9a0f8466bf7b","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator' AND status REGEXP '2'"},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":0},{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator'"},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":0}],"queryFormulas":[{"disabled":false,"expression":"(A/B)*100","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"93a5378e-7638-4432-9620-1300891aca18","promql":[{"disabled":false,"legend":"{{method}} {{uri}}","name":"A","query":"sum by(uri,method)(http_server_requests_seconds_sum{application=\"$app_name\"}) / sum by(uri,method)(http_server_requests_seconds_count{application=\"$app_name\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"ca15e701-7d5d-4a99-a99e-acf74a78d2a2","isEditEnabled":false,"keyIndex":0,"selectedGraph":"graph","thresholdColor":"Green","thresholdFormat":"Background","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"percent","thresholdValue":100}],"timePreferance":"GLOBAL_TIME","title":"Percent of 2xx Requests","yAxisUnit":"percent"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"07b48e52-6fda-4a9d-99f1-aa9d5e5b0132","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator' "},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"dade8b03-5212-42ba-b08a-dd0c733cdc3c","promql":[{"disabled":false,"legend":"{{method}} {{uri}}","name":"A","query":"sum by(uri,method)(http_server_requests_seconds_sum{application=\"$app_name\"}) / sum by(uri,method)(http_server_requests_seconds_count{application=\"$app_name\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Request Per Sec","yAxisUnit":"reqps"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"string"},"columnWidths":{"date":145,"durationNano":145,"http.url":145,"name":145,"trace_id":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"cbe78413-ff82-4f14-98fd-2b94c2eaf60f","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"list","query":{"builder":{"queryData":[{"aggregations":[{"expression":"count()"}],"dataSource":"traces","disabled":false,"expression":"A","filter":{"expression":"service.name IN ['.app_name'] AND uri NOT REGEXP '/actuator' AND uri REGEXP '/' "},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"offset":0,"orderBy":[{"columnName":"timestamp","order":"desc"}],"pageSize":10,"queryName":"A","selectColumns":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"49bd6390-3607-4ad0-862f-a27b03b7a3b1","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"timestamp","type":""},{"dataType":"string","name":"body","type":""}],"selectedTracesFields":[{"dataType":"string","id":"trace_id--string----true","isColumn":true,"isJSON":false,"key":"trace_id","type":""},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"http.url--string--tag--false","isColumn":false,"isJSON":false,"key":"http.url","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Traces Explorer","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"5abfc55c-b548-4e20-9391-dba783fbb381","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator' AND status REGEXP '5'"},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"application IN ['.app_name'] AND uri NOT REGEXP '/actuator'"},"functions":[],"groupBy":[{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"},{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8c150964-aeec-4e57-8f91-e6e139abbccc","promql":[{"disabled":false,"legend":"{{method}} {{uri}}","name":"A","query":"sum by(uri,method)(http_server_requests_seconds_sum{application=\"$app_name\"}) / sum by(uri,method)(http_server_requests_seconds_count{application=\"$app_name\"})"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Percent of 5xx Requests","yAxisUnit":"percent"}],"uuid":"0199715e-ad3d-7e93-9094-358c2b4bef38"} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Spring Boot Observability", + "description": "Observe Spring Boot application with three pillars of observability: Traces , Metrics, Logs on SigNoz through OpenTelemetry and OpenMetrics." + }, + "variables": [ + { + "kind": "TextVariable", + "spec": { + "display": { + "name": "log_keyword", + "description": "Log Keyword" + }, + "value": "", + "constant": false, + "name": "log_keyword" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "app_name", + "description": "Application Name" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "\nSELECT JSONExtractString(labels, 'service.name') AS service_name\nFROM signoz_metrics.time_series_v4_1day\nWHERE (metric_name = 'signoz_calls_total') AND (unix_milli \u003e= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000))\nGROUP BY service_name" + } + }, + "name": "app_name" + } + } + ], + "panels": { + "07b48e52-6fda-4a9d-99f1-aa9d5e5b0132": { + "kind": "Panel", + "spec": { + "display": { + "name": "Request Per Sec", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator' " + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "397f979c-54b0-4bd7-a589-e77b2c19f60a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Requests Average Duration", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.sum", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator' " + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator' " + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "40ddac45-2193-4611-8b44-f87b98a0524a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Requests", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "short", + "color": "Green", + "format": "background" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "449a6a9c-7032-4c77-bc41-75ef541c2544": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Exceptions", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Red", + "format": "text" + }, + { + "value": 0, + "operator": "below_or_equal", + "unit": "none", + "color": "Green", + "format": "background" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "application in ['.app_name'] AND uri not regexp '/actuator' AND outcome = 'SERVER_ERROR'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "5abfc55c-b548-4e20-9391-dba783fbb381": { + "kind": "Panel", + "spec": { + "display": { + "name": "Percent of 5xx Requests", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "percent", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator' AND status REGEXP '5'" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator'" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "7bf67824-f756-448f-b2ad-1aab8fff1441": { + "kind": "Panel", + "spec": { + "display": { + "name": "Requests Count", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "count" + } + } + } + } + ], + "links": [] + } + }, + "c9c76541-92c5-49f8-b063-9a0f8466bf7b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Percent of 2xx Requests", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "percent", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": [ + { + "value": 100, + "unit": "percent", + "color": "Green", + "label": "" + } + ] + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator' AND status REGEXP '2'" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "application IN ['.app_name'] AND uri NOT REGEXP '/actuator'" + }, + "groupBy": [ + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "(A/B)*100", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "cbe78413-ff82-4f14-98fd-2b94c2eaf60f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Traces Explorer", + "description": "" + }, + "plugin": { + "kind": "signoz/ListPanel", + "spec": { + "selectFields": [ + { + "name": "trace_id", + "signal": "", + "fieldContext": "", + "fieldDataType": "string" + }, + { + "name": "name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "durationNano", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "number" + }, + { + "name": "http.url", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ] + } + }, + "queries": [ + { + "kind": "raw", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "traces", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "service.name IN ['.app_name'] AND uri NOT REGEXP '/actuator' AND uri REGEXP '/' " + }, + "groupBy": [], + "order": [], + "selectFields": [ + { + "name": "serviceName", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "durationNano", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "number" + }, + { + "name": "httpMethod", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "responseStatusCode", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "limit": 10, + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "eb78fd79-ccad-47e5-aa75-6ef77cc73b23": { + "kind": "Panel", + "spec": { + "display": { + "name": "Logs Explorer", + "description": "" + }, + "plugin": { + "kind": "signoz/ListPanel", + "spec": { + "selectFields": [ + { + "name": "timestamp", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + }, + { + "name": "body", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + }, + { + "name": "trace_id", + "signal": "", + "fieldContext": "", + "fieldDataType": "" + } + ] + } + }, + "queries": [ + { + "kind": "raw", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "logs", + "source": "", + "aggregations": [ + { + "expression": "count()" + } + ], + "disabled": false, + "filter": { + "expression": "service.name IN ['.app_name'] AND body CONTAINS '.log_keyword'" + }, + "groupBy": [], + "order": [], + "limit": 10, + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/40ddac45-2193-4611-8b44-f87b98a0524a" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/449a6a9c-7032-4c77-bc41-75ef541c2544" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/7bf67824-f756-448f-b2ad-1aab8fff1441" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/c9c76541-92c5-49f8-b063-9a0f8466bf7b" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/5abfc55c-b548-4e20-9391-dba783fbb381" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/397f979c-54b0-4bd7-a589-e77b2c19f60a" + } + }, + { + "x": 6, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/07b48e52-6fda-4a9d-99f1-aa9d5e5b0132" + } + }, + { + "x": 0, + "y": 18, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/cbe78413-ff82-4f14-98fd-2b94c2eaf60f" + } + }, + { + "x": 0, + "y": 23, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/eb78fd79-ccad-47e5-aa75-6ef77cc73b23" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/1/spring_boot_statistics.json b/helm/infra-charts/obaas/dashboards/1/spring_boot_statistics.json index b6192979b..8d2b6e6b4 100644 --- a/helm/infra-charts/obaas/dashboards/1/spring_boot_statistics.json +++ b/helm/infra-charts/obaas/dashboards/1/spring_boot_statistics.json @@ -1 +1,8441 @@ -{"createdAt":"2025-04-15T11:17:38.754071856Z","createdBy":"admin@nodomain.com","description":"","id":"9dca3451-37bc-4fca-9344-013e74f1b59c","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","isLocked":false,"key":"9dca3451-37bc-4fca-9344-013e74f1b59c","lastUpdatedBy":"admin@nodomain.com","lastUpdatedTime":"2025-04-16T07:57:11.993661724Z","layout":[{"h":1,"i":"43e49f2d-3590-41c1-950f-afe6f35ef1d4","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":0},{"h":7,"i":"21e9f9be-1613-4ec9-af98-5d579d75ceb3","moved":false,"static":false,"w":2,"x":0,"y":1},{"h":7,"i":"079ac5b7-269a-4e99-9331-409068b57af2","moved":false,"static":false,"w":2,"x":2,"y":1},{"h":7,"i":"5b9aae10-bfc9-45d4-a5a8-b1cf678a49a9","moved":false,"static":false,"w":2,"x":4,"y":1},{"h":7,"i":"eed00f35-09ad-45ca-b76d-db6f2a3bcd36","moved":false,"static":false,"w":6,"x":6,"y":1},{"h":6,"i":"aede01eb-ea57-4f66-bd66-64a63b69d5a2","moved":false,"static":false,"w":6,"x":0,"y":8},{"h":3,"i":"273230a4-a903-40b5-bf1a-bb60147b4dbf","moved":false,"static":false,"w":6,"x":6,"y":8},{"h":3,"i":"0ca1454b-fd6d-48e1-937f-d3769caf2115","moved":false,"static":false,"w":6,"x":6,"y":11},{"h":6,"i":"50cc133a-f2b9-4538-a63b-96cfa21d6903","moved":false,"static":false,"w":6,"x":0,"y":14},{"h":3,"i":"e1bc093b-cbaf-444e-aa74-525271f7e0fc","moved":false,"static":false,"w":6,"x":6,"y":14},{"h":3,"i":"8e553e00-c291-495f-b841-52439e2d169d","moved":false,"static":false,"w":6,"x":6,"y":17},{"h":1,"i":"31804fb8-5810-4c62-8742-aa53bf4884a9","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":20},{"h":6,"i":"64ed4e71-af0b-42a8-9aff-02307ea4e5f1","moved":false,"static":false,"w":6,"x":0,"y":21},{"h":6,"i":"6845a67a-01fa-4093-a8d6-cfa7822e6ab2","moved":false,"static":false,"w":6,"x":6,"y":21},{"h":6,"i":"a925edf0-955a-4bf4-a12a-983a894a4e95","moved":false,"static":false,"w":6,"x":0,"y":27},{"h":6,"i":"51937f2c-3a96-4ef2-8f1a-e7026fda598e","moved":false,"static":false,"w":6,"x":6,"y":27},{"h":6,"i":"ee4a018b-4a5d-4fda-a600-aeba8239670e","moved":false,"static":false,"w":6,"x":0,"y":33},{"h":6,"i":"ac4ef8db-bb0b-4589-844e-06880617d1fc","moved":false,"static":false,"w":6,"x":6,"y":33},{"h":1,"i":"f5835777-493e-4dbc-a2e7-f05584e997a3","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":39},{"h":6,"i":"c90562e7-b82c-4fbe-a53f-e761c318b7f6","moved":false,"static":false,"w":6,"x":0,"y":40},{"h":6,"i":"aac07f44-2cc8-4277-92f2-82db1f2df40a","moved":false,"static":false,"w":6,"x":6,"y":40},{"h":6,"i":"44491012-ba2a-4b79-89e3-db2564b76d2d","moved":false,"static":false,"w":6,"x":0,"y":46},{"h":6,"i":"55322050-1b12-4693-b5a1-2a0104e43a5c","moved":false,"static":false,"w":6,"x":6,"y":46},{"h":6,"i":"9a70c77f-57d6-44ef-a5cc-115f208e4164","moved":false,"static":false,"w":6,"x":0,"y":52},{"h":6,"i":"44a07b44-c7d0-42d9-812a-5329e341b292","moved":false,"static":false,"w":6,"x":6,"y":52},{"h":6,"i":"0a6768da-eb6e-472f-8298-0056b54bb62e","moved":false,"static":false,"w":6,"x":0,"y":58},{"h":6,"i":"5733b2f6-232c-41e9-8546-837f4d53791e","moved":false,"static":false,"w":6,"x":6,"y":58},{"h":1,"i":"5b7b99f4-f1b9-4fe0-899f-17e13d9d364b","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":64},{"h":6,"i":"bd2aaa71-75a1-4c43-b154-746a87625121","moved":false,"static":false,"w":6,"x":0,"y":65},{"h":6,"i":"ee85258b-f697-43ae-9445-b3ff09a1be8b","moved":false,"static":false,"w":6,"x":6,"y":65},{"h":6,"i":"d8c949d1-2502-4ad8-ad49-699874d5c481","moved":false,"static":false,"w":6,"x":0,"y":71},{"h":1,"i":"991d682c-d571-42f7-a068-3a1504382bfa","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":77},{"h":5,"i":"f7391fe7-de1f-47a1-aa6f-dbe4391614f3","moved":false,"static":false,"w":12,"x":0,"y":78},{"h":1,"i":"a3490bb3-c512-45fc-8899-03baad71f795","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":83},{"h":9,"i":"2b2e1176-77b3-4f60-8895-99cd21724daa","moved":false,"static":false,"w":6,"x":0,"y":84},{"h":3,"i":"ae24ffcc-62f2-482e-a854-e82ef1477c34","moved":false,"static":false,"w":6,"x":6,"y":84},{"h":3,"i":"1f31bfbd-ffb2-42ac-a93a-57c0853a6d5c","moved":false,"static":false,"w":6,"x":6,"y":87},{"h":3,"i":"ffc70c03-efc7-4da1-a6e0-48043cd66473","moved":false,"static":false,"w":6,"x":6,"y":90},{"h":1,"i":"2b3f605a-dfc1-4ef4-8b6b-b08dda5aa173","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":93},{"h":6,"i":"7682a05a-e103-4542-84de-a771ff0c7923","moved":false,"static":false,"w":6,"x":0,"y":94},{"h":6,"i":"c09354a8-44d4-499c-bdca-d763f48c8cbb","moved":false,"static":false,"w":6,"x":6,"y":94},{"h":6,"i":"ffba537c-c5a9-4fd5-b3c1-e1244917d6f8","moved":false,"static":false,"w":6,"x":0,"y":100},{"h":6,"i":"344e8e80-e00a-4cf5-ab57-8859aa65cfa3","moved":false,"static":false,"w":6,"x":6,"y":100},{"h":1,"i":"a9f8fb7f-0faf-4d7a-9242-efc6d35da6a5","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":106},{"h":6,"i":"7161f678-fd00-40ee-afa2-f0b7f2fd9161","moved":false,"static":false,"w":2,"x":0,"y":107},{"h":6,"i":"b7c7bf67-d69e-4e3f-b0ff-0a69a8acf50b","moved":false,"static":false,"w":2,"x":2,"y":107},{"h":6,"i":"1f4835f8-831c-4378-b1a4-21bee2e848a1","moved":false,"static":false,"w":8,"x":4,"y":107},{"h":5,"i":"a97eef80-8244-4ab4-800b-9dabd09ac013","moved":false,"static":false,"w":4,"x":0,"y":113},{"h":5,"i":"1a573fae-7892-4358-821e-9615f4552e90","moved":false,"static":false,"w":4,"x":4,"y":113},{"h":5,"i":"0b6531c4-51a3-4c7f-a15e-8bc337dc0b2c","moved":false,"static":false,"w":4,"x":8,"y":113},{"h":1,"i":"fb25b73a-b121-4113-971b-a1b1594c180f","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":118},{"h":6,"i":"9c4a8b75-bea7-4a86-a7b8-e855778e75cf","moved":false,"static":false,"w":12,"x":0,"y":119},{"h":6,"i":"6ac3886f-66b6-4162-8d4a-7ad2a716e525","moved":false,"static":false,"w":12,"x":0,"y":125},{"h":1,"i":"7d73ffb3-42c7-4fcf-b076-7fb493e2e2ef","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":131},{"h":6,"i":"767e9e74-c7db-45c0-a119-b3b1ffe4b9d8","moved":false,"static":false,"w":6,"x":0,"y":132},{"h":6,"i":"2744c227-0eb6-414f-8133-a642043d31d0","moved":false,"static":false,"w":6,"x":6,"y":132},{"h":6,"i":"374f7d1a-8ec5-46f7-b4f1-6cc671f8f68e","moved":false,"static":false,"w":6,"x":0,"y":138},{"h":6,"i":"5078deec-f3f9-47ea-b2b8-61896fc3b168","moved":false,"static":false,"w":6,"x":6,"y":138},{"h":6,"i":"82d9c4a6-ab1f-4d5d-a916-1902100241b2","moved":false,"static":false,"w":6,"x":0,"y":144},{"h":6,"i":"927790e1-d692-4c34-9df2-ed600cae45a4","moved":false,"static":false,"w":6,"x":6,"y":144},{"h":6,"i":"ea9266c6-9b45-4303-a30a-b22998d2a223","moved":false,"static":false,"w":6,"x":0,"y":150},{"h":6,"i":"18f6150a-db71-4a5a-88bd-976aeba84138","moved":false,"static":false,"w":6,"x":6,"y":150},{"h":6,"i":"21f13689-74a8-4bd3-a412-fe80908d7fd2","moved":false,"static":false,"w":6,"x":0,"y":156},{"h":6,"i":"9d6c157e-ff99-4c6a-8e29-0860c7f8b36b","moved":false,"static":false,"w":6,"x":6,"y":156}],"name":"Spring Boot 3.x Statistics","panelMap":{"2b3f605a-dfc1-4ef4-8b6b-b08dda5aa173":{"collapsed":false,"widgets":[{"h":6,"i":"7682a05a-e103-4542-84de-a771ff0c7923","moved":false,"static":false,"w":6,"x":0,"y":974},{"h":6,"i":"c09354a8-44d4-499c-bdca-d763f48c8cbb","moved":false,"static":false,"w":6,"x":6,"y":974},{"h":6,"i":"ffba537c-c5a9-4fd5-b3c1-e1244917d6f8","moved":false,"static":false,"w":6,"x":0,"y":980},{"h":6,"i":"344e8e80-e00a-4cf5-ab57-8859aa65cfa3","w":6,"x":6,"y":980}]},"31804fb8-5810-4c62-8742-aa53bf4884a9":{"collapsed":false,"widgets":[{"h":6,"i":"64ed4e71-af0b-42a8-9aff-02307ea4e5f1","moved":false,"static":false,"w":6,"x":0,"y":40},{"h":6,"i":"6845a67a-01fa-4093-a8d6-cfa7822e6ab2","moved":false,"static":false,"w":6,"x":6,"y":40},{"h":6,"i":"a925edf0-955a-4bf4-a12a-983a894a4e95","moved":false,"static":false,"w":6,"x":0,"y":46},{"h":6,"i":"51937f2c-3a96-4ef2-8f1a-e7026fda598e","moved":false,"static":false,"w":6,"x":6,"y":46},{"h":6,"i":"ee4a018b-4a5d-4fda-a600-aeba8239670e","moved":false,"static":false,"w":6,"x":0,"y":52},{"h":6,"i":"ac4ef8db-bb0b-4589-844e-06880617d1fc","moved":false,"static":false,"w":6,"x":6,"y":52}]},"43e49f2d-3590-41c1-950f-afe6f35ef1d4":{"collapsed":false,"widgets":[{"h":7,"i":"21e9f9be-1613-4ec9-af98-5d579d75ceb3","moved":false,"static":false,"w":2,"x":0,"y":19},{"h":7,"i":"079ac5b7-269a-4e99-9331-409068b57af2","moved":false,"static":false,"w":2,"x":2,"y":19},{"h":7,"i":"5b9aae10-bfc9-45d4-a5a8-b1cf678a49a9","moved":false,"static":false,"w":2,"x":4,"y":19},{"h":7,"i":"eed00f35-09ad-45ca-b76d-db6f2a3bcd36","moved":false,"static":false,"w":6,"x":6,"y":19},{"h":6,"i":"aede01eb-ea57-4f66-bd66-64a63b69d5a2","moved":false,"static":false,"w":6,"x":0,"y":26},{"h":3,"i":"273230a4-a903-40b5-bf1a-bb60147b4dbf","moved":false,"static":false,"w":6,"x":6,"y":26},{"h":3,"i":"0ca1454b-fd6d-48e1-937f-d3769caf2115","moved":false,"static":false,"w":6,"x":6,"y":29},{"h":6,"i":"50cc133a-f2b9-4538-a63b-96cfa21d6903","moved":false,"static":false,"w":6,"x":0,"y":32},{"h":3,"i":"e1bc093b-cbaf-444e-aa74-525271f7e0fc","moved":false,"static":false,"w":6,"x":6,"y":32},{"h":3,"i":"8e553e00-c291-495f-b841-52439e2d169d","moved":false,"static":false,"w":6,"x":6,"y":35}]},"5b7b99f4-f1b9-4fe0-899f-17e13d9d364b":{"collapsed":false,"widgets":[{"h":6,"i":"bd2aaa71-75a1-4c43-b154-746a87625121","moved":false,"static":false,"w":6,"x":0,"y":255},{"h":6,"i":"ee85258b-f697-43ae-9445-b3ff09a1be8b","moved":false,"static":false,"w":6,"x":6,"y":255},{"h":6,"i":"d8c949d1-2502-4ad8-ad49-699874d5c481","moved":false,"static":false,"w":6,"x":0,"y":261}]},"7d73ffb3-42c7-4fcf-b076-7fb493e2e2ef":{"collapsed":false,"widgets":[{"h":6,"i":"767e9e74-c7db-45c0-a119-b3b1ffe4b9d8","moved":false,"static":false,"w":6,"x":0,"y":1244},{"h":6,"i":"2744c227-0eb6-414f-8133-a642043d31d0","moved":false,"static":false,"w":6,"x":6,"y":1244},{"h":6,"i":"374f7d1a-8ec5-46f7-b4f1-6cc671f8f68e","moved":false,"static":false,"w":6,"x":0,"y":1250},{"h":6,"i":"5078deec-f3f9-47ea-b2b8-61896fc3b168","moved":false,"static":false,"w":6,"x":6,"y":1250},{"h":6,"i":"82d9c4a6-ab1f-4d5d-a916-1902100241b2","moved":false,"static":false,"w":6,"x":0,"y":1256},{"h":6,"i":"927790e1-d692-4c34-9df2-ed600cae45a4","moved":false,"static":false,"w":6,"x":6,"y":1256},{"h":6,"i":"ea9266c6-9b45-4303-a30a-b22998d2a223","moved":false,"static":false,"w":6,"x":0,"y":1262},{"h":6,"i":"18f6150a-db71-4a5a-88bd-976aeba84138","moved":false,"static":false,"w":6,"x":6,"y":1262},{"h":6,"i":"21f13689-74a8-4bd3-a412-fe80908d7fd2","moved":false,"static":false,"w":6,"x":0,"y":1268},{"h":6,"i":"9d6c157e-ff99-4c6a-8e29-0860c7f8b36b","moved":false,"static":false,"w":6,"x":6,"y":1268}]},"991d682c-d571-42f7-a068-3a1504382bfa":{"collapsed":false,"widgets":[{"h":5,"i":"f7391fe7-de1f-47a1-aa6f-dbe4391614f3","moved":false,"static":false,"w":12,"x":0,"y":804}]},"a3490bb3-c512-45fc-8899-03baad71f795":{"collapsed":false,"widgets":[{"h":9,"i":"2b2e1176-77b3-4f60-8895-99cd21724daa","moved":false,"static":false,"w":6,"x":0,"y":872},{"h":3,"i":"ae24ffcc-62f2-482e-a854-e82ef1477c34","moved":false,"static":false,"w":6,"x":6,"y":872},{"h":3,"i":"1f31bfbd-ffb2-42ac-a93a-57c0853a6d5c","moved":false,"static":false,"w":6,"x":6,"y":875},{"h":3,"i":"ffc70c03-efc7-4da1-a6e0-48043cd66473","moved":false,"static":false,"w":6,"x":6,"y":878}]},"a9f8fb7f-0faf-4d7a-9242-efc6d35da6a5":{"collapsed":false,"widgets":[{"h":6,"i":"7161f678-fd00-40ee-afa2-f0b7f2fd9161","moved":false,"static":false,"w":2,"x":0,"y":1082},{"h":6,"i":"b7c7bf67-d69e-4e3f-b0ff-0a69a8acf50b","moved":false,"static":false,"w":2,"x":2,"y":1082},{"h":6,"i":"1f4835f8-831c-4378-b1a4-21bee2e848a1","moved":false,"static":false,"w":8,"x":4,"y":1082},{"h":5,"i":"a97eef80-8244-4ab4-800b-9dabd09ac013","moved":false,"static":false,"w":4,"x":0,"y":1088},{"h":5,"i":"1a573fae-7892-4358-821e-9615f4552e90","w":4,"x":4,"y":1088},{"h":5,"i":"0b6531c4-51a3-4c7f-a15e-8bc337dc0b2c","w":4,"x":8,"y":1088}]},"f5835777-493e-4dbc-a2e7-f05584e997a3":{"collapsed":false,"widgets":[{"h":6,"i":"c90562e7-b82c-4fbe-a53f-e761c318b7f6","moved":false,"static":false,"w":6,"x":0,"y":78},{"h":6,"i":"aac07f44-2cc8-4277-92f2-82db1f2df40a","moved":false,"static":false,"w":6,"x":6,"y":78},{"h":6,"i":"44491012-ba2a-4b79-89e3-db2564b76d2d","moved":false,"static":false,"w":6,"x":0,"y":84},{"h":6,"i":"55322050-1b12-4693-b5a1-2a0104e43a5c","moved":false,"static":false,"w":6,"x":6,"y":84},{"h":6,"i":"9a70c77f-57d6-44ef-a5cc-115f208e4164","moved":false,"static":false,"w":6,"x":0,"y":90},{"h":6,"i":"44a07b44-c7d0-42d9-812a-5329e341b292","moved":false,"static":false,"w":6,"x":6,"y":90},{"h":6,"i":"0a6768da-eb6e-472f-8298-0056b54bb62e","moved":false,"static":false,"w":6,"x":0,"y":96},{"h":6,"i":"5733b2f6-232c-41e9-8546-837f4d53791e","moved":false,"static":false,"w":6,"x":0,"y":102}]},"fb25b73a-b121-4113-971b-a1b1594c180f":{"collapsed":false,"widgets":[{"h":6,"i":"9c4a8b75-bea7-4a86-a7b8-e855778e75cf","moved":false,"static":false,"w":12,"x":0,"y":1094},{"h":6,"i":"6ac3886f-66b6-4162-8d4a-7ad2a716e525","moved":false,"static":false,"w":12,"x":0,"y":1100}]}},"tags":[],"title":"Spring Boot 3.x Statistics","uploadedGrafana":false,"variables":{"27d900a0-f7e5-4dfb-8c51-a524800945be":{"allSelected":true,"customValue":"","defaultValue":"","description":"","id":"27d900a0-f7e5-4dfb-8c51-a524800945be","modificationUUID":"bf85259d-5f55-40bd-a7ea-d15a30782051","multiSelect":true,"name":"ucp_pool_name","order":5,"queryValue":"SELECT distinct JSONExtractString(labels, 'pool.name') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'db.client.connections.usage') \nand (JSONExtractString(labels, 'service.name') in {{.app_name}})\nand (JSONExtractString(labels, 'host.name') in {{.instance}})\nand (JSONExtractString(labels, 'pool.name') != '')","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"},"6700d7f0-fd97-46c8-8a95-34c2336cf760":{"allSelected":true,"customValue":"","description":"","id":"6700d7f0-fd97-46c8-8a95-34c2336cf760","key":"6700d7f0-fd97-46c8-8a95-34c2336cf760","modificationUUID":"b57160e8-eb53-4174-b6d8-03a194c8e27e","multiSelect":true,"name":"app_name","order":0,"queryValue":"SELECT distinct JSONExtractString(labels, 'application')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'application') != '')\n\n","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"},"8a781896-9103-4bf4-8827-382adc58a139":{"allSelected":true,"customValue":"","description":"","id":"8a781896-9103-4bf4-8827-382adc58a139","key":"8a781896-9103-4bf4-8827-382adc58a139","modificationUUID":"23dabd7c-f9dc-452d-b07c-8072a65497ae","multiSelect":true,"name":"memory_pool_heap","order":3,"queryValue":"SELECT distinct JSONExtractString(labels, 'id') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes') \nand (JSONExtractString(labels, 'area') = 'heap') \nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.namespace.name') in {{.namespace}})\nand (JSONExtractString(labels, 'k8s.pod.name') in {{.instance}})\nand (JSONExtractString(labels, 'id') != '')","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"},"911449fe-20f1-43f9-847a-b041d6f6cab5":{"allSelected":true,"customValue":"","description":"","id":"911449fe-20f1-43f9-847a-b041d6f6cab5","key":"911449fe-20f1-43f9-847a-b041d6f6cab5","modificationUUID":"f5adbffc-69e5-4a4a-8f1c-48df14cd5d39","multiSelect":true,"name":"memory_pool_non_heap","order":4,"queryValue":"SELECT distinct JSONExtractString(labels, 'id') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes') \nand (JSONExtractString(labels, 'area') = 'nonheap') \nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.namespace.name') in {{.namespace}})\nand (JSONExtractString(labels, 'k8s.pod.name') in {{.instance}})\nand (JSONExtractString(labels, 'id') != '')","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"},"d36224de-16d4-4782-9b90-ca5ce803b864":{"allSelected":true,"customValue":"","description":"","id":"d36224de-16d4-4782-9b90-ca5ce803b864","key":"d36224de-16d4-4782-9b90-ca5ce803b864","modificationUUID":"552dec11-d115-4a45-aee7-14333cbdd2bd","multiSelect":true,"name":"namespace","order":1,"queryValue":"\nSELECT distinct JSONExtractString(labels, 'k8s.namespace.name') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.namespace.name') != '')","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"},"ecbce4d2-8c43-4d33-af0c-a29c06b5c60b":{"allSelected":true,"customValue":"","description":"","id":"ecbce4d2-8c43-4d33-af0c-a29c06b5c60b","key":"ecbce4d2-8c43-4d33-af0c-a29c06b5c60b","modificationUUID":"b7cfa899-1a6f-47b6-a36c-aee7be1be4d8","multiSelect":true,"name":"instance","order":2,"queryValue":"SELECT distinct JSONExtractString(labels, 'k8s.pod.name') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'k8s.namespace.name') in {{.namespace}})\nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.pod.name') != '')","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"}},"version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"21e9f9be-1613-4ec9-af98-5d579d75ceb3","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"process_uptime_seconds","reduceTo":"last","spaceAggregation":"sum","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a458d23f-4ceb-4b5d-b90c-d548bf344607","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"b21bdadf-dce2-4ef2-969a-37e4cf27f69a","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"s","thresholdValue":0}],"timePreferance":"LAST_1_MONTH","title":"Uptime","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"079ac5b7-269a-4e99-9331-409068b57af2","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_memory_used_bytes","reduceTo":"sum","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND area = 'heap' AND id in ['.memory_pool_heap']"},"functions":[{"args":["0"],"name":"cutOffMin"},{"args":[],"name":"absolute"}],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_memory_max_bytes","reduceTo":"sum","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND area = 'heap' AND id in ['.memory_pool_heap']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8b7301d2-e36f-4d86-af44-40695dbe6cc8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"c327abc3-b9f0-4202-857c-798df88b78a3","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Background","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"percentunit","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Heap Used","yAxisUnit":"percentunit"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":true,"id":"eed00f35-09ad-45ca-b76d-db6f2a3bcd36","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"process_files_open_files--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"process_files_open_files","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"16435556","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"a1038821","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"03cd84c7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"}],"having":[],"legend":"Open Files","limit":1,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d0bf1600-ac20-4619-aca9-bd90ae8637e8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Process Open Files","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"5b9aae10-bfc9-45d4-a5a8-b1cf678a49a9","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_memory_used_bytes","reduceTo":"sum","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND id in ['.memory_pool_non_heap'] AND area = 'nonheap'"},"functions":[{"args":["0"],"name":"cutOffMin"},{"args":[],"name":"absolute"}],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_memory_max_bytes","reduceTo":"sum","spaceAggregation":"sum","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND id in ['.memory_pool_non_heap'] AND area = 'nonheap'"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"868a15cd-2b31-4451-9644-5090e64a4c7b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"c327abc3-b9f0-4202-857c-798df88b78a3","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Background","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"percentunit","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Non-Heap Used","yAxisUnit":"percentunit"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"aede01eb-ea57-4f66-bd66-64a63b69d5a2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_usage","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"7fab16eb","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"eee93ba2","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"1ede1159","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"System CPU Usage","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"process_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"process_cpu_usage","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"c38d3d01","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"98cc2b07","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2c6f9246","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Process CPU Usage","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"44f13ba8-90d7-4c98-b1b1-96f41f6b8cd9","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Usage","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"273230a4-a903-40b5-bf1a-bb60147b4dbf","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_usage","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"d4d28081","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"c731cb81","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"d334b29f","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean System CPU Usage","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_usage","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"984e85e9","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6f27b478","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"47f42213","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last System CPU Usage","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_usage","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"ed2285f6","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"1f489d92","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"81e430c0","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max System CPU Usage","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_usage","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"77ae0e23","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"336b86fe","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"cbdabd0a","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min System CPU Usage","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d3832763-170d-4aff-9dd5-3875ea13bc71","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"System CPU Usage","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"0ca1454b-fd6d-48e1-937f-d3769caf2115","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"process_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"process_cpu_usage","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"4d4d1845","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"19baa723","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"8ab5c623","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean Process CPU Usage","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"process_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"process_cpu_usage","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"111f1030","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"b35c3301","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ca84c5cc","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last Process CPU Usage","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"process_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"process_cpu_usage","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"93652b48","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"dcf67a2d","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"cccfb919","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max Process CPU Usage","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"process_cpu_usage--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"process_cpu_usage","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"531c6834","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"943d4d36","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"66aafe0f","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min Process CPU Usage","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"35ed2248-783f-45e2-a416-401e52f6be5e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Process CPU Usage","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"50cc133a-f2b9-4538-a63b-96cfa21d6903","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"system_load_average_1m--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_load_average_1m","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"7df8018a","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"fe315962","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"784afb02","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Load Average [1m]","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_count--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_count","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"b65df97f","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"642ba0cc","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"60198f65","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"CPU Core Size","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"50c00fdd-eda9-4515-bddb-680f6d5d76d6","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Load Average","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"e1bc093b-cbaf-444e-aa74-525271f7e0fc","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"system_load_average_1m--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_load_average_1m","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"e734dda4","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d31cea9c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"fc9f5ccc","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean Load Average [1m]","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"system_load_average_1m--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_load_average_1m","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"554f4d70","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6edb4b6c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"b3b316ab","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last Load Average [1m]","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"system_load_average_1m--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_load_average_1m","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"b4df9fa0","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"504395ba","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"e2fa5be9","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max Load Average [1m]","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"system_load_average_1m--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_load_average_1m","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"c4a287fa","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"f7bceec2","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"308af70c","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min Load Average [1m]","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"83c2f011-cea7-4097-b7b6-f07d4a873f9f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Load Average [1m]","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"8e553e00-c291-495f-b841-52439e2d169d","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_count--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_count","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"75a7210d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"1d178e08","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"55dbec47","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean CPU Core Size","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_count--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_count","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"136e4478","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"cc6543a6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"0e71ca4d","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last CPU Core Size","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_count--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_count","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"ee292678","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d050219b","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"1936f52e","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max CPU Core Size","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"system_cpu_count--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"system_cpu_count","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"94fb8c87","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"f11d579f","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"b3b57260","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min CPU Core Size","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"12bddc12-6f1d-43e7-b77a-c59fb14e072c","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Core Size","yAxisUnit":"none"},{"description":"","id":"43e49f2d-3590-41c1-950f-afe6f35ef1d4","panelTypes":"row","title":"Basic Statistics"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"64ed4e71-af0b-42a8-9aff-02307ea4e5f1","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"0b189c73","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"2391fe9a","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"5c06b9f1","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"606bfa5e","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"12f08da9","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"6442de3a","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Old Gen"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"99d6d99d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d2c5f99f","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"756a81f3","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"dcfb7b52","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"63fa8b14","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"b564ee53","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Old Gen"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"ace4c1a7","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"957c5a07","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"d2d21db2","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"b5f503c9","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"60ba80d9","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"3f380439","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Old Gen"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"14891928-5d32-41ba-b326-20993502490b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"G1 Old Gen","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes","B":"decbytes","C":"decbytes","D":"decbytes"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"id":145},"description":"","fillSpans":false,"id":"6845a67a-01fa-4093-a8d6-cfa7822e6ab2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"f5a00e1d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"0d875f0c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"7f250836","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"e97e0ccc","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"77ad615e","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"10035766","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"16d98fdd","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"30514a55","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"64dd0747","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"f68f9a55","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"0dd5e21e","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"1703b283","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"00a7d5bc","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"f70f4626","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"c3ea3bd6","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"a410d576","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1dfbffe4-d949-4841-96bb-fb9a38682d01","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Used Memory","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"a925edf0-955a-4bf4-a12a-983a894a4e95","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"dc8e8445","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"32e2ac22","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"9a2f568d","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"80166816","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"f2d3af5e","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"f830b639","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Eden Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"25210330","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"ff5d275e","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"3950eaa8","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"a0df71e8","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"eaef60a5","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"40cf6696","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Eden Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"33e8fb95","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"3f2b3ed6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"248a770e","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"8b1e9040","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"9427843b","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"f63dea86","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Eden Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"77940a6c-9cce-49c5-9da3-b2f87d74ec2f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"G1 Eden Space","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"ee4a018b-4a5d-4fda-a600-aeba8239670e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"1b109e66","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"96750a4e","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"edb6fcdf","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"0d7d769d","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"ab5b10d5","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"91046894","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Survivor Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"3a541ba8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"908624d8","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"90db627c","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"90154677","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"8283c121","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"91ae3bb4","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Survivor Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"a875afb7","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"3a61ec74","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"36780e0d","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"7a16e712","key":{"dataType":"string","id":"area--string--tag--false","isColumn":false,"isJSON":false,"key":"area","type":"tag"},"op":"=","value":"heap"},{"id":"bba214bc","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]},{"id":"e8770599","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"G1 Survivor Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"183838a1-75cb-4808-bc79-6e784cb92f22","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"G1 Survivor Space","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes","B":"decbytes","C":"decbytes","D":"decbytes"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"id":145},"description":"","fillSpans":false,"id":"51937f2c-3a96-4ef2-8f1a-e7026fda598e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"079cd8f2","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6df75503","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2b65ab87","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"ce16dc91","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"15555b18","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"c1cbff75","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"42fd042a","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"dc35caa7","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"08882c3a","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"264ba0c0","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"a1c0a6dd","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"8b1fe9a8","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"f630dba8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"3bb5c362","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"bc7f57e1","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"1d2917b5","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"894e66a6-3ad6-4c55-95e9-bc70a4092c38","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Committed Memory","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes","B":"decbytes","C":"decbytes","D":"decbytes"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"id":145},"description":"","fillSpans":false,"id":"ac4ef8db-bb0b-4589-844e-06880617d1fc","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"f644dd93","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"5eb355a4","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"742dd8ce","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"df716977","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"42a6690d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"0e1c0b98","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"bafaa0c6","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"b0aa4136","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"3020b9bd","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d14ceb6d","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"79cbffc7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"a8833a9e","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"4a45d99b","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"41d7d940","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"00b069c2","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"6efbf172","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8645a43a-d55a-4860-a741-3ab2cd953040","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Max Memory","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"c90562e7-b82c-4fbe-a53f-e761c318b7f6","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"f7c08a8b","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"3210ba29","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"c7afb1c7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"ebae292d","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"9ddb28ba","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"Metaspace"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"698f64e4","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"1781da45","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"21c3baba","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"95425346","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"e270ccf2","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"Metaspace"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"17429789","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"dba0c3a5","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"3786b62d","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"9c19a1ca","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"8dcfb5a7","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"Metaspace"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"128fb610-a6cc-4732-8dc7-8041c936deb0","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Metaspace","yAxisUnit":"decbytes"},{"description":"","id":"31804fb8-5810-4c62-8742-aa53bf4884a9","panelTypes":"row","title":"JVM Statistics - Heap Memory"},{"description":"","id":"f5835777-493e-4dbc-a2e7-f05584e997a3","panelTypes":"row","title":"JVM Statistics - Non Heap Memory"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"44491012-ba2a-4b79-89e3-db2564b76d2d","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"80b270d1","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d1775811","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"58941d7a","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"5df4c9ba","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"93bd4392","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"Compressed Class Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"eae265aa","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"8a39b6e5","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"fa8e10de","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"82d932a9","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"526eee27","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"Compressed Class Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"b01ba7bf","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"244176de","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ec28be83","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"ac31dd1d","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"1a6d1ec0","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"Compressed Class Space"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f1b90d2f-8ea7-4940-ae35-332c7da7f379","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Compressed Class Space","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"9a70c77f-57d6-44ef-a5cc-115f208e4164","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"9ff8567e","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"fe3fa1d6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ffe8a4aa","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"010b49f9","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"ad9a185f","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'non-nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"edd10d5c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"62727740","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"8cb6c424","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"50bb2eb3","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"3c926f85","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'non-nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"8d16fbcb","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"be2f0155","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"272749e7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"070fec1f","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"8b0765a5","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'non-nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"6dd18952-6a9d-45bd-9b4e-463a9d775a8e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CodeHeap 'non-nmethods'","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"0a6768da-eb6e-472f-8298-0056b54bb62e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"b90141c6","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"ca803984","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"490a9fcf","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"bef5d30f","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"65b94690","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'profiled nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"bb2ef6fa","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"2049b3c8","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"c62021dd","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"447a1231","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"0afae41f","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'profiled nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"8b8936b0","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"c6dda409","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"654eccc9","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"2a9e7640","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"a51b2b5e","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'profiled nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ee92689f-1d5b-4d63-b778-34c7c73785d0","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CodeHeap 'profiled nmethods'","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"5733b2f6-232c-41e9-8546-837f4d53791e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"7cfab982","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"fa3ddb15","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"57f64768","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"df06aa1b","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"9f6b8a35","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'non-profiled nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Used)","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"47f3c866","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"31537db5","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ab4f7b5b","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"27cef624","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"e5bfae9c","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'non-profiled nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Committed)","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"8a29df4c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"e1c091ca","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"8d8d63bd","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"6411c27b","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]},{"id":"e8d1dfd0","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"CodeHeap 'non-profiled nmethods'"}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"{{id}} (Max)","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"dabadbf0-f2d6-4594-a557-fa8c47c5bbf4","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CodeHeap 'non-profiled nmethods'","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes","B":"decbytes","C":"decbytes","D":"decbytes"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"id":145},"description":"","fillSpans":false,"id":"aac07f44-2cc8-4277-92f2-82db1f2df40a","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"11e7dd9a","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"239ed5cd","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ba4efb86","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"11511b12","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"fe7e5aee","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"715470ae","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2c88127e","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"7b959106","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"d22e0f2c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"866323b6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"3e25af1b","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"232718f5","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_used_bytes","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"3b0afaef","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"f7f3710d","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"d1d8a3eb","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"fd2adc47","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d7a885a1-47d6-43f8-b302-cef73166226c","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Used Memory","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes","B":"decbytes","C":"decbytes","D":"decbytes"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"id":145},"description":"","fillSpans":false,"id":"55322050-1b12-4693-b5a1-2a0104e43a5c","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"a3cd434d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6097325f","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"fc239011","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"9c2c070d","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"2bca5d0d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"caa5cbc0","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"e381d683","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"1dda47e8","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"56a26f09","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"ed0975f8","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2339215c","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"32db84f2","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_committed_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_committed_bytes","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"099cce48","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"92bd61bc","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ed695344","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"e2a4c0d2","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f8603d79-b30b-4405-9b8b-60e4f70da5c2","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Committed Memory","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes","B":"decbytes","C":"decbytes","D":"decbytes"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"id":145},"description":"","fillSpans":false,"id":"44a07b44-c7d0-42d9-812a-5329e341b292","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"417300d9","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"11f3420e","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"f32b2a5b","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"3128a157","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"534a555c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"e0f10f2c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"3965639a","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"f067526f","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"dd624c8b","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"917e2bd9","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"8df313d8","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"8cdcbbbc","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_memory_max_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_memory_max_bytes","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"fe13179c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d7b15a00","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ea7dc30e","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"54a98e8d","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"in","value":[".memory_pool_non_heap"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"868cd3fe-4c03-44c2-8867-e0bd61af5b71","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Max Memory","yAxisUnit":"decbytes"},{"description":"","id":"5b7b99f4-f1b9-4fe0-899f-17e13d9d364b","panelTypes":"row","title":"JVM Statistics - Buffer Pool"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"bd2aaa71-75a1-4c43-b154-746a87625121","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_buffer_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_buffer_memory_used_bytes","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"08612ed5","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"a2b49a97","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"9b27c030","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"b055a085","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"direct"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Used","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_buffer_total_capacity_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_buffer_total_capacity_bytes","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"1138cc03","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"ae088c10","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"b9cca147","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"54c650b5","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"direct"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Capacity","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"5cc45dca-0aeb-4f6d-90b3-3531b433199e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Direct","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"ee85258b-f697-43ae-9445-b3ff09a1be8b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_buffer_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_buffer_memory_used_bytes","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"d30b2056","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"4a7e3809","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ae79dca9","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"fa6ab19a","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"mapped"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Used","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_buffer_total_capacity_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_buffer_total_capacity_bytes","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"77843098","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d0962363","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2d8be0b2","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"4ff805f9","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"mapped"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Capacity","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"87b295d5-21d4-476b-a694-e194ebf73dc8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Mapped","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"d8c949d1-2502-4ad8-ad49-699874d5c481","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_buffer_memory_used_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_buffer_memory_used_bytes","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"d0592151","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d6087e1b","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"28cd7f04","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"d2b82a7e","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"mapped - 'non-volatile memory'"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Used","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_buffer_total_capacity_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_buffer_total_capacity_bytes","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"209d5af5","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"00d31906","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"5447c8c7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"a85c5949","key":{"dataType":"string","id":"id--string--tag--false","isColumn":false,"isJSON":false,"key":"id","type":"tag"},"op":"=","value":"mapped - 'non-volatile memory'"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Capacity","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b7204cc2-4af1-4fc5-aaac-e61cf3fa7d43","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Mapped (Non-Volatile memory)","yAxisUnit":"decbytes"},{"description":"","id":"991d682c-d571-42f7-a068-3a1504382bfa","panelTypes":"row","title":"JVM Statistics - Memory Allocate/Promote"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"f7391fe7-de1f-47a1-aa6f-dbe4391614f3","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_gc_memory_allocated_bytes_total","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"C","filter":{"expression":"application IN ['.app_name'] AND k8s.namespace.name IN ['.namespace'] AND k8s.pod.name IN ['.instance']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"allocated","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_memory_promoted_bytes_total","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application IN ['.app_name'] AND k8s.namespace.name IN ['.namespace'] AND k8s.pod.name IN ['.instance']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"promoted","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ecc05620-8a5b-4b6a-b429-d1f440324ba8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Memory Allocate/Promote","yAxisUnit":"decbytes"},{"description":"","id":"a3490bb3-c512-45fc-8899-03baad71f795","panelTypes":"row","title":"JVM Statistics - Threads"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"2b2e1176-77b3-4f60-8895-99cd21724daa","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_daemon_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_daemon_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"b7950923","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"eb264840","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"6172a2df","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Daemon","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_live_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_live_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"d4a83394","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"e3b8f66c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"3925b166","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Live","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"e20990c8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"b46e5562","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"740ad14d","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Peak","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f61f5573-e180-4714-a59e-5acb65616ec4","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"ae24ffcc-62f2-482e-a854-e82ef1477c34","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_daemon_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_daemon_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"11387543","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"fc08294a","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"1aab88e7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_daemon_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_daemon_threads","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"fcfbbf9c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6ce3cc76","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"d1226c47","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"07205b8a","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"1c52e16b","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"e19201f1","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"e1dab612","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"61abc582","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"9bc55265","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"4961e2f7-0863-4865-9a00-58586bcb1490","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Daemon Threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"1f31bfbd-ffb2-42ac-a93a-57c0853a6d5c","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"f01d7d5c","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d27a7b40","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"5dcd8666","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"c3298635","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"eb1a8d29","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"c0e1a7e2","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"4721fd33","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"a2cd0242","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"17d4a8f3","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_peak_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_peak_threads","type":"Gauge"},"aggregateOperator":"min","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"13f54a6b","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d011ba25","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"fd60b6c7","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"min"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"805e3e53-d124-48b2-ae34-b671488fbbad","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Peak Threads","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"ffc70c03-efc7-4da1-a6e0-48043cd66473","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_live_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_live_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"f8168cd8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"27d97944","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"addb699a","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_live_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_live_threads","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"47b6789d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"0668dca6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"e7a468a6","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_live_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_live_threads","type":"Gauge"},"aggregateOperator":"max","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"58e0a060","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"5f23d9e2","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"d7716fd9","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"max"},{"aggregateAttribute":{"dataType":"float64","id":"jvm_threads_live_threads--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"jvm_threads_live_threads","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"8d1fb2f9","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"8bdb9be1","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"0592c497","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]}],"op":"AND"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f3957e06-ac30-486b-8edf-55d6a8e437a6","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Live Threads","yAxisUnit":"none"},{"description":"","id":"2b3f605a-dfc1-4ef4-8b6b-b08dda5aa173","panelTypes":"row","title":"JVM Statistics - GC"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"7682a05a-e103-4542-84de-a771ff0c7923","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_gc_pause_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"{{action}} {{cause}}","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f5f360cb-d343-4be6-aa47-02d12f87037b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC Count","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"ffba537c-c5a9-4fd5-b3c1-e1244917d6f8","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_gc_pause_seconds.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"{{action}} {{cause}}","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"6ed9e52b-f6ca-449d-926b-caf2962865f2","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC Stop the World Duration","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"s","B":"s","C":"s","D":"s"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"action":145,"cause":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"c09354a8-44d4-499c-bdca-d763f48c8cbb","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_gc_pause_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_pause_seconds.count","reduceTo":"max","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Max","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_pause_seconds.count","reduceTo":"min","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"C","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Min","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_pause_seconds.count","reduceTo":"sum","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"D","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Total","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2a70cca8-6475-4a06-bf8b-aac897e9a01d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC Count","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"s","B":"s","C":"s","D":"s"},"columnWidths":{"A":145,"B":145,"C":145,"D":145,"action":145,"cause":145},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"344e8e80-e00a-4cf5-ab57-8859aa65cfa3","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"jvm_gc_pause_seconds.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_pause_seconds.sum","reduceTo":"max","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Max","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_pause_seconds.sum","reduceTo":"min","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"C","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Min","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"jvm_gc_pause_seconds.sum","reduceTo":"sum","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"D","filter":{"expression":"application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']"},"functions":[{"args":[],"name":"absolute"}],"groupBy":[{"dataType":"string","id":"action--string--tag","isColumn":false,"isJSON":false,"key":"action","type":"tag"},{"dataType":"string","id":"cause--string--tag","isColumn":false,"isJSON":false,"key":"cause","type":"tag"}],"having":{"expression":""},"legend":"Total","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b3f0ccdd-a9d7-4e63-a32b-c47349b1ed5c","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"GC Stop the World Duration","yAxisUnit":"none"},{"description":"","id":"a9f8fb7f-0faf-4d7a-9242-efc6d35da6a5","panelTypes":"row","title":"Database Connection Pool Statistics"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"7161f678-fd00-40ee-afa2-f0b7f2fd9161","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"db.client.connections.usage","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name IN ['.app_name'] AND host.name IN ['.instance'] AND pool.name IN ['ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Connections","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"975d5abb-c3eb-4420-9f2b-00e86047797b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Connections Size","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"b7c7bf67-d69e-4e3f-b0ff-0a69a8acf50b","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"db.client.connections.timeouts","reduceTo":"sum","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Connections","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8d5d925e-d8bd-4c3f-a383-9745cb159ac9","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Connection Timeout Count","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"1f4835f8-831c-4378-b1a4-21bee2e848a1","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"db.client.connections.usage","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name'] AND state = 'used'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Active","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"db.client.connections.usage","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name'] AND state = 'idle'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Idle","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"db.client.connections.pending_requests","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"C","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Pending","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e41cbfb4-1462-4e43-adf4-b07e1c06bbf4","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Connections","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"a97eef80-8244-4ab4-800b-9dabd09ac013","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"db.client.connections.create_time.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"db.client.connections.create_time.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"Creation Time","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a7c630b1-3244-439a-bcf5-08bb6feba6cc","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Connection Creation Time","yAxisUnit":"µs"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"1a573fae-7892-4358-821e-9615f4552e90","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"db.client.connections.use_time.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"db.client.connections.use_time.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"Usage Time","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"499cdfee-8ed2-4376-97cb-2c1b2da8ad34","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Connection Usage Time","yAxisUnit":"µs"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"0b6531c4-51a3-4c7f-a15e-8bc337dc0b2c","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"db.client.connections.wait_time.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"db.client.connections.wait_time.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"Acquire Time","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a4050ce8-6978-4669-951a-a913ed952e77","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Connection Acquire Time","yAxisUnit":"µs"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"9c4a8b75-bea7-4a86-a7b8-e855778e75cf","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"increase"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"application IN ['.app_name'] AND k8s.namespace.name IN ['.namespace'] AND k8s.pod.name IN ['.instance'] AND uri NOT REGEXP '/actuator' "},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Request Count","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":0}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"bea06ab6-118c-4a9d-af97-32f61dfa357d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Request Count","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"6ac3886f-66b6-4162-8d4a-7ad2a716e525","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"http_server_requests_seconds.sum","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":"app in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND uri not regexp '/actuator'"},"functions":[],"groupBy":[{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"},{"dataType":"string","id":"status--string--tag","isColumn":false,"isJSON":false,"key":"status","type":"tag"},{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"http_server_requests_seconds.count","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":"app in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND uri not regexp '/actuator'"},"functions":[],"groupBy":[{"dataType":"string","id":"method--string--tag","isColumn":false,"isJSON":false,"key":"method","type":"tag"},{"dataType":"string","id":"status--string--tag","isColumn":false,"isJSON":false,"key":"status","type":"tag"},{"dataType":"string","id":"uri--string--tag","isColumn":false,"isJSON":false,"key":"uri","type":"tag"}],"having":{"expression":""},"legend":"","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"{{method}} [{{status}}] - {{uri}}","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0443d301-4009-4804-9a42-dff1b210d9eb","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Response Time","yAxisUnit":"s"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"767e9e74-c7db-45c0-a119-b3b1ffe4b9d8","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"edc7152b","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"4ad68379","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"0a4392a2","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"info"},{"id":"cd8dc8f0","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"info","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c67ac218-d77f-4539-9a1d-9fd624e02f89","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"INFO logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"2744c227-0eb6-414f-8133-a642043d31d0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"f6ee4a2c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2c0e1103","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"c8658720","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"info"},{"id":"a18f5612","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"93b83e97","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"54b16d1c","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"87c0c2cf","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"info"},{"id":"b186ac38","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"e8f4c45e","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"847d85b9","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"9eb1bc30","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"info"},{"id":"5e58244e","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"max","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"a62b62e9","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"bbd5fbb0","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"52334962","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"info"},{"id":"07fc0b4f","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"min","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"E","filters":{"items":[{"id":"299620ed","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"c9fddfd9","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"4b15a96b","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"info"},{"id":"6d5f122b","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Total","limit":null,"orderBy":[],"queryName":"E","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"83b72bc5-60ae-42d2-8335-620def4c4624","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"INFO logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"374f7d1a-8ec5-46f7-b4f1-6cc671f8f68e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"42e8afb9","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"6e9b2ad2","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"856c9770","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"error"},{"id":"76714ca8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"error","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"046df2fc-9986-47c9-8d49-6eb59d73dfa6","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"ERROR logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"5078deec-f3f9-47ea-b2b8-61896fc3b168","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"1c0dabd6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"15c17d74","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"ae9a237d","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"error"},{"id":"ac0182c8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"9a80deee","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"9ebcca19","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"5131841e","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"a2f63623","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"error"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"c30d8948","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"a5b2ea27","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"d4dcface","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"29fac0cd","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"error"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"max","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"02a0fca7","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"319b5557","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"4ae52305","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"b62a25b4","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"error"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"min","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"E","filters":{"items":[{"id":"17f37b18","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"fc5391ef","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"19fb95c0","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"9c67aa3a","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"error"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Total","limit":null,"orderBy":[],"queryName":"E","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ce7ea5ec-ab51-4445-9c0f-a473551a2b5a","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"ERROR logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"82d9c4a6-ab1f-4d5d-a916-1902100241b2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"29fb3cab","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"2c1d8e5b","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"ac848c94","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"0cd4d226","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"warn"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"warn","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a0efb82b-c014-4e18-80da-6ca859ef33aa","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"WARN logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"927790e1-d692-4c34-9df2-ed600cae45a4","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"21c4ad03","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"cddbfa95","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"db460a21","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"2c932201","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"warn"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"ea6a88d6","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"6e1ff3aa","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"a36d7c02","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"68a6aa0e","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"warn"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"d87e10ce","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"9b321696","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"e2b24198","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d8735fd8","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"warn"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"max","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"1dd59a41","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"4b305d3d","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"abb94887","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"d4522411","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"warn"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"min","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"E","filters":{"items":[{"id":"2c305d09","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"49643810","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"6a983055","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"80d1ab80","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"warn"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Total","limit":null,"orderBy":[],"queryName":"E","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a69334cf-2c5c-4375-8b9e-89a041a96692","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"WARN logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"ea9266c6-9b45-4303-a30a-b22998d2a223","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"05648e97","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"97399bbc","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"5f7c7452","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"4f832912","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"debug"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"debug","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"9e5c7a4a-ab32-4e66-972f-9ce586de8aa4","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"DEBUG logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"18f6150a-db71-4a5a-88bd-976aeba84138","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"95fcc427","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"5eaa9d65","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"d577bbef","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"ab5eff2c","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"debug"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"527fa9a2","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"693f14b0","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"967c60f3","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6743e8d6","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"debug"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"6c600ebc","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"8938bf40","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"d38fdbd1","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"f056a4cf","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"debug"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"max","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"936eaa3c","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"70d0f690","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"c529a398","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"298e861b","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"debug"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"min","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"E","filters":{"items":[{"id":"500d3908","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"5a0314e1","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"5cb6b319","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"3af71e92","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"debug"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Total","limit":null,"orderBy":[],"queryName":"E","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8a7d4ee6-8b5e-47c2-938a-6816a4edc647","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"DEBUG logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"21f13689-74a8-4bd3-a412-fe80908d7fd2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"86fc213b","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"fe625f71","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"7983f29e","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"6e408182","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"trace"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"trace","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d685b53f-afae-44c6-a34b-7b35efe8bf78","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"TRACE logs","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"9d6c157e-ff99-4c6a-8e29-0860c7f8b36b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"0aebf5f3","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"cf7dda16","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"70ab39d9","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"465e58b3","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"trace"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"d990b002","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"f04933b4","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"1b4ba554","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"59f400e0","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"trace"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"223380a5","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"71515f97","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"a736204b","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"0498837d","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"trace"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"max","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"085de6fe","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"ed4d4b96","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"c882655d","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"3c2d95c4","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"trace"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"min","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"logback_events_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"logback_events_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"E","filters":{"items":[{"id":"eeb86ae7","key":{"dataType":"string","id":"k8s.namespace.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.namespace.name","type":"tag"},"op":"in","value":[".namespace"]},{"id":"61b66158","key":{"dataType":"string","id":"k8s.pod.name--string--tag--false","isColumn":false,"isJSON":false,"key":"k8s.pod.name","type":"tag"},"op":"in","value":[".instance"]},{"id":"f512d5c8","key":{"dataType":"string","id":"application--string--tag--false","isColumn":false,"isJSON":false,"key":"application","type":"tag"},"op":"in","value":[".app_name"]},{"id":"e7014135","key":{"dataType":"string","id":"level--string--tag--false","isColumn":false,"isJSON":false,"key":"level","type":"tag"},"op":"=","value":"trace"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Total","limit":null,"orderBy":[],"queryName":"E","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"bd6df0bc-3c4b-4149-82de-3dfa298c4476","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"TRACE logs","yAxisUnit":"none"},{"description":"","id":"7d73ffb3-42c7-4fcf-b076-7fb493e2e2ef","panelTypes":"row","title":"Logback Statistics"},{"description":"","id":"fb25b73a-b121-4113-971b-a1b1594c180f","panelTypes":"row","title":"HTTP Statistics"}],"uuid":"0199715e-aa8d-73e3-b540-84caf9835cfb"} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Spring Boot 3.x Statistics", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "app_name", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'application')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'application') != '')\n\n" + } + }, + "name": "app_name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "\nSELECT distinct JSONExtractString(labels, 'k8s.namespace.name') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.namespace.name') != '')" + } + }, + "name": "namespace" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "instance", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'k8s.pod.name') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'k8s.namespace.name') in {{.namespace}})\nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.pod.name') != '')" + } + }, + "name": "instance" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "memory_pool_heap", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'id') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes') \nand (JSONExtractString(labels, 'area') = 'heap') \nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.namespace.name') in {{.namespace}})\nand (JSONExtractString(labels, 'k8s.pod.name') in {{.instance}})\nand (JSONExtractString(labels, 'id') != '')" + } + }, + "name": "memory_pool_heap" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "memory_pool_non_heap", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'id') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes') \nand (JSONExtractString(labels, 'area') = 'nonheap') \nand (JSONExtractString(labels, 'application') in {{.app_name}})\nand (JSONExtractString(labels, 'k8s.namespace.name') in {{.namespace}})\nand (JSONExtractString(labels, 'k8s.pod.name') in {{.instance}})\nand (JSONExtractString(labels, 'id') != '')" + } + }, + "name": "memory_pool_non_heap" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "ucp_pool_name", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'pool.name') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'db.client.connections.usage') \nand (JSONExtractString(labels, 'service.name') in {{.app_name}})\nand (JSONExtractString(labels, 'host.name') in {{.instance}})\nand (JSONExtractString(labels, 'pool.name') != '')" + } + }, + "name": "ucp_pool_name" + } + } + ], + "panels": { + "079ac5b7-269a-4e99-9331-409068b57af2": { + "kind": "Panel", + "spec": { + "display": { + "name": "Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "percentunit", + "color": "Green", + "format": "background" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND area = 'heap' AND id in ['.memory_pool_heap']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "cutoffmin", + "args": [ + { + "value": "0" + } + ] + }, + { + "name": "absolute", + "args": [] + } + ], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND area = 'heap' AND id in ['.memory_pool_heap']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "0a6768da-eb6e-472f-8298-0056b54bb62e": { + "kind": "Panel", + "spec": { + "display": { + "name": "CodeHeap 'profiled nmethods'", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'profiled nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'profiled nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'profiled nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "0b6531c4-51a3-4c7f-a15e-8bc337dc0b2c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Connection Acquire Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "µs", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.wait_time.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.wait_time.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Acquire Time" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "0ca1454b-fd6d-48e1-937f-d3769caf2115": { + "kind": "Panel", + "spec": { + "display": { + "name": "Process CPU Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_cpu_usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean Process CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_cpu_usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last Process CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_cpu_usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max Process CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_cpu_usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min Process CPU Usage" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "18f6150a-db71-4a5a-88bd-976aeba84138": { + "kind": "Panel", + "spec": { + "display": { + "name": "DEBUG logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'debug')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'debug')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "max", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'debug')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "min", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'debug')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'debug')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1a573fae-7892-4358-821e-9615f4552e90": { + "kind": "Panel", + "spec": { + "display": { + "name": "Connection Usage Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "µs", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.use_time.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.use_time.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Usage Time" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1f31bfbd-ffb2-42ac-a93a-57c0853a6d5c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Peak Threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "avg", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "avg", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1f4835f8-831c-4378-b1a4-21bee2e848a1": { + "kind": "Panel", + "spec": { + "display": { + "name": "Connections", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name'] AND state = 'used'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Active" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name'] AND state = 'idle'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Idle" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.pending_requests", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pending" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "21e9f9be-1613-4ec9-af98-5d579d75ceb3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Uptime", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "last_1_month" + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "s", + "color": "Green", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_uptime_seconds", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "21f13689-74a8-4bd3-a412-fe80908d7fd2": { + "kind": "Panel", + "spec": { + "display": { + "name": "TRACE logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'trace')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "trace" + } + } + } + } + ], + "links": [] + } + }, + "273230a4-a903-40b5-bf1a-bb60147b4dbf": { + "kind": "Panel", + "spec": { + "display": { + "name": "System CPU Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean System CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_usage", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last System CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_usage", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max System CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_usage", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min System CPU Usage" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "2744c227-0eb6-414f-8133-a642043d31d0": { + "kind": "Panel", + "spec": { + "display": { + "name": "INFO logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'info' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'info' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "max", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'info' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "min", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'info' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'info' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "2b2e1176-77b3-4f60-8895-99cd21724daa": { + "kind": "Panel", + "spec": { + "display": { + "name": "Threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_daemon_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Daemon" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_live_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Live" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Peak" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "344e8e80-e00a-4cf5-ab57-8859aa65cfa3": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Stop the World Duration", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "s", + "B": "s", + "C": "s", + "D": "s" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "374f7d1a-8ec5-46f7-b4f1-6cc671f8f68e": { + "kind": "Panel", + "spec": { + "display": { + "name": "ERROR logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'error' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "error" + } + } + } + } + ], + "links": [] + } + }, + "44491012-ba2a-4b79-89e3-db2564b76d2d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Compressed Class Space", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'Compressed Class Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'Compressed Class Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'Compressed Class Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "44a07b44-c7d0-42d9-812a-5329e341b292": { + "kind": "Panel", + "spec": { + "display": { + "name": "Max Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes", + "B": "decbytes", + "C": "decbytes", + "D": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "5078deec-f3f9-47ea-b2b8-61896fc3b168": { + "kind": "Panel", + "spec": { + "display": { + "name": "ERROR logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'error' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'error')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "max", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'error')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "min", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'error')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'error')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "50cc133a-f2b9-4538-a63b-96cfa21d6903": { + "kind": "Panel", + "spec": { + "display": { + "name": "Load Average", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_load_average_1m", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Load Average [1m]" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_count", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "CPU Core Size" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "51937f2c-3a96-4ef2-8f1a-e7026fda598e": { + "kind": "Panel", + "spec": { + "display": { + "name": "Committed Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes", + "B": "decbytes", + "C": "decbytes", + "D": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "55322050-1b12-4693-b5a1-2a0104e43a5c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Committed Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes", + "B": "decbytes", + "C": "decbytes", + "D": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "5733b2f6-232c-41e9-8546-837f4d53791e": { + "kind": "Panel", + "spec": { + "display": { + "name": "CodeHeap 'non-profiled nmethods'", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'non-profiled nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'non-profiled nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'non-profiled nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "5b9aae10-bfc9-45d4-a5a8-b1cf678a49a9": { + "kind": "Panel", + "spec": { + "display": { + "name": "Non-Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "percentunit", + "color": "Green", + "format": "background" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND id in ['.memory_pool_non_heap'] AND area = 'nonheap'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "cutoffmin", + "args": [ + { + "value": "0" + } + ] + }, + { + "name": "absolute", + "args": [] + } + ], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND id in ['.memory_pool_non_heap'] AND area = 'nonheap'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "64ed4e71-af0b-42a8-9aff-02307ea4e5f1": { + "kind": "Panel", + "spec": { + "display": { + "name": "G1 Old Gen", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Old Gen')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Old Gen')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Old Gen')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "6845a67a-01fa-4093-a8d6-cfa7822e6ab2": { + "kind": "Panel", + "spec": { + "display": { + "name": "Used Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes", + "B": "decbytes", + "C": "decbytes", + "D": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "6ac3886f-66b6-4162-8d4a-7ad2a716e525": { + "kind": "Panel", + "spec": { + "display": { + "name": "Response Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "app in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND uri not regexp '/actuator'" + }, + "groupBy": [ + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "status", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "app in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance'] AND uri not regexp '/actuator'" + }, + "groupBy": [ + { + "name": "method", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "status", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "uri", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{method}} [{{status}}] - {{uri}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "7161f678-fd00-40ee-afa2-f0b7f2fd9161": { + "kind": "Panel", + "spec": { + "display": { + "name": "Connections Size", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.usage", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "service.name IN ['.app_name'] AND host.name IN ['.instance'] AND pool.name IN ['ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Connections" + } + } + } + } + ], + "links": [] + } + }, + "767e9e74-c7db-45c0-a119-b3b1ffe4b9d8": { + "kind": "Panel", + "spec": { + "display": { + "name": "INFO logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND level = 'info' AND application = '.app_name')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "info" + } + } + } + } + ], + "links": [] + } + }, + "7682a05a-e103-4542-84de-a771ff0c7923": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Count", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{action}} {{cause}}" + } + } + } + } + ], + "links": [] + } + }, + "82d9c4a6-ab1f-4d5d-a916-1902100241b2": { + "kind": "Panel", + "spec": { + "display": { + "name": "WARN logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'warn')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "warn" + } + } + } + } + ], + "links": [] + } + }, + "8e553e00-c291-495f-b841-52439e2d169d": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Core Size", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_count", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean CPU Core Size" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_count", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last CPU Core Size" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_count", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "avg", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max CPU Core Size" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_count", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "avg", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min CPU Core Size" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "927790e1-d692-4c34-9df2-ed600cae45a4": { + "kind": "Panel", + "spec": { + "display": { + "name": "WARN logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'warn')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'warn')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "max", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'warn')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "min", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'warn')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'warn')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "9a70c77f-57d6-44ef-a5cc-115f208e4164": { + "kind": "Panel", + "spec": { + "display": { + "name": "CodeHeap 'non-nmethods'", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'non-nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'non-nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'CodeHeap \\'non-nmethods\\'')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "9c4a8b75-bea7-4a86-a7b8-e855778e75cf": { + "kind": "Panel", + "spec": { + "display": { + "name": "Request Count", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "http_server_requests_seconds.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application IN ['.app_name'] AND k8s.namespace.name IN ['.namespace'] AND k8s.pod.name IN ['.instance'] AND uri NOT REGEXP '/actuator' " + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Request Count" + } + } + } + } + ], + "links": [] + } + }, + "9d6c157e-ff99-4c6a-8e29-0860c7f8b36b": { + "kind": "Panel", + "spec": { + "display": { + "name": "TRACE logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'trace')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'trace')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "max", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'trace')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "min", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'trace')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'trace')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "a925edf0-955a-4bf4-a12a-983a894a4e95": { + "kind": "Panel", + "spec": { + "display": { + "name": "G1 Eden Space", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Eden Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Eden Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Eden Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "a97eef80-8244-4ab4-800b-9dabd09ac013": { + "kind": "Panel", + "spec": { + "display": { + "name": "Connection Creation Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "µs", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.create_time.sum", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.create_time.count", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Creation Time" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "aac07f44-2cc8-4277-92f2-82db1f2df40a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Used Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes", + "B": "decbytes", + "C": "decbytes", + "D": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ac4ef8db-bb0b-4589-844e-06880617d1fc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Max Memory", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes", + "B": "decbytes", + "C": "decbytes", + "D": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_heap')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ae24ffcc-62f2-482e-a854-e82ef1477c34": { + "kind": "Panel", + "spec": { + "display": { + "name": "Daemon Threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_daemon_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_daemon_threads", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "avg", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_peak_threads", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "avg", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "aede01eb-ea57-4f66-bd66-64a63b69d5a2": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_cpu_usage", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "System CPU Usage" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_cpu_usage", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Process CPU Usage" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "b7c7bf67-d69e-4e3f-b0ff-0a69a8acf50b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Connection Timeout Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "db.client.connections.timeouts", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "service.name in ['.app_name'] AND host.name in ['.instance'] AND pool.name in ['.ucp_pool_name']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Connections" + } + } + } + } + ], + "links": [] + } + }, + "bd2aaa71-75a1-4c43-b154-746a87625121": { + "kind": "Panel", + "spec": { + "display": { + "name": "Direct", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_buffer_memory_used_bytes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = 'direct')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Used" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_buffer_total_capacity_bytes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = 'direct')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Capacity" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "c09354a8-44d4-499c-bdca-d763f48c8cbb": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Count", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "s", + "B": "s", + "C": "s", + "D": "s" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Min" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Total" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "c90562e7-b82c-4fbe-a53f-e761c318b7f6": { + "kind": "Panel", + "spec": { + "display": { + "name": "Metaspace", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'Metaspace')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'Metaspace')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = '.memory_pool_non_heap' AND id = 'Metaspace')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "d8c949d1-2502-4ad8-ad49-699874d5c481": { + "kind": "Panel", + "spec": { + "display": { + "name": "Mapped (Non-Volatile memory)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_buffer_memory_used_bytes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = 'mapped - \\'non-volatile memory\\'')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Used" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_buffer_total_capacity_bytes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = 'mapped - \\'non-volatile memory\\'')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Capacity" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "e1bc093b-cbaf-444e-aa74-525271f7e0fc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Load Average [1m]", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_load_average_1m", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean Load Average [1m]" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_load_average_1m", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last Load Average [1m]" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_load_average_1m", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "avg", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max Load Average [1m]" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "system_load_average_1m", + "temporality": "", + "timeAggregation": "min", + "spaceAggregation": "avg", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min Load Average [1m]" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ea9266c6-9b45-4303-a30a-b22998d2a223": { + "kind": "Panel", + "spec": { + "display": { + "name": "DEBUG logs", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "logback_events_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND application = '.app_name' AND level = 'debug')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "debug" + } + } + } + } + ], + "links": [] + } + }, + "ee4a018b-4a5d-4fda-a600-aeba8239670e": { + "kind": "Panel", + "spec": { + "display": { + "name": "G1 Survivor Space", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_used_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Survivor Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Used)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_committed_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Survivor Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Committed)" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_memory_max_bytes", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND area = 'heap' AND id = '.memory_pool_heap' AND id = 'G1 Survivor Space')" + }, + "groupBy": [ + { + "name": "id", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{id}} (Max)" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ee85258b-f697-43ae-9445-b3ff09a1be8b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Mapped", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_buffer_memory_used_bytes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = 'mapped')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Used" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_buffer_total_capacity_bytes", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance' AND id = 'mapped')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Capacity" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "eed00f35-09ad-45ca-b76d-db6f2a3bcd36": { + "kind": "Panel", + "spec": { + "display": { + "name": "Process Open Files", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "process_files_open_files", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [ + { + "name": "k8s.pod.name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "limit": 1, + "having": { + "expression": "" + }, + "functions": [], + "legend": "Open Files" + } + } + } + } + ], + "links": [] + } + }, + "f7391fe7-de1f-47a1-aa6f-dbe4391614f3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Allocate/Promote", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_memory_allocated_bytes_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application IN ['.app_name'] AND k8s.namespace.name IN ['.namespace'] AND k8s.pod.name IN ['.instance']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "allocated" + } + }, + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_memory_promoted_bytes_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application IN ['.app_name'] AND k8s.namespace.name IN ['.namespace'] AND k8s.pod.name IN ['.instance']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "promoted" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ffba537c-c5a9-4fd5-b3c1-e1244917d6f8": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Stop the World Duration", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_gc_pause_seconds.sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "application in ['.app_name'] AND k8s.namespace.name in ['.namespace'] AND k8s.pod.name in ['.instance']" + }, + "groupBy": [ + { + "name": "action", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "cause", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{action}} {{cause}}" + } + } + } + } + ], + "links": [] + } + }, + "ffc70c03-efc7-4da1-a6e0-48043cd66473": { + "kind": "Panel", + "spec": { + "display": { + "name": "Live Threads", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_live_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_live_threads", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_live_threads", + "temporality": "", + "timeAggregation": "max", + "spaceAggregation": "avg", + "reduceTo": "max" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "jvm_threads_live_threads", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "min" + } + ], + "disabled": false, + "filter": { + "expression": "(application = '.app_name' AND k8s.namespace.name = '.namespace' AND k8s.pod.name = '.instance')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [ + { + "name": "absolute", + "args": [] + } + ], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Basic Statistics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 2, + "height": 7, + "content": { + "$ref": "#/spec/panels/21e9f9be-1613-4ec9-af98-5d579d75ceb3" + } + }, + { + "x": 2, + "y": 0, + "width": 2, + "height": 7, + "content": { + "$ref": "#/spec/panels/079ac5b7-269a-4e99-9331-409068b57af2" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 7, + "content": { + "$ref": "#/spec/panels/5b9aae10-bfc9-45d4-a5a8-b1cf678a49a9" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 7, + "content": { + "$ref": "#/spec/panels/eed00f35-09ad-45ca-b76d-db6f2a3bcd36" + } + }, + { + "x": 0, + "y": 7, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/aede01eb-ea57-4f66-bd66-64a63b69d5a2" + } + }, + { + "x": 6, + "y": 7, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/273230a4-a903-40b5-bf1a-bb60147b4dbf" + } + }, + { + "x": 6, + "y": 10, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/0ca1454b-fd6d-48e1-937f-d3769caf2115" + } + }, + { + "x": 0, + "y": 13, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/50cc133a-f2b9-4538-a63b-96cfa21d6903" + } + }, + { + "x": 6, + "y": 13, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/e1bc093b-cbaf-444e-aa74-525271f7e0fc" + } + }, + { + "x": 6, + "y": 16, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/8e553e00-c291-495f-b841-52439e2d169d" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Statistics - Heap Memory", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/64ed4e71-af0b-42a8-9aff-02307ea4e5f1" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/6845a67a-01fa-4093-a8d6-cfa7822e6ab2" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/a925edf0-955a-4bf4-a12a-983a894a4e95" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/51937f2c-3a96-4ef2-8f1a-e7026fda598e" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ee4a018b-4a5d-4fda-a600-aeba8239670e" + } + }, + { + "x": 6, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ac4ef8db-bb0b-4589-844e-06880617d1fc" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Statistics - Non Heap Memory", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/c90562e7-b82c-4fbe-a53f-e761c318b7f6" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/aac07f44-2cc8-4277-92f2-82db1f2df40a" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/44491012-ba2a-4b79-89e3-db2564b76d2d" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/55322050-1b12-4693-b5a1-2a0104e43a5c" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/9a70c77f-57d6-44ef-a5cc-115f208e4164" + } + }, + { + "x": 6, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/44a07b44-c7d0-42d9-812a-5329e341b292" + } + }, + { + "x": 0, + "y": 18, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/0a6768da-eb6e-472f-8298-0056b54bb62e" + } + }, + { + "x": 6, + "y": 18, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/5733b2f6-232c-41e9-8546-837f4d53791e" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Statistics - Buffer Pool", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/bd2aaa71-75a1-4c43-b154-746a87625121" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ee85258b-f697-43ae-9445-b3ff09a1be8b" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/d8c949d1-2502-4ad8-ad49-699874d5c481" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Statistics - Memory Allocate/Promote", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/f7391fe7-de1f-47a1-aa6f-dbe4391614f3" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Statistics - Threads", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 9, + "content": { + "$ref": "#/spec/panels/2b2e1176-77b3-4f60-8895-99cd21724daa" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/ae24ffcc-62f2-482e-a854-e82ef1477c34" + } + }, + { + "x": 6, + "y": 3, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/1f31bfbd-ffb2-42ac-a93a-57c0853a6d5c" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 3, + "content": { + "$ref": "#/spec/panels/ffc70c03-efc7-4da1-a6e0-48043cd66473" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM Statistics - GC", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/7682a05a-e103-4542-84de-a771ff0c7923" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/c09354a8-44d4-499c-bdca-d763f48c8cbb" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ffba537c-c5a9-4fd5-b3c1-e1244917d6f8" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/344e8e80-e00a-4cf5-ab57-8859aa65cfa3" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Database Connection Pool Statistics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/7161f678-fd00-40ee-afa2-f0b7f2fd9161" + } + }, + { + "x": 2, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/b7c7bf67-d69e-4e3f-b0ff-0a69a8acf50b" + } + }, + { + "x": 4, + "y": 0, + "width": 8, + "height": 6, + "content": { + "$ref": "#/spec/panels/1f4835f8-831c-4378-b1a4-21bee2e848a1" + } + }, + { + "x": 0, + "y": 6, + "width": 4, + "height": 5, + "content": { + "$ref": "#/spec/panels/a97eef80-8244-4ab4-800b-9dabd09ac013" + } + }, + { + "x": 4, + "y": 6, + "width": 4, + "height": 5, + "content": { + "$ref": "#/spec/panels/1a573fae-7892-4358-821e-9615f4552e90" + } + }, + { + "x": 8, + "y": 6, + "width": 4, + "height": 5, + "content": { + "$ref": "#/spec/panels/0b6531c4-51a3-4c7f-a15e-8bc337dc0b2c" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "HTTP Statistics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/9c4a8b75-bea7-4a86-a7b8-e855778e75cf" + } + }, + { + "x": 0, + "y": 6, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/6ac3886f-66b6-4162-8d4a-7ad2a716e525" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Logback Statistics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/767e9e74-c7db-45c0-a119-b3b1ffe4b9d8" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/2744c227-0eb6-414f-8133-a642043d31d0" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/374f7d1a-8ec5-46f7-b4f1-6cc671f8f68e" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/5078deec-f3f9-47ea-b2b8-61896fc3b168" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/82d9c4a6-ab1f-4d5d-a916-1902100241b2" + } + }, + { + "x": 6, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/927790e1-d692-4c34-9df2-ed600cae45a4" + } + }, + { + "x": 0, + "y": 18, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/ea9266c6-9b45-4303-a30a-b22998d2a223" + } + }, + { + "x": 6, + "y": 18, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/18f6150a-db71-4a5a-88bd-976aeba84138" + } + }, + { + "x": 0, + "y": 24, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/21f13689-74a8-4bd3-a412-fe80908d7fd2" + } + }, + { + "x": 6, + "y": 24, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/9d6c157e-ff99-4c6a-8e29-0860c7f8b36b" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/apm-metrics.json b/helm/infra-charts/obaas/dashboards/2/apm-metrics.json index 6f6245415..980860328 100644 --- a/helm/infra-charts/obaas/dashboards/2/apm-metrics.json +++ b/helm/infra-charts/obaas/dashboards/2/apm-metrics.json @@ -1 +1,1175 @@ -{ "description": "", "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [ { "h": 1, "i": "5730893b-7b73-42fa-8ceb-cb3731438a44", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 0 }, { "h": 6, "i": "02c09a9b-8b9f-45f8-a74c-46cd503ddf5c", "moved": false, "static": false, "w": 6, "x": 0, "y": 1 }, { "h": 6, "i": "990685be-f055-47e9-90ef-d62198872795", "moved": false, "static": false, "w": 6, "x": 6, "y": 1 }, { "h": 6, "i": "7bb8374a-de12-4c48-a9c6-7dc14a5eee4b", "moved": false, "static": false, "w": 6, "x": 0, "y": 7 }, { "h": 6, "i": "f88a9056-ccaf-4275-b4fe-ddb004adb204", "moved": false, "static": false, "w": 6, "x": 6, "y": 7 }, { "h": 1, "i": "e799d9bf-0dfa-4ee5-b786-9199b7ecd033", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 13 }, { "h": 6, "i": "85fd56d5-01bc-4240-b959-c7a107d3d104", "moved": false, "static": false, "w": 6, "x": 0, "y": 14 }, { "h": 6, "i": "e236ec5f-884c-4019-9976-c52cbd3c427d", "moved": false, "static": false, "w": 6, "x": 6, "y": 14 }, { "h": 1, "i": "2ae2ded9-87fb-42f7-b6ce-56c5ad6abb66", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 20 }, { "h": 6, "i": "9e0c2768-2ed6-420a-9ba7-7717d1af9a84", "moved": false, "static": false, "w": 12, "x": 0, "y": 21 } ], "panelMap": { "2ae2ded9-87fb-42f7-b6ce-56c5ad6abb66": { "collapsed": false, "widgets": [ { "h": 6, "i": "9e0c2768-2ed6-420a-9ba7-7717d1af9a84", "moved": false, "static": false, "w": 12, "x": 0, "y": 723 } ] }, "5730893b-7b73-42fa-8ceb-cb3731438a44": { "collapsed": false, "widgets": [ { "h": 6, "i": "02c09a9b-8b9f-45f8-a74c-46cd503ddf5c", "moved": false, "static": false, "w": 6, "x": 0, "y": 1 }, { "h": 6, "i": "990685be-f055-47e9-90ef-d62198872795", "moved": false, "static": false, "w": 6, "x": 6, "y": 1 }, { "h": 6, "i": "7bb8374a-de12-4c48-a9c6-7dc14a5eee4b", "moved": false, "static": false, "w": 6, "x": 0, "y": 7 }, { "h": 6, "i": "f88a9056-ccaf-4275-b4fe-ddb004adb204", "moved": false, "static": false, "w": 6, "x": 6, "y": 7 } ] }, "e799d9bf-0dfa-4ee5-b786-9199b7ecd033": { "collapsed": false, "widgets": [ { "h": 6, "i": "85fd56d5-01bc-4240-b959-c7a107d3d104", "moved": false, "static": false, "w": 6, "x": 0, "y": 50 }, { "h": 6, "i": "e236ec5f-884c-4019-9976-c52cbd3c427d", "moved": false, "static": false, "w": 6, "x": 6, "y": 50 } ] } }, "tags": [ "apm", "latency", "error rate", "throughput" ], "title": "APM Metrics", "uploadedGrafana": false, "uuid": "01987906-7e9a-7151-8c22-c9f26a3564d6", "variables": { "5ca550af-d285-4abb-9846-5b18e80d11a6": { "allSelected": false, "customValue": "", "description": "The deployment environment of the service", "id": "5ca550af-d285-4abb-9846-5b18e80d11a6", "modificationUUID": "f5521fed-1d5b-4e82-8303-146574004b34", "multiSelect": false, "name": "deployment.environment", "order": 0, "queryValue": "SELECT JSONExtractString(labels, 'deployment.environment') AS `deployment.environment`\nFROM signoz_metrics.time_series_v4_1day\nWHERE (metric_name = 'signoz_calls_total') AND (unix_milli >= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000))\nGROUP BY `deployment.environment`", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" }, "8acb5fe1-1b57-4787-8014-4741b2184214": { "allSelected": true, "customValue": "", "description": "The primary operations for the service are defined here. In a web API service, these are the API endpoints. For services that function as consumers, producers, or clients, these are the names of the entry-point spans.", "id": "8acb5fe1-1b57-4787-8014-4741b2184214", "key": "8acb5fe1-1b57-4787-8014-4741b2184214", "modificationUUID": "3b961a0a-46b4-4669-9021-0f6ee612669b", "multiSelect": true, "name": "top_level_operation", "order": 2, "queryValue": "SELECT name FROM signoz_traces.top_level_operations WHERE serviceName = $service.name GROUP BY name", "showALLOption": true, "sort": "ASC", "textboxValue": "", "type": "QUERY" }, "d23168aa-b80c-4beb-83ce-96d4e7ba0719": { "allSelected": false, "customValue": "", "description": "The service.name value for the application", "id": "d23168aa-b80c-4beb-83ce-96d4e7ba0719", "key": "d23168aa-b80c-4beb-83ce-96d4e7ba0719", "modificationUUID": "2f08bee5-68b3-4739-9649-930da67a27d4", "multiSelect": false, "name": "service.name", "order": 1, "queryValue": "\nSELECT JSONExtractString(labels, 'service.name') AS `service.name`\nFROM signoz_metrics.time_series_v4_1day\nWHERE (metric_name = 'signoz_calls_total') AND JSONExtractString(labels, 'deployment.environment') = $deployment.environment AND (unix_milli >= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000))\nGROUP BY `service.name`", "showALLOption": false, "sort": "DISABLED", "textboxValue": "", "type": "QUERY" } }, "version": "v4", "widgets": [ { "description": "", "id": "5730893b-7b73-42fa-8ceb-cb3731438a44", "panelTypes": "row", "title": "Overview" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "02c09a9b-8b9f-45f8-a74c-46cd503ddf5c", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "ecc58b5e", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "fd1c4e7e", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "795ffcb5", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "p99", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "p99", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "d9aaae74", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "861cba04", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "f7a5c7a9", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "p90", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "p90", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "C", "filters": { "items": [ { "id": "e183c8e5", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "b3eba285", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "d14abd39", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "p50", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "p50", "stepInterval": 60, "timeAggregation": "" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "7de05a44-1e82-4706-a02a-eaab7f52e46f", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Latency", "yAxisUnit": "ms" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "990685be-f055-47e9-90ef-d62198872795", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "fb804ce3", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "6691b02b", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "74ea770a", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "rps", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "b28ef855-58d1-45f9-a528-8b00c73aaad7", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Request rate", "yAxisUnit": "reqps" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "7bb8374a-de12-4c48-a9c6-7dc14a5eee4b", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "77fb428f", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "0b2bf142", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "ff90bbd0", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] }, { "id": "f93d40d6", "key": { "dataType": "string", "id": "status.code--string--tag--false", "isColumn": false, "isJSON": false, "key": "status.code", "type": "tag" }, "op": "=", "value": "STATUS_CODE_ERROR" } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "4ea66ba4", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "f6e4ea12", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "0990a4ba", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [ { "disabled": false, "expression": "A/B", "legend": "error %", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "8a6d9ea8-d50a-4f1b-8735-788e3cb0d6cd", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Error percentage", "yAxisUnit": "percentunit" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": { "A": "ns", "B": "ns", "C": "ns", "D": "reqps", "F1": "percent" }, "columnWidths": { "A": 145, "B": 145, "C": 145, "D": 145, "F1": 145, "operation": 145 }, "description": "", "fillSpans": false, "id": "f88a9056-ccaf-4275-b4fe-ddb004adb204", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "736c972c", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "8f7afa22", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "96984b21", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "p99", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "p99", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "afa0a6c2", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "2d73e815", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "6712a404", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "p90", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "p90", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "C", "filters": { "items": [ { "id": "a975b446", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "9061988b", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "bfad805e", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "p50", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "p50", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "D", "filters": { "items": [ { "id": "895a7689", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "c6076778", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "6031c94b", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "req/s", "limit": null, "orderBy": [], "queryName": "D", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "E", "filters": { "items": [ { "id": "5e788d17", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "a9fdcf43", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "ce6c2254", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] }, { "id": "34928212", "key": { "dataType": "string", "id": "status.code--string--tag--false", "isColumn": false, "isJSON": false, "key": "status.code", "type": "tag" }, "op": "=", "value": "STATUS_CODE_ERROR" } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "err/s", "limit": null, "orderBy": [], "queryName": "E", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [ { "disabled": false, "expression": "E/D", "legend": "error %", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "1ba5fa07-b1d9-4abd-b9c1-7adaaca6f4c7", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Top operations", "yAxisUnit": "none" }, { "description": "", "id": "afa3df81-073a-41b4-a813-4bd65b9e3042", "isStacked": false, "nullZeroValues": "", "opacity": "", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_db_latency_count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_db_latency_count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "2894023f-0785-4d18-8a89-bdd4a8444bd6", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": null, "softMin": null, "timePreferance": "GLOBAL_TIME", "title": "" }, { "description": "", "id": "5730893b-7b73-42fa-8ceb-cb3731438a44", "panelTypes": "row", "title": "Overview" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "02c09a9b-8b9f-45f8-a74c-46cd503ddf5c", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "ecc58b5e", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "fd1c4e7e", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "795ffcb5", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "p99", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "p99", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "d9aaae74", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "861cba04", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "f7a5c7a9", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "p90", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "p90", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "C", "filters": { "items": [ { "id": "e183c8e5", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "b3eba285", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "d14abd39", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "p50", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "p50", "stepInterval": 60, "timeAggregation": "" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "7de05a44-1e82-4706-a02a-eaab7f52e46f", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Latency", "yAxisUnit": "ms" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "990685be-f055-47e9-90ef-d62198872795", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "fb804ce3", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "6691b02b", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "74ea770a", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "rps", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "b28ef855-58d1-45f9-a528-8b00c73aaad7", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Request rate", "yAxisUnit": "reqps" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "7bb8374a-de12-4c48-a9c6-7dc14a5eee4b", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "77fb428f", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "0b2bf142", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "ff90bbd0", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] }, { "id": "f93d40d6", "key": { "dataType": "string", "id": "status.code--string--tag--false", "isColumn": false, "isJSON": false, "key": "status.code", "type": "tag" }, "op": "=", "value": "STATUS_CODE_ERROR" } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "4ea66ba4", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "f6e4ea12", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "0990a4ba", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [ { "disabled": false, "expression": "A/B", "legend": "error %", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "8a6d9ea8-d50a-4f1b-8735-788e3cb0d6cd", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Error percentage", "yAxisUnit": "percentunit" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "columnWidths": { "A": 145, "B": 145, "C": 145, "D": 145, "F1": 145, "operation": 145 }, "description": "", "fillSpans": false, "id": "f88a9056-ccaf-4275-b4fe-ddb004adb204", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "a9059872", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "8898b9b3", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "7fabf71b", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "p99", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "p99", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "afa0a6c2", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "2d73e815", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "6712a404", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "p90", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "p90", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_latency.bucket--float64--Histogram--true", "isColumn": true, "isJSON": false, "key": "signoz_latency.bucket", "type": "Histogram" }, "aggregateOperator": "count", "dataSource": "metrics", "disabled": false, "expression": "C", "filters": { "items": [ { "id": "a975b446", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "9061988b", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "bfad805e", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "p50", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "p50", "stepInterval": 60, "timeAggregation": "" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "D", "filters": { "items": [ { "id": "895a7689", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "c6076778", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "6031c94b", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "req/s", "limit": null, "orderBy": [], "queryName": "D", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_calls_total--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_calls_total", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "E", "filters": { "items": [ { "id": "5e788d17", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "a9fdcf43", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "ce6c2254", "key": { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" }, "op": "in", "value": [ "{{.top_level_operation}}" ] }, { "id": "34928212", "key": { "dataType": "string", "id": "status.code--string--tag--false", "isColumn": false, "isJSON": false, "key": "status.code", "type": "tag" }, "op": "=", "value": "STATUS_CODE_ERROR" } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "operation--string--tag--false", "isColumn": false, "isJSON": false, "key": "operation", "type": "tag" } ], "having": [], "legend": "err/s", "limit": null, "orderBy": [], "queryName": "E", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [ { "disabled": false, "expression": "E/D", "legend": "error %", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "bf4e5b51-0fdc-452e-a046-7674e44e5d7b", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Top operations", "yAxisUnit": "none" }, { "description": "", "id": "e799d9bf-0dfa-4ee5-b786-9199b7ecd033", "panelTypes": "row", "title": "DB Metrics" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "85fd56d5-01bc-4240-b959-c7a107d3d104", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_db_latency_count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_db_latency_count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": { "items": [ { "id": "faeb2613", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "dbc06b34", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "rps", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "46e2b4da-575a-4309-9be3-3c6f27bbc0b4", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "DB Calls RPS", "yAxisUnit": "reqps" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "e236ec5f-884c-4019-9976-c52cbd3c427d", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_db_latency_sum--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_db_latency_sum", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "92963119", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "e4723ddf", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_db_latency_count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_db_latency_count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "B", "filters": { "items": [ { "id": "c1be6ef6", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "fa628aed", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" } ], "op": "AND" }, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [ { "disabled": false, "expression": "A/B", "legend": "", "queryName": "F1" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "da5ede50-14e5-4cfa-9e39-377a773a6886", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Database Calls Avg Duration", "yAxisUnit": "ms" }, { "description": "", "id": "2ae2ded9-87fb-42f7-b6ce-56c5ad6abb66", "panelTypes": "row", "title": "External calls" }, { "bucketCount": 30, "bucketWidth": 0, "columnUnits": { "B": "reqps", "F1": "percent", "F2": "ms" }, "columnWidths": { "B": 145, "F1": 145, "F2": 145, "address": 145 }, "description": "", "fillSpans": false, "id": "9e0c2768-2ed6-420a-9ba7-7717d1af9a84", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": { "builder": { "queryData": [ { "aggregateAttribute": { "dataType": "float64", "id": "signoz_external_call_latency_sum--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_external_call_latency_sum", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "A", "filters": { "items": [ { "id": "308ac6c5", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "67dee148", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "address--string--tag--false", "isColumn": false, "isJSON": false, "key": "address", "type": "tag" } ], "having": [], "legend": "rps", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_external_call_latency_count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_external_call_latency_count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": false, "expression": "B", "filters": { "items": [ { "id": "433b0a94", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "d235a72f", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "address--string--tag--false", "isColumn": false, "isJSON": false, "key": "address", "type": "tag" } ], "having": [], "legend": "rps", "limit": null, "orderBy": [], "queryName": "B", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" }, { "aggregateAttribute": { "dataType": "float64", "id": "signoz_external_call_latency_count--float64--Sum--true", "isColumn": true, "isJSON": false, "key": "signoz_external_call_latency_count", "type": "Sum" }, "aggregateOperator": "rate", "dataSource": "metrics", "disabled": true, "expression": "C", "filters": { "items": [ { "id": "c4835550", "key": { "dataType": "string", "id": "deployment.environment--string--tag--false", "isColumn": false, "isJSON": false, "key": "deployment.environment", "type": "tag" }, "op": "=", "value": "{{.deployment.environment}}" }, { "id": "4236d918", "key": { "dataType": "string", "id": "service.name--string--tag--false", "isColumn": false, "isJSON": false, "key": "service.name", "type": "tag" }, "op": "=", "value": "{{.service.name}}" }, { "id": "1760d149", "key": { "dataType": "string", "id": "status.code--string--tag--false", "isColumn": false, "isJSON": false, "key": "status.code", "type": "tag" }, "op": "=", "value": "STATUS_CODE_ERROR" } ], "op": "AND" }, "functions": [], "groupBy": [ { "dataType": "string", "id": "address--string--tag--false", "isColumn": false, "isJSON": false, "key": "address", "type": "tag" } ], "having": [], "legend": "rps", "limit": null, "orderBy": [], "queryName": "C", "reduceTo": "avg", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate" } ], "queryFormulas": [ { "disabled": false, "expression": "(C/B)*100", "legend": "error %", "queryName": "F1" }, { "disabled": false, "expression": "A/B", "legend": "avg duration", "queryName": "F2" } ] }, "clickhouse_sql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "id": "c785943a-491f-4bf5-baed-f7a6ed0b6a8c", "promql": [ { "disabled": false, "legend": "", "name": "A", "query": "" } ], "queryType": "builder" }, "selectedLogFields": [ { "dataType": "string", "name": "body", "type": "" }, { "dataType": "string", "name": "timestamp", "type": "" } ], "selectedTracesFields": [ { "dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag" }, { "dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag" }, { "dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag" }, { "dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag" }, { "dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag" } ], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "By external address stats", "yAxisUnit": "none" } ] } \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "apm" + }, + { + "key": "tag", + "value": "latency" + }, + { + "key": "tag", + "value": "error_rate" + }, + { + "key": "tag", + "value": "throughput" + } + ], + "spec": { + "display": { + "name": "APM Metrics", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "deployment.environment", + "description": "The deployment environment of the service" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT JSONExtractString(labels, 'deployment.environment') AS `deployment.environment`\nFROM signoz_metrics.time_series_v4_1day\nWHERE (metric_name = 'signoz_calls_total') AND (unix_milli \u003e= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000))\nGROUP BY `deployment.environment`" + } + }, + "name": "deployment.environment" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "service.name", + "description": "The service.name value for the application" + }, + "allowAllValue": false, + "allowMultiple": false, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "\nSELECT JSONExtractString(labels, 'service.name') AS `service.name`\nFROM signoz_metrics.time_series_v4_1day\nWHERE (metric_name = 'signoz_calls_total') AND JSONExtractString(labels, 'deployment.environment') = $deployment.environment AND (unix_milli \u003e= (toUnixTimestamp(now() - toIntervalDay(1)) * 1000))\nGROUP BY `service.name`" + } + }, + "name": "service.name" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "top_level_operation", + "description": "The primary operations for the service are defined here. In a web API service, these are the API endpoints. For services that function as consumers, producers, or clients, these are the names of the entry-point spans." + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT name FROM signoz_traces.top_level_operations WHERE serviceName = $service.name GROUP BY name" + } + }, + "name": "top_level_operation" + } + } + ], + "panels": { + "02c09a9b-8b9f-45f8-a74c-46cd503ddf5c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Latency", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "ms", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p99", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p50", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "7bb8374a-de12-4c48-a9c6-7dc14a5eee4b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Error percentage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_calls_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation AND status.code = 'STATUS_CODE_ERROR')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_calls_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "error %" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "85fd56d5-01bc-4240-b959-c7a107d3d104": { + "kind": "Panel", + "spec": { + "display": { + "name": "DB Calls RPS", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_db_latency_count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "rps" + } + } + } + } + ], + "links": [] + } + }, + "990685be-f055-47e9-90ef-d62198872795": { + "kind": "Panel", + "spec": { + "display": { + "name": "Request rate", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "rps" + } + } + } + } + ], + "links": [] + } + }, + "9e0c2768-2ed6-420a-9ba7-7717d1af9a84": { + "kind": "Panel", + "spec": { + "display": { + "name": "By external address stats", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "B": "reqps", + "F1": "percent", + "F2": "ms" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_external_call_latency_sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name)" + }, + "groupBy": [ + { + "name": "address", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "rps" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_external_call_latency_count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name)" + }, + "groupBy": [ + { + "name": "address", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "rps" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_external_call_latency_count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND status.code = 'STATUS_CODE_ERROR')" + }, + "groupBy": [ + { + "name": "address", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "rps" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "(C/B)*100", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "error %" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F2", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "avg duration" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "e236ec5f-884c-4019-9976-c52cbd3c427d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Database Calls Avg Duration", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "ms", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_db_latency_sum", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_db_latency_count", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name)" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "f88a9056-ccaf-4275-b4fe-ddb004adb204": { + "kind": "Panel", + "spec": { + "display": { + "name": "Top operations", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "ns", + "B": "ns", + "C": "ns", + "D": "reqps", + "F1": "percent" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p99", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [ + { + "name": "operation", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [ + { + "name": "operation", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_latency.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p50", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [ + { + "name": "operation", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_calls_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation)" + }, + "groupBy": [ + { + "name": "operation", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "req/s" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "signoz_calls_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "(deployment.environment = $deployment.environment AND service.name = $service.name AND operation IN $top_level_operation AND status.code = 'STATUS_CODE_ERROR')" + }, + "groupBy": [ + { + "name": "operation", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "err/s" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "E/D", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "error %" + } + } + ] + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Overview", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/02c09a9b-8b9f-45f8-a74c-46cd503ddf5c" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/990685be-f055-47e9-90ef-d62198872795" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/7bb8374a-de12-4c48-a9c6-7dc14a5eee4b" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/f88a9056-ccaf-4275-b4fe-ddb004adb204" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "DB Metrics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/85fd56d5-01bc-4240-b959-c7a107d3d104" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/e236ec5f-884c-4019-9976-c52cbd3c427d" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "External calls", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/9e0c2768-2ed6-420a-9ba7-7717d1af9a84" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/envoy-gateway.json b/helm/infra-charts/obaas/dashboards/2/envoy-gateway.json index ec4b4f7e3..b83f13a7e 100644 --- a/helm/infra-charts/obaas/dashboards/2/envoy-gateway.json +++ b/helm/infra-charts/obaas/dashboards/2/envoy-gateway.json @@ -1 +1,1951 @@ -{"description":"Envoy Gateway Metrics","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":1,"i":"19f8a1f4-c520-4b35-9313-14c7adaa5e5e","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":0},{"h":4,"i":"4caf67c3-ab0d-43d6-8184-da516aad8354","moved":false,"static":false,"w":3,"x":0,"y":1},{"h":4,"i":"3ceaa95f-ff85-4946-a769-19060f93f1f8","moved":false,"static":false,"w":3,"x":3,"y":1},{"h":4,"i":"c04e90b5-0805-4d62-80fd-c027d2e4e42f","moved":false,"static":false,"w":3,"x":6,"y":1},{"h":4,"i":"5de7edc3-ab46-45b7-a74d-f2dba62454c0","moved":false,"static":false,"w":3,"x":9,"y":1},{"h":7,"i":"b2bdee66-fe7b-4025-8255-001b1c1880e2","moved":false,"static":false,"w":12,"x":0,"y":5},{"h":1,"i":"1fb0d0ed-93f5-4a89-84a1-8983df4bfd75","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":12},{"h":1,"i":"8d02d6c6-d124-4b7f-9325-3476e0ce8069","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":13},{"h":1,"i":"4b16b90a-a7ef-453c-8f18-8b055703e58c","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":14},{"h":1,"i":"e07b8fb3-e3ca-4763-84ba-7957f7c03101","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":15}],"panelMap":{"19f8a1f4-c520-4b35-9313-14c7adaa5e5e":{"collapsed":false,"widgets":[{"h":4,"i":"4caf67c3-ab0d-43d6-8184-da516aad8354","moved":false,"static":false,"w":3,"x":0,"y":1},{"h":4,"i":"3ceaa95f-ff85-4946-a769-19060f93f1f8","moved":false,"static":false,"w":3,"x":3,"y":1},{"h":4,"i":"c04e90b5-0805-4d62-80fd-c027d2e4e42f","moved":false,"static":false,"w":3,"x":6,"y":1},{"h":4,"i":"5de7edc3-ab46-45b7-a74d-f2dba62454c0","moved":false,"static":false,"w":3,"x":9,"y":1}]},"1fb0d0ed-93f5-4a89-84a1-8983df4bfd75":{"collapsed":true,"widgets":[{"h":4,"i":"165bbf78-df6e-4e1f-952b-63f00e3d9433","moved":false,"static":false,"w":3,"x":0,"y":52},{"h":4,"i":"5c61f439-9d8b-460a-9583-edbc36d811df","moved":false,"static":false,"w":3,"x":3,"y":52},{"h":4,"i":"3cde07c3-b4b1-46f4-a4e3-0ae42511cc12","moved":false,"static":false,"w":3,"x":6,"y":52},{"h":4,"i":"a967da03-9c66-40b7-bd20-2782b2df0df0","moved":false,"static":false,"w":3,"x":9,"y":52},{"h":6,"i":"0c6f8454-72dc-437a-acdb-c8ef9d43eac9","moved":false,"static":false,"w":6,"x":0,"y":56},{"h":6,"i":"e38668a5-510b-43b9-a151-c87cd6a7996d","moved":false,"static":false,"w":6,"x":6,"y":56},{"h":6,"i":"439581de-54cb-4c85-b18d-0f059a0e4189","moved":false,"static":false,"w":6,"x":0,"y":62},{"h":6,"i":"9b2f1ecc-b2fa-47b6-99e2-605a6eb44cec","moved":false,"static":false,"w":6,"x":6,"y":62},{"h":6,"i":"bc670ba1-9e5c-40f3-bee1-88b23f52e871","moved":false,"static":false,"w":6,"x":0,"y":68}]},"4b16b90a-a7ef-453c-8f18-8b055703e58c":{"collapsed":true,"widgets":[{"h":6,"i":"53cdce22-b8fb-4cdc-84aa-c02015861d6b","moved":false,"static":false,"w":4,"x":0,"y":79},{"h":6,"i":"07c2df1a-d1bf-45ba-bda6-3c4ca5e03eb7","moved":false,"static":false,"w":4,"x":4,"y":79},{"h":6,"i":"970993d7-4ee5-4ce5-8ad1-61a293ba66f3","moved":false,"static":false,"w":4,"x":8,"y":79},{"h":6,"i":"400fd9c1-60f4-4974-bdb7-5af93e9cb0b0","moved":false,"static":false,"w":4,"x":0,"y":85},{"h":6,"i":"fa9eeea9-d6c6-4fdb-b8cf-0b69efc41a14","moved":false,"static":false,"w":4,"x":4,"y":85},{"h":6,"i":"bcfd4344-a185-4fc0-abe2-71c97f7314a3","moved":false,"static":false,"w":4,"x":8,"y":85}]},"8d02d6c6-d124-4b7f-9325-3476e0ce8069":{"collapsed":true,"widgets":[{"h":6,"i":"61fdcefc-2b42-411a-bca3-192c6b038070","moved":false,"static":false,"w":4,"x":0,"y":76},{"h":6,"i":"746e260f-4979-4b31-8a6c-b2e918d94cfc","moved":false,"static":false,"w":4,"x":4,"y":76}]},"e07b8fb3-e3ca-4763-84ba-7957f7c03101":{"collapsed":true,"widgets":[{"h":4,"i":"ce6987ec-4851-409b-8d97-537b034bd120","moved":false,"static":false,"w":3,"x":0,"y":118},{"h":4,"i":"c3bbfe19-5c44-4040-a7d2-c9defa0858c0","moved":false,"static":false,"w":3,"x":3,"y":118},{"h":4,"i":"1cb1fbb2-9322-4046-9306-fa69a3d48822","moved":false,"static":false,"w":3,"x":6,"y":118},{"h":4,"i":"51e613f4-8ea0-411e-95f1-f513b178a2a3","moved":false,"static":false,"w":3,"x":9,"y":118},{"h":6,"i":"101edd8c-d8eb-4faf-938c-83eee8a25b1b","moved":false,"static":false,"w":6,"x":0,"y":122}]}},"tags":["envoy-gateway","kubernetes","signoz"],"title":"Envoy Gateway Dashboard","uploadedGrafana":false,"variables":{"40742079-06f5-48f1-8e8e-2b80ae9880e8":{"allSelected":true,"customValue":"","description":"Controller-runtime controller filter","id":"40742079-06f5-48f1-8e8e-2b80ae9880e8","key":"40742079-06f5-48f1-8e8e-2b80ae9880e8","modificationUUID":"e00e7af6-508c-441b-a2b0-87b8fa4638d2","multiSelect":true,"name":"controller","order":2,"queryValue":"SELECT DISTINCT(JSONExtractString(labels, 'controller')) FROM signoz_metrics.time_series_v4 WHERE metric_name = 'controller_runtime_reconcile_total' AND JSONExtractString(labels, 'controller') != ''","showALLOption":true,"sort":"DISABLED","textboxValue":"","type":"QUERY"},"9eb06b6d-724c-4804-922b-163cce3f4d29":{"allSelected":true,"customValue":"","description":"Infrastructure namespace filter","id":"9eb06b6d-724c-4804-922b-163cce3f4d29","key":"9eb06b6d-724c-4804-922b-163cce3f4d29","modificationUUID":"429e67e5-2665-40d7-bd4b-d2264385adeb","multiSelect":true,"name":"namespace","order":0,"queryValue":"SELECT DISTINCT(JSONExtractString(labels, 'namespace')) FROM signoz_metrics.time_series_v4 WHERE metric_name IN ('resource_apply_total', 'resource_delete_total') AND JSONExtractString(labels, 'namespace') != ''","showALLOption":true,"sort":"DISABLED","textboxValue":"","type":"QUERY"},"b489a458-3834-4068-87fa-ab226694f835":{"allSelected":true,"customValue":"","description":"Watch runner filter","id":"b489a458-3834-4068-87fa-ab226694f835","key":"b489a458-3834-4068-87fa-ab226694f835","modificationUUID":"17e941f7-9201-4b35-a969-ab1eeb79cca4","multiSelect":true,"name":"runner","order":1,"queryValue":"SELECT DISTINCT(JSONExtractString(labels, 'runner')) FROM signoz_metrics.time_series_v4 WHERE metric_name = 'watchable_subscribe_total' AND JSONExtractString(labels, 'runner') != ''","showALLOption":true,"sort":"DISABLED","textboxValue":"","type":"QUERY"}},"version":"v5","widgets":[{"description":"","id":"19f8a1f4-c520-4b35-9313-14c7adaa5e5e","panelTypes":"row","title":"Overview"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Total watch subscriptions across selected runners.","fillSpans":false,"id":"4caf67c3-ab0d-43d6-8184-da516aad8354","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e74fb0e0-3929-4971-88f6-1410e99d3271","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(watchable_subscribe_total{runner=~\"$runner\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"6ad5c369-3aa2-4d2a-b38a-ebe00d85d25d","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Total Watches","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Current queued watch depth across selected runners.","fillSpans":false,"id":"3ceaa95f-ff85-4946-a769-19060f93f1f8","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"517654a5-078e-46f0-a639-b42f0bd9e326","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(watchable_depth{runner=~\"$runner\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"136d0e76-fe0c-4a4e-98ac-a09b1427b6fa","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Watch Queue Depth","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Total xDS snapshot creation attempts.","fillSpans":false,"id":"c04e90b5-0805-4d62-80fd-c027d2e4e42f","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"154e3170-3bf2-4711-a714-77eca7bef146","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(xds_snapshot_create_total)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"51b5fedf-43c4-47df-9801-d55719700b24","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Snapshot Creations","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Controller-runtime reconciliation errors.","fillSpans":false,"id":"5de7edc3-ab46-45b7-a74d-f2dba62454c0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"4e1c9a52-7f86-43bb-b2a0-5297bf24011a","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(controller_runtime_reconcile_errors_total{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"f7eb7f93-4d49-4718-a09b-d9a58e18fbbb","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Reconcile Errors","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Watch subscriptions grouped by runner.","fillSpans":false,"id":"9b2f1ecc-b2fa-47b6-99e2-605a6eb44cec","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1cb54755-a2e5-43ed-a35d-943295b8a186","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (runner) (watchable_subscribe_total{runner=~\"$runner\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Subscriptions by Runner","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Watch subscription outcomes for selected runners.","fillSpans":false,"id":"439581de-54cb-4c85-b18d-0f059a0e4189","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ffb4da67-7d06-4cd0-95ea-5535f168ef3f","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (status) (watchable_subscribe_total{runner=~\"$runner\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Subscriptions by Status","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Current watchable queue depth by message type.","fillSpans":false,"id":"bc670ba1-9e5c-40f3-bee1-88b23f52e871","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"12851bec-0590-434c-b5ab-f5878d4f08bd","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (message) (watchable_depth{runner=~\"$runner\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Queue Depth by Message","yAxisUnit":"none"},{"description":"","id":"8d02d6c6-d124-4b7f-9325-3476e0ce8069","panelTypes":"row","title":"Status Updater"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Status updates grouped by Kubernetes resource kind.","fillSpans":false,"id":"61fdcefc-2b42-411a-bca3-192c6b038070","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c3b5f2fe-36d9-4bb9-a120-a6c5849d50e2","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (kind) (status_update_total)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Status Updates by Kind","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Status update outcomes grouped by result.","fillSpans":false,"id":"746e260f-4979-4b31-8a6c-b2e918d94cfc","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"5eba83a1-0559-4626-806c-76c2515cd7f6","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (status) (status_update_total)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Status Updates by Result","yAxisUnit":"none"},{"description":"","id":"4b16b90a-a7ef-453c-8f18-8b055703e58c","panelTypes":"row","title":"xDS & Infrastructure"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"xDS snapshot creation attempts grouped by status.","fillSpans":false,"id":"53cdce22-b8fb-4cdc-84aa-c02015861d6b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"28872394-d642-4464-812e-00788d877000","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (status) (xds_snapshot_create_total)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Snapshot Creation Status","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Resource apply operations grouped by Kubernetes kind.","fillSpans":false,"id":"07c2df1a-d1bf-45ba-bda6-3c4ca5e03eb7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a90678fd-bc36-4903-a3bd-c10d5c560766","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (kind) (resource_apply_total{namespace=~\"$namespace\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Applied Resources by Kind","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Resource apply operations grouped by result.","fillSpans":false,"id":"970993d7-4ee5-4ce5-8ad1-61a293ba66f3","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1dd3e608-8dec-42d6-b512-070dbdefa6c7","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (status) (resource_apply_total{namespace=~\"$namespace\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Applied Resources by Status","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Histogram buckets for resource apply duration.","fillSpans":false,"id":"400fd9c1-60f4-4974-bdb7-5af93e9cb0b0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"4c054cd4-cf9f-44c5-92d4-a7b003a1667b","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (le) (resource_apply_duration_seconds_bucket{namespace=~\"$namespace\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Apply Duration Buckets","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Resource delete operations grouped by Kubernetes kind.","fillSpans":false,"id":"fa9eeea9-d6c6-4fdb-b8cf-0b69efc41a14","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0c9cd118-020a-42a6-b2be-b9468d419b05","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (kind) (resource_delete_total{namespace=~\"$namespace\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Deleted Resources by Kind","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Resource delete operations grouped by result.","fillSpans":false,"id":"bcfd4344-a185-4fc0-abe2-71c97f7314a3","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"447353eb-3e4e-4cf5-ac05-c34a186247c0","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (status) (resource_delete_total{namespace=~\"$namespace\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Deleted Resources by Status","yAxisUnit":"none"},{"description":"","id":"e07b8fb3-e3ca-4763-84ba-7957f7c03101","panelTypes":"row","title":"Controller Runtime"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Currently active controller workers.","fillSpans":false,"id":"ce6987ec-4851-409b-8d97-537b034bd120","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1525b1ea-7764-48f1-9dfe-b40810792c6d","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(controller_runtime_active_workers{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"e516171c-f904-4c21-aaad-5ae7ae3f94bf","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Active Workers","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Configured max concurrent reconciles.","fillSpans":false,"id":"c3bbfe19-5c44-4040-a7d2-c9defa0858c0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"7a8b1ea4-8d37-4ec8-b25e-a95d09ba0063","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(controller_runtime_max_concurrent_reconciles{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"0553ad76-b419-437f-9fe2-8fd90a60fd2a","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Max Concurrent Reconciles","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Controller-runtime reconciliation panics.","fillSpans":false,"id":"1cb1fbb2-9322-4046-9306-fa69a3d48822","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"434c9bcb-7292-42a4-9dbd-d9573b5dd0d2","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(controller_runtime_reconcile_panics_total{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"a44e332c-0a0d-40c2-83ee-2e5a43023f50","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Reconcile Panics","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Total reconciliation attempts across results.","fillSpans":false,"id":"51e613f4-8ea0-411e-95f1-f513b178a2a3","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"46d428a7-f88b-4a24-936a-a474bf479b9e","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(controller_runtime_reconcile_total{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"369f5567-2f64-4af2-bbf2-8e16cd22801c","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Total Reconciles","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Reconciliation attempts grouped by result.","fillSpans":false,"id":"101edd8c-d8eb-4faf-938c-83eee8a25b1b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"dadf59d9-d4cd-40d0-831d-900c15a48547","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (result) (controller_runtime_reconcile_total{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Reconciles by Result","yAxisUnit":"none"},{"description":"","id":"1fb0d0ed-93f5-4a89-84a1-8983df4bfd75","panelTypes":"row","title":"Workqueue & Process"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Current controller workqueue depth.","fillSpans":false,"id":"165bbf78-df6e-4e1f-952b-63f00e3d9433","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ab1c2b7a-a33e-426f-8f11-a8b01d74b136","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(workqueue_depth{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"8e33a1f1-33ce-4c9d-881b-1a52f1a28956","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Workqueue Depth","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Total controller workqueue retries.","fillSpans":false,"id":"5c61f439-9d8b-460a-9583-edbc36d811df","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"fbc1dcf5-5811-460d-b3d6-034c571ec27f","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(workqueue_retries_total{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"f126630d-39f3-425a-946f-ad27b6b693d1","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Workqueue Retries","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Current goroutine count for the Envoy Gateway process.","fillSpans":false,"id":"3cde07c3-b4b1-46f4-a4e3-0ae42511cc12","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"07bed961-1afa-42db-bbdb-f2a46aca4475","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(go_goroutines)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"c89d85b3-f16d-49e2-80ac-46d81f0af45a","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Goroutines","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Resident memory used by the Envoy Gateway process.","fillSpans":false,"id":"a967da03-9c66-40b7-bd20-2782b2df0df0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"92a35206-84c1-4f3e-bc18-a51a9a70fdb9","promql":[{"disabled":false,"legend":"","name":"A","query":"sum(process_resident_memory_bytes)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"0506eedf-a2f9-4252-81f3-ddf4716fc61c","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Blue","thresholdFormat":"Text","thresholdLabel":"","thresholdOperator":">","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Resident Memory","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Histogram buckets for time spent waiting in the workqueue.","fillSpans":false,"id":"0c6f8454-72dc-437a-acdb-c8ef9d43eac9","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"930bcb65-f9b1-4443-97e8-7d602a8a16c3","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (le) (workqueue_queue_duration_seconds_bucket{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Queue Duration Buckets","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Histogram buckets for workqueue processing time.","fillSpans":false,"id":"e38668a5-510b-43b9-a151-c87cd6a7996d","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0d375c03-d95a-45cf-a8fe-a9e5136fed34","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (le) (workqueue_work_duration_seconds_bucket{controller=~\"$controller\"})"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Work Duration Buckets","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Kubernetes API requests grouped by HTTP method.","fillSpans":false,"id":"b2bdee66-fe7b-4025-8255-001b1c1880e2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"388eaf0e-017d-42a7-9652-7388b7476e44","promql":[{"disabled":false,"legend":"","name":"A","query":"sum by (method) (rest_client_requests_total)"}],"queryType":"promql"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"REST Requests by Method","yAxisUnit":"none"}],"uuid":"019cc978-8587-77ed-8d9b-7c3862cfa228"} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [ + { + "key": "tag", + "value": "envoy-gateway" + }, + { + "key": "tag", + "value": "kubernetes" + }, + { + "key": "tag", + "value": "signoz" + } + ], + "spec": { + "display": { + "name": "Envoy Gateway Dashboard", + "description": "Envoy Gateway Metrics" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "Infrastructure namespace filter" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT DISTINCT(JSONExtractString(labels, 'namespace')) FROM signoz_metrics.time_series_v4 WHERE metric_name IN ('resource_apply_total', 'resource_delete_total') AND JSONExtractString(labels, 'namespace') != ''" + } + }, + "name": "namespace" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "runner", + "description": "Watch runner filter" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT DISTINCT(JSONExtractString(labels, 'runner')) FROM signoz_metrics.time_series_v4 WHERE metric_name = 'watchable_subscribe_total' AND JSONExtractString(labels, 'runner') != ''" + } + }, + "name": "runner" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "controller", + "description": "Controller-runtime controller filter" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "none", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT DISTINCT(JSONExtractString(labels, 'controller')) FROM signoz_metrics.time_series_v4 WHERE metric_name = 'controller_runtime_reconcile_total' AND JSONExtractString(labels, 'controller') != ''" + } + }, + "name": "controller" + } + } + ], + "panels": { + "07c2df1a-d1bf-45ba-bda6-3c4ca5e03eb7": { + "kind": "Panel", + "spec": { + "display": { + "name": "Applied Resources by Kind", + "description": "Resource apply operations grouped by Kubernetes kind." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (kind) (resource_apply_total{namespace=~\"$namespace\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "0c6f8454-72dc-437a-acdb-c8ef9d43eac9": { + "kind": "Panel", + "spec": { + "display": { + "name": "Queue Duration Buckets", + "description": "Histogram buckets for time spent waiting in the workqueue." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (le) (workqueue_queue_duration_seconds_bucket{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "101edd8c-d8eb-4faf-938c-83eee8a25b1b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Reconciles by Result", + "description": "Reconciliation attempts grouped by result." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (result) (controller_runtime_reconcile_total{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "165bbf78-df6e-4e1f-952b-63f00e3d9433": { + "kind": "Panel", + "spec": { + "display": { + "name": "Workqueue Depth", + "description": "Current controller workqueue depth." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(workqueue_depth{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "1cb1fbb2-9322-4046-9306-fa69a3d48822": { + "kind": "Panel", + "spec": { + "display": { + "name": "Reconcile Panics", + "description": "Controller-runtime reconciliation panics." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(controller_runtime_reconcile_panics_total{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "3cde07c3-b4b1-46f4-a4e3-0ae42511cc12": { + "kind": "Panel", + "spec": { + "display": { + "name": "Goroutines", + "description": "Current goroutine count for the Envoy Gateway process." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(go_goroutines)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "3ceaa95f-ff85-4946-a769-19060f93f1f8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Watch Queue Depth", + "description": "Current queued watch depth across selected runners." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(watchable_depth{runner=~\"$runner\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "400fd9c1-60f4-4974-bdb7-5af93e9cb0b0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Apply Duration Buckets", + "description": "Histogram buckets for resource apply duration." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (le) (resource_apply_duration_seconds_bucket{namespace=~\"$namespace\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "439581de-54cb-4c85-b18d-0f059a0e4189": { + "kind": "Panel", + "spec": { + "display": { + "name": "Subscriptions by Status", + "description": "Watch subscription outcomes for selected runners." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (status) (watchable_subscribe_total{runner=~\"$runner\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "4caf67c3-ab0d-43d6-8184-da516aad8354": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Watches", + "description": "Total watch subscriptions across selected runners." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(watchable_subscribe_total{runner=~\"$runner\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "51e613f4-8ea0-411e-95f1-f513b178a2a3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Reconciles", + "description": "Total reconciliation attempts across results." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(controller_runtime_reconcile_total{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "53cdce22-b8fb-4cdc-84aa-c02015861d6b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Snapshot Creation Status", + "description": "xDS snapshot creation attempts grouped by status." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (status) (xds_snapshot_create_total)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "5c61f439-9d8b-460a-9583-edbc36d811df": { + "kind": "Panel", + "spec": { + "display": { + "name": "Workqueue Retries", + "description": "Total controller workqueue retries." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(workqueue_retries_total{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "5de7edc3-ab46-45b7-a74d-f2dba62454c0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Reconcile Errors", + "description": "Controller-runtime reconciliation errors." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(controller_runtime_reconcile_errors_total{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "61fdcefc-2b42-411a-bca3-192c6b038070": { + "kind": "Panel", + "spec": { + "display": { + "name": "Status Updates by Kind", + "description": "Status updates grouped by Kubernetes resource kind." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (kind) (status_update_total)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "746e260f-4979-4b31-8a6c-b2e918d94cfc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Status Updates by Result", + "description": "Status update outcomes grouped by result." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (status) (status_update_total)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "970993d7-4ee5-4ce5-8ad1-61a293ba66f3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Applied Resources by Status", + "description": "Resource apply operations grouped by result." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (status) (resource_apply_total{namespace=~\"$namespace\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "9b2f1ecc-b2fa-47b6-99e2-605a6eb44cec": { + "kind": "Panel", + "spec": { + "display": { + "name": "Subscriptions by Runner", + "description": "Watch subscriptions grouped by runner." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (runner) (watchable_subscribe_total{runner=~\"$runner\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "a967da03-9c66-40b7-bd20-2782b2df0df0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Resident Memory", + "description": "Resident memory used by the Envoy Gateway process." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(process_resident_memory_bytes)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "b2bdee66-fe7b-4025-8255-001b1c1880e2": { + "kind": "Panel", + "spec": { + "display": { + "name": "REST Requests by Method", + "description": "Kubernetes API requests grouped by HTTP method." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (method) (rest_client_requests_total)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "bc670ba1-9e5c-40f3-bee1-88b23f52e871": { + "kind": "Panel", + "spec": { + "display": { + "name": "Queue Depth by Message", + "description": "Current watchable queue depth by message type." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (message) (watchable_depth{runner=~\"$runner\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "bcfd4344-a185-4fc0-abe2-71c97f7314a3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Deleted Resources by Status", + "description": "Resource delete operations grouped by result." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (status) (resource_delete_total{namespace=~\"$namespace\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "c04e90b5-0805-4d62-80fd-c027d2e4e42f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Snapshot Creations", + "description": "Total xDS snapshot creation attempts." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(xds_snapshot_create_total)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "c3bbfe19-5c44-4040-a7d2-c9defa0858c0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Max Concurrent Reconciles", + "description": "Configured max concurrent reconciles." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(controller_runtime_max_concurrent_reconciles{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "ce6987ec-4851-409b-8d97-537b034bd120": { + "kind": "Panel", + "spec": { + "display": { + "name": "Active Workers", + "description": "Currently active controller workers." + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "above", + "unit": "none", + "color": "Blue", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(controller_runtime_active_workers{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "e38668a5-510b-43b9-a151-c87cd6a7996d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Work Duration Buckets", + "description": "Histogram buckets for workqueue processing time." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (le) (workqueue_work_duration_seconds_bucket{controller=~\"$controller\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "fa9eeea9-d6c6-4fdb-b8cf-0b69efc41a14": { + "kind": "Panel", + "spec": { + "display": { + "name": "Deleted Resources by Kind", + "description": "Resource delete operations grouped by Kubernetes kind." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (kind) (resource_delete_total{namespace=~\"$namespace\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Overview", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/4caf67c3-ab0d-43d6-8184-da516aad8354" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/3ceaa95f-ff85-4946-a769-19060f93f1f8" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/c04e90b5-0805-4d62-80fd-c027d2e4e42f" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/5de7edc3-ab46-45b7-a74d-f2dba62454c0" + } + }, + { + "x": 0, + "y": 4, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/b2bdee66-fe7b-4025-8255-001b1c1880e2" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Workqueue \u0026 Process", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/165bbf78-df6e-4e1f-952b-63f00e3d9433" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/5c61f439-9d8b-460a-9583-edbc36d811df" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/3cde07c3-b4b1-46f4-a4e3-0ae42511cc12" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/a967da03-9c66-40b7-bd20-2782b2df0df0" + } + }, + { + "x": 0, + "y": 4, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/0c6f8454-72dc-437a-acdb-c8ef9d43eac9" + } + }, + { + "x": 6, + "y": 4, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/e38668a5-510b-43b9-a151-c87cd6a7996d" + } + }, + { + "x": 0, + "y": 10, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/439581de-54cb-4c85-b18d-0f059a0e4189" + } + }, + { + "x": 6, + "y": 10, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/9b2f1ecc-b2fa-47b6-99e2-605a6eb44cec" + } + }, + { + "x": 0, + "y": 16, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/bc670ba1-9e5c-40f3-bee1-88b23f52e871" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Status Updater", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/61fdcefc-2b42-411a-bca3-192c6b038070" + } + }, + { + "x": 4, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/746e260f-4979-4b31-8a6c-b2e918d94cfc" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "xDS \u0026 Infrastructure", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/53cdce22-b8fb-4cdc-84aa-c02015861d6b" + } + }, + { + "x": 4, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/07c2df1a-d1bf-45ba-bda6-3c4ca5e03eb7" + } + }, + { + "x": 8, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/970993d7-4ee5-4ce5-8ad1-61a293ba66f3" + } + }, + { + "x": 0, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/400fd9c1-60f4-4974-bdb7-5af93e9cb0b0" + } + }, + { + "x": 4, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/fa9eeea9-d6c6-4fdb-b8cf-0b69efc41a14" + } + }, + { + "x": 8, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/bcfd4344-a185-4fc0-abe2-71c97f7314a3" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Controller Runtime", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/ce6987ec-4851-409b-8d97-537b034bd120" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/c3bbfe19-5c44-4040-a7d2-c9defa0858c0" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/1cb1fbb2-9322-4046-9306-fa69a3d48822" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 4, + "content": { + "$ref": "#/spec/panels/51e613f4-8ea0-411e-95f1-f513b178a2a3" + } + }, + { + "x": 0, + "y": 4, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/101edd8c-d8eb-4faf-938c-83eee8a25b1b" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/helidon_jvm_details.json b/helm/infra-charts/obaas/dashboards/2/helidon_jvm_details.json index 4fe8637f9..b07a6ec23 100644 --- a/helm/infra-charts/obaas/dashboards/2/helidon_jvm_details.json +++ b/helm/infra-charts/obaas/dashboards/2/helidon_jvm_details.json @@ -1,3182 +1,1287 @@ { - "description": "Helidon Endpoint Metrics Monitoring", - "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", - "layout": [ - { - "h": 1, - "i": "f04aae7d-b673-4745-96cd-fc93f3605c5f", - "maxH": 1, - "minH": 1, - "minW": 12, - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 0 - }, - { - "h": 5, - "i": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 1 - }, - { - "h": 5, - "i": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 1 - }, - { - "h": 5, - "i": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "moved": false, - "static": false, - "w": 2, - "x": 4, - "y": 1 - }, - { - "h": 5, - "i": "9f4e3d8a-1689-406d-a0ae-d95e1bdaa1cc", - "moved": false, - "static": false, - "w": 2, - "x": 6, - "y": 1 - }, - { - "h": 5, - "i": "6aaf3a6d-fd70-43d7-ab69-8f3765d6d31d", - "moved": false, - "static": false, - "w": 2, - "x": 8, - "y": 1 - }, - { - "h": 5, - "i": "93472729-4627-429f-a9ac-34a518e62ace", - "moved": false, - "static": false, - "w": 2, - "x": 10, - "y": 1 - }, - { - "h": 5, - "i": "dc0f57f5-c20a-4b18-9308-c588d052ffab", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 6 - }, - { - "h": 5, - "i": "3b443d5b-2836-40bd-8a13-5d496004d743", - "moved": false, - "static": false, - "w": 10, - "x": 2, - "y": 6 - }, - { - "h": 5, - "i": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 11 - }, - { - "h": 5, - "i": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 11 - }, - { - "h": 5, - "i": "59f85824-45ae-4cf4-b0ce-719259aea7e3", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 16 - }, - { - "h": 5, - "i": "8a354569-e76e-4287-8dcd-7efa3576e7a4", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 16 - }, - { - "h": 5, - "i": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 21 - }, - { - "h": 1, - "i": "d1c46deb-40f9-4fb8-9dd6-65c7a18800c6", - "maxH": 1, - "minH": 1, - "minW": 12, - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 26 - }, - { - "h": 5, - "i": "8d226c8f-92b6-40da-b0fc-b716c287d2a6", - "moved": false, - "static": false, - "w": 3, - "x": 0, - "y": 27 - }, - { - "h": 5, - "i": "39f58391-58c8-466a-be2b-898781031be5", - "moved": false, - "static": false, - "w": 3, - "x": 3, - "y": 27 - }, - { - "h": 5, - "i": "d363c892-aa59-4a41-ba52-ed6643d17dfc", - "moved": false, - "static": false, - "w": 3, - "x": 6, - "y": 27 - }, - { - "h": 5, - "i": "79cffe6c-545d-47cc-ae0c-0d3da827765c", - "moved": false, - "static": false, - "w": 3, - "x": 9, - "y": 27 - }, - { - "h": 5, - "i": "3297b6d9-8862-4e15-b411-5b9adca5d1d4", - "moved": false, - "static": false, - "w": 3, - "x": 0, - "y": 32 + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Helidon JVM Details", + "description": "Helidon Endpoint Metrics Monitoring" }, - { - "h": 5, - "i": "4af116b0-6e01-477e-98ef-5806e30add07", - "moved": false, - "static": false, - "w": 9, - "x": 3, - "y": 32 - } - ], - "panelMap": { - "d1c46deb-40f9-4fb8-9dd6-65c7a18800c6": { - "collapsed": false, - "widgets": [ - { - "h": 5, - "i": "8d226c8f-92b6-40da-b0fc-b716c287d2a6", - "moved": false, - "static": false, - "w": 3, - "x": 0, - "y": 87 - }, - { - "h": 5, - "i": "39f58391-58c8-466a-be2b-898781031be5", - "moved": false, - "static": false, - "w": 3, - "x": 3, - "y": 87 - }, - { - "h": 5, - "i": "d363c892-aa59-4a41-ba52-ed6643d17dfc", - "moved": false, - "static": false, - "w": 3, - "x": 6, - "y": 87 - }, - { - "h": 5, - "i": "79cffe6c-545d-47cc-ae0c-0d3da827765c", - "moved": false, - "static": false, - "w": 3, - "x": 9, - "y": 87 - }, - { - "h": 5, - "i": "3297b6d9-8862-4e15-b411-5b9adca5d1d4", - "moved": false, - "static": false, - "w": 3, - "x": 0, - "y": 92 - }, - { - "h": 5, - "i": "4af116b0-6e01-477e-98ef-5806e30add07", - "moved": false, - "static": false, - "w": 9, - "x": 3, - "y": 92 + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')" + } + }, + "name": "namespace" } - ] - }, - "f04aae7d-b673-4745-96cd-fc93f3605c5f": { - "collapsed": false, - "widgets": [ - { - "h": 5, - "i": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 1 - }, - { - "h": 5, - "i": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 1 - }, - { - "h": 5, - "i": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "moved": false, - "static": false, - "w": 2, - "x": 4, - "y": 1 - }, - { - "h": 5, - "i": "9f4e3d8a-1689-406d-a0ae-d95e1bdaa1cc", - "moved": false, - "static": false, - "w": 2, - "x": 6, - "y": 1 - }, - { - "h": 5, - "i": "6aaf3a6d-fd70-43d7-ab69-8f3765d6d31d", - "moved": false, - "static": false, - "w": 2, - "x": 8, - "y": 1 - }, - { - "h": 5, - "i": "93472729-4627-429f-a9ac-34a518e62ace", - "moved": false, - "static": false, - "w": 2, - "x": 10, - "y": 1 - }, - { - "h": 5, - "i": "dc0f57f5-c20a-4b18-9308-c588d052ffab", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 6 - }, - { - "h": 5, - "i": "3b443d5b-2836-40bd-8a13-5d496004d743", - "moved": false, - "static": false, - "w": 10, - "x": 2, - "y": 6 - }, - { - "h": 5, - "i": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 11 - }, - { - "h": 5, - "i": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 11 - }, - { - "h": 5, - "i": "59f85824-45ae-4cf4-b0ce-719259aea7e3", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 16 - }, - { - "h": 5, - "i": "8a354569-e76e-4287-8dcd-7efa3576e7a4", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 16 - }, - { - "h": 5, - "i": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 21 + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "app_name", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'mp_app')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')\nand (JSONExtractString(labels, 'kubernetes_namespace') in {{.namespace}})" + } + }, + "name": "app_name" } - ] - } - }, - "tags": [], - "title": "Helidon JVM Details", - "uploadedGrafana": false, - "uuid": "0199715e-b0c7-7324-8410-ceabf2aec703", - "variables": { - "0bacee01-edab-4412-a262-baaf101152a0": { - "allSelected": true, - "customValue": "", - "description": "", - "id": "0bacee01-edab-4412-a262-baaf101152a0", - "modificationUUID": "525f20af-1a16-4681-af3c-97fadc45b534", - "multiSelect": true, - "name": "namespace", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - }, - "4b06c096-8584-4d86-8f54-9bd38ddf9552": { - "allSelected": true, - "customValue": "", - "description": "", - "id": "4b06c096-8584-4d86-8f54-9bd38ddf9552", - "key": "4b06c096-8584-4d86-8f54-9bd38ddf9552", - "modificationUUID": "e79743e3-c04e-4bc7-b9f6-c76fff31fc03", - "multiSelect": true, - "name": "app_name", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'mp_app')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')\nand (JSONExtractString(labels, 'kubernetes_namespace') in {{.namespace}})", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - } - }, - "version": "v4", - "widgets": [ - { - "description": "", - "id": "f04aae7d-b673-4745-96cd-fc93f3605c5f", - "panelTypes": "row", - "title": "JVM and GC Details" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + } + ], + "panels": { + "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used %", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "max", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": [ + { + "value": 90, + "operator": "above", + "unit": "percentunit", + "color": "Red", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "bfdc8dcf-ddd4-42c2-8cda-6a6528e14b32", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "memory_usedHeap_bytes" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Used", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" + }, + "3297b6d9-8862-4e15-b411-5b9adca5d1d4": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pinned Duration p95", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "s", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "max(last_over_time(vthreads_recentPinned_seconds{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\",quantile=\"0.95\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Pinned Duration p95" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "733a00b7-c1ae-4675-bbc3-80e275bbbdf0", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "memory_maxHeap_bytes" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Max", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + }, + "39f58391-58c8-466a-be2b-898781031be5": { + "kind": "Panel", + "spec": { + "display": { + "name": "Virtual Thread Starts", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": true, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": true, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(vthreads_starts{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Virtual Thread Starts" + } + } } } ], - "queryFormulas": [ - { - "disabled": false, - "expression": "A/B", - "legend": "", - "queryName": "F1" - } - ] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "18b6b1ce-37d4-4233-b3ae-242433ee480c", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [ - { - "index": "91738c40-252e-41cc-974d-637119d32791", - "isEditEnabled": false, - "keyIndex": 0, - "selectedGraph": "value", - "thresholdColor": "Red", - "thresholdFormat": "Text", - "thresholdLabel": "", - "thresholdOperator": ">", - "thresholdTableOptions": "A", - "thresholdUnit": "percentunit", - "thresholdValue": 90 - } - ], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Used %", - "yAxisUnit": "percentunit" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "9f4e3d8a-1689-406d-a0ae-d95e1bdaa1cc", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "thread_count--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "thread_count", - "type": "Gauge" + }, + "3b443d5b-2836-40bd-8a13-5d496004d743": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC's Over Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(gc_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (name)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{name}}" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "eb657d2e-15e3-4bfd-a5e0-6fcfb3c99c03", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(thread_count{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "thread_count" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Current Thread Count", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "6aaf3a6d-fd70-43d7-ab69-8f3765d6d31d", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "jvm_uptime_seconds--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "jvm_uptime_seconds", - "type": "Gauge" + }, + "4af116b0-6e01-477e-98ef-5806e30add07": { + "kind": "Panel", + "spec": { + "display": { + "name": "Active Virtual Threads Over Time", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(vthreads_count{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Active Virtual Threads" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "cdb719e0-1ed8-4ced-882b-6d4b8e3421e6", - "promql": [ - { - "name": "A", - "query": "max(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "jvm_uptime_seconds" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "JVM Uptime (Longest Running)", - "yAxisUnit": "s" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "93472729-4627-429f-a9ac-34a518e62ace", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "gc_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "gc_total", - "type": "Sum" + }, + "5197947a-1195-4e18-8a24-7c8a34a06f1d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Requests Per Second", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "reqps", + "decimalPrecision": "2" }, - "aggregateOperator": "increase", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "increase", - "filter": { - "expression": "" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "B", + "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[1m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Requests Per Second" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "7790db40-7fe6-4dcc-82b7-069659064634", - "promql": [ - { - "name": "A", - "query": "sum(increase(gc_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m]))", - "legend": "gc_total" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "GC Collections (Last 5m)", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "columnWidths": { - "A": 145, - "B": 145, - "C": 145, - "D": 145, - "E": 145, - "F": 145, - "F1": 145, - "G": 145, - "H": 145, - "app": 145 }, - "description": "", - "fillSpans": false, - "id": "dc0f57f5-c20a-4b18-9308-c588d052ffab", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "gc_time_seconds_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "gc_time_seconds_total", - "type": "Sum" + "59f85824-45ae-4cf4-b0ce-719259aea7e3": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Load Average", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false }, - "aggregateOperator": "increase", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "increase", - "filter": { - "expression": "" + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "avg(cpu_systemLoadAverage{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "CPU Load Average" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "83b0027c-e63f-4713-8a0d-3b0b0754ce80", - "promql": [ - { - "name": "A", - "query": "sum(increase(gc_time_seconds_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m]))", - "legend": "gc_time_seconds_total" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "GC Time (Last 5m)", - "yAxisUnit": "s" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + }, + "6aaf3a6d-fd70-43d7-ab69-8f3765d6d31d": { + "kind": "Panel", + "spec": { + "display": { + "name": "JVM Uptime (Longest Running)", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "s", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Used", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Max", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "max(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "jvm_uptime_seconds" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "2fd30908-b5a0-437c-9c11-a483f1be247d", - "promql": [ - { - "name": "A", - "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", - "legend": "Total Heap Used" - }, - { - "name": "B", - "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", - "legend": "Total Heap Max" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Memory Usage", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": { - "A": "decbytes", - "B": "decbytes", - "C": "decbytes", - "D": "decbytes" - }, - "columnWidths": { - "A": 145, - "B": 145, - "C": 145, - "D": 145 }, - "description": "", - "fillSpans": false, - "id": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "table", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + "785bfb21-2012-4e4b-a0b9-bc1e48b6bded": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Current Heap Used", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Current Heap Max", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "memory_usedHeap_bytes" + } + } } - }, - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + } + ], + "links": [] + } + }, + "79cffe6c-545d-47cc-ae0c-0d3da827765c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Submit Failures", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Peak Heap Used (5m)", - "limit": null, - "orderBy": [], - "queryName": "C", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "max", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "max", - "dataSource": "metrics", - "disabled": false, - "expression": "D", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Peak Heap Max (5m)", - "limit": null, - "orderBy": [], - "queryName": "D", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "max", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(vthreads_submitFailures{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Submit Failures" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "04e64c54-33bd-44b8-bbf9-fa66b0a1c368", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current Heap Used" - }, - { - "name": "B", - "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current Heap Max" - }, - { - "name": "C", - "query": "sum(max_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", - "legend": "Peak Heap Used (5m)" - }, - { - "name": "D", - "query": "sum(max_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", - "legend": "Peak Heap Max (5m)" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Memory Usage (Current and 5m Peak)", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "3b443d5b-2836-40bd-8a13-5d496004d743", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "gc_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "gc_total", - "type": "Sum" + }, + "8a354569-e76e-4287-8dcd-7efa3576e7a4": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Load Average", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false }, - "aggregateOperator": "increase", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "name--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "name", - "type": "tag" + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(last_over_time(cpu_systemLoadAverage{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current CPU Load" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(max_over_time(cpu_systemLoadAverage{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Peak CPU Load (5m)" + } + } + ] + } } - ], - "having": [], - "legend": "{{name}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "increase", - "filter": { - "expression": "" } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "3248fed4-9477-4da6-a2c2-497f79fe8d5d", - "promql": [ - { - "name": "A", - "query": "sum(increase(gc_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (name)", - "legend": "{{name}}" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "GC's Over Time", - "yAxisUnit": "short" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "59f85824-45ae-4cf4-b0ce-719259aea7e3", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "cpu_systemLoadAverage--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "cpu_systemLoadAverage", - "type": "Gauge" + }, + "8d226c8f-92b6-40da-b0fc-b716c287d2a6": { + "kind": "Panel", + "spec": { + "display": { + "name": "Current Active Virtual Threads", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "CPU Load Average", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(vthreads_count{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current Active Virtual Threads" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "677c7da2-beae-431f-b12b-c42df3c61867", - "promql": [ - { - "name": "A", - "query": "avg(cpu_systemLoadAverage{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", - "legend": "CPU Load Average" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "CPU Load Average", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "8a354569-e76e-4287-8dcd-7efa3576e7a4", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "table", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "cpu_systemLoadAverage--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "cpu_systemLoadAverage", - "type": "Gauge" + }, + "93472729-4627-429f-a9ac-34a518e62ace": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Collections (Last 5m)", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Current CPU Load", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "cpu_systemLoadAverage--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "cpu_systemLoadAverage", - "type": "Gauge" - }, - "aggregateOperator": "max", - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Peak CPU Load (5m)", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "max", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "max", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(gc_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "gc_total" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "0018b849-8c43-4d9c-acaf-8c1c1434051a", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(cpu_systemLoadAverage{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current CPU Load" - }, - { - "name": "B", - "query": "sum(max_over_time(cpu_systemLoadAverage{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", - "legend": "Peak CPU Load (5m)" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "CPU Load Average", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "description": "", - "fillSpans": true, - "id": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "requests_count_total", - "reduceTo": "avg", - "spaceAggregation": "sum", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filter": { - "expression": "" + "9f4e3d8a-1689-406d-a0ae-d95e1bdaa1cc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Current Thread Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "legend": "Requests Per Second", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(thread_count{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "thread_count" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "3f10e092-dd44-472b-9f20-a4fd6b8ed7d9", - "promql": [ - { - "name": "B", - "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[1m]))", - "legend": "Requests Per Second" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Requests Per Second", - "yAxisUnit": "reqps" - }, - { - "description": "", - "id": "d1c46deb-40f9-4fb8-9dd6-65c7a18800c6", - "panelTypes": "row", - "title": "Helidon Virtual Threads" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "8d226c8f-92b6-40da-b0fc-b716c287d2a6", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_count--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_count", - "type": "Gauge" + }, + "c35c9632-d46c-4a88-b5fe-3f279fc94c2b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Max", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "max", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Current Active Virtual Threads", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "memory_maxHeap_bytes" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "569bf8d8-e65d-4dc6-8d4d-31b1a116bfb4", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(vthreads_count{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current Active Virtual Threads" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Current Active Virtual Threads", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "39f58391-58c8-466a-be2b-898781031be5", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_starts--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_starts", - "type": "Gauge" + }, + "c933a1d0-bda3-4821-a29a-77fa0a6fd067": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage (Current and 5m Peak)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Virtual Thread Starts", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current Heap Max" + } + }, + { + "type": "promql", + "spec": { + "name": "C", + "query": "sum(max_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Peak Heap Used (5m)" + } + }, + { + "type": "promql", + "spec": { + "name": "D", + "query": "sum(max_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Peak Heap Max (5m)" + } + } + ] + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "62e36522-4496-469c-9e88-26b4d3431001", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(vthreads_starts{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Virtual Thread Starts" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Virtual Thread Starts", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "d363c892-aa59-4a41-ba52-ed6643d17dfc", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_pinned--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_pinned", - "type": "Gauge" + }, + "d363c892-aa59-4a41-ba52-ed6643d17dfc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Current Pinned Virtual Threads", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Current Pinned Virtual Threads", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(vthreads_pinned{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current Pinned Virtual Threads" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "ef89a4c4-454e-463d-a7f0-9bc540a881fb", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(vthreads_pinned{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current Pinned Virtual Threads" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Current Pinned Virtual Threads", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "79cffe6c-545d-47cc-ae0c-0d3da827765c", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_submitFailures--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_submitFailures", - "type": "Gauge" + }, + "dc0f57f5-c20a-4b18-9308-c588d052ffab": { + "kind": "Panel", + "spec": { + "display": { + "name": "GC Time (Last 5m)", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "s", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Submit Failures", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(gc_time_seconds_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "gc_time_seconds_total" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "36aa4724-2d72-4fc3-b5a6-5356d71fde47", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(vthreads_submitFailures{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Submit Failures" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Submit Failures", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "4af116b0-6e01-477e-98ef-5806e30add07", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_count--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_count", - "type": "Gauge" + }, + "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Active Virtual Threads", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Max" + } + } + ] + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "bb8b55cd-6c94-4c29-a098-5e972b6e6aad", - "promql": [ - { - "name": "A", - "query": "sum(vthreads_count{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", - "legend": "Active Virtual Threads" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Active Virtual Threads Over Time", - "yAxisUnit": "none" + } }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "3297b6d9-8862-4e15-b411-5b9adca5d1d4", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "JVM and GC Details", + "collapse": { + "open": true + } + }, + "items": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_recentPinned_seconds--float64--Summary--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_recentPinned_seconds", - "type": "Summary" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Pinned Duration p95", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "x": 0, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/785bfb21-2012-4e4b-a0b9-bc1e48b6bded" + } + }, + { + "x": 2, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/c35c9632-d46c-4a88-b5fe-3f279fc94c2b" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/2a5b1786-fc4d-4af3-baf4-fbde9ddda42d" + } + }, + { + "x": 6, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/9f4e3d8a-1689-406d-a0ae-d95e1bdaa1cc" + } + }, + { + "x": 8, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/6aaf3a6d-fd70-43d7-ab69-8f3765d6d31d" + } + }, + { + "x": 10, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/93472729-4627-429f-a9ac-34a518e62ace" + } + }, + { + "x": 0, + "y": 5, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/dc0f57f5-c20a-4b18-9308-c588d052ffab" + } + }, + { + "x": 2, + "y": 5, + "width": 10, + "height": 5, + "content": { + "$ref": "#/spec/panels/3b443d5b-2836-40bd-8a13-5d496004d743" + } + }, + { + "x": 0, + "y": 10, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd" + } + }, + { + "x": 6, + "y": 10, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/c933a1d0-bda3-4821-a29a-77fa0a6fd067" + } + }, + { + "x": 0, + "y": 15, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/59f85824-45ae-4cf4-b0ce-719259aea7e3" + } + }, + { + "x": 6, + "y": 15, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/8a354569-e76e-4287-8dcd-7efa3576e7a4" + } + }, + { + "x": 0, + "y": 20, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/5197947a-1195-4e18-8a24-7c8a34a06f1d" } } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "637dafe6-ca2b-48b0-b544-2e20dc308122", - "promql": [ - { - "name": "A", - "query": "max(last_over_time(vthreads_recentPinned_seconds{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\",quantile=\"0.95\"}[2m]))", - "legend": "Pinned Duration p95" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + ] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Helidon Virtual Threads", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/8d226c8f-92b6-40da-b0fc-b716c287d2a6" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/39f58391-58c8-466a-be2b-898781031be5" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/d363c892-aa59-4a41-ba52-ed6643d17dfc" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/79cffe6c-545d-47cc-ae0c-0d3da827765c" + } + }, + { + "x": 0, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/3297b6d9-8862-4e15-b411-5b9adca5d1d4" + } + }, + { + "x": 3, + "y": 5, + "width": 9, + "height": 5, + "content": { + "$ref": "#/spec/panels/4af116b0-6e01-477e-98ef-5806e30add07" + } + } + ] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Pinned Duration p95", - "yAxisUnit": "s" - } - ] + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } } diff --git a/helm/infra-charts/obaas/dashboards/2/helidon_main_dashboard.json b/helm/infra-charts/obaas/dashboards/2/helidon_main_dashboard.json index 48bda78df..4b820db8e 100644 --- a/helm/infra-charts/obaas/dashboards/2/helidon_main_dashboard.json +++ b/helm/infra-charts/obaas/dashboards/2/helidon_main_dashboard.json @@ -1 +1,1103 @@ -{"description": "Helidon Endpoint Metrics Monitoring", "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [{"h": 1, "i": "325d867d-c212-4e51-8cae-58cd36087780", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 0}, {"h": 5, "i": "26d1442e-e7f3-4cd8-a952-f73380fca652", "moved": false, "static": false, "w": 3, "x": 0, "y": 1}, {"h": 5, "i": "34d33ef2-1377-4fa2-b3ea-43d505609e63", "moved": false, "static": false, "w": 9, "x": 3, "y": 1}, {"h": 5, "i": "448e221a-b4b4-49dc-86f6-360739643557", "moved": false, "static": false, "w": 3, "x": 0, "y": 6}, {"h": 5, "i": "9b31a8fa-3b0f-4069-8d39-ca1eeb88eafb", "moved": false, "static": false, "w": 3, "x": 3, "y": 6}, {"h": 5, "i": "60dd51d6-18e7-4ecf-9907-06a83e43ecca", "moved": false, "static": false, "w": 3, "x": 6, "y": 6}, {"h": 5, "i": "898d191e-6047-4833-8fab-86d5146f8f0d", "moved": false, "static": false, "w": 3, "x": 9, "y": 6}, {"h": 5, "i": "9752263f-de9f-4dd4-a00e-2dd09a83d9ca", "moved": false, "static": false, "w": 6, "x": 0, "y": 11}, {"h": 5, "i": "f56bc1ef-cc46-45ba-9182-d0a4805580bd", "moved": false, "static": false, "w": 6, "x": 6, "y": 11}, {"h": 1, "i": "339d82e9-1c12-4a99-ab05-d15833f4d48e", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 16}, {"h": 5, "i": "b7e9af8b-71ba-41f3-8141-6f918685f881", "moved": false, "static": false, "w": 3, "x": 0, "y": 17}, {"h": 5, "i": "76f0c3c8-d220-4f19-99e7-c5648dc04e01", "moved": false, "static": false, "w": 9, "x": 3, "y": 17}, {"h": 5, "i": "770c62f6-50d7-4cfc-ba92-a8c8c1828d8a", "moved": false, "static": false, "w": 3, "x": 0, "y": 22}, {"h": 5, "i": "cacbac0a-e6e5-469c-a851-2459998c92fd", "moved": false, "static": false, "w": 3, "x": 3, "y": 22}, {"h": 5, "i": "506d2adf-8650-4431-b5db-058d6ef10ada", "moved": false, "static": false, "w": 3, "x": 6, "y": 22}, {"h": 5, "i": "064aa2a2-f12a-4262-8ee0-67e7deb01138", "moved": false, "static": false, "w": 3, "x": 9, "y": 22}, {"h": 5, "i": "0bb0d89d-b729-415f-8aae-2c57758bcd81", "moved": false, "static": false, "w": 6, "x": 0, "y": 27}, {"h": 5, "i": "613e8ca7-093e-43c6-a9c0-1aef56d92adc", "moved": false, "static": false, "w": 6, "x": 6, "y": 27}], "panelMap": {"325d867d-c212-4e51-8cae-58cd36087780": {"collapsed": false, "widgets": [{"h": 5, "i": "26d1442e-e7f3-4cd8-a952-f73380fca652", "moved": false, "static": false, "w": 3, "x": 0, "y": 16}, {"h": 5, "i": "34d33ef2-1377-4fa2-b3ea-43d505609e63", "moved": false, "static": false, "w": 9, "x": 3, "y": 16}, {"h": 5, "i": "448e221a-b4b4-49dc-86f6-360739643557", "moved": false, "static": false, "w": 3, "x": 0, "y": 21}, {"h": 5, "i": "9b31a8fa-3b0f-4069-8d39-ca1eeb88eafb", "moved": false, "static": false, "w": 3, "x": 3, "y": 21}, {"h": 5, "i": "60dd51d6-18e7-4ecf-9907-06a83e43ecca", "moved": false, "static": false, "w": 3, "x": 6, "y": 21}, {"h": 5, "i": "898d191e-6047-4833-8fab-86d5146f8f0d", "moved": false, "static": false, "w": 3, "x": 9, "y": 21}, {"h": 5, "i": "9752263f-de9f-4dd4-a00e-2dd09a83d9ca", "moved": false, "static": false, "w": 6, "x": 0, "y": 26}, {"h": 5, "i": "613e8ca7-093e-43c6-a9c0-1aef56d92adc", "w": 6, "x": 6, "y": 26}]}, "339d82e9-1c12-4a99-ab05-d15833f4d48e": {"collapsed": true, "widgets": []}}, "tags": [], "title": "Helidon Main Dashboard", "uploadedGrafana": false, "variables": {"6ef87d9d-9bb3-48bc-b7b9-d9eba3fb196f": {"allSelected": true, "customValue": "", "description": "", "id": "6ef87d9d-9bb3-48bc-b7b9-d9eba3fb196f", "modificationUUID": "3d5ff485-f3ec-4b0c-847f-0d7fdd562210", "multiSelect": true, "name": "namespace", "order": 0, "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')", "showALLOption": true, "sort": "ASC", "textboxValue": "", "type": "QUERY"}}, "version": "v4", "widgets": [{"description": "", "id": "325d867d-c212-4e51-8cae-58cd36087780", "panelTypes": "row", "title": "SE Applications"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "26d1442e-e7f3-4cd8-a952-f73380fca652", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "7edc0a1b", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "a6232183-593b-4f52-8026-b953d42ed4ff", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "count(count by (app) (last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m])))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total SE Applications", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "448e221a-b4b4-49dc-86f6-360739643557", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "ea072991", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "b3656910-c049-4675-9a02-b88610cd0510", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Heap Used", "yAxisUnit": "decbytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "9b31a8fa-3b0f-4069-8d39-ca1eeb88eafb", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "ea072991", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "a9c6c34d-c267-43f5-817a-903162e6aade", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Heap Max", "yAxisUnit": "decbytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {"A": "short", "B": "decbytes", "C": "decbytes", "F1": "percentunit"}, "columnWidths": {"A": 145, "B": 145, "C": 145, "F1": 145, "app": 145}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "description": "", "fillSpans": false, "id": "34d33ef2-1377-4fa2-b3ea-43d505609e63", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "jvm_uptime_seconds", "reduceTo": "last", "spaceAggregation": "avg", "timeAggregation": "count_distinct"}], "dataSource": "metrics", "disabled": false, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "JVM Count", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "last", "spaceAggregation": "sum", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "B", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "Total Heap Used", "limit": null, "orderBy": [], "queryName": "B", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "last", "spaceAggregation": "avg", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "C", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "Total Heap Max", "limit": null, "orderBy": [], "queryName": "C", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}], "op": "AND"}}], "queryFormulas": [{"disabled": false, "expression": "B/C", "legend": "Total Heap Used %", "queryName": "F1"}]}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "c2c0b950-358d-410e-832c-87041ecafc4b", "promql": [{"name": "A", "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", "legend": "JVM Count", "disabled": false}, {"name": "B", "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", "legend": "Total Heap Used", "disabled": false}, {"name": "C", "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", "legend": "Total Heap Max", "disabled": false}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Helidon SE Applications", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "60dd51d6-18e7-4ecf-9907-06a83e43ecca", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "be7c5ce1", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "44dbf9bf-203d-4b29-b7bf-bd9bc4d5c572", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "100 * sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [{"index": "91b36d42-dddc-4e28-97cc-2764d0cd9f59", "isEditEnabled": false, "keyIndex": 1, "selectedGraph": "value", "thresholdColor": "Green", "thresholdFormat": "Text", "thresholdLabel": "", "thresholdOperator": "<=", "thresholdTableOptions": "A", "thresholdUnit": "percent", "thresholdValue": 80}, {"index": "e14d1093-94d8-485c-9573-28605d3f1694", "isEditEnabled": false, "keyIndex": 0, "selectedGraph": "value", "thresholdColor": "Red", "thresholdFormat": "Text", "thresholdLabel": "", "thresholdOperator": ">", "thresholdTableOptions": "A", "thresholdUnit": "percent", "thresholdValue": 80}], "timePreferance": "GLOBAL_TIME", "title": "Percent Heap Used", "yAxisUnit": "percent"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "898d191e-6047-4833-8fab-86d5146f8f0d", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "be7c5ce1", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "82ea3b32-ce1a-482a-af23-61e9a1aa40b4", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total SE JVM's", "yAxisUnit": "short"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "description": "Memory usage percentage by SE App.", "fillSpans": false, "id": "9752263f-de9f-4dd4-a00e-2dd09a83d9ca", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "avg", "spaceAggregation": "sum", "timeAggregation": "sum"}], "dataSource": "metrics", "disabled": true, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "avg", "spaceAggregation": "sum", "timeAggregation": "sum"}], "dataSource": "metrics", "disabled": true, "expression": "B", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "B", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}], "queryFormulas": [{"disabled": false, "expression": "A/B", "legend": "{{app}}", "queryName": "F1"}]}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "da658b9d-e380-4e02-ae89-47f6eb3dafc0", "promql": [{"name": "A", "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}) by (app) / sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}) by (app)", "legend": "{{app}}", "disabled": false}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Memory Usage % by SE App", "yAxisUnit": "percentunit"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {"A": "percentunit", "B": "decbytes", "C": "decbytes", "D": "decbytes", "F1": "percentunit", "F2": "percentunit"}, "columnWidths": {"F1": 145, "F2": 145, "mp_app": 145}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "description": "Memory usage percentage by MP App.", "fillSpans": false, "id": "613e8ca7-093e-43c6-a9c0-1aef56d92adc", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "last", "spaceAggregation": "sum", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": true, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "last", "spaceAggregation": "sum", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": true, "expression": "B", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "B", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "max", "spaceAggregation": "sum", "timeAggregation": "max"}], "dataSource": "metrics", "disabled": true, "expression": "C", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "C", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "max", "spaceAggregation": "sum", "timeAggregation": "max"}], "dataSource": "metrics", "disabled": true, "expression": "D", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "D", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}], "queryFormulas": [{"disabled": false, "expression": "A/B", "legend": "Last", "queryName": "F1"}, {"disabled": false, "expression": "C/D", "legend": "Max", "queryName": "F2"}]}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "a5418893-eb10-4dfd-b162-2ea565cf45f9", "promql": [{"name": "A", "query": "sum by (mp_app) (last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m])) / sum by (mp_app) (last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", "legend": "Heap Used %", "disabled": false}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Memory Usage % by MP App", "yAxisUnit": "percentunit"}, {"description": "", "id": "339d82e9-1c12-4a99-ab05-d15833f4d48e", "panelTypes": "row", "title": "MP Applications"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "b7e9af8b-71ba-41f3-8141-6f918685f881", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "76becff6", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "c86729da-b3dd-4d9a-8c43-a06f2283ab8c", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "count(count by (mp_app) (last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m])))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total MP Applications", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {"A": "short", "B": "decbytes", "C": "decbytes", "F1": "percentunit"}, "columnWidths": {"A": 145, "B": 145, "C": 145, "F1": 145, "mp_app": 145}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "description": "", "fillSpans": false, "id": "76f0c3c8-d220-4f19-99e7-c5648dc04e01", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "jvm_uptime_seconds", "reduceTo": "last", "spaceAggregation": "avg", "timeAggregation": "count_distinct"}], "dataSource": "metrics", "disabled": false, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "JVM Count", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "last", "spaceAggregation": "sum", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "B", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "Total Heap Used", "limit": null, "orderBy": [], "queryName": "B", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "last", "spaceAggregation": "avg", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "C", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "Total Heap Max", "limit": null, "orderBy": [], "queryName": "C", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}], "queryFormulas": [{"disabled": false, "expression": "B/C", "legend": "Total Heap Used %", "queryName": "F1"}]}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "8957f97b-b0ea-485f-b1b7-a7c3d3f90343", "promql": [{"name": "A", "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", "legend": "JVM Count", "disabled": false}, {"name": "B", "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", "legend": "Total Heap Used", "disabled": false}, {"name": "C", "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", "legend": "Total Heap Max", "disabled": false}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Helidon MP Applications", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "770c62f6-50d7-4cfc-ba92-a8c8c1828d8a", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "31948a0e", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "c553e2c7-c472-40ec-a14f-bc0da7906ffe", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Heap Used", "yAxisUnit": "decbytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "cacbac0a-e6e5-469c-a851-2459998c92fd", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "ea072991", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "17def221-4403-4ca2-86a3-b2ac62f2d957", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Heap Max", "yAxisUnit": "decbytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "506d2adf-8650-4431-b5db-058d6ef10ada", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "be7c5ce1", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "9ca7729d-59c2-4651-a078-3697445283c0", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "100 * sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [{"index": "91b36d42-dddc-4e28-97cc-2764d0cd9f59", "isEditEnabled": false, "keyIndex": 1, "selectedGraph": "value", "thresholdColor": "Green", "thresholdFormat": "Text", "thresholdLabel": "", "thresholdOperator": "<=", "thresholdTableOptions": "A", "thresholdUnit": "percent", "thresholdValue": 80}, {"index": "e14d1093-94d8-485c-9573-28605d3f1694", "isEditEnabled": false, "keyIndex": 0, "selectedGraph": "value", "thresholdColor": "Red", "thresholdFormat": "Text", "thresholdLabel": "", "thresholdOperator": ">", "thresholdTableOptions": "A", "thresholdUnit": "percent", "thresholdValue": 80}], "timePreferance": "GLOBAL_TIME", "title": "Percent Heap Used", "yAxisUnit": "percent"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "", "fillSpans": false, "id": "064aa2a2-f12a-4262-8ee0-67e7deb01138", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "value", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "float64", "id": "jvm_uptime_seconds--float64--Gauge--true", "isColumn": true, "isJSON": false, "key": "jvm_uptime_seconds", "type": "Gauge"}, "aggregateOperator": "sum", "dataSource": "metrics", "disabled": false, "expression": "A", "filters": {"items": [{"id": "bd5213d9", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}], "op": "AND"}, "functions": [], "groupBy": [], "having": [], "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "last", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "sum"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "da5066e2-62d3-457d-ae70-73ced5bb90ef", "promql": [{"disabled": false, "legend": "", "name": "A", "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))"}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total MP JVM's", "yAxisUnit": "short"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "description": "Memory usage percentage by MP App.", "fillSpans": false, "id": "0bb0d89d-b729-415f-8aae-2c57758bcd81", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "avg", "spaceAggregation": "sum", "timeAggregation": "sum"}], "dataSource": "metrics", "disabled": true, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "avg", "spaceAggregation": "sum", "timeAggregation": "sum"}], "dataSource": "metrics", "disabled": true, "expression": "B", "functions": [], "groupBy": [{"dataType": "string", "id": "mp_app--string--tag", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "B", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_not_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "!=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}], "queryFormulas": [{"disabled": false, "expression": "A/B", "legend": "{{mp_app}}", "queryName": "F1"}]}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "b73e83d1-0883-4b11-be37-9812241930d1", "promql": [{"name": "A", "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}) by (mp_app) / sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}) by (mp_app)", "legend": "{{mp_app}}", "disabled": false}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Memory Usage % by MP App", "yAxisUnit": "percentunit"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {"A": "decbytes", "B": "decbytes", "C": "decbytes", "D": "decbytes", "F1": "percentunit", "F2": "percentunit"}, "columnWidths": {"F1": 145, "F2": 145, "app": 145}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "description": "Memory usage percentage by SE App.", "fillSpans": false, "id": "f56bc1ef-cc46-45ba-9182-d0a4805580bd", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "table", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "last", "spaceAggregation": "sum", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": true, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "last", "spaceAggregation": "sum", "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": true, "expression": "B", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "B", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_usedHeap_bytes", "reduceTo": "max", "spaceAggregation": "sum", "timeAggregation": "max"}], "dataSource": "metrics", "disabled": true, "expression": "C", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "C", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}, {"aggregations": [{"metricName": "memory_maxHeap_bytes", "reduceTo": "max", "spaceAggregation": "sum", "timeAggregation": "max"}], "dataSource": "metrics", "disabled": true, "expression": "D", "functions": [], "groupBy": [{"dataType": "string", "id": "app--string--tag", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "D", "source": "", "stepInterval": 60, "filters": {"items": [{"id": "k8s_ns", "key": {"dataType": "string", "id": "namespace--string--tag--false", "isColumn": false, "isJSON": false, "key": "namespace", "type": "tag"}, "op": "in", "value": [".namespace"]}, {"id": "mp_app_empty", "key": {"dataType": "string", "id": "mp_app--string--tag--false", "isColumn": false, "isJSON": false, "key": "mp_app", "type": "tag"}, "op": "=", "value": ""}, {"id": "app_not_empty", "key": {"dataType": "string", "id": "app--string--tag--false", "isColumn": false, "isJSON": false, "key": "app", "type": "tag"}, "op": "!=", "value": ""}], "op": "AND"}}], "queryFormulas": [{"disabled": false, "expression": "A/B", "legend": "Last", "queryName": "F1"}, {"disabled": false, "expression": "C/D", "legend": "Max", "queryName": "F2"}]}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "id": "c6d7b48c-bb8b-4e28-923b-77aceae026cc", "promql": [{"name": "A", "query": "sum by (app) (last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m])) / sum by (app) (last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", "legend": "{{app}}", "disabled": false}], "queryType": "promql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Total Memory Usage % by SE App", "yAxisUnit": "percentunit"}], "uuid": "0199715e-b130-7231-b1f0-2b83f323fd2e"} +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Helidon Main Dashboard", + "description": "Helidon Endpoint Metrics Monitoring" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')" + } + }, + "name": "namespace" + } + } + ], + "panels": { + "064aa2a2-f12a-4262-8ee0-67e7deb01138": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total MP JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "0bb0d89d-b729-415f-8aae-2c57758bcd81": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Memory Usage % by MP App", + "description": "Memory usage percentage by MP App." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}) by (mp_app) / sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}) by (mp_app)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{mp_app}}" + } + } + } + } + ], + "links": [] + } + }, + "26d1442e-e7f3-4cd8-a952-f73380fca652": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total SE Applications", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "count(count by (app) (last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m])))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "34d33ef2-1377-4fa2-b3ea-43d505609e63": { + "kind": "Panel", + "spec": { + "display": { + "name": "Helidon SE Applications", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "JVM Count" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "C", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Max" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "448e221a-b4b4-49dc-86f6-360739643557": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "506d2adf-8650-4431-b5db-058d6ef10ada": { + "kind": "Panel", + "spec": { + "display": { + "name": "Percent Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percent", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 80, + "operator": "below_or_equal", + "unit": "percent", + "color": "Green", + "format": "text" + }, + { + "value": 80, + "operator": "above", + "unit": "percent", + "color": "Red", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "100 * sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "60dd51d6-18e7-4ecf-9907-06a83e43ecca": { + "kind": "Panel", + "spec": { + "display": { + "name": "Percent Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percent", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 80, + "operator": "below_or_equal", + "unit": "percent", + "color": "Green", + "format": "text" + }, + { + "value": 80, + "operator": "above", + "unit": "percent", + "color": "Red", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "100 * sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "613e8ca7-093e-43c6-a9c0-1aef56d92adc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Memory Usage % by MP App", + "description": "Memory usage percentage by MP App." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (mp_app) (last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m])) / sum by (mp_app) (last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Heap Used %" + } + } + } + } + ], + "links": [] + } + }, + "76f0c3c8-d220-4f19-99e7-c5648dc04e01": { + "kind": "Panel", + "spec": { + "display": { + "name": "Helidon MP Applications", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "JVM Count" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "C", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Max" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "770c62f6-50d7-4cfc-ba92-a8c8c1828d8a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "898d191e-6047-4833-8fab-86d5146f8f0d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total SE JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "9752263f-de9f-4dd4-a00e-2dd09a83d9ca": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Memory Usage % by SE App", + "description": "Memory usage percentage by SE App." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}) by (app) / sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}) by (app)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{app}}" + } + } + } + } + ], + "links": [] + } + }, + "9b31a8fa-3b0f-4069-8d39-ca1eeb88eafb": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Max", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "b7e9af8b-71ba-41f3-8141-6f918685f881": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total MP Applications", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "count(count by (mp_app) (last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m])))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "cacbac0a-e6e5-469c-a851-2459998c92fd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Max", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app!=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "f56bc1ef-cc46-45ba-9182-d0a4805580bd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Memory Usage % by SE App", + "description": "Memory usage percentage by SE App." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum by (app) (last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m])) / sum by (app) (last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app=\"\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{app}}" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/b7e9af8b-71ba-41f3-8141-6f918685f881" + } + }, + { + "x": 3, + "y": 0, + "width": 9, + "height": 5, + "content": { + "$ref": "#/spec/panels/76f0c3c8-d220-4f19-99e7-c5648dc04e01" + } + }, + { + "x": 0, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/770c62f6-50d7-4cfc-ba92-a8c8c1828d8a" + } + }, + { + "x": 3, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/cacbac0a-e6e5-469c-a851-2459998c92fd" + } + }, + { + "x": 6, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/506d2adf-8650-4431-b5db-058d6ef10ada" + } + }, + { + "x": 9, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/064aa2a2-f12a-4262-8ee0-67e7deb01138" + } + }, + { + "x": 0, + "y": 10, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/0bb0d89d-b729-415f-8aae-2c57758bcd81" + } + }, + { + "x": 6, + "y": 10, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/613e8ca7-093e-43c6-a9c0-1aef56d92adc" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "SE Applications", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/26d1442e-e7f3-4cd8-a952-f73380fca652" + } + }, + { + "x": 3, + "y": 0, + "width": 9, + "height": 5, + "content": { + "$ref": "#/spec/panels/34d33ef2-1377-4fa2-b3ea-43d505609e63" + } + }, + { + "x": 0, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/448e221a-b4b4-49dc-86f6-360739643557" + } + }, + { + "x": 3, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/9b31a8fa-3b0f-4069-8d39-ca1eeb88eafb" + } + }, + { + "x": 6, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/60dd51d6-18e7-4ecf-9907-06a83e43ecca" + } + }, + { + "x": 9, + "y": 5, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/898d191e-6047-4833-8fab-86d5146f8f0d" + } + }, + { + "x": 0, + "y": 10, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/9752263f-de9f-4dd4-a00e-2dd09a83d9ca" + } + }, + { + "x": 6, + "y": 10, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/f56bc1ef-cc46-45ba-9182-d0a4805580bd" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "MP Applications", + "collapse": { + "open": false + } + }, + "items": [] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/helidon_mp_details.json b/helm/infra-charts/obaas/dashboards/2/helidon_mp_details.json index 81a4453ba..c62ae9a7d 100644 --- a/helm/infra-charts/obaas/dashboards/2/helidon_mp_details.json +++ b/helm/infra-charts/obaas/dashboards/2/helidon_mp_details.json @@ -1,1654 +1,690 @@ { - "description": "Helidon MP Applications Details", - "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", - "layout": [ - { - "h": 10, - "i": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 0 - }, - { - "h": 5, - "i": "8ededdcd-e0e6-4745-b67f-3634499fd206", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 0 - }, - { - "h": 10, - "i": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "moved": false, - "static": false, - "w": 2, - "x": 4, - "y": 0 - }, - { - "h": 5, - "i": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 0 - }, - { - "h": 5, - "i": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 5 - }, - { - "h": 5, - "i": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 5 - }, - { - "h": 7, - "i": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 10 - }, - { - "h": 8, - "i": "68198e34-2036-4be4-ac63-28d5e8ca95bd", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 17 - }, - { - "h": 8, - "i": "ca13277a-b4f4-4264-93ff-2fa58cb541be", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 17 - } - ], - "panelMap": {}, + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, "tags": [], - "title": "Helidon MP Details", - "uploadedGrafana": false, - "uuid": "019c4894-9621-7d0d-85d2-b10d05eebc20", - "variables": { - "0bacee01-edab-4412-a262-baaf101152a0": { - "allSelected": true, - "customValue": ".*", - "defaultValue": "", - "description": "", - "id": "0bacee01-edab-4412-a262-baaf101152a0", - "key": "0bacee01-edab-4412-a262-baaf101152a0", - "modificationUUID": "9228a5d2-5112-4345-bf71-607406c51b5e", - "multiSelect": true, - "name": "namespace", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'kubernetes_namespace') != '')", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" + "spec": { + "display": { + "name": "Helidon MP Details", + "description": "Helidon MP Applications Details" }, - "4b06c096-8584-4d86-8f54-9bd38ddf9552": { - "allSelected": false, - "customValue": ".*", - "defaultValue": "", - "description": "", - "id": "4b06c096-8584-4d86-8f54-9bd38ddf9552", - "modificationUUID": "bce60ce6-a861-41c1-a865-8b872ab5111b", - "multiSelect": true, - "name": "app_name", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'mp_app')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')\nand (JSONExtractString(labels, 'kubernetes_namespace') in {{.namespace}})\n", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - } - }, - "version": "v5", - "widgets": [ - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace') \nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_memory_used_bytes')\nand (JSONExtractString(labels, 'kubernetes_namespace') != '')" + } + }, + "name": "namespace" + } }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "memory_usedHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "timeAggregation": "count" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "app_name", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'mp_app')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')\nand (JSONExtractString(labels, 'kubernetes_namespace') in {{.namespace}})\n" + } + }, + "name": "app_name" + } + } + ], + "panels": { + "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used %", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "thresholds": [ + { + "value": 90, + "operator": "above", + "unit": "percentunit", + "color": "Red", + "format": "text" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "b5dc4255-b6b8-472d-89e9-9cb4f38b09a3", - "promql": [ - { - "name": "A", - "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total MP JVM's", - "yAxisUnit": "short" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "memory_maxHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" + "5197947a-1195-4e18-8a24-7c8a34a06f1d": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Requests - All JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/BarChartPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true, + "stackedBarChart": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (mp_app)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{mp_app}}" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "979d980c-d37c-4e2b-ad92-62d022753b9d", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Max", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "memory_usedHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": true, - "expression": "A", - "filter": { - "expression": "" + "68198e34-2036-4be4-ac63-28d5e8ca95bd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total REST Calls all JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "formatting": { + "unit": "short", + "decimalPrecision": "2" }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" - } - }, - { - "aggregations": [ - { - "metricName": "memory_maxHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "dataSource": "metrics", - "disabled": true, - "expression": "B", - "filter": { - "expression": "" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" - } + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null } - ], - "queryFormulas": [ + }, + "queries": [ { - "disabled": false, - "expression": "A/B", - "legend": "", - "queryName": "F1" + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (mp_app)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{mp_app}}" + } + } + } } - ] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "22c584d2-7f8a-4daa-aeb3-1ec12c3a452e", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m])) / sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [ - { - "index": "91738c40-252e-41cc-974d-637119d32791", - "isEditEnabled": false, - "keyIndex": 0, - "selectedGraph": "value", - "thresholdColor": "Red", - "thresholdFormat": "Text", - "thresholdLabel": "", - "thresholdOperator": ">", - "thresholdTableOptions": "A", - "thresholdUnit": "percentunit", - "thresholdValue": 90 + ], + "links": [] } - ], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Used %", - "yAxisUnit": "percentunit" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "memory_usedHeap_bytes", - "reduceTo": "avg", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" + "785bfb21-2012-4e4b-a0b9-bc1e48b6bded": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total MP JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "formatting": { + "unit": "short", + "decimalPrecision": "2" }, - "legend": "Total Heap Used", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregations": [ - { - "metricName": "memory_maxHeap_bytes", - "reduceTo": "avg", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "count(last_over_time(jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "Total Heap Max", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "44015c5c-4307-4343-b251-dec822867e8b", - "promql": [ - { - "name": "A", - "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", - "legend": "Total Heap Used" - }, - { - "name": "B", - "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", - "legend": "Total Heap Max" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Memory Usage", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": { - "A": "decbytes", - "B": "decbytes", - "C": "decbytes", - "D": "decbytes" - }, - "columnWidths": { - "A": 145, - "B": 145, - "C": 145, - "D": 145 - }, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "table", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "memory_usedHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" + "8ededdcd-e0e6-4745-b67f-3634499fd206": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "legend": "Current Heap Used", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregations": [ - { - "metricName": "memory_maxHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "Current Heap Max", - "limit": null, - "orderBy": [], - "queryName": "B", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" } - }, - { - "aggregations": [ - { - "metricName": "memory_usedHeap_bytes", - "reduceTo": "max", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "latest" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filter": { - "expression": "" + } + ], + "links": [] + } + }, + "c35c9632-d46c-4a88-b5fe-3f279fc94c2b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Max", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "legend": "Peak Heap Used (5m)", - "limit": null, - "orderBy": [], - "queryName": "C", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregations": [ - { - "metricName": "memory_maxHeap_bytes", - "reduceTo": "max", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "max" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "D", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" - }, - "legend": "Peak Heap Max (5m)", - "limit": null, - "orderBy": [], - "queryName": "D", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "ca1d40b4-1444-4650-897b-050940155430", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current Heap Used" - }, - { - "name": "B", - "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "Current Heap Max" - }, - { - "name": "C", - "query": "sum(max_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", - "legend": "Peak Heap Used (5m)" - }, - { - "name": "D", - "query": "sum(max_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", - "legend": "Peak Heap Max (5m)" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Memory Usage (Current and 5m Peak)", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": true, - "id": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "bar", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "requests_count_total", - "reduceTo": "avg", - "spaceAggregation": "sum", - "timeAggregation": "increase" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" + "c933a1d0-bda3-4821-a29a-77fa0a6fd067": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage (Current and 5m Peak)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "mp_app--string--tag", - "isColumn": false, - "isJSON": false, - "key": "mp_app", - "type": "tag" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "having": { - "expression": "" }, - "legend": "{{mp_app}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(last_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Current Heap Max" + } + }, + { + "type": "promql", + "spec": { + "name": "C", + "query": "sum(max_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Peak Heap Used (5m)" + } + }, + { + "type": "promql", + "spec": { + "name": "D", + "query": "sum(max_over_time(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Peak Heap Max (5m)" + } + } + ] + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "ee4fa1a3-485d-4c1b-82f8-9b5a38dd9eed", - "promql": [ - { - "name": "A", - "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (mp_app)", - "legend": "{{mp_app}}" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "HTTP Requests - All JVM's", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "8ededdcd-e0e6-4745-b67f-3634499fd206", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "memory_usedHeap_bytes", - "reduceTo": "last", - "spaceAggregation": "sum", - "temporality": null, - "timeAggregation": "sum" + "ca13277a-b4f4-4264-93ff-2fa58cb541be": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total REST Calls all JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "short", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" }, - "functions": [], - "groupBy": [], - "having": { - "expression": "" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (mp_app)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{mp_app}}" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "d25f98cd-8288-4ae8-b842-c3911d1f1a3f", - "promql": [ - { - "name": "A", - "query": "sum(last_over_time(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\",mp_app=~\"$app_name\"}[2m]))", - "legend": "" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Used", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "68198e34-2036-4be4-ac63-28d5e8ca95bd", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "pie", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "REST_request_seconds.count", - "reduceTo": "avg", - "spaceAggregation": "avg", - "temporality": "", - "timeAggregation": "avg" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" + "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "method--string--tag", - "isColumn": false, - "isJSON": false, - "key": "method", - "type": "tag" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "having": { - "expression": "" }, - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Max" + } + } + ] + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "d80dec89-53b9-431f-88a4-350af302ab2f", - "promql": [ - { - "name": "A", - "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (mp_app)", - "legend": "{{mp_app}}" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total REST Calls all JVM's", - "yAxisUnit": "short" + } }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": { - "A": "short" - }, - "columnWidths": { - "mp_app": 145, - "A": 145 - }, - "contextLinks": { - "linksData": [] - }, - "customLegendColors": {}, - "decimalPrecision": 2, - "description": "", - "fillSpans": false, - "id": "ca13277a-b4f4-4264-93ff-2fa58cb541be", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "table", - "query": { - "builder": { - "queryData": [ + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ { - "aggregations": [ - { - "metricName": "REST_request_seconds.count", - "reduceTo": "avg", - "spaceAggregation": "sum", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "method--string--tag", - "isColumn": false, - "isJSON": false, - "key": "method", - "type": "tag" - } - ], - "having": { - "expression": "" - }, - "legend": "Value", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "x": 0, + "y": 0, + "width": 2, + "height": 10, + "content": { + "$ref": "#/spec/panels/785bfb21-2012-4e4b-a0b9-bc1e48b6bded" } }, { - "aggregations": [ - { - "metricName": "REST_request_seconds.sum", - "reduceTo": "avg", - "spaceAggregation": "sum", - "temporality": "", - "timeAggregation": "rate" - } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filter": { - "expression": "" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "method--string--tag", - "isColumn": false, - "isJSON": false, - "key": "method", - "type": "tag" - } - ], - "having": { - "expression": "" - }, - "legend": "Total Time", - "limit": null, - "orderBy": [], - "queryName": "C", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" + "x": 2, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/8ededdcd-e0e6-4745-b67f-3634499fd206" } - } - ], - "queryFormulas": [ + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 10, + "content": { + "$ref": "#/spec/panels/2a5b1786-fc4d-4af3-baf4-fbde9ddda42d" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/c933a1d0-bda3-4821-a29a-77fa0a6fd067" + } + }, + { + "x": 2, + "y": 5, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/c35c9632-d46c-4a88-b5fe-3f279fc94c2b" + } + }, { - "disabled": false, - "expression": "A/C", - "legend": "Percent", - "queryName": "F1" + "x": 6, + "y": 5, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd" + } + }, + { + "x": 0, + "y": 10, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/5197947a-1195-4e18-8a24-7c8a34a06f1d" + } + }, + { + "x": 0, + "y": 17, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/68198e34-2036-4be4-ac63-28d5e8ca95bd" + } + }, + { + "x": 6, + "y": 17, + "width": 6, + "height": 8, + "content": { + "$ref": "#/spec/panels/ca13277a-b4f4-4264-93ff-2fa58cb541be" + } } ] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "e828a773-52b8-4d0d-bae1-9ba982ab464d", - "promql": [ - { - "name": "A", - "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", mp_app=~\"$app_name\"}[5m])) by (mp_app)", - "legend": "{{mp_app}}" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total REST Calls all JVM's", - "yAxisUnit": "short" - } - ] + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } } diff --git a/helm/infra-charts/obaas/dashboards/2/helidon_se_details.json b/helm/infra-charts/obaas/dashboards/2/helidon_se_details.json index dbf6f2779..b11e82cc9 100644 --- a/helm/infra-charts/obaas/dashboards/2/helidon_se_details.json +++ b/helm/infra-charts/obaas/dashboards/2/helidon_se_details.json @@ -1,2525 +1,924 @@ { - "description": "Helidon SE Applications Details", - "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", - "layout": [ - { - "h": 10, - "i": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "moved": false, - "static": false, - "w": 2, - "x": 0, - "y": 0 - }, - { - "h": 5, - "i": "8ededdcd-e0e6-4745-b67f-3634499fd206", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 0 - }, - { - "h": 10, - "i": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "moved": false, - "static": false, - "w": 2, - "x": 4, - "y": 0 - }, - { - "h": 5, - "i": "1cd7b8f2-d272-4a15-8f13-6e5f9486cb53", - "moved": false, - "static": false, - "w": 2, - "x": 6, - "y": 0 - }, - { - "h": 5, - "i": "a2ed345f-b534-4166-88f3-5b5bf949fbc8", - "moved": false, - "static": false, - "w": 2, - "x": 8, - "y": 0 - }, - { - "h": 5, - "i": "9a240899-c23c-439b-a612-5c2b6d43c18b", - "moved": false, - "static": false, - "w": 2, - "x": 10, - "y": 0 - }, - { - "h": 5, - "i": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "moved": false, - "static": false, - "w": 2, - "x": 2, - "y": 5 - }, - { - "h": 5, - "i": "eb25667b-7800-4946-ac0d-cea3510ca387", - "moved": false, - "static": false, - "w": 2, - "x": 6, - "y": 5 - }, - { - "h": 5, - "i": "1f2a16c8-b05c-4abf-b444-1a14bd29a160", - "moved": false, - "static": false, - "w": 2, - "x": 8, - "y": 5 - }, - { - "h": 5, - "i": "8f82ecd5-d025-4728-bfaa-fe313d53bc1f", - "moved": false, - "static": false, - "w": 2, - "x": 10, - "y": 5 - }, - { - "h": 3, - "i": "dc0f57f5-c20a-4b18-9308-c588d052ffab", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 10 - }, - { - "h": 5, - "i": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "moved": false, - "static": false, - "w": 6, - "x": 0, - "y": 13 - }, - { - "h": 5, - "i": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "moved": false, - "static": false, - "w": 6, - "x": 6, - "y": 13 - }, - { - "h": 7, - "i": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "moved": false, - "static": false, - "w": 12, - "x": 0, - "y": 18 - } - ], - "panelMap": {}, + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, "tags": [], - "title": "Helidon SE Details", - "uploadedGrafana": false, - "variables": { - "0bacee01-edab-4412-a262-baaf101152a0": { - "allSelected": true, - "customValue": "", - "description": "", - "id": "0bacee01-edab-4412-a262-baaf101152a0", - "key": "0bacee01-edab-4412-a262-baaf101152a0", - "modificationUUID": "525f20af-1a16-4681-af3c-97fadc45b534", - "multiSelect": true, - "name": "namespace", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" + "spec": { + "display": { + "name": "Helidon SE Details", + "description": "Helidon SE Applications Details" }, - "4b06c096-8584-4d86-8f54-9bd38ddf9552": { - "allSelected": true, - "customValue": "", - "description": "", - "id": "4b06c096-8584-4d86-8f54-9bd38ddf9552", - "modificationUUID": "7f19fe8a-7fd8-4f35-a770-faac9248a8a1", - "multiSelect": true, - "name": "app_name", - "order": 0, - "queryValue": "SELECT distinct JSONExtractString(labels, 'app')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')\nand (JSONExtractString(labels, 'kubernetes_namespace') in {{.namespace}})\nand (JSONExtractString(labels, 'mp_app') = '')", - "showALLOption": true, - "sort": "ASC", - "textboxValue": "", - "type": "QUERY" - } - }, - "version": "v4", - "widgets": [ - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "785bfb21-2012-4e4b-a0b9-bc1e48b6bded", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'kubernetes_namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')" } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "5ab83d02-8bf9-40ae-8b62-b31d69a9e71b", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "count(count by (instance) (jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app!~\"^.+$\"}))" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + }, + "name": "namespace" } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "app_name", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'app')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'jvm_uptime_seconds')\nand (JSONExtractString(labels, 'kubernetes_namespace') in {{.namespace}})\nand (JSONExtractString(labels, 'mp_app') = '')" + } + }, + "name": "app_name" } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total SE JVM's", - "yAxisUnit": "short" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "c35c9632-d46c-4a88-b5fe-3f279fc94c2b", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" + } + ], + "panels": { + "1cd7b8f2-d272-4a15-8f13-6e5f9486cb53": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total HTTP Requests Last 1m", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"})-sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"}offset 1m)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "77e91fd7-572b-49f9-b230-3e711a118915", - "promql": [ - { - "name": "A", - "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "memory_maxHeap_bytes" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Available", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + }, + "1f2a16c8-b05c-4abf-b444-1a14bd29a160": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Rate - 5 min", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "last_5_min" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": true, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": true, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "requests_count_total" + } + } } } ], - "queryFormulas": [ - { - "disabled": false, - "expression": "A/B", - "legend": "", - "queryName": "F1" - } - ] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "fb2d045b-5d6f-407a-905b-1b3d7c7b57f4", - "promql": [ - { - "name": "A", - "query": "(sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))/(sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))", - "legend": "" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [ - { - "index": "91738c40-252e-41cc-974d-637119d32791", - "isEditEnabled": false, - "keyIndex": 0, - "selectedGraph": "value", - "thresholdColor": "Red", - "thresholdFormat": "Text", - "thresholdLabel": "", - "thresholdOperator": ">", - "thresholdTableOptions": "A", - "thresholdUnit": "percentunit", - "thresholdValue": 90 - } - ], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Used %", - "yAxisUnit": "percentunit" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": { - "E": "decbytes", - "F": "decbytes", - "F1": "percentunit", - "H": "s" }, - "description": "Total number of instances running this application", - "fillSpans": false, - "id": "dc0f57f5-c20a-4b18-9308-c588d052ffab", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "table", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "thread_count--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "thread_count", - "type": "Gauge" + "2a5b1786-fc4d-4af3-baf4-fbde9ddda42d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used %", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [ + "thresholds": [ { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" + "value": 90, + "operator": "above", + "unit": "percentunit", + "color": "Red", + "format": "text" } - ], - "having": [], - "legend": "Thread Count", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" - } - }, + ] + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_scheduler_pool_size--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_scheduler_pool_size", - "type": "Gauge" - }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "(sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))/(sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } } - ], - "having": [], - "legend": "VT Pool Size", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" } - }, + } + ], + "links": [] + } + }, + "5197947a-1195-4e18-8a24-7c8a34a06f1d": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Requests - All JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/BarChartPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true, + "stackedBarChart": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "vthreads_scheduler_mounted_virtual_thread_count--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "vthreads_scheduler_mounted_virtual_thread_count", - "type": "Gauge" - }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m])) by (app)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "{{app}}" + } } - ], - "having": [], - "legend": "VT Mounted", - "limit": null, - "orderBy": [], - "queryName": "C", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" } - }, - { - "aggregateAttribute": { - "dataType": "float64", - "id": "classloader_loadedClasses_count--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "classloader_loadedClasses_count", - "type": "Gauge" + } + ], + "links": [] + } + }, + "785bfb21-2012-4e4b-a0b9-bc1e48b6bded": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total SE JVM's", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "D", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "short", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" - } - ], - "having": [], - "legend": "Currently Loaded Classes", - "limit": null, - "orderBy": [], - "queryName": "D", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "E", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "count(count by (instance) (jvm_uptime_seconds{kubernetes_namespace=~\"$namespace\",app!=\"\",mp_app!~\"^.+$\"}))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } } - ], - "having": [], - "legend": "Total Heap used", - "limit": null, - "orderBy": [], - "queryName": "E", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" } - }, - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" + } + ], + "links": [] + } + }, + "8ededdcd-e0e6-4745-b67f-3634499fd206": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Used", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "F", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" - } - ], - "having": [], - "legend": "Total Heap Max", - "limit": null, - "orderBy": [], - "queryName": "F", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "gc_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "gc_total", - "type": "Sum" - }, - "aggregateOperator": "increase", - "dataSource": "metrics", - "disabled": false, - "expression": "G", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "memory_usedHeap_bytes" + } } - ], - "having": [], - "legend": "Total GC's", - "limit": null, - "orderBy": [], - "queryName": "G", - "reduceTo": "sum", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "increase", - "filter": { - "expression": "" } - }, - { - "aggregateAttribute": { - "dataType": "float64", - "id": "jvm_uptime_seconds--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "jvm_uptime_seconds", - "type": "Gauge" + } + ], + "links": [] + } + }, + "8f82ecd5-d025-4728-bfaa-fe313d53bc1f": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Rate - 15 min", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "last_15_min" }, - "aggregateOperator": "sum", - "dataSource": "metrics", - "disabled": false, - "expression": "H", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag--false", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "requests_count_total" + } } - ], - "having": [], - "legend": "JVM Uptime", - "limit": null, - "orderBy": [], - "queryName": "H", - "reduceTo": "last", - "spaceAggregation": "avg", - "stepInterval": 60, - "timeAggregation": "sum", - "filter": { - "expression": "" } } ], - "queryFormulas": [ - { - "disabled": false, - "expression": "E/F", - "legend": "Total Heap Used %", - "queryName": "F1" - } - ] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "3baa2ede-75cb-45bd-ae63-7b3bce3b5210", - "promql": [ - { - "name": "A", - "query": "(sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))/(sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))", - "legend": "Total Heap Used %" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Instances", - "yAxisUnit": "s" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "graph", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + }, + "9a240899-c23c-439b-a612-5c2b6d43c18b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total HTTP Requests Last 15m", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Used", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Available", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "avg", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"})-sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"}offset 15m)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "5b99ede4-4ae6-45db-8110-1c80f67086ac", - "promql": [ - { - "name": "A", - "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "Total Heap Used" - }, - { - "name": "B", - "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "Total Heap Available" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Memory Usage", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": { - "A": "decbytes", - "B": "decbytes", - "C": "decbytes", - "D": "decbytes" }, - "description": "", - "fillSpans": false, - "id": "c933a1d0-bda3-4821-a29a-77fa0a6fd067", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "table", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + "a2ed345f-b534-4166-88f3-5b5bf949fbc8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total HTTP Requests Last 5m", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Used Last", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "B", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Available Last", - "limit": null, - "orderBy": [], - "queryName": "B", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"})-sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"}offset 5m)", + "disabled": false, + "step": 0, + "stats": false, + "legend": "" + } + } } - }, - { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" + } + ], + "links": [] + } + }, + "c35c9632-d46c-4a88-b5fe-3f279fc94c2b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Total Heap Available", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "C", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Used Max", - "limit": null, - "orderBy": [], - "queryName": "C", - "reduceTo": "max", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" - } - }, + "thresholds": null + } + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_maxHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_maxHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "max", - "dataSource": "metrics", - "disabled": false, - "expression": "D", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "Total Heap Available Max", - "limit": null, - "orderBy": [], - "queryName": "D", - "reduceTo": "max", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "max", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "memory_maxHeap_bytes" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "57c01b83-cba1-4aba-a015-2ef464a24c74", - "promql": [ - { - "name": "A", - "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "Total Heap Used Last" - }, - { - "name": "B", - "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "Total Heap Available Last" - }, - { - "name": "C", - "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "Total Heap Used Max" - }, - { - "name": "D", - "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "Total Heap Available Max" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Memory Usage", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "contextLinks": { - "linksData": [] }, - "customLegendColors": {}, - "description": "", - "fillSpans": true, - "id": "5197947a-1195-4e18-8a24-7c8a34a06f1d", - "isLogScale": false, - "isStacked": false, - "legendPosition": "bottom", - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "bar", - "query": { - "builder": { - "queryData": [ - { - "aggregations": [ - { - "metricName": "requests_count_total", - "reduceTo": "avg", - "spaceAggregation": "sum", - "timeAggregation": "increase" + "c933a1d0-bda3-4821-a29a-77fa0a6fd067": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" } - ], - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filter": { - "expression": "" }, - "functions": [], - "groupBy": [ - { - "dataType": "string", - "id": "app--string--tag", - "isColumn": false, - "isJSON": false, - "key": "app", - "type": "tag" - } - ], - "having": { - "expression": "" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "legend": "{{app}}", - "limit": null, - "orderBy": [], - "queryName": "A", - "source": "", - "stepInterval": 60, - "filters": { - "items": [], - "op": "AND" - } + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "cda51667-d71b-4fd8-8a65-2f92ed427493", - "promql": [ - { - "name": "A", - "query": "sum(increase(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m])) by (app)", - "legend": "{{app}}" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "HTTP Requests - All JVM's", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "8ededdcd-e0e6-4745-b67f-3634499fd206", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "memory_usedHeap_bytes--float64--Gauge--true", - "isColumn": true, - "isJSON": false, - "key": "memory_usedHeap_bytes", - "type": "Gauge" - }, - "aggregateOperator": "latest", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "latest", - "filter": { - "expression": "" + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used Last" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Available Last" + } + }, + { + "type": "promql", + "spec": { + "name": "C", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used Max" + } + }, + { + "type": "promql", + "spec": { + "name": "D", + "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Available Max" + } + } + ] + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "16553b54-83bb-4a8c-a1f0-05563b4031c1", - "promql": [ - { - "name": "A", - "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", - "legend": "memory_usedHeap_bytes" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total Heap Used", - "yAxisUnit": "decbytes" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "eb25667b-7800-4946-ac0d-cea3510ca387", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "requests_count_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "requests_count_total", - "type": "Sum" + }, + "dc0f57f5-c20a-4b18-9308-c588d052ffab": { + "kind": "Panel", + "spec": { + "display": { + "name": "Instances", + "description": "Total number of instances running this application" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "s", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate", - "filter": { - "expression": "" - } + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "a50e666c-2f90-4298-8a60-93952a8f2703", - "promql": [ - { - "name": "A", - "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m]))", - "legend": "requests_count_total" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "HTTP Rate - 1 min", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "1f2a16c8-b05c-4abf-b444-1a14bd29a160", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "requests_count_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "requests_count_total", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate", - "filter": { - "expression": "" + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "(sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))/(sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used %" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "07114d38-6e13-4c89-ba87-3699549a4d56", - "promql": [ - { - "name": "A", - "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m]))", - "legend": "requests_count_total" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "LAST_5_MIN", - "title": "HTTP Rate - 5 min", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "8f82ecd5-d025-4728-bfaa-fe313d53bc1f", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "requests_count_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "requests_count_total", - "type": "Sum" + }, + "eb25667b-7800-4946-ac0d-cea3510ca387": { + "kind": "Panel", + "spec": { + "display": { + "name": "HTTP Rate - 1 min", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "formatting": { + "unit": "none", + "decimalPrecision": "2" }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate", - "filter": { - "expression": "" - } + "thresholds": null } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "4a4622a2-bedd-4216-b72a-24f5b9a614a8", - "promql": [ - { - "name": "A", - "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m]))", - "legend": "requests_count_total" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "LAST_15_MIN", - "title": "HTTP Rate - 15 min", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "1cd7b8f2-d272-4a15-8f13-6e5f9486cb53", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ + }, + "queries": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "requests_count_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "requests_count_total", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate", - "filter": { - "expression": "" + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/PromQLQuery", + "spec": { + "name": "A", + "query": "sum(rate(requests_count_total{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"}[5m]))", + "disabled": false, + "step": 0, + "stats": false, + "legend": "requests_count_total" + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "59c194c4-d3ec-4abf-a15b-eecd4d08f425", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"})-sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"}offset 1m)" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + "links": [] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total HTTP Requests Last 1m", - "yAxisUnit": "none" - }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "a2ed345f-b534-4166-88f3-5b5bf949fbc8", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ - { - "aggregateAttribute": { - "dataType": "float64", - "id": "requests_count_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "requests_count_total", - "type": "Sum" + }, + "f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate", - "filter": { - "expression": "" + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "promql", + "spec": { + "name": "A", + "query": "sum(memory_usedHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Used" + } + }, + { + "type": "promql", + "spec": { + "name": "B", + "query": "sum(memory_maxHeap_bytes{kubernetes_namespace=~\"$namespace\", app=~\"$app_name\", mp_app!~\"^.+$\"})", + "disabled": false, + "step": 0, + "stats": false, + "legend": "Total Heap Available" + } + } + ] + } + } } } ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "3282acab-dbb5-4afb-8cc2-53d02c176f0b", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"})-sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"}offset 5m)" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" + "links": [] } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" - } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total HTTP Requests Last 5m", - "yAxisUnit": "none" + } }, - { - "bucketCount": 30, - "bucketWidth": 0, - "columnUnits": {}, - "description": "", - "fillSpans": false, - "id": "9a240899-c23c-439b-a612-5c2b6d43c18b", - "isStacked": false, - "mergeAllActiveQueries": false, - "nullZeroValues": "zero", - "opacity": "1", - "panelTypes": "value", - "query": { - "builder": { - "queryData": [ + "layouts": [ + { + "kind": "Grid", + "spec": { + "items": [ { - "aggregateAttribute": { - "dataType": "float64", - "id": "requests_count_total--float64--Sum--true", - "isColumn": true, - "isJSON": false, - "key": "requests_count_total", - "type": "Sum" - }, - "aggregateOperator": "rate", - "dataSource": "metrics", - "disabled": false, - "expression": "A", - "filters": { - "items": [], - "op": "AND" - }, - "functions": [], - "groupBy": [], - "having": [], - "legend": "", - "limit": null, - "orderBy": [], - "queryName": "A", - "reduceTo": "last", - "spaceAggregation": "sum", - "stepInterval": 60, - "timeAggregation": "rate", - "filter": { - "expression": "" + "x": 0, + "y": 0, + "width": 2, + "height": 10, + "content": { + "$ref": "#/spec/panels/785bfb21-2012-4e4b-a0b9-bc1e48b6bded" + } + }, + { + "x": 2, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/8ededdcd-e0e6-4745-b67f-3634499fd206" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 10, + "content": { + "$ref": "#/spec/panels/2a5b1786-fc4d-4af3-baf4-fbde9ddda42d" + } + }, + { + "x": 6, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/1cd7b8f2-d272-4a15-8f13-6e5f9486cb53" + } + }, + { + "x": 8, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/a2ed345f-b534-4166-88f3-5b5bf949fbc8" + } + }, + { + "x": 10, + "y": 0, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/9a240899-c23c-439b-a612-5c2b6d43c18b" + } + }, + { + "x": 2, + "y": 5, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/c35c9632-d46c-4a88-b5fe-3f279fc94c2b" + } + }, + { + "x": 6, + "y": 5, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/eb25667b-7800-4946-ac0d-cea3510ca387" + } + }, + { + "x": 8, + "y": 5, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/1f2a16c8-b05c-4abf-b444-1a14bd29a160" + } + }, + { + "x": 10, + "y": 5, + "width": 2, + "height": 5, + "content": { + "$ref": "#/spec/panels/8f82ecd5-d025-4728-bfaa-fe313d53bc1f" + } + }, + { + "x": 0, + "y": 10, + "width": 12, + "height": 3, + "content": { + "$ref": "#/spec/panels/dc0f57f5-c20a-4b18-9308-c588d052ffab" + } + }, + { + "x": 0, + "y": 13, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/f0c7223e-a9f1-4bb5-9129-eae3b30a4bbd" + } + }, + { + "x": 6, + "y": 13, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/c933a1d0-bda3-4821-a29a-77fa0a6fd067" + } + }, + { + "x": 0, + "y": 18, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/5197947a-1195-4e18-8a24-7c8a34a06f1d" } } - ], - "queryFormulas": [] - }, - "clickhouse_sql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "" - } - ], - "id": "b780999b-485f-4f91-b48b-b457a2f01626", - "promql": [ - { - "disabled": false, - "legend": "", - "name": "A", - "query": "sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"})-sum(requests_count_total{kubernetes_namespace=~\"$namespace\",app=~\"$app_name\",mp_app!~\"^.+$\"}offset 15m)" - } - ], - "queryType": "promql" - }, - "selectedLogFields": [ - { - "dataType": "string", - "name": "body", - "type": "" - }, - { - "dataType": "string", - "name": "timestamp", - "type": "" - } - ], - "selectedTracesFields": [ - { - "dataType": "string", - "id": "serviceName--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "serviceName", - "type": "tag" - }, - { - "dataType": "string", - "id": "name--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "name", - "type": "tag" - }, - { - "dataType": "float64", - "id": "durationNano--float64--tag--true", - "isColumn": true, - "isJSON": false, - "key": "durationNano", - "type": "tag" - }, - { - "dataType": "string", - "id": "httpMethod--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "httpMethod", - "type": "tag" - }, - { - "dataType": "string", - "id": "responseStatusCode--string--tag--true", - "isColumn": true, - "isJSON": false, - "key": "responseStatusCode", - "type": "tag" + ] } - ], - "softMax": 0, - "softMin": 0, - "stackedBarChart": false, - "thresholds": [], - "timePreferance": "GLOBAL_TIME", - "title": "Total HTTP Requests Last 15m", - "yAxisUnit": "none" - } - ], - "uuid": "0199715e-b200-7bfb-9aca-39bddd0c9174" -} \ No newline at end of file + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/kafka-metrics.json b/helm/infra-charts/obaas/dashboards/2/kafka-metrics.json index 941e48bcb..fdbe6d50f 100644 --- a/helm/infra-charts/obaas/dashboards/2/kafka-metrics.json +++ b/helm/infra-charts/obaas/dashboards/2/kafka-metrics.json @@ -1 +1,633 @@ -{"description": "", "image": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K", "layout": [{"h": 1, "i": "7b7bc5a5-8653-4b3b-a527-2c648185bde6", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 0}, {"h": 6, "i": "cb5124cc-f0db-4889-9745-2f8fcee49fc0", "moved": false, "static": false, "w": 6, "x": 0, "y": 1}, {"h": 6, "i": "2b4493f6-0e2a-4f8a-b8c3-d77162d0ca6f", "moved": false, "static": false, "w": 6, "x": 6, "y": 1}, {"h": 1, "i": "76c27078-977f-4a5c-8695-bfb2f2497a07", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 7}, {"h": 6, "i": "3f8cf4a1-34f0-4744-a36a-6fe5ea2bb0f3", "moved": false, "static": false, "w": 12, "x": 0, "y": 8}, {"h": 1, "i": "ad01ff47-b945-4c88-a727-e239fbf05d86", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 14}, {"h": 6, "i": "37e77920-5165-4db0-a658-18bb05dff4a9", "moved": false, "static": false, "w": 6, "x": 0, "y": 15}, {"h": 6, "i": "fee7d6aa-85b3-4903-938c-2a6c4c8720c6", "moved": false, "static": false, "w": 6, "x": 6, "y": 15}, {"h": 6, "i": "d7b612cc-efee-4250-9901-44712309a706", "moved": false, "static": false, "w": 6, "x": 0, "y": 21}, {"h": 6, "i": "1cbe9083-9b5f-4165-b3d0-1470c94d665a", "moved": false, "static": false, "w": 6, "x": 6, "y": 21}, {"h": 6, "i": "f3585b4d-8918-4fed-9eb3-c58aa08b741f", "moved": false, "static": false, "w": 6, "x": 0, "y": 27}, {"h": 1, "i": "e0fbd454-c8ec-434a-b901-c562684ec069", "maxH": 1, "minH": 1, "minW": 12, "moved": false, "static": false, "w": 12, "x": 0, "y": 33}, {"h": 6, "i": "df222531-8d3b-4bb6-82b0-40c8a7f0a93e", "moved": false, "static": false, "w": 6, "x": 0, "y": 34}, {"h": 6, "i": "28073514-ba5d-4c5d-a50f-c875cbb2dde5", "moved": false, "static": false, "w": 6, "x": 6, "y": 34}, {"h": 6, "i": "6b1202f0-9eb9-41db-b512-2376dd7c629b", "moved": false, "static": false, "w": 6, "x": 0, "y": 40}, {"h": 6, "i": "4d362111-b037-41ad-b8cf-29e8ef22a3ad", "moved": false, "static": false, "w": 6, "x": 6, "y": 40}, {"h": 6, "i": "be1e2b30-6d2f-44f5-9db4-792104fec784", "moved": false, "static": false, "w": 6, "x": 0, "y": 46}, {"h": 6, "i": "db8b4360-50c2-4124-9ac5-1ff370142527", "moved": false, "static": false, "w": 6, "x": 6, "y": 46}], "panelMap": {"76c27078-977f-4a5c-8695-bfb2f2497a07": {"collapsed": false, "widgets": [{"h": 6, "i": "3f8cf4a1-34f0-4744-a36a-6fe5ea2bb0f3", "moved": false, "static": false, "w": 12, "x": 0, "y": 56}]}, "7b7bc5a5-8653-4b3b-a527-2c648185bde6": {"collapsed": false, "widgets": [{"h": 6, "i": "cb5124cc-f0db-4889-9745-2f8fcee49fc0", "moved": false, "static": false, "w": 6, "x": 0, "y": 1}, {"h": 6, "i": "2b4493f6-0e2a-4f8a-b8c3-d77162d0ca6f", "moved": false, "static": false, "w": 6, "x": 6, "y": 1}]}, "ad01ff47-b945-4c88-a727-e239fbf05d86": {"collapsed": false, "widgets": [{"h": 6, "i": "37e77920-5165-4db0-a658-18bb05dff4a9", "moved": false, "static": false, "w": 6, "x": 0, "y": 127}, {"h": 6, "i": "fee7d6aa-85b3-4903-938c-2a6c4c8720c6", "moved": false, "static": false, "w": 6, "x": 6, "y": 127}, {"h": 6, "i": "d7b612cc-efee-4250-9901-44712309a706", "moved": false, "static": false, "w": 6, "x": 0, "y": 133}, {"h": 6, "i": "1cbe9083-9b5f-4165-b3d0-1470c94d665a", "moved": false, "static": false, "w": 6, "x": 6, "y": 133}, {"h": 6, "i": "f3585b4d-8918-4fed-9eb3-c58aa08b741f", "moved": false, "static": false, "w": 6, "x": 0, "y": 139}]}, "e0fbd454-c8ec-434a-b901-c562684ec069": {"collapsed": false, "widgets": [{"h": 6, "i": "df222531-8d3b-4bb6-82b0-40c8a7f0a93e", "moved": false, "static": false, "w": 6, "x": 0, "y": 42}, {"h": 6, "i": "28073514-ba5d-4c5d-a50f-c875cbb2dde5", "moved": false, "static": false, "w": 6, "x": 6, "y": 42}, {"h": 6, "i": "6b1202f0-9eb9-41db-b512-2376dd7c629b", "moved": false, "static": false, "w": 6, "x": 0, "y": 48}, {"h": 6, "i": "4d362111-b037-41ad-b8cf-29e8ef22a3ad", "moved": false, "static": false, "w": 6, "x": 6, "y": 48}, {"h": 6, "i": "be1e2b30-6d2f-44f5-9db4-792104fec784", "moved": false, "static": false, "w": 6, "x": 0, "y": 54}, {"h": 6, "i": "db8b4360-50c2-4124-9ac5-1ff370142527", "moved": false, "static": false, "w": 6, "x": 6, "y": 54}]}}, "tags": [], "title": "Kafka Server Monitoring Dashboard", "uploadedGrafana": false, "variables": {}, "version": "v5", "widgets": [{"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Total number of active brokers in the Kafka cluster.\n", "fillSpans": false, "id": "cb5124cc-f0db-4889-9745-2f8fcee49fc0", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_controller_kafkacontroller_activebrokercount", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [{"args": [], "name": "absolute"}], "groupBy": [], "having": {"expression": ""}, "legend": "Active Brokers", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.brokers'\nGROUP BY time\nORDER BY time ASC\n"}], "id": "0f67f0c4-d1d7-401a-b546-7c1be53c5692", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Broker Count", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Total count of of topics in Kafka cluster", "fillSpans": false, "id": "3f8cf4a1-34f0-4744-a36a-6fe5ea2bb0f3", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_controller_kafkacontroller_globaltopiccount", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "sum"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "Topic Count", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n count(distinct t.attrs['topic']) as value\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.topic.partitions'\nGROUP BY time\nORDER BY time ASC\n\n"}], "id": "3116b474-8a6b-409c-9e28-b3263aa7d40e", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Topic Count", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Number of partitions", "fillSpans": false, "id": "37e77920-5165-4db0-a658-18bb05dff4a9", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_controller_kafkacontroller_globalpartitioncount", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "sum"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "Partitions", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.topic.partitions'\nGROUP BY time\nORDER BY time ASC\n"}], "id": "63678332-c88e-4006-8201-0f5af60c8ef2", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Partition Count", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Current offset of each partition, showing the latest position in each partition", "fillSpans": false, "id": "fee7d6aa-85b3-4903-938c-2a6c4c8720c6", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_log_log_logendoffset", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.partition.current_offset'\nGROUP BY time\nORDER BY time ASC\n"}], "id": "87d2bbc9-0065-4c9f-a1f5-6a6f1a415294", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Current Offset ( Partition )", "yAxisUnit": "none"}, {"description": "", "id": "7b7bc5a5-8653-4b3b-a527-2c648185bde6", "panelTypes": "row", "title": "Broker Metrics"}, {"description": "", "id": "6462f39b-cd04-49e3-8d0c-7cbb888d80df", "panelTypes": "row", "title": "Consumer Metrics"}, {"description": "", "id": "76c27078-977f-4a5c-8695-bfb2f2497a07", "panelTypes": "row", "title": "Topic Metrics"}, {"description": "", "id": "ad01ff47-b945-4c88-a727-e239fbf05d86", "panelTypes": "row", "title": "Partition Metrics"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "Rate of messages produced to each topic per second, from Kafka broker JMX metrics.", "fillSpans": false, "id": "5226b8bf-403d-4d3d-98a5-fe41704e7dc7", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "kafka_partition_oldest_offset", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag--false", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag--false", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "stepInterval": 60}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "{{name}}", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n t.attrs['topic'] as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka_server_brokertopicmetrics_messagesinpersec_total'\n AND t.attrs['app'] = 'obaas-kafka-cluster'\n AND has(mapKeys(t.attrs), 'topic')\nGROUP BY time, name\nORDER BY time ASC\n"}], "id": "c06aa804-8dcb-4c1b-be4b-3119db6862ec", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Messages In/sec (by Topic)", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "Broker-level network throughput: bytes produced in and fetched out per second.", "fillSpans": false, "id": "91209f84-2d75-4b6a-8776-1ec1cf18d402", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "kafka_partition_oldest_offset", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag--false", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag--false", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "stepInterval": 60}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "Bytes In", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n sum(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_server_brokertopicmetrics_bytesinpersec_total'\nGROUP BY time ORDER BY time ASC\n"}, {"disabled": false, "legend": "Bytes Out", "name": "B", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n sum(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_server_brokertopicmetrics_bytesoutpersec_total'\nGROUP BY time ORDER BY time ASC\n"}], "id": "73a3d412-b9c1-4e71-ae75-6e5734bd2707", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "bytes"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Bytes In/Out per sec", "yAxisUnit": "bytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Number of replicas for each partition, indicating replication status", "fillSpans": false, "id": "f3585b4d-8918-4fed-9eb3-c58aa08b741f", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_cluster_partition_replicascount", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.partition.replicas'\nGROUP BY time, name\nORDER BY time ASC\n"}], "id": "dbb1168c-1bca-4ffc-89dd-89a6cf9c4e2c", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Replicas per Partition", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "Cluster health: partitions with fewer in-sync replicas than expected, and partitions with no active leader. Both should read 0 in a healthy cluster.", "fillSpans": false, "id": "8a9d8b1e-e210-4134-ac51-a83b5119bf12", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "kafka_partition_replicas_in_sync", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag--false", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag--false", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "stepInterval": 60}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "Under-Replicated Partitions", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n max(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_server_replicamanager_underreplicatedpartitions'\nGROUP BY time ORDER BY time ASC\n"}, {"disabled": false, "legend": "Offline Partitions", "name": "B", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n max(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_controller_kafkacontroller_offlinepartitionscount'\nGROUP BY time ORDER BY time ASC\n"}], "id": "f0940b6f-aa46-4318-9e95-af18fc2f7a03", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Under-Replicated / Offline Partitions", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Count of in-sync replicas for each partition to ensure data availability.", "fillSpans": false, "id": "1cbe9083-9b5f-4165-b3d0-1470c94d665a", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_cluster_partition_insyncreplicascount", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.partition.replicas_in_sync'\nGROUP BY time, name\nORDER BY time ASC\n"}], "id": "f0dfdcd3-d3a6-4ed1-8dc8-9e6d66d7a9ff", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "In-Sync Replicas (ISR)", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Oldest offset of each partition to identify log retention and offset range.", "fillSpans": false, "id": "d7b612cc-efee-4250-9901-44712309a706", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_log_log_logstartoffset", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [{"dataType": "string", "id": "topic--string--tag", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.partition.oldest_offset'\nGROUP BY time, name\nORDER BY time ASC\n"}], "id": "f40284d8-0476-4bc6-86f0-24bbd7857ed1", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Oldest Offset (Partition)", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "description": "Number of active members in each consumer group.", "fillSpans": false, "id": "b61d3aab-cf6e-4bd0-a546-6e4c6a1811de", "isStacked": false, "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregations": [{"metricName": "kafka_consumer_group_lag", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "functions": [], "groupBy": [{"dataType": "string", "id": "group--string--tag--false", "isColumn": false, "isJSON": false, "key": "group", "type": "tag"}, {"dataType": "string", "id": "topic--string--tag--false", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}, {"dataType": "string", "id": "partition--string--tag--false", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "stepInterval": 60}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.consumer_group.members'\nGROUP BY time ORDER BY time ASC\n"}], "id": "92455fce-f8da-4746-99d4-beece02dc9f0", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Consumer Group Members", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Lag per consumer group", "fillSpans": false, "id": "2b4493f6-0e2a-4f8a-b8c3-d77162d0ca6f", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_fetcherlagmetrics_consumerlag", "reduceTo": "avg", "spaceAggregation": "avg", "temporality": null, "timeAggregation": "avg"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [{"dataType": "string", "id": "partition--string--tag", "isColumn": false, "isJSON": false, "key": "partition", "type": "tag"}, {"dataType": "string", "id": "topic--string--tag", "isColumn": false, "isJSON": false, "key": "topic", "type": "tag"}], "having": {"expression": ""}, "legend": "", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "", "name": "A", "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.consumer_group.lag'\nGROUP BY time\nORDER BY time ASC\n\n"}], "id": "5bc15e80-4820-47a1-841d-862732b6bd31", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": ""}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Consumer Lag", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "p99 request handling latency in milliseconds for the two hottest request types.", "fillSpans": false, "id": "df222531-8d3b-4bb6-82b0-40c8a7f0a93e", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_brokertopicmetrics_messagesinpersec_total", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "Produce p99", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "Produce p99", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka_network_requestmetrics_totaltimems.quantile'\n AND t.attrs['request'] = 'Produce' AND t.attrs['quantile'] = '0.99'\nGROUP BY time ORDER BY time ASC\n"}, {"disabled": false, "legend": "Fetch p99", "name": "B", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka_network_requestmetrics_totaltimems.quantile'\n AND t.attrs['request'] = 'FetchConsumer' AND t.attrs['quantile'] = '0.99'\nGROUP BY time ORDER BY time ASC\n"}], "id": "403564b3-f4c3-423e-8ada-55fb9d215ac7", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "ms"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Request Latency p99 (Produce / Fetch)", "yAxisUnit": "ms"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Rate of failed produce and fetch requests \u2014 should stay at 0 in a healthy cluster.", "fillSpans": false, "id": "28073514-ba5d-4c5d-a50f-c875cbb2dde5", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_brokertopicmetrics_messagesinpersec_total", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "Failed Produce", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "Failed Produce", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n sum(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_server_brokertopicmetrics_failedproducerequestspersec_total'\nGROUP BY time ORDER BY time ASC\n"}, {"disabled": false, "legend": "Failed Fetch", "name": "B", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n sum(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_server_brokertopicmetrics_failedfetchrequestspersec_total'\nGROUP BY time ORDER BY time ASC\n"}], "id": "97148d7d-dc29-492f-ad61-de45b00acbba", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "none"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Failed Produce/Fetch Requests per sec", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Should be exactly 1 across the whole cluster \u2014 0 means no controller (cluster stuck), >1 means split-brain.", "fillSpans": false, "id": "6b1202f0-9eb9-41db-b512-2376dd7c629b", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_brokertopicmetrics_messagesinpersec_total", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "Active Controllers", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "Active Controllers", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n sum(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka_controller_kafkacontroller_activecontrollercount'\nGROUP BY time ORDER BY time ASC\n"}], "id": "8d0b59cf-e2b1-43fb-a9f0-a012527c5ba2", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "none"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Active Controller Count", "yAxisUnit": "none"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "On-disk log size per topic partition, in bytes.", "fillSpans": false, "id": "4d362111-b037-41ad-b8cf-29e8ef22a3ad", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_brokertopicmetrics_messagesinpersec_total", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "{{name}}", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka_log_log_size'\nGROUP BY time, name ORDER BY time ASC\n"}], "id": "60e17ff8-823b-4155-9e62-7f8f01cdf67e", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "bytes"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Per-Partition Log Size", "yAxisUnit": "bytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "JVM heap memory used per Kafka broker pod.", "fillSpans": false, "id": "be1e2b30-6d2f-44f5-9db4-792104fec784", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_brokertopicmetrics_messagesinpersec_total", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "{{name}}", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n t.attrs['kubernetes_pod_name'] as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'jvm_memory_used_bytes'\n AND t.attrs['app'] = 'obaas-kafka-cluster' AND t.attrs['area'] = 'heap'\nGROUP BY time, name ORDER BY time ASC\n"}], "id": "eba2c4a9-539b-490b-9f36-d025fff5c5f7", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "bytes"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Broker JVM Heap Used", "yAxisUnit": "bytes"}, {"bucketCount": 30, "bucketWidth": 0, "columnUnits": {}, "contextLinks": {"linksData": []}, "customLegendColors": {}, "decimalPrecision": 2, "description": "Process CPU time consumed per Kafka broker pod (cumulative seconds \u2014 rate over time reflects load).", "fillSpans": false, "id": "db8b4360-50c2-4124-9ac5-1ff370142527", "isLogScale": false, "isStacked": false, "legendPosition": "bottom", "mergeAllActiveQueries": false, "nullZeroValues": "zero", "opacity": "1", "panelTypes": "graph", "query": {"builder": {"queryData": [{"aggregateAttribute": {"dataType": "", "id": "----", "key": "", "type": ""}, "aggregateOperator": "count", "aggregations": [{"metricName": "kafka_server_brokertopicmetrics_messagesinpersec_total", "reduceTo": "avg", "spaceAggregation": "sum", "temporality": null, "timeAggregation": "latest"}], "dataSource": "metrics", "disabled": false, "expression": "A", "filter": {"expression": ""}, "filters": {"items": [], "op": "AND"}, "functions": [], "groupBy": [], "having": {"expression": ""}, "legend": "{{name}}", "limit": null, "orderBy": [], "queryName": "A", "reduceTo": "avg", "source": "", "spaceAggregation": "sum", "stepInterval": 60, "timeAggregation": "rate"}], "queryFormulas": []}, "clickhouse_sql": [{"disabled": false, "legend": "{{name}}", "name": "A", "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n t.attrs['kubernetes_pod_name'] as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'process_cpu_seconds_total'\n AND t.attrs['kubernetes_pod_name'] LIKE 'obaas-kafka-cluster%'\nGROUP BY time, name ORDER BY time ASC\n"}], "id": "e27d156b-26c0-404f-b90f-8a3d25a7bb04", "promql": [{"disabled": false, "legend": "", "name": "A", "query": ""}], "queryType": "clickhouse_sql", "unit": "none"}, "selectedLogFields": [{"dataType": "string", "name": "body", "type": ""}, {"dataType": "string", "name": "timestamp", "type": ""}], "selectedTracesFields": [{"dataType": "string", "id": "serviceName--string--tag--true", "isColumn": true, "isJSON": false, "key": "serviceName", "type": "tag"}, {"dataType": "string", "id": "name--string--tag--true", "isColumn": true, "isJSON": false, "key": "name", "type": "tag"}, {"dataType": "float64", "id": "durationNano--float64--tag--true", "isColumn": true, "isJSON": false, "key": "durationNano", "type": "tag"}, {"dataType": "string", "id": "httpMethod--string--tag--true", "isColumn": true, "isJSON": false, "key": "httpMethod", "type": "tag"}, {"dataType": "string", "id": "responseStatusCode--string--tag--true", "isColumn": true, "isJSON": false, "key": "responseStatusCode", "type": "tag"}], "softMax": 0, "softMin": 0, "stackedBarChart": false, "thresholds": [], "timePreferance": "GLOBAL_TIME", "title": "Broker CPU Usage", "yAxisUnit": "none"}], "uuid": "019d8dd5-805c-7947-8c0a-f62e56eede80"} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "Kafka Server Monitoring Dashboard", + "description": "" + }, + "variables": [], + "panels": { + "1cbe9083-9b5f-4165-b3d0-1470c94d665a": { + "kind": "Panel", + "spec": { + "display": { + "name": "In-Sync Replicas (ISR)", + "description": "Count of in-sync replicas for each partition to ensure data availability." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.partition.replicas_in_sync'\nGROUP BY time, name\nORDER BY time ASC\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "2b4493f6-0e2a-4f8a-b8c3-d77162d0ca6f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Consumer Lag", + "description": "Lag per consumer group" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.consumer_group.lag'\nGROUP BY time\nORDER BY time ASC\n\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "37e77920-5165-4db0-a658-18bb05dff4a9": { + "kind": "Panel", + "spec": { + "display": { + "name": "Partition Count", + "description": "Number of partitions" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.topic.partitions'\nGROUP BY time\nORDER BY time ASC\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "3f8cf4a1-34f0-4744-a36a-6fe5ea2bb0f3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Topic Count", + "description": "Total count of of topics in Kafka cluster" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n count(distinct t.attrs['topic']) as value\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.topic.partitions'\nGROUP BY time\nORDER BY time ASC\n\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "cb5124cc-f0db-4889-9745-2f8fcee49fc0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Broker Count", + "description": "Total number of active brokers in the Kafka cluster.\n" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.brokers'\nGROUP BY time\nORDER BY time ASC\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "d7b612cc-efee-4250-9901-44712309a706": { + "kind": "Panel", + "spec": { + "display": { + "name": "Oldest Offset (Partition)", + "description": "Oldest offset of each partition to identify log retention and offset range." + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.partition.oldest_offset'\nGROUP BY time, name\nORDER BY time ASC\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "f3585b4d-8918-4fed-9eb3-c58aa08b741f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Replicas per Partition", + "description": "Number of replicas for each partition, indicating replication status" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT\n toStartOfMinute(fromUnixTimestamp64Milli(s.unix_milli)) as time,\n avg(s.value) as value,\n concat(t.attrs['topic'], ' [P', t.attrs['partition'], ']') as name\nFROM signoz_metrics.distributed_samples_v4 AS s\nINNER JOIN signoz_metrics.distributed_time_series_v4 AS t ON s.fingerprint = t.fingerprint\nWHERE s.metric_name = 'kafka.partition.replicas'\nGROUP BY time, name\nORDER BY time ASC\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "fee7d6aa-85b3-4903-938c-2a6c4c8720c6": { + "kind": "Panel", + "spec": { + "display": { + "name": "Current Offset ( Partition )", + "description": "Current offset of each partition, showing the latest position in each partition" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/ClickHouseSQL", + "spec": { + "name": "A", + "query": "SELECT \n toStartOfMinute(fromUnixTimestamp64Milli(unix_milli)) as time,\n avg(value) as value\nFROM signoz_metrics.distributed_samples_v4\nWHERE metric_name = 'kafka.partition.current_offset'\nGROUP BY time\nORDER BY time ASC\n", + "disabled": false, + "legend": "" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Broker Metrics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/cb5124cc-f0db-4889-9745-2f8fcee49fc0" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Consumer Metrics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 7, + "content": { + "$ref": "#/spec/panels/2b4493f6-0e2a-4f8a-b8c3-d77162d0ca6f" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Topic Metrics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/3f8cf4a1-34f0-4744-a36a-6fe5ea2bb0f3" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Partition Metrics", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/37e77920-5165-4db0-a658-18bb05dff4a9" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/fee7d6aa-85b3-4903-938c-2a6c4c8720c6" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/d7b612cc-efee-4250-9901-44712309a706" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/1cbe9083-9b5f-4165-b3d0-1470c94d665a" + } + }, + { + "x": 0, + "y": 12, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/f3585b4d-8918-4fed-9eb3-c58aa08b741f" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/kube-state-metrics-v2.json b/helm/infra-charts/obaas/dashboards/2/kube-state-metrics-v2.json index ac0618776..4ac116fd4 100644 --- a/helm/infra-charts/obaas/dashboards/2/kube-state-metrics-v2.json +++ b/helm/infra-charts/obaas/dashboards/2/kube-state-metrics-v2.json @@ -1 +1,4347 @@ -{"description":"","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":1,"i":"24e065d5-b4fb-4502-93cd-da1f91265491","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":0},{"h":5,"i":"165f2f3d-83f6-4eeb-a508-db8cc011c0c7","moved":false,"static":false,"w":4,"x":0,"y":1},{"h":5,"i":"17a7ab91-7f2b-4fea-b86e-a8d9ff6059b6","moved":false,"static":false,"w":4,"x":4,"y":1},{"h":5,"i":"0da192fc-9ffe-426f-836f-2e7e891f4276","moved":false,"static":false,"w":4,"x":8,"y":1},{"h":6,"i":"6c3f0fbd-2c82-42d1-8a22-daac29017434","moved":false,"static":false,"w":4,"x":0,"y":6},{"h":6,"i":"1cfaff87-5f9e-42c3-ab5e-489dfa59e91f","moved":false,"static":false,"w":4,"x":4,"y":6},{"h":6,"i":"bc402120-393c-4858-9e81-2f04990f077e","moved":false,"static":false,"w":4,"x":8,"y":6},{"h":1,"i":"56d0d000-03a4-4a24-8265-bab844824d0b","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":12},{"h":5,"i":"8cbc9117-811d-4de7-8401-75b906a993cd","moved":false,"static":false,"w":3,"x":0,"y":13},{"h":5,"i":"7b5a9363-df90-4455-a9ec-7e8b6c3d3e8a","moved":false,"static":false,"w":3,"x":3,"y":13},{"h":5,"i":"74749ef1-cabd-4eff-a061-66795f06a2a4","moved":false,"static":false,"w":3,"x":6,"y":13},{"h":5,"i":"e1d2da44-4101-48ca-84b7-0460eb493c46","moved":false,"static":false,"w":3,"x":9,"y":13},{"h":5,"i":"91cce91c-1272-40bb-a27f-9a69431f5edd","moved":false,"static":false,"w":6,"x":0,"y":18},{"h":5,"i":"40eae720-25ca-40b6-94db-d598687681e2","moved":false,"static":false,"w":6,"x":6,"y":18},{"h":1,"i":"12d77490-362a-4052-b85d-0a293938debf","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":23},{"h":5,"i":"4aef072d-56e9-4947-ae92-04e0d772f9c8","moved":false,"static":false,"w":3,"x":0,"y":24},{"h":5,"i":"ae432b34-3bd0-45cc-8b68-1c23392712e9","moved":false,"static":false,"w":3,"x":3,"y":24},{"h":5,"i":"72cca0ea-3e92-4cd8-b594-43d376c3d005","moved":false,"static":false,"w":3,"x":6,"y":24},{"h":5,"i":"d622aa52-0396-4c8a-b3ec-9e32ff81dfd0","moved":false,"static":false,"w":3,"x":9,"y":24},{"h":1,"i":"f2871054-2e91-4bf6-b0eb-8ae8012f871e","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":29},{"h":5,"i":"5c7c0b87-692a-4fe0-8de5-1922657188e3","moved":false,"static":false,"w":3,"x":0,"y":30},{"h":5,"i":"04d791af-f249-4a47-b46d-7d88f362b0e7","moved":false,"static":false,"w":9,"x":3,"y":30},{"h":1,"i":"21515018-38c7-4118-bf85-b80ab940c1bf","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":35},{"h":6,"i":"cd05dd54-2009-42c6-bbb3-b6b98e6d8f19","moved":false,"static":false,"w":3,"x":0,"y":36},{"h":6,"i":"521e779e-0f55-4f86-8f49-0180e3d3ac3a","moved":false,"static":false,"w":3,"x":3,"y":36},{"h":6,"i":"39820ed9-c20a-47ac-aba4-9236da0ec06a","moved":false,"static":false,"w":3,"x":6,"y":36},{"h":6,"i":"d82c2fc0-5727-4157-b151-b0a1d3d69fd2","moved":false,"static":false,"w":3,"x":9,"y":36},{"h":6,"i":"23239c36-a0b4-40b9-8381-bda57f2bc124","moved":false,"static":false,"w":3,"x":0,"y":42},{"h":6,"i":"2d4d76d3-2061-4026-a974-ea5aba9706a4","moved":false,"static":false,"w":3,"x":3,"y":42},{"h":6,"i":"b8604944-c047-4e26-ab59-fb4e9227e04a","moved":false,"static":false,"w":3,"x":6,"y":42},{"h":6,"i":"fe5a968d-f0d9-49ad-8ce6-d6c421026d52","moved":false,"static":false,"w":3,"x":9,"y":42},{"h":1,"i":"1e374023-cd29-4c92-8547-7d9904c82c30","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":48},{"h":6,"i":"ad1ff5c2-5e7b-4f86-a304-6e387c2a692c","moved":false,"static":false,"w":3,"x":0,"y":49},{"h":6,"i":"1f0376aa-d337-4545-a148-694c0ea8ed00","moved":false,"static":false,"w":3,"x":3,"y":49},{"h":6,"i":"f858353e-5105-4888-8169-9c38f297d7ec","moved":false,"static":false,"w":3,"x":6,"y":49},{"h":6,"i":"06c19664-d32b-4779-bfd5-d5e83245b016","moved":false,"static":false,"w":3,"x":9,"y":49},{"h":6,"i":"852ef1af-0f4d-46f7-afa1-a17259158fa1","moved":false,"static":false,"w":6,"x":0,"y":55},{"h":6,"i":"5aaab657-8461-4bfa-b3c3-be1d1163f189","moved":false,"static":false,"w":6,"x":6,"y":55},{"h":1,"i":"7eb6438b-e8a5-4116-b02d-452c7611a17c","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":61},{"h":6,"i":"10fa2b2a-efc5-456d-a437-fa066213cc3c","moved":false,"static":false,"w":4,"x":0,"y":62},{"h":6,"i":"b4a30458-75d1-4153-a1eb-88616ad04c8b","moved":false,"static":false,"w":4,"x":4,"y":62},{"h":6,"i":"722d0b63-a93b-42c0-9fb7-6adb6c706fa3","moved":false,"static":false,"w":4,"x":8,"y":62},{"h":6,"i":"8adbb9a9-fc16-456a-9d43-fe7eafc8378c","moved":false,"static":false,"w":12,"x":0,"y":68},{"h":1,"i":"8e79d9f3-a004-4716-9236-7bc32cdb76ee","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":74},{"h":6,"i":"2d6fab5b-f775-420f-ba69-7dcc6cf07dfe","moved":false,"static":false,"w":4,"x":0,"y":75},{"h":6,"i":"86ef7609-4334-4145-9979-1c28280c2e12","moved":false,"static":false,"w":4,"x":4,"y":75},{"h":6,"i":"07317394-544d-4348-9483-449f19d84b9e","moved":false,"static":false,"w":4,"x":8,"y":75},{"h":1,"i":"c742d29b-3a1d-4b99-bed3-0546ac8cb1d4","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":81},{"h":6,"i":"9301a5e9-f10a-4df0-9846-b0feb7aa6cb2","moved":false,"static":false,"w":12,"x":0,"y":82},{"h":6,"i":"86b9876c-9afe-4541-af97-6b6678035347","moved":false,"static":false,"w":12,"x":0,"y":88},{"h":6,"i":"b4dada32-bb8c-4e3d-aa6d-c0021d237b7b","moved":false,"static":false,"w":12,"x":0,"y":94}],"panelMap":{"12d77490-362a-4052-b85d-0a293938debf":{"collapsed":false,"widgets":[{"h":5,"i":"4aef072d-56e9-4947-ae92-04e0d772f9c8","moved":false,"static":false,"w":3,"x":0,"y":152},{"h":5,"i":"ae432b34-3bd0-45cc-8b68-1c23392712e9","moved":false,"static":false,"w":3,"x":3,"y":152},{"h":5,"i":"72cca0ea-3e92-4cd8-b594-43d376c3d005","moved":false,"static":false,"w":3,"x":6,"y":152},{"h":5,"i":"d622aa52-0396-4c8a-b3ec-9e32ff81dfd0","moved":false,"static":false,"w":3,"x":9,"y":152}]},"1e374023-cd29-4c92-8547-7d9904c82c30":{"collapsed":false,"widgets":[{"h":6,"i":"ad1ff5c2-5e7b-4f86-a304-6e387c2a692c","moved":false,"static":false,"w":3,"x":0,"y":959},{"h":6,"i":"1f0376aa-d337-4545-a148-694c0ea8ed00","moved":false,"static":false,"w":3,"x":3,"y":959},{"h":6,"i":"f858353e-5105-4888-8169-9c38f297d7ec","moved":false,"static":false,"w":3,"x":6,"y":959},{"h":6,"i":"06c19664-d32b-4779-bfd5-d5e83245b016","moved":false,"static":false,"w":3,"x":9,"y":959},{"h":6,"i":"852ef1af-0f4d-46f7-afa1-a17259158fa1","moved":false,"static":false,"w":6,"x":0,"y":965},{"h":6,"i":"5aaab657-8461-4bfa-b3c3-be1d1163f189","moved":false,"static":false,"w":6,"x":6,"y":965}]},"21515018-38c7-4118-bf85-b80ab940c1bf":{"collapsed":false,"widgets":[{"h":6,"i":"cd05dd54-2009-42c6-bbb3-b6b98e6d8f19","moved":false,"static":false,"w":3,"x":0,"y":614},{"h":6,"i":"521e779e-0f55-4f86-8f49-0180e3d3ac3a","moved":false,"static":false,"w":3,"x":3,"y":614},{"h":6,"i":"39820ed9-c20a-47ac-aba4-9236da0ec06a","moved":false,"static":false,"w":3,"x":6,"y":614},{"h":6,"i":"d82c2fc0-5727-4157-b151-b0a1d3d69fd2","moved":false,"static":false,"w":3,"x":9,"y":614},{"h":6,"i":"23239c36-a0b4-40b9-8381-bda57f2bc124","moved":false,"static":false,"w":3,"x":0,"y":620},{"h":6,"i":"2d4d76d3-2061-4026-a974-ea5aba9706a4","moved":false,"static":false,"w":3,"x":3,"y":620},{"h":6,"i":"b8604944-c047-4e26-ab59-fb4e9227e04a","moved":false,"static":false,"w":3,"x":6,"y":620},{"h":6,"i":"fe5a968d-f0d9-49ad-8ce6-d6c421026d52","moved":false,"static":false,"w":3,"x":9,"y":620}]},"24e065d5-b4fb-4502-93cd-da1f91265491":{"collapsed":false,"widgets":[{"h":5,"i":"165f2f3d-83f6-4eeb-a508-db8cc011c0c7","moved":false,"static":false,"w":4,"x":0,"y":1},{"h":5,"i":"17a7ab91-7f2b-4fea-b86e-a8d9ff6059b6","moved":false,"static":false,"w":4,"x":4,"y":1},{"h":5,"i":"0da192fc-9ffe-426f-836f-2e7e891f4276","moved":false,"static":false,"w":4,"x":8,"y":1},{"h":6,"i":"6c3f0fbd-2c82-42d1-8a22-daac29017434","moved":false,"static":false,"w":4,"x":0,"y":6},{"h":6,"i":"1cfaff87-5f9e-42c3-ab5e-489dfa59e91f","moved":false,"static":false,"w":4,"x":4,"y":6},{"h":6,"i":"bc402120-393c-4858-9e81-2f04990f077e","moved":false,"static":false,"w":4,"x":8,"y":6}]},"56d0d000-03a4-4a24-8265-bab844824d0b":{"collapsed":false,"widgets":[{"h":5,"i":"8cbc9117-811d-4de7-8401-75b906a993cd","moved":false,"static":false,"w":3,"x":0,"y":46},{"h":5,"i":"7b5a9363-df90-4455-a9ec-7e8b6c3d3e8a","moved":false,"static":false,"w":3,"x":3,"y":46},{"h":5,"i":"74749ef1-cabd-4eff-a061-66795f06a2a4","moved":false,"static":false,"w":3,"x":6,"y":46},{"h":5,"i":"e1d2da44-4101-48ca-84b7-0460eb493c46","moved":false,"static":false,"w":3,"x":9,"y":46},{"h":5,"i":"91cce91c-1272-40bb-a27f-9a69431f5edd","moved":false,"static":false,"w":6,"x":0,"y":51},{"h":5,"i":"40eae720-25ca-40b6-94db-d598687681e2","moved":false,"static":false,"w":6,"x":6,"y":51}]},"7eb6438b-e8a5-4116-b02d-452c7611a17c":{"collapsed":false,"widgets":[{"h":6,"i":"10fa2b2a-efc5-456d-a437-fa066213cc3c","moved":false,"static":false,"w":4,"x":0,"y":1906},{"h":6,"i":"b4a30458-75d1-4153-a1eb-88616ad04c8b","moved":false,"static":false,"w":4,"x":4,"y":1906},{"h":6,"i":"722d0b63-a93b-42c0-9fb7-6adb6c706fa3","moved":false,"static":false,"w":4,"x":8,"y":1906},{"h":6,"i":"8adbb9a9-fc16-456a-9d43-fe7eafc8378c","moved":false,"static":false,"w":12,"x":0,"y":1912}]},"8e79d9f3-a004-4716-9236-7bc32cdb76ee":{"collapsed":false,"widgets":[{"h":6,"i":"2d6fab5b-f775-420f-ba69-7dcc6cf07dfe","moved":false,"static":false,"w":4,"x":0,"y":3787},{"h":6,"i":"86ef7609-4334-4145-9979-1c28280c2e12","moved":false,"static":false,"w":4,"x":4,"y":3787},{"h":6,"i":"07317394-544d-4348-9483-449f19d84b9e","moved":false,"static":false,"w":4,"x":8,"y":3787}]},"c742d29b-3a1d-4b99-bed3-0546ac8cb1d4":{"collapsed":false,"widgets":[{"h":6,"i":"9301a5e9-f10a-4df0-9846-b0feb7aa6cb2","moved":false,"static":false,"w":12,"x":0,"y":5800},{"h":6,"i":"86b9876c-9afe-4541-af97-6b6678035347","moved":false,"static":false,"w":12,"x":0,"y":5806},{"h":6,"i":"b4dada32-bb8c-4e3d-aa6d-c0021d237b7b","moved":false,"static":false,"w":12,"x":0,"y":5812}]},"f2871054-2e91-4bf6-b0eb-8ae8012f871e":{"collapsed":false,"widgets":[{"h":5,"i":"5c7c0b87-692a-4fe0-8de5-1922657188e3","moved":false,"static":false,"w":3,"x":0,"y":354},{"h":5,"i":"04d791af-f249-4a47-b46d-7d88f362b0e7","moved":false,"static":false,"w":9,"x":3,"y":354}]}},"tags":[],"title":"kube-state-metrics-v2","uploadedGrafana":false,"uuid":"0199715e-af94-76fa-96cc-17a2a33f6e87","variables":{"60fcac38-8bb1-4589-8dff-cf65a3098d63":{"allSelected":true,"customValue":"","description":"","id":"60fcac38-8bb1-4589-8dff-cf65a3098d63","key":"60fcac38-8bb1-4589-8dff-cf65a3098d63","modificationUUID":"b4912e93-2f0c-4363-b4e0-206018832784","multiSelect":true,"name":"node","order":0,"queryValue":"SELECT distinct JSONExtractString(labels, 'node')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'kube_node_info')\nand (JSONExtractString(labels, 'node') != '')\n","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"},"770101b2-b802-40ce-a3e9-bdf497afed24":{"allSelected":true,"customValue":"","description":"","id":"770101b2-b802-40ce-a3e9-bdf497afed24","modificationUUID":"ae9cf34a-b8f0-400c-a436-e8bf4a73853d","multiSelect":true,"name":"namespace","order":0,"queryValue":"SELECT distinct JSONExtractString(labels, 'namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'kube_namespace_created')\nand (JSONExtractString(labels, 'namespace') != '')","showALLOption":true,"sort":"ASC","textboxValue":"","type":"QUERY"}},"version":"v4","widgets":[{"description":"","id":"24e065d5-b4fb-4502-93cd-da1f91265491","panelTypes":"row","title":"Cluster"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"165f2f3d-83f6-4eeb-a508-db8cc011c0c7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[{"id":"411865a6","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_allocatable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_allocatable","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[{"id":"cf1acab2","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"53e4e061","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"pods"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"B","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0726b614-7cb4-41e8-8500-e65f7dfb595d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cluster Pod Requested","yAxisUnit":"percentunit"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"17a7ab91-7f2b-4fea-b86e-a8d9ff6059b6","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_requests--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_requests","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[{"id":"c3d41fa1","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"8c79c11f","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_allocatable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_allocatable","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[{"id":"4154efac","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"ec61037e","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"B","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f04a7519-ee0d-47d7-ab25-b3783b4d53ca","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cluster CPU Requested","yAxisUnit":"percentunit"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"0da192fc-9ffe-426f-836f-2e7e891f4276","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_requests--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_requests","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[{"id":"10304e24","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"200dd2f4","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_allocatable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_allocatable","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[{"id":"5a4a808a","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"31f36522","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"B","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"dc493ca3-7f01-49cb-8e5c-1663b1f1605a","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cluster Memory Requested","yAxisUnit":"percentunit"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"6c3f0fbd-2c82-42d1-8a22-daac29017434","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"8a28d9e9","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"requested","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_allocatable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_allocatable","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"68ab8e91","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"659d5f45","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"pods"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"allocatable","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"9a010582-d685-48c7-b6d4-4bbb1a593731","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cluster Pod Capacity","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"1cfaff87-5f9e-42c3-ab5e-489dfa59e91f","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_requests--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_requests","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"bcf64f03","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"b1c4be2a","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"requested","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_allocatable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_allocatable","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"8d576c35","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"f88370aa","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"allocatable","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_capacity--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_capacity","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"45ce1122","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"fc93121c","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"capacity","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_limits--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_limits","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"d63fe00c","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"59485e9a","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"limited","limit":null,"orderBy":[],"queryName":"D","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8e828a4f-37b1-4599-af0e-2b7fbcc6887f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cluster CPU Capacity","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"bc402120-393c-4858-9e81-2f04990f077e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_requests--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_requests","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"3962ef08","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"f0f400d4","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"requested","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_allocatable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_allocatable","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"5a4a808a","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"31f36522","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"allocatable","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_status_capacity--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_status_capacity","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"1786229b","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"d6f2f62d","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"capacity","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_limits--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_limits","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"D","filters":{"items":[{"id":"b4090366","key":{"dataType":"string","id":"node--string--tag--false","isColumn":false,"isJSON":false,"key":"node","type":"tag"},"op":"in","value":[".node"]},{"id":"1be30648","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"limited","limit":null,"orderBy":[],"queryName":"D","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e54d3f0c-4b7b-4e13-8a15-fee2e48cce05","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cluster Mem Capacity","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"8cbc9117-811d-4de7-8401-75b906a993cd","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_node_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_info","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e0eac5f0-e6fa-4098-a56a-c8491897ad33","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number Of Nodes","yAxisUnit":"none"},{"description":"","id":"56d0d000-03a4-4a24-8265-bab844824d0b","panelTypes":"row","title":"Node"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"7b5a9363-df90-4455-a9ec-7e8b6c3d3e8a","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_node_spec_unschedulable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_spec_unschedulable","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"aab0fcc2-8f96-4b9b-b270-0c6f8cccc153","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[{"index":"21c057c5-a63e-494f-8479-d2558a0ba8de","isEditEnabled":false,"keyIndex":0,"selectedGraph":"value","thresholdColor":"Green","thresholdFormat":"Background","thresholdLabel":"","thresholdOperator":"<=","thresholdTableOptions":"A","thresholdUnit":"none","thresholdValue":0}],"timePreferance":"GLOBAL_TIME","title":"Nodes Unavailable","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"74749ef1-cabd-4eff-a061-66795f06a2a4","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_node_status_condition","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"status != 'true' AND node IN ['{{.node}}'] "},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Nodes Unavailable","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1f5d4904-e0fc-47ba-9fd9-d34c0da443ac","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Nodes Unavailable","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"e1d2da44-4101-48ca-84b7-0460eb493c46","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_node_status_condition","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"D","filter":{"expression":"condition = 'DiskPressure' AND node in ['{{.node}}'] AND status = 'true'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"DiskPressure","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"kube_node_status_condition","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"E","filter":{"expression":"condition = 'MemoryPressure' AND node in ['{{.node}}'] AND status = 'true'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"MemoryPressure","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60},{"aggregations":[{"metricName":"kube_node_status_condition","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"F","filter":{"expression":"condition = 'PIDPressure' AND node in ['{{.node}}'] AND status = 'true'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"PIDPressure","limit":null,"orderBy":[],"queryName":"F","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a9e090be-bd58-4388-8c49-dd314a695c7f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Node Pressure","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"91cce91c-1272-40bb-a27f-9a69431f5edd","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_node_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"Number of Nodes","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ef80e0f4-8fa9-4aa8-a5ab-70b7877d555a","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number Of Nodes","yAxisUnit":"none"},{"description":"","id":"12d77490-362a-4052-b85d-0a293938debf","panelTypes":"row","title":"Deployments"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"deployment":145},"description":"","fillSpans":false,"id":"4aef072d-56e9-4947-ae92-04e0d772f9c8","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_deployment_status_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_deployment_status_replicas","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"ee3a47db","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"deployment--string--tag--false","isColumn":false,"isJSON":false,"key":"deployment","type":"tag"}],"having":[],"legend":"replicas","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"6fbdf21c-1061-4c63-88f4-f41ccc38a497","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Deployment Replicas - Up To Date","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"72cca0ea-3e92-4cd8-b594-43d376c3d005","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_deployment_status_replicas_updated--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_deployment_status_replicas_updated","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"b80b94a3","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"89792db9-1267-4028-b587-9bc4647b623d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Deployment Replicas - Updated","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"ae432b34-3bd0-45cc-8b68-1c23392712e9","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_deployment_status_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_deployment_status_replicas","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"651088bd","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"9780ec12-d45d-4589-bc5d-a616296ca7e6","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Deployment Replicas - Count","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"d622aa52-0396-4c8a-b3ec-9e32ff81dfd0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_deployment_status_replicas_unavailable--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_deployment_status_replicas_unavailable","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"b6e16646","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"5949dd1e-249c-427b-b34b-e1a9c027c1cc","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Deployment Replicas - Unavailable","yAxisUnit":"none"},{"description":"","id":"f2871054-2e91-4bf6-b0eb-8ae8012f871e","panelTypes":"row","title":"Statefulsets"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"statefulset":145},"description":"","fillSpans":false,"id":"5c7c0b87-692a-4fe0-8de5-1922657188e3","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_statefulset_status_replicas_ready--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_statefulset_status_replicas_ready","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"9e94ded9","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"statefulset--string--tag--false","isColumn":false,"isJSON":false,"key":"statefulset","type":"tag"}],"having":[],"legend":"replicas","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"51bc7b9f-3ad1-4930-a53d-cc4e9c7bf9e8","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Statefulset Replicas - Up To Date","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"04d791af-f249-4a47-b46d-7d88f362b0e7","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_statefulset_status_replicas_ready--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_statefulset_status_replicas_ready","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[{"id":"d9c0eba1","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"statefulset--string--tag--false","isColumn":false,"isJSON":false,"key":"statefulset","type":"tag"}],"having":[],"legend":"{{statefulset}}","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_statefulset_status_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_statefulset_status_replicas","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[{"id":"96fbf7be","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"statefulset--string--tag--false","isColumn":false,"isJSON":false,"key":"statefulset","type":"tag"}],"having":[],"legend":"{{statefulset}}","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[{"disabled":false,"expression":"A/B","legend":"{{statefulset}}","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"98c5dbe7-b45f-44b1-9a3b-8d11c1641914","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Statefulset replicas","yAxisUnit":"percentunit"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"columnWidths":{"A":145,"B":145,"C":145,"D":145},"description":"","fillSpans":false,"id":"40eae720-25ca-40b6-94db-d598687681e2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_node_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"Mean","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"B","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"Last","limit":null,"orderBy":[],"queryName":"B","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"C","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"C","reduceTo":"max","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"},{"aggregateAttribute":{"dataType":"float64","id":"kube_node_info--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_node_info","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"D","filters":{},"functions":[],"groupBy":[],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"D","reduceTo":"min","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ac0b85ec-09ba-4564-beda-1d639c6f4f79","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number Of Nodes","yAxisUnit":"none"},{"description":"","id":"21515018-38c7-4118-bf85-b80ab940c1bf","panelTypes":"row","title":"Pods"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"cd05dd54-2009-42c6-bbb3-b6b98e6d8f19","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_container_status_restarts_total","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"namespace in ['{{.namespace}}']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Pods restart in 30m","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2940dee9-f17a-4a08-ac8e-e7cae5620b45","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"LAST_30_MIN","title":"Pods restart in 30m","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"521e779e-0f55-4f86-8f49-0180e3d3ac3a","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_status_reason","reduceTo":"avg","spaceAggregation":"sum","temporality":"","timeAggregation":"sum"}],"dataSource":"metrics","disabled":false,"expression":"B","filter":{"expression":"namespace in ['{{.namespace}}'] AND reason = 'Evicted'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Evicted","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a699b6bd-b539-4840-8f30-cbeacc250116","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Evicted","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"39820ed9-c20a-47ac-aba4-9236da0ec06a","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_status_phase--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_status_phase","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"fc3046d7","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]},{"id":"aa21a3d7","key":{"dataType":"string","id":"phase--string--tag--false","isColumn":false,"isJSON":false,"key":"phase","type":"tag"},"op":"=","value":"Running"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Pods Running","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d22fddac-938e-4df5-b77a-6f81e81c69f6","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Pods Running","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"d82c2fc0-5727-4157-b151-b0a1d3d69fd2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_status_phase--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_status_phase","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"7d712305","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]},{"id":"f1c7b1e1","key":{"dataType":"string","id":"phase--string--tag--false","isColumn":false,"isJSON":false,"key":"phase","type":"tag"},"op":"=","value":"Succeeded"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Pods Succeeded","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"80635407-6617-4f42-95b1-21d644657df6","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Pods Succeeded","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"23239c36-a0b4-40b9-8381-bda57f2bc124","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_status_phase","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"namespace in ['.namespace'] AND phase = 'Running'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Pods Failed","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c354b509-3ac1-447e-922a-c6c22e31d9de","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Pods Running","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"2d4d76d3-2061-4026-a974-ea5aba9706a4","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_status_phase","reduceTo":"last","spaceAggregation":"sum","timeAggregation":"latest"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"namespace in ['.namespace'] AND phase = 'Failed'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Pods Failed","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"bacf63f1-4c09-473c-af9d-72ee298d8e37","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Pods Failed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"b8604944-c047-4e26-ab59-fb4e9227e04a","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_status_phase","reduceTo":"last","spaceAggregation":"sum","timeAggregation":"sum"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"namespace in ['.namespace'] AND phase = 'Pending'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Pods Pending","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"18a47ede-a417-4082-b454-aaadd2878d89","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Pods Pending","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"fe5a968d-f0d9-49ad-8ce6-d6c421026d52","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_status_phase","reduceTo":"last","spaceAggregation":"sum","timeAggregation":"sum"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"namespace in ['.namespace'] AND phase = 'Unknown'"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Pods Unknown","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"7a0145bf-ea6b-4944-bd0f-69ed84215865","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Pods Unknown","yAxisUnit":"none"},{"description":"","id":"1e374023-cd29-4c92-8547-7d9904c82c30","panelTypes":"row","title":"Containers"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"ad1ff5c2-5e7b-4f86-a304-6e387c2a692c","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_status_running--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_status_running","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"05841dba","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Containers Running","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ce5e355e-c549-4ba9-987b-c1c6db5fd649","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Containers Running","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"1f0376aa-d337-4545-a148-694c0ea8ed00","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_status_waiting--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_status_waiting","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"e53d4999","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Containers Waiting","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"6a0410a1-38fd-4c44-a77e-5ff5d0215245","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Containers Waiting","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"f858353e-5105-4888-8169-9c38f297d7ec","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_status_terminated--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_status_terminated","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"49262afd","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Containers Terminated","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"eca58176-c29e-40a1-aac8-587c0857e437","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Containers Terminated","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":true,"id":"06c19664-d32b-4779-bfd5-d5e83245b016","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"kube_pod_container_status_restarts_total","reduceTo":"avg","spaceAggregation":"sum","timeAggregation":"rate"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"namespace in ['{{.namespace}}']"},"functions":[],"groupBy":[],"having":{"expression":""},"legend":"Containers Restarted","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"a472183d-b556-496b-acf0-c43e9a352979","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"LAST_30_MIN","title":"Containers Restarts (Last 30 Minutes)","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"852ef1af-0f4d-46f7-afa1-a17259158fa1","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_requests--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_requests","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"eb423c29","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]},{"id":"720dddc6","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"cpu"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"CPU Cores","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"902ff930-e5a4-4144-bf01-19bd6352aae5","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"CPU Cores Requested by Containers","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"5aaab657-8461-4bfa-b3c3-be1d1163f189","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_pod_container_resource_requests--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_pod_container_resource_requests","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"33eb7bc1","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]},{"id":"c795f774","key":{"dataType":"string","id":"resource--string--tag--false","isColumn":false,"isJSON":false,"key":"resource","type":"tag"},"op":"=","value":"memory"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Memory","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c7238485-08e9-4974-8915-803a86a20714","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Memory Requested By Containers","yAxisUnit":"decbytes"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"10fa2b2a-efc5-456d-a437-fa066213cc3c","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_job_status_succeeded--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_job_status_succeeded","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"d97b7532","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"No. of Jobs","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"f422cbd0-cdb0-4d0e-8cd3-7c96ce285a9f","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Jobs Succeeded","yAxisUnit":"none"},{"description":"","id":"7eb6438b-e8a5-4116-b02d-452c7611a17c","panelTypes":"row","title":"Jobs"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"b4a30458-75d1-4153-a1eb-88616ad04c8b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_job_status_active--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_job_status_active","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"23f53783","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"No. of Jobs","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"38a1fc13-492b-47ed-b1bd-51fe0827d302","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Jobs Active","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"722d0b63-a93b-42c0-9fb7-6adb6c706fa3","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_job_status_failed--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_job_status_failed","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"888301db","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"No. of Jobs","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"afbd239a-6099-4574-8829-546d311e97b3","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Jobs Failed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"none","F1":"none"},"columnWidths":{"F1":145,"exported_job_name":145},"description":"","fillSpans":false,"id":"8adbb9a9-fc16-456a-9d43-fe7eafc8378c","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_job_status_completion_time--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_job_status_completion_time","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[{"id":"f845b6ec","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"exported_job_name--string--tag--false","isColumn":false,"isJSON":false,"key":"exported_job_name","type":"tag"}],"having":[],"legend":"Job Name","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[{"disabled":false,"expression":"(now()-A)/60/60/24","legend":"Days","queryName":"F1"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"dbb1d0ea-8779-492f-8ca6-6363de0bab0d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Job last success time from now","yAxisUnit":"ms"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"86ef7609-4334-4145-9979-1c28280c2e12","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_persistentvolumeclaim_status_phase--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_persistentvolumeclaim_status_phase","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"4960cf78","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]},{"id":"908054b9","key":{"dataType":"string","id":"phase--string--tag--false","isColumn":false,"isJSON":false,"key":"phase","type":"tag"},"op":"!=","value":"Bound"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"3ef76782-e504-466d-88d5-f932dc3e7549","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"pvc is not bound","yAxisUnit":"none"},{"description":"","id":"8e79d9f3-a004-4716-9236-7bc32cdb76ee","panelTypes":"row","title":"PVC"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"2d6fab5b-f775-420f-ba69-7dcc6cf07dfe","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_persistentvolumeclaim_status_phase--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_persistentvolumeclaim_status_phase","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"39c4bb59","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]},{"id":"cb01a335","key":{"dataType":"string","id":"phase--string--tag--false","isColumn":false,"isJSON":false,"key":"phase","type":"tag"},"op":"=","value":"Bound"}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0e8f62de-923f-4249-b41e-fa64e846605c","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"pvc is bound","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{"A":"decbytes"},"columnWidths":{"A":145,"persistentvolumeclaim":145},"description":"","fillSpans":false,"id":"07317394-544d-4348-9483-449f19d84b9e","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_persistentvolumeclaim_resource_requests_storage_bytes--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_persistentvolumeclaim_resource_requests_storage_bytes","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"217870b0","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"persistentvolumeclaim--string--tag--false","isColumn":false,"isJSON":false,"key":"persistentvolumeclaim","type":"tag"}],"having":[],"legend":"requested size","limit":null,"orderBy":[],"queryName":"A","reduceTo":"last","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d78c0dd8-be2f-43eb-a1ae-cd5385caa5eb","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"pvc","yAxisUnit":"none"},{"description":"","id":"c742d29b-3a1d-4b99-bed3-0546ac8cb1d4","panelTypes":"row","title":"HPA"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"9301a5e9-f10a-4df0-9846-b0feb7aa6cb2","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_status_current_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_status_current_replicas","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"0046a701","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"horizontalpodautoscaler--string--tag--false","isColumn":false,"isJSON":false,"key":"horizontalpodautoscaler","type":"tag"}],"having":[],"legend":"{{horizontalpodautoscaler}}: current","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_spec_max_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_spec_max_replicas","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"cc996bca","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"horizontalpodautoscaler--string--tag--false","isColumn":false,"isJSON":false,"key":"horizontalpodautoscaler","type":"tag"}],"having":[],"legend":"{{horizontalpodautoscaler}}: max","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_spec_min_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_spec_min_replicas","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"e2e72f51","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"horizontalpodautoscaler--string--tag--false","isColumn":false,"isJSON":false,"key":"horizontalpodautoscaler","type":"tag"}],"having":[],"legend":"{{horizontalpodautoscaler}}: min","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ee350dc1-4afa-494f-b274-0ed9d7bc890e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"HPA","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"86b9876c-9afe-4541-af97-6b6678035347","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_status_current_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_status_current_replicas","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"aea8ae4f","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Total current HPA Replicas","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1d33f237-b239-42bd-a168-7d46d92b1c2e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"total-hpa-current","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"b4dada32-bb8c-4e3d-aa6d-c0021d237b7b","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"table","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_status_current_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_status_current_replicas","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[{"id":"028e512a","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},{"dataType":"string","id":"horizontalpodautoscaler--string--tag--false","isColumn":false,"isJSON":false,"key":"horizontalpodautoscaler","type":"tag"}],"having":[],"legend":"Current","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_spec_max_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_spec_max_replicas","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"B","filters":{"items":[{"id":"bbb521f4","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},{"dataType":"string","id":"horizontalpodautoscaler--string--tag--false","isColumn":false,"isJSON":false,"key":"horizontalpodautoscaler","type":"tag"}],"having":[],"legend":"Max","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"latest"},{"aggregateAttribute":{"dataType":"float64","id":"kube_horizontalpodautoscaler_spec_min_replicas--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"kube_horizontalpodautoscaler_spec_min_replicas","type":"Gauge"},"aggregateOperator":"avg","dataSource":"metrics","disabled":false,"expression":"C","filters":{"items":[{"id":"346b8d39","key":{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},"op":"in","value":[".namespace"]}],"op":"AND"},"functions":[],"groupBy":[{"dataType":"string","id":"namespace--string--tag--false","isColumn":false,"isJSON":false,"key":"namespace","type":"tag"},{"dataType":"string","id":"horizontalpodautoscaler--string--tag--false","isColumn":false,"isJSON":false,"key":"horizontalpodautoscaler","type":"tag"}],"having":[],"legend":"Min","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"avg"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"8e375197-59ab-4a2b-acf7-3d8af8ad9bdf","promql":[{"disabled":false,"legend":"","name":"A","query":"kube_horizontalpodautoscaler_status_current_replicas{} == kube_horizontalpodautoscaler_spec_max_replicas"}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"HPA Status","yAxisUnit":"none"}]} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "kube-state-metrics-v2", + "description": "" + }, + "variables": [ + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "node", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'node')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'kube_node_info')\nand (JSONExtractString(labels, 'node') != '')\n" + } + }, + "name": "node" + } + }, + { + "kind": "ListVariable", + "spec": { + "display": { + "name": "namespace", + "description": "" + }, + "allowAllValue": true, + "allowMultiple": true, + "customAllValue": "", + "capturingRegexp": "", + "sort": "alphabetical-asc", + "plugin": { + "kind": "signoz/QueryVariable", + "spec": { + "queryValue": "SELECT distinct JSONExtractString(labels, 'namespace')\nFROM signoz_metrics.distributed_time_series_v4\nWHERE (metric_name = 'kube_namespace_created')\nand (JSONExtractString(labels, 'namespace') != '')" + } + }, + "name": "namespace" + } + } + ], + "panels": { + "04d791af-f249-4a47-b46d-7d88f362b0e7": { + "kind": "Panel", + "spec": { + "display": { + "name": "Statefulset replicas", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_statefulset_status_replicas_ready", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "statefulset", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{statefulset}}" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_statefulset_status_replicas", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "statefulset", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{statefulset}}" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "{{statefulset}}" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "06c19664-d32b-4779-bfd5-d5e83245b016": { + "kind": "Panel", + "spec": { + "display": { + "name": "Containers Restarts (Last 30 Minutes)", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "last_30_min", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_status_restarts_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['{{.namespace}}']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Containers Restarted" + } + } + } + } + ], + "links": [] + } + }, + "07317394-544d-4348-9483-449f19d84b9e": { + "kind": "Panel", + "spec": { + "display": { + "name": "pvc", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "decbytes" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_persistentvolumeclaim_resource_requests_storage_bytes", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "persistentvolumeclaim", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "requested size" + } + } + } + } + ], + "links": [] + } + }, + "0da192fc-9ffe-426f-836f-2e7e891f4276": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cluster Memory Requested", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_requests", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(node = '.node' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_allocatable", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(node = '.node' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "10fa2b2a-efc5-456d-a437-fa066213cc3c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Jobs Succeeded", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_job_status_succeeded", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "No. of Jobs" + } + } + } + } + ], + "links": [] + } + }, + "165f2f3d-83f6-4eeb-a508-db8cc011c0c7": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cluster Pod Requested", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "node = '.node'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_allocatable", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(node = '.node' AND resource = 'pods')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "17a7ab91-7f2b-4fea-b86e-a8d9ff6059b6": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cluster CPU Requested", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "percentunit", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_requests", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(node = '.node' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_allocatable", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": true, + "filter": { + "expression": "(node = '.node' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A/B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1cfaff87-5f9e-42c3-ab5e-489dfa59e91f": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cluster CPU Capacity", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_requests", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "requested" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_allocatable", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "allocatable" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_capacity", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "capacity" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_limits", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "limited" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1f0376aa-d337-4545-a148-694c0ea8ed00": { + "kind": "Panel", + "spec": { + "display": { + "name": "Containers Waiting", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_status_waiting", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Containers Waiting" + } + } + } + } + ], + "links": [] + } + }, + "23239c36-a0b4-40b9-8381-bda57f2bc124": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods Running", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_phase", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['.namespace'] AND phase = 'Running'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods Failed" + } + } + } + } + ], + "links": [] + } + }, + "2d4d76d3-2061-4026-a974-ea5aba9706a4": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods Failed", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_phase", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['.namespace'] AND phase = 'Failed'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods Failed" + } + } + } + } + ], + "links": [] + } + }, + "2d6fab5b-f775-420f-ba69-7dcc6cf07dfe": { + "kind": "Panel", + "spec": { + "display": { + "name": "pvc is bound", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_persistentvolumeclaim_status_phase", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(namespace = '.namespace' AND phase = 'Bound')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "39820ed9-c20a-47ac-aba4-9236da0ec06a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods Running", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_phase", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(namespace = '.namespace' AND phase = 'Running')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods Running" + } + } + } + } + ], + "links": [] + } + }, + "40eae720-25ca-40b6-94db-d598687681e2": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number Of Nodes", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Mean" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Last" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "max" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "min" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "4aef072d-56e9-4947-ae92-04e0d772f9c8": { + "kind": "Panel", + "spec": { + "display": { + "name": "Deployment Replicas - Up To Date", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_deployment_status_replicas", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "deployment", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "replicas" + } + } + } + } + ], + "links": [] + } + }, + "521e779e-0f55-4f86-8f49-0180e3d3ac3a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Evicted", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_reason", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['{{.namespace}}'] AND reason = 'Evicted'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Evicted" + } + } + } + } + ], + "links": [] + } + }, + "5aaab657-8461-4bfa-b3c3-be1d1163f189": { + "kind": "Panel", + "spec": { + "display": { + "name": "Memory Requested By Containers", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_requests", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(namespace = '.namespace' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Memory" + } + } + } + } + ], + "links": [] + } + }, + "5c7c0b87-692a-4fe0-8de5-1922657188e3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Statefulset Replicas - Up To Date", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_statefulset_status_replicas_ready", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "statefulset", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "replicas" + } + } + } + } + ], + "links": [] + } + }, + "6c3f0fbd-2c82-42d1-8a22-daac29017434": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cluster Pod Capacity", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "node = '.node'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "requested" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_allocatable", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'pods')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "allocatable" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "722d0b63-a93b-42c0-9fb7-6adb6c706fa3": { + "kind": "Panel", + "spec": { + "display": { + "name": "Jobs Failed", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_job_status_failed", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "No. of Jobs" + } + } + } + } + ], + "links": [] + } + }, + "72cca0ea-3e92-4cd8-b594-43d376c3d005": { + "kind": "Panel", + "spec": { + "display": { + "name": "Deployment Replicas - Updated", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_deployment_status_replicas_updated", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "74749ef1-cabd-4eff-a061-66795f06a2a4": { + "kind": "Panel", + "spec": { + "display": { + "name": "Nodes Unavailable", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_condition", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "status != 'true' AND node IN ['{{.node}}'] " + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Nodes Unavailable" + } + } + } + } + ], + "links": [] + } + }, + "7b5a9363-df90-4455-a9ec-7e8b6c3d3e8a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Nodes Unavailable", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": [ + { + "value": 0, + "operator": "below_or_equal", + "unit": "none", + "color": "Green", + "format": "background" + } + ] + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_spec_unschedulable", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "852ef1af-0f4d-46f7-afa1-a17259158fa1": { + "kind": "Panel", + "spec": { + "display": { + "name": "CPU Cores Requested by Containers", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_requests", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(namespace = '.namespace' AND resource = 'cpu')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "CPU Cores" + } + } + } + } + ], + "links": [] + } + }, + "86b9876c-9afe-4541-af97-6b6678035347": { + "kind": "Panel", + "spec": { + "display": { + "name": "total-hpa-current", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_status_current_replicas", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Total current HPA Replicas" + } + } + } + } + ], + "links": [] + } + }, + "86ef7609-4334-4145-9979-1c28280c2e12": { + "kind": "Panel", + "spec": { + "display": { + "name": "pvc is not bound", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_persistentvolumeclaim_status_phase", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "(namespace = '.namespace' AND phase != 'Bound')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "8adbb9a9-fc16-456a-9d43-fe7eafc8378c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Job last success time from now", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": { + "A": "none", + "F1": "none" + }, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_job_status_completion_time", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "exported_job_name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Job Name" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "(now()-A)/60/60/24", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Days" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "8cbc9117-811d-4de7-8401-75b906a993cd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number Of Nodes", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_info", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "91cce91c-1272-40bb-a27f-9a69431f5edd": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number Of Nodes", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_info", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Number of Nodes" + } + } + } + } + ], + "links": [] + } + }, + "9301a5e9-f10a-4df0-9846-b0feb7aa6cb2": { + "kind": "Panel", + "spec": { + "display": { + "name": "HPA", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_status_current_replicas", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "horizontalpodautoscaler", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{horizontalpodautoscaler}}: current" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_spec_max_replicas", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "horizontalpodautoscaler", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{horizontalpodautoscaler}}: max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_spec_min_replicas", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "horizontalpodautoscaler", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{horizontalpodautoscaler}}: min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ad1ff5c2-5e7b-4f86-a304-6e387c2a692c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Containers Running", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_status_running", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Containers Running" + } + } + } + } + ], + "links": [] + } + }, + "ae432b34-3bd0-45cc-8b68-1c23392712e9": { + "kind": "Panel", + "spec": { + "display": { + "name": "Deployment Replicas - Count", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_deployment_status_replicas", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "b4a30458-75d1-4153-a1eb-88616ad04c8b": { + "kind": "Panel", + "spec": { + "display": { + "name": "Jobs Active", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_job_status_active", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "No. of Jobs" + } + } + } + } + ], + "links": [] + } + }, + "b4dada32-bb8c-4e3d-aa6d-c0021d237b7b": { + "kind": "Panel", + "spec": { + "display": { + "name": "HPA Status", + "description": "" + }, + "plugin": { + "kind": "signoz/TablePanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "columnUnits": null, + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_status_current_replicas", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "namespace", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "horizontalpodautoscaler", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Current" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_spec_max_replicas", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "namespace", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "horizontalpodautoscaler", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Max" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_horizontalpodautoscaler_spec_min_replicas", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [ + { + "name": "namespace", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "horizontalpodautoscaler", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Min" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "b8604944-c047-4e26-ab59-fb4e9227e04a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods Pending", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_phase", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['.namespace'] AND phase = 'Pending'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods Pending" + } + } + } + } + ], + "links": [] + } + }, + "bc402120-393c-4858-9e81-2f04990f077e": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cluster Mem Capacity", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_requests", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "requested" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_allocatable", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "allocatable" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_capacity", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "capacity" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_resource_limits", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(node = '.node' AND resource = 'memory')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "limited" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "cd05dd54-2009-42c6-bbb3-b6b98e6d8f19": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods restart in 30m", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "last_30_min", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "B", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_status_restarts_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['{{.namespace}}']" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods restart in 30m" + } + } + } + } + ], + "links": [] + } + }, + "d622aa52-0396-4c8a-b3ec-9e32ff81dfd0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Deployment Replicas - Unavailable", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_deployment_status_replicas_unavailable", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + } + } + } + ], + "links": [] + } + }, + "d82c2fc0-5727-4157-b151-b0a1d3d69fd2": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods Succeeded", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_phase", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "(namespace = '.namespace' AND phase = 'Succeeded')" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods Succeeded" + } + } + } + } + ], + "links": [] + } + }, + "e1d2da44-4101-48ca-84b7-0460eb493c46": { + "kind": "Panel", + "spec": { + "display": { + "name": "Node Pressure", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": true + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_condition", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "condition = 'DiskPressure' AND node in ['{{.node}}'] AND status = 'true'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "DiskPressure" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_condition", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "condition = 'MemoryPressure' AND node in ['{{.node}}'] AND status = 'true'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "MemoryPressure" + } + }, + { + "type": "builder_query", + "spec": { + "name": "F", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_node_status_condition", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "condition = 'PIDPressure' AND node in ['{{.node}}'] AND status = 'true'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "PIDPressure" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "f858353e-5105-4888-8169-9c38f297d7ec": { + "kind": "Panel", + "spec": { + "display": { + "name": "Containers Terminated", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_container_status_terminated", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "namespace = '.namespace'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Containers Terminated" + } + } + } + } + ], + "links": [] + } + }, + "fe5a968d-f0d9-49ad-8ce6-d6c421026d52": { + "kind": "Panel", + "spec": { + "display": { + "name": "Pods Unknown", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "kube_pod_status_phase", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "last" + } + ], + "disabled": false, + "filter": { + "expression": "namespace in ['.namespace'] AND phase = 'Unknown'" + }, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Pods Unknown" + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Cluster", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 5, + "content": { + "$ref": "#/spec/panels/165f2f3d-83f6-4eeb-a508-db8cc011c0c7" + } + }, + { + "x": 4, + "y": 0, + "width": 4, + "height": 5, + "content": { + "$ref": "#/spec/panels/17a7ab91-7f2b-4fea-b86e-a8d9ff6059b6" + } + }, + { + "x": 8, + "y": 0, + "width": 4, + "height": 5, + "content": { + "$ref": "#/spec/panels/0da192fc-9ffe-426f-836f-2e7e891f4276" + } + }, + { + "x": 0, + "y": 5, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/6c3f0fbd-2c82-42d1-8a22-daac29017434" + } + }, + { + "x": 4, + "y": 5, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/1cfaff87-5f9e-42c3-ab5e-489dfa59e91f" + } + }, + { + "x": 8, + "y": 5, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/bc402120-393c-4858-9e81-2f04990f077e" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Node", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/8cbc9117-811d-4de7-8401-75b906a993cd" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/7b5a9363-df90-4455-a9ec-7e8b6c3d3e8a" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/74749ef1-cabd-4eff-a061-66795f06a2a4" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/e1d2da44-4101-48ca-84b7-0460eb493c46" + } + }, + { + "x": 0, + "y": 5, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/91cce91c-1272-40bb-a27f-9a69431f5edd" + } + }, + { + "x": 6, + "y": 5, + "width": 6, + "height": 5, + "content": { + "$ref": "#/spec/panels/40eae720-25ca-40b6-94db-d598687681e2" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Deployments", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/4aef072d-56e9-4947-ae92-04e0d772f9c8" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/ae432b34-3bd0-45cc-8b68-1c23392712e9" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/72cca0ea-3e92-4cd8-b594-43d376c3d005" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/d622aa52-0396-4c8a-b3ec-9e32ff81dfd0" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Statefulsets", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 5, + "content": { + "$ref": "#/spec/panels/5c7c0b87-692a-4fe0-8de5-1922657188e3" + } + }, + { + "x": 3, + "y": 0, + "width": 9, + "height": 5, + "content": { + "$ref": "#/spec/panels/04d791af-f249-4a47-b46d-7d88f362b0e7" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Pods", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/cd05dd54-2009-42c6-bbb3-b6b98e6d8f19" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/521e779e-0f55-4f86-8f49-0180e3d3ac3a" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/39820ed9-c20a-47ac-aba4-9236da0ec06a" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/d82c2fc0-5727-4157-b151-b0a1d3d69fd2" + } + }, + { + "x": 0, + "y": 6, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/23239c36-a0b4-40b9-8381-bda57f2bc124" + } + }, + { + "x": 3, + "y": 6, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/2d4d76d3-2061-4026-a974-ea5aba9706a4" + } + }, + { + "x": 6, + "y": 6, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/b8604944-c047-4e26-ab59-fb4e9227e04a" + } + }, + { + "x": 9, + "y": 6, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/fe5a968d-f0d9-49ad-8ce6-d6c421026d52" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Containers", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/ad1ff5c2-5e7b-4f86-a304-6e387c2a692c" + } + }, + { + "x": 3, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/1f0376aa-d337-4545-a148-694c0ea8ed00" + } + }, + { + "x": 6, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/f858353e-5105-4888-8169-9c38f297d7ec" + } + }, + { + "x": 9, + "y": 0, + "width": 3, + "height": 6, + "content": { + "$ref": "#/spec/panels/06c19664-d32b-4779-bfd5-d5e83245b016" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/852ef1af-0f4d-46f7-afa1-a17259158fa1" + } + }, + { + "x": 6, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/5aaab657-8461-4bfa-b3c3-be1d1163f189" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "Jobs", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/10fa2b2a-efc5-456d-a437-fa066213cc3c" + } + }, + { + "x": 4, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/b4a30458-75d1-4153-a1eb-88616ad04c8b" + } + }, + { + "x": 8, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/722d0b63-a93b-42c0-9fb7-6adb6c706fa3" + } + }, + { + "x": 0, + "y": 6, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/8adbb9a9-fc16-456a-9d43-fe7eafc8378c" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "PVC", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/2d6fab5b-f775-420f-ba69-7dcc6cf07dfe" + } + }, + { + "x": 4, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/86ef7609-4334-4145-9979-1c28280c2e12" + } + }, + { + "x": 8, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/07317394-544d-4348-9483-449f19d84b9e" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "HPA", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/9301a5e9-f10a-4df0-9846-b0feb7aa6cb2" + } + }, + { + "x": 0, + "y": 6, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/86b9876c-9afe-4541-af97-6b6678035347" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 6, + "content": { + "$ref": "#/spec/panels/b4dada32-bb8c-4e3d-aa6d-c0021d237b7b" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/dashboards/2/microtx-dasboard.json b/helm/infra-charts/obaas/dashboards/2/microtx-dasboard.json index a1e2b7c36..82261eff4 100644 --- a/helm/infra-charts/obaas/dashboards/2/microtx-dasboard.json +++ b/helm/infra-charts/obaas/dashboards/2/microtx-dasboard.json @@ -1 +1,4154 @@ -{"description":"","image":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE0Ljk0OTQgMTMuOTQyQzE2LjIzMTggMTIuNDI1OCAxNy4zMjY4IDkuNzAyMiAxNi4xOTU2IDYuNTc0ODdDMTUuNjQ0MyA1LjA1MjQ1IDE1LjAyMTkgNC4yMDI0OSAxNC4yOTY5IDMuNjYyNTJDMTMuODU1NyAzLjMzMzc5IDEyLjA5MzMgMi41MDYzMyA5Ljc1OTY1IDIuODY3NTZDOC4wNTM0OSAzLjEzMjU1IDUuNzc0ODcgNC4yMDg3NCA0LjI5MzY5IDUuOTU5OUMyLjg1NzUyIDcuNjYxMDYgMS43NDg4MyA5LjAwNDc0IDEuNjk3NTggMTAuMzA5N0MxLjYzMTMzIDExLjk4ODMgMi44OTYyNyAxMy40MzA4IDMuMDUwMDEgMTMuNjY0NUMzLjMyMzc0IDE0LjA3OTUgNS4xOTExNSAxNi40NTE4IDguNjk5NzEgMTYuNTczMUMxMS43OTcgMTYuNjc5MyAxMy44MTQ0IDE1LjI4NDQgMTQuOTQ5NCAxMy45NDJaIiBmaWxsPSIjNDAzRDNFIi8+CjxwYXRoIGQ9Ik00LjU1MzYzIDIuNzM3NDdDMi45Mzc0NiAzLjg5MTE2IDEuMTIxMzEgNi4yNTEwMyAxLjQ0NzU0IDkuNTYwODZDMS42MDYyOCAxMS4xNzIgMi4wMDI1MSAxMi4xNDk1IDIuNTcxMjMgMTIuODUwN0MyLjkxNzQ2IDEzLjI3ODIgNC40MTk4OCAxNC41NDkzIDYuNzczNTEgMTQuNzM2OEM5LjE0NTg4IDE0LjkyNTYgMTAuOTQ5NSAxNC4zOTQ0IDEyLjgzMzIgMTMuMDg0NEMxNi42NjE3IDEwLjQyMDggMTYuMDk4IDYuMzkzNTMgMTUuOTM0MyA1LjkyNDhDMTUuNzcwNSA1LjQ1NjA3IDE0LjU0NDQgMi42OTYyMiAxMS4xNzMzIDEuNzE1MDJDOC4xOTg0NCAwLjg1MDA2OCA1Ljk4MzU1IDEuNzE1MDIgNC41NTM2MyAyLjczNzQ3WiIgZmlsbD0iIzVFNjM2NyIvPgo8cGF0aCBkPSJNNy4zOTM1MyAyLjk2MTA5QzUuNjE3MzcgMi44OTczNCAzLjkxOTk2IDQuMjg4NTIgMy43NTYyMiA2LjAwNTkzQzMuNTkyNDggNy43MjIwOSA0LjY1NDkyIDkuMDI5NTIgNi4zMDk4MyA5LjI5NTc2QzcuOTY0NzUgOS41NjA3NCA5Ljg3ODM5IDguNTU1OCAxMC4yNjM0IDYuNDUwOTFDMTAuNjYwOSA0LjI4MjI3IDkuMDg5NjkgMy4wMjIzNCA3LjM5MzUzIDIuOTYxMDlaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNy45NDIxNyA1LjkwMTE1QzcuOTQyMTcgNS45MDExNSA4LjM2OTY1IDUuODEyNCA4LjQ1NDY1IDUuMTgyNDRDOC41MzgzOSA0LjU2MjQ3IDguMjMwOTEgNC4wMzM3NSA3LjUxMzQ1IDMuODQzNzZDNi43MzM0OSAzLjYzNzUyIDYuMjA0NzcgNC4wNjYyNSA2LjA2NzI3IDQuNTE3NDdDNS44NzYwMyA1LjE0NDk0IDYuMTU4NTIgNS40NDM2NyA2LjE1ODUyIDUuNDQzNjdDNi4xNTg1MiA1LjQ0MzY3IDUuMzkzNTYgNS42Mjc0MSA1LjMzMjMxIDYuNTI5ODdDNS4yNzQ4MSA3LjM4MTA3IDUuODU2MDMgNy44Mzg1NSA2LjQzOTc1IDcuOTc4NTRDNy4xNjA5NiA4LjE1MjI4IDcuOTc4NDIgNy45NTQ3OSA4LjE3ODQxIDcuMDM0ODRDOC4zNDQ2NSA2LjI3NzM4IDcuOTQyMTcgNS45MDExNSA3Ljk0MjE3IDUuOTAxMTVaIiBmaWxsPSIjMzAzMDMwIi8+CjxwYXRoIGQ9Ik02LjczOTgzIDQuNzUzNjJDNi42NzEwOSA1LjAxMjM1IDYuODA4NTggNS4yNjIzNCA3LjA3ODU3IDUuMzMxMDlDNy4zNjk4IDUuNDA0ODMgNy42MzQ3OSA1LjMwODU5IDcuNzA2MDMgNS4wMTExQzcuNzY4NTMgNC43NDczNyA3LjY0MzU0IDQuNTE0ODggNy4zMzYwNSA0LjQzOTg4QzcuMDgzNTcgNC4zNzczOSA2LjgxNDgzIDQuNDcxMTMgNi43Mzk4MyA0Ljc1MzYyWiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTYuOTU5NzggNi4wMzk3NEM2LjYzMjMgNS45Mzg0OSA2LjE5OTgyIDYuMDY0NzMgNi4xMzEwNyA2LjUwNDcxQzYuMDYyMzMgNi45NDQ2OSA2LjMyNjA2IDcuMTY5NjggNi42NzEwNCA3LjIzMjE3QzcuMDE2MDMgNy4yOTQ2NyA3LjM0MjI2IDcuMTEzNDMgNy40MDYwMSA2Ljc2MDk1QzcuNDY4NSA2LjQwOTcyIDcuMjg2MDEgNi4xMzk3MyA2Ljk1OTc4IDYuMDM5NzRaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K","layout":[{"h":1,"i":"c424ad00-f191-46ac-976c-5d98bfccf53c","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":0},{"h":6,"i":"106eb0e1-b050-48bd-9ca3-6066ae293d7d","moved":false,"static":false,"w":6,"x":0,"y":1},{"h":6,"i":"80817485-fa76-4de1-86c5-308ee5d2ab61","moved":false,"static":false,"w":6,"x":6,"y":1},{"h":1,"i":"82f2d2f2-b2c1-48a2-9260-0c250acc19b1","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":7},{"h":6,"i":"7f7fd81a-b759-408a-b8ff-95252425a673","moved":false,"static":false,"w":4,"x":0,"y":8},{"h":6,"i":"92802480-5807-414d-9bed-3f070d535d90","moved":false,"static":false,"w":2,"x":4,"y":8},{"h":6,"i":"71c04124-b6cc-497d-9ea4-7916c6a40511","moved":false,"static":false,"w":2,"x":6,"y":8},{"h":6,"i":"b9a4d8f0-79c5-46ee-89a0-0dc621d8904a","moved":false,"static":false,"w":2,"x":8,"y":8},{"h":6,"i":"5fa06be4-1c8e-4449-836a-ee7bb6786faa","moved":false,"static":false,"w":2,"x":10,"y":8},{"h":6,"i":"7656160d-5b69-4d79-a29d-4083e48dac34","moved":false,"static":false,"w":4,"x":0,"y":14},{"h":6,"i":"75f6ec5c-68bb-4364-971d-559a4683f34d","moved":false,"static":false,"w":4,"x":4,"y":14},{"h":6,"i":"5fedda2e-9c7a-4af9-a9d7-a916c0495b36","moved":false,"static":false,"w":4,"x":8,"y":14},{"h":5,"i":"1602683b-5245-4858-8577-f98c3176a469","moved":false,"static":false,"w":12,"x":0,"y":20},{"h":5,"i":"aecfecd7-1ec6-425d-8cda-6d3e795f8808","moved":false,"static":false,"w":12,"x":0,"y":25},{"h":5,"i":"7ccb18a2-0495-4759-99a6-6d6d25691db1","moved":false,"static":false,"w":12,"x":0,"y":30},{"h":1,"i":"e2304c08-f4c4-4fb2-b264-cf0e160621b0","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":62},{"h":1,"i":"fda92273-88be-4f2e-b380-61325c5158e6","maxH":1,"minH":1,"minW":12,"moved":false,"static":false,"w":12,"x":0,"y":90}],"panelMap":{"82f2d2f2-b2c1-48a2-9260-0c250acc19b1":{"collapsed":false,"widgets":[{"h":6,"i":"7f7fd81a-b759-408a-b8ff-95252425a673","moved":false,"static":false,"w":4,"x":0,"y":8},{"h":6,"i":"92802480-5807-414d-9bed-3f070d535d90","moved":false,"static":false,"w":2,"x":4,"y":8},{"h":6,"i":"71c04124-b6cc-497d-9ea4-7916c6a40511","moved":false,"static":false,"w":2,"x":6,"y":8},{"h":6,"i":"b9a4d8f0-79c5-46ee-89a0-0dc621d8904a","moved":false,"static":false,"w":2,"x":8,"y":8},{"h":6,"i":"5fa06be4-1c8e-4449-836a-ee7bb6786faa","moved":false,"static":false,"w":2,"x":10,"y":8},{"h":6,"i":"7656160d-5b69-4d79-a29d-4083e48dac34","moved":false,"static":false,"w":4,"x":0,"y":14},{"h":6,"i":"75f6ec5c-68bb-4364-971d-559a4683f34d","moved":false,"static":false,"w":4,"x":4,"y":14},{"h":6,"i":"5fedda2e-9c7a-4af9-a9d7-a916c0495b36","moved":false,"static":false,"w":4,"x":8,"y":14},{"h":5,"i":"1602683b-5245-4858-8577-f98c3176a469","moved":false,"static":false,"w":12,"x":0,"y":20},{"h":5,"i":"aecfecd7-1ec6-425d-8cda-6d3e795f8808","moved":false,"static":false,"w":12,"x":0,"y":25},{"h":5,"i":"7ccb18a2-0495-4759-99a6-6d6d25691db1","moved":false,"static":false,"w":12,"x":0,"y":30}]},"c424ad00-f191-46ac-976c-5d98bfccf53c":{"collapsed":false,"widgets":[{"h":6,"i":"106eb0e1-b050-48bd-9ca3-6066ae293d7d","moved":false,"static":false,"w":6,"x":0,"y":2},{"h":6,"i":"80817485-fa76-4de1-86c5-308ee5d2ab61","moved":false,"static":false,"w":6,"x":6,"y":2}]},"e2304c08-f4c4-4fb2-b264-cf0e160621b0":{"collapsed":true,"widgets":[{"h":6,"i":"0a1014be-414e-4bb3-91ef-ddb23671318c","moved":false,"static":false,"w":4,"x":0,"y":63},{"h":6,"i":"1e6309f2-d416-4ffd-8fd0-3b12321073a0","moved":false,"static":false,"w":2,"x":4,"y":63},{"h":6,"i":"cf54e23b-89e9-487b-94e2-bf4355c3f817","moved":false,"static":false,"w":2,"x":6,"y":63},{"h":6,"i":"6a5e9653-549e-4afb-803d-fbf45c9bad88","moved":false,"static":false,"w":2,"x":8,"y":63},{"h":6,"i":"deff5228-9a36-4c67-94e1-eeeb45520646","moved":false,"static":false,"w":2,"x":10,"y":63},{"h":6,"i":"87356c72-d9e5-49f2-9ea1-580846d478cc","moved":false,"static":false,"w":6,"x":0,"y":69},{"h":6,"i":"3d15d9bb-4f17-4299-9adc-07b2f7bc6674","moved":false,"static":false,"w":2,"x":6,"y":69},{"h":6,"i":"0ffd8b7d-6745-4093-b091-4dd6e4e634f4","moved":false,"static":false,"w":2,"x":8,"y":69},{"h":6,"i":"ab4d38e4-fed1-4eed-bb86-0219e207619a","moved":false,"static":false,"w":2,"x":10,"y":69},{"h":5,"i":"a6a0f180-5d51-4765-b10e-04f8d60f1147","moved":false,"static":false,"w":12,"x":0,"y":75},{"h":5,"i":"eca7aa86-0e8b-41bb-b198-c31356051a6a","moved":false,"static":false,"w":12,"x":0,"y":80},{"h":5,"i":"32a0c6b0-ff33-4ff2-858e-f04cee22dac7","moved":false,"static":false,"w":12,"x":0,"y":85}]},"fda92273-88be-4f2e-b380-61325c5158e6":{"collapsed":true,"widgets":[{"h":6,"i":"a78ea8ba-a87e-4426-9817-8c598e3bb343","moved":false,"static":false,"w":4,"x":0,"y":118},{"h":6,"i":"e26fcc3e-e88d-45c8-a21e-4102e9cc1aee","moved":false,"static":false,"w":2,"x":4,"y":118},{"h":6,"i":"c2272e67-83ad-41fd-80d0-ed18a2d1f989","moved":false,"static":false,"w":2,"x":6,"y":118},{"h":6,"i":"1658b8b1-ca91-4afc-adf8-6e9d70b23095","moved":false,"static":false,"w":2,"x":8,"y":118},{"h":6,"i":"13513153-f696-46ee-9757-5624ec4a3622","moved":false,"static":false,"w":2,"x":10,"y":118},{"h":6,"i":"09f001c3-2949-4f85-ae67-b644696063a4","moved":false,"static":false,"w":4,"x":0,"y":124},{"h":6,"i":"5fa71fbb-c97e-4dae-8765-d0b70938b73a","moved":false,"static":false,"w":4,"x":4,"y":124},{"h":6,"i":"74536aea-946e-45f3-9995-30e8df2f3326","moved":false,"static":false,"w":4,"x":8,"y":124},{"h":5,"i":"ec572ebe-86d1-4dbb-9019-99a88e1ea877","moved":false,"static":false,"w":12,"x":0,"y":130},{"h":5,"i":"e44016ed-f381-4032-999e-97463d61a45b","moved":false,"static":false,"w":12,"x":0,"y":135},{"h":5,"i":"e1ed0d93-6e11-48f6-99ec-a69852844b8c","moved":false,"static":false,"w":12,"x":0,"y":140}]}},"tags":[],"title":"MicroTx","uploadedGrafana":false,"uuid":"0199ec29-9f1d-76e6-9d44-406873a32899","version":"v4","widgets":[{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"7f7fd81a-b759-408a-b8ff-95252425a673","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"xa_transactions","type":"Gauge"},"aggregateOperator":"latest","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"latest"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"eb8e8a25-caf9-49b8-8cd8-7706620bea4d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number of active XA Transactions","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"80817485-fa76-4de1-86c5-308ee5d2ab61","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"container.memory.usage","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"k8s.container.name = 'otmm-tcs'"},"functions":[],"groupBy":[{"dataType":"string","id":"k8s_pod_name--string--tag","isColumn":false,"isJSON":false,"key":"k8s_pod_name","type":"tag"},{"dataType":"string","id":"k8s_container_name--string--tag","isColumn":false,"isJSON":false,"key":"k8s_container_name","type":"tag"}],"having":{"expression":""},"legend":"{{k8s_pod_name}}/{{k8s_container_name}}: Memory Usage","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"bb9157b3-dc95-403a-91a9-8fb9a3772a21","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"MicroTx Pods Memory Usage","yAxisUnit":"decbytes"},{"description":"","id":"c424ad00-f191-46ac-976c-5d98bfccf53c","panelTypes":"row","title":"Coordinator Resources"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"","fillSpans":false,"id":"106eb0e1-b050-48bd-9ca3-6066ae293d7d","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"container.cpu.usage","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":false,"expression":"A","filter":{"expression":"k8s.container.name = 'otmm-tcs'"},"functions":[],"groupBy":[{"dataType":"string","id":"k8s_pod_name--string--tag","isColumn":false,"isJSON":false,"key":"k8s_pod_name","type":"tag"},{"dataType":"string","id":"k8s_container_name--string--tag","isColumn":false,"isJSON":false,"key":"k8s_container_name","type":"tag"}],"having":{"expression":""},"legend":"{{k8s_pod_name}}/{{k8s_container_name}}: CPU Usage","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2b7c164c-6952-4d97-945b-966585d4ef5b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"MicroTx Pods CPU Usage","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"92802480-5807-414d-9bed-3f070d535d90","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_initiated_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_initiated_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1a6ec3ff-6e3e-48b8-8276-5c574d555613","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Initiated","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"71c04124-b6cc-497d-9ea4-7916c6a40511","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_committed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_committed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"fd3a016d-0c0f-49bd-b40a-4cd3fe778049","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Committed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"b9a4d8f0-79c5-46ee-89a0-0dc621d8904a","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_rolledback_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_rolledback_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"bd25561a-53ad-44d6-b135-a3fc7e0ff1fc","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Rolled Back","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"5fa06be4-1c8e-4449-836a-ee7bb6786faa","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0b51c0a8-b10c-4d02-9306-d52205684cc9","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Heuristic","yAxisUnit":"none"},{"description":"","id":"82f2d2f2-b2c1-48a2-9260-0c250acc19b1","panelTypes":"row","title":"XA Transactions"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"7656160d-5b69-4d79-a29d-4083e48dac34","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_branches--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"xa_branches","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Branches","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"e1b68fe5-9a0c-49d1-b832-5083d6a77631","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number of active XA branches","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"5fedda2e-9c7a-4af9-a9d7-a916c0495b36","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_branches_rolledback_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_branches_rolledback_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Branches","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"95b860b6-5af9-4921-90f4-4abc8c0db5c2","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Rolled Back branches","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"75f6ec5c-68bb-4364-971d-559a4683f34d","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_branches_committed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_branches_committed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Branches","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2e5ccb37-5ac8-4bd0-b73a-515a4e835ced","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Committed branches","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Transaction rate in last five minutes","fillSpans":false,"id":"1602683b-5245-4858-8577-f98c3176a469","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_committed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_committed_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_rolledback_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_rolledback_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_committed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_committed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"C","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"xa_transactions_rolledback_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"xa_transactions_rolledback_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"D","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"D","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[{"disabled":false,"expression":"A+B","legend":"Rate","queryName":"F1"},{"disabled":false,"expression":"C+D","legend":"Overall","queryName":"F2"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d222abf1-3b0d-4e7f-a944-45742f8645ec","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"LAST_5_MIN","title":"Transaction throughput","yAxisUnit":"cps"},{"bucketCount":100,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"XA Transaction duration in milliseconds","fillSpans":false,"id":"aecfecd7-1ec6-425d-8cda-6d3e795f8808","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"histogram","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"xa_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p50","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p75","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"p90","temporality":"","timeAggregation":""}],"dataSource":"metrics","disabled":true,"expression":"C","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p90","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"D","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p95","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"E","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p99","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"125af511-1d9d-469d-acf4-513f7cde5ec5","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"XA Transaction duration in milliseconds","yAxisUnit":"ms"},{"bucketCount":100,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"XA branch duration in milliseconds","fillSpans":false,"id":"7ccb18a2-0495-4759-99a6-6d6d25691db1","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"histogram","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"xa_branch_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"p90","temporality":"","timeAggregation":""}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p50","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_branch_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p75","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_branch_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"C","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p90","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_branch_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"D","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p95","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"xa_branch_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"E","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p99","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"45be1efc-6b0c-42e7-98c6-ff8957eb21e9","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"XA branch duration in milliseconds","yAxisUnit":"ms"},{"description":"","id":"e2304c08-f4c4-4fb2-b264-cf0e160621b0","panelTypes":"row","title":"LRA Transactions"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"0a1014be-414e-4bb3-91ef-ddb23671318c","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"lra_transactions","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1d8fa63a-734a-40e0-b0d1-3a61f99d139d","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number of active LRA Transactions","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"1e6309f2-d416-4ffd-8fd0-3b12321073a0","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_started_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_started_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"371c5a33-3b1b-4868-aae3-315861649e9b","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Started","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"cf54e23b-89e9-487b-94e2-bf4355c3f817","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_closed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_closed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ed369d7a-322f-498a-a1df-2c6e5d59ee70","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Closed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"6a5e9653-549e-4afb-803d-fbf45c9bad88","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_canceled_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"5897d1b8-567a-4d55-89e8-5da95312cb67","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cancelled","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"deff5228-9a36-4c67-94e1-eeeb45520646","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"531b4266-959a-4281-acba-b43e094d4d5e","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Heuristic","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"87356c72-d9e5-49f2-9ea1-580846d478cc","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_participants--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"lra_participants","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Participants","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"avg","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"bd379a20-6bfe-4fcb-a9b5-a204d0e687ff","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number of active LRA Participants","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"3d15d9bb-4f17-4299-9adc-07b2f7bc6674","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_participants_enlisted_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_participants_enlisted_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Participants","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c2e577ce-8823-44a2-b096-53656f2e9b50","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Enlisted","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"0ffd8b7d-6745-4093-b091-4dd6e4e634f4","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_participants_completed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_participants_completed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Participants","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"0080f333-bdfb-4421-9b31-0c54f77ad955","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Completed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"ab4d38e4-fed1-4eed-bb86-0219e207619a","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_participants_compensated_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_participants_compensated_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Participants","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"1365e03c-d07e-4528-8276-6951d5d3af84","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Compensated","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Transaction rate in last five minutes","fillSpans":false,"id":"a6a0f180-5d51-4765-b10e-04f8d60f1147","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_closed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_closed_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_canceled_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"C","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_closed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_closed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"D","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"D","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_canceled_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"E","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"E","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"lra_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"lra_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"F","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"F","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[{"disabled":false,"expression":"A+B+C","legend":"Rate","queryName":"F1"},{"disabled":false,"expression":"D+E+F","legend":"Overall","queryName":"F2"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"2abf2869-b0ca-4f82-80df-ede63760f1b1","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"LAST_5_MIN","title":"LRA Transaction throughput","yAxisUnit":"cps"},{"bucketCount":100,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"LRA transaction duration in milliseconds","fillSpans":false,"id":"eca7aa86-0e8b-41bb-b198-c31356051a6a","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"histogram","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"lra_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"p90","temporality":"","timeAggregation":""}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p50","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p75","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"C","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p90","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"D","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p95","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"E","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p99","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b396922b-767c-43c9-be5f-7f845d0afbe4","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"LRA transaction duration in milliseconds","yAxisUnit":"ms"},{"bucketCount":100,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"LRA participant duration in milliseconds","fillSpans":false,"id":"32a0c6b0-ff33-4ff2-858e-f04cee22dac7","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"histogram","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"lra_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p50","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p75","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"C","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p90","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"D","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p95","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"lra_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"E","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p99","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"fc6b4156-9323-4e08-8112-788a5b0837c7","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"LRA participant duration in milliseconds","yAxisUnit":"ms"},{"description":"","id":"fda92273-88be-4f2e-b380-61325c5158e6","panelTypes":"row","title":"TCC Transactions"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"a78ea8ba-a87e-4426-9817-8c598e3bb343","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"tcc_transactions","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"efa45a7a-dc7a-49ef-94e4-b0e3f53c5029","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number of active TCC Transactions","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"e26fcc3e-e88d-45c8-a21e-4102e9cc1aee","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_confirmed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_confirmed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"b7cffd2b-590c-460d-8f17-99bd75ceaea0","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Confirmed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"c2272e67-83ad-41fd-80d0-ed18a2d1f989","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_inprocess_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_inprocess_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"ec1ad716-7257-4ace-92ec-db8d6b01b784","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"InProcess","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"1658b8b1-ca91-4afc-adf8-6e9d70b23095","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_canceled_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"c94a4084-79e2-4a79-adc2-d78922b366c3","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Cancelled","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"13513153-f696-46ee-9757-5624ec4a3622","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"372dda72-8eff-4398-8c62-ee608f956593","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Heuristic","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"09f001c3-2949-4f85-ae67-b644696063a4","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_participants--float64--Gauge--true","isColumn":true,"isJSON":false,"key":"tcc_participants","type":"Gauge"},"aggregateOperator":"sum","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Transactions","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"sum"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"d99db24a-9c7c-4350-bfd2-e6ad3a70cb06","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Number of active TCC Participants","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"5fa71fbb-c97e-4dae-8765-d0b70938b73a","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_participants_confirmed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_participants_confirmed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Participants","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"852524b7-754c-48e1-9b56-b49a69908742","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Confirmed","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"","fillSpans":false,"id":"74536aea-946e-45f3-9995-30e8df2f3326","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"value","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_participants_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_participants_canceled_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":false,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"Participants","limit":null,"orderBy":[],"queryName":"A","reduceTo":"sum","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"efbe2eaa-11fc-4758-8201-035754bb1223","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"Canceled","yAxisUnit":"none"},{"bucketCount":30,"bucketWidth":0,"columnUnits":{},"description":"Transaction rate in last five minutes","fillSpans":false,"id":"ec572ebe-86d1-4dbb-9019-99a88e1ea877","isStacked":false,"mergeAllActiveQueries":false,"nullZeroValues":"zero","opacity":"1","panelTypes":"graph","query":{"builder":{"queryData":[{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_confirmed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_confirmed_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"A","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"A","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_canceled_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"B","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"B","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"rate","dataSource":"metrics","disabled":true,"expression":"C","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"C","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"rate"},{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_confirmed_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_confirmed_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"D","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"D","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_canceled_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_canceled_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"E","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"E","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"},{"aggregateAttribute":{"dataType":"float64","id":"tcc_transactions_heuristic_total--float64--Sum--true","isColumn":true,"isJSON":false,"key":"tcc_transactions_heuristic_total","type":"Sum"},"aggregateOperator":"increase","dataSource":"metrics","disabled":true,"expression":"F","filters":{"items":[],"op":"AND"},"functions":[],"groupBy":[],"having":[],"legend":"","limit":null,"orderBy":[],"queryName":"F","reduceTo":"avg","spaceAggregation":"sum","stepInterval":60,"timeAggregation":"increase"}],"queryFormulas":[{"disabled":false,"expression":"A+B+C","legend":"Rate","queryName":"F1"},{"disabled":false,"expression":"D+E+F","legend":"Overall","queryName":"F2"}]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"fcc7e876-5db3-4de0-baa2-de3d7ccb0e7c","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"LAST_5_MIN","title":"TCC Transaction throughput","yAxisUnit":"cps"},{"bucketCount":100,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"TCC transaction duration in milliseconds","fillSpans":false,"id":"e44016ed-f381-4032-999e-97463d61a45b","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"histogram","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"tcc_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p50","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p75","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"C","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p90","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"D","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p95","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_transaction_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"E","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p99","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"80decfe6-ab38-42c9-ad99-eef07ea37088","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"TCC transaction duration in milliseconds","yAxisUnit":"ms"},{"bucketCount":100,"bucketWidth":0,"columnUnits":{},"contextLinks":{"linksData":[]},"customLegendColors":{},"description":"TCC participant duration in milliseconds","fillSpans":false,"id":"e1ed0d93-6e11-48f6-99ec-a69852844b8c","isLogScale":false,"isStacked":false,"legendPosition":"bottom","mergeAllActiveQueries":true,"nullZeroValues":"zero","opacity":"1","panelTypes":"histogram","query":{"builder":{"queryData":[{"aggregations":[{"metricName":"tcc_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"A","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p50","limit":null,"orderBy":[],"queryName":"A","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"B","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p75","limit":null,"orderBy":[],"queryName":"B","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"C","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p90","limit":null,"orderBy":[],"queryName":"C","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"D","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p95","limit":null,"orderBy":[],"queryName":"D","source":"","stepInterval":60},{"aggregations":[{"metricName":"tcc_participant_duration_milliseconds.bucket","reduceTo":"avg","spaceAggregation":"avg","temporality":"","timeAggregation":"avg"}],"dataSource":"metrics","disabled":true,"expression":"E","filter":{"expression":""},"functions":[],"groupBy":[{"dataType":"string","id":"le--string--tag","isColumn":false,"isJSON":false,"key":"le","type":"tag"}],"having":{"expression":""},"legend":"p99","limit":null,"orderBy":[],"queryName":"E","source":"","stepInterval":60}],"queryFormulas":[]},"clickhouse_sql":[{"disabled":false,"legend":"","name":"A","query":""}],"id":"21b7c1ba-5abd-4193-922b-791d456dad48","promql":[{"disabled":false,"legend":"","name":"A","query":""}],"queryType":"builder"},"selectedLogFields":[{"dataType":"string","name":"body","type":""},{"dataType":"string","name":"timestamp","type":""}],"selectedTracesFields":[{"dataType":"string","id":"serviceName--string--tag--true","isColumn":true,"isJSON":false,"key":"serviceName","type":"tag"},{"dataType":"string","id":"name--string--tag--true","isColumn":true,"isJSON":false,"key":"name","type":"tag"},{"dataType":"float64","id":"durationNano--float64--tag--true","isColumn":true,"isJSON":false,"key":"durationNano","type":"tag"},{"dataType":"string","id":"httpMethod--string--tag--true","isColumn":true,"isJSON":false,"key":"httpMethod","type":"tag"},{"dataType":"string","id":"responseStatusCode--string--tag--true","isColumn":true,"isJSON":false,"key":"responseStatusCode","type":"tag"}],"softMax":0,"softMin":0,"stackedBarChart":false,"thresholds":[],"timePreferance":"GLOBAL_TIME","title":"TCC participant duration in milliseconds","yAxisUnit":"ms"}]} \ No newline at end of file +{ + "schemaVersion": "v6", + "image": "/assets/Icons/eight-ball", + "name": "", + "generateName": true, + "tags": [], + "spec": { + "display": { + "name": "MicroTx", + "description": "" + }, + "variables": [], + "panels": { + "09f001c3-2949-4f85-ae67-b644696063a4": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number of active TCC Participants", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participants", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "0a1014be-414e-4bb3-91ef-ddb23671318c": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number of active LRA Transactions", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "0ffd8b7d-6745-4093-b091-4dd6e4e634f4": { + "kind": "Panel", + "spec": { + "display": { + "name": "Completed", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participants_completed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Participants" + } + } + } + } + ], + "links": [] + } + }, + "106eb0e1-b050-48bd-9ca3-6066ae293d7d": { + "kind": "Panel", + "spec": { + "display": { + "name": "MicroTx Pods CPU Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "container.cpu.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.container.name = 'otmm-tcs'" + }, + "groupBy": [ + { + "name": "k8s_pod_name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s_container_name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s_pod_name}}/{{k8s_container_name}}: CPU Usage" + } + } + } + } + ], + "links": [] + } + }, + "13513153-f696-46ee-9757-5624ec4a3622": { + "kind": "Panel", + "spec": { + "display": { + "name": "Heuristic", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "1602683b-5245-4858-8577-f98c3176a469": { + "kind": "Panel", + "spec": { + "display": { + "name": "Transaction throughput", + "description": "Transaction rate in last five minutes" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "last_5_min", + "fillSpans": false + }, + "formatting": { + "unit": "cps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_committed_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_rolledback_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_committed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_rolledback_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A+B", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Rate" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F2", + "expression": "C+D", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Overall" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "1658b8b1-ca91-4afc-adf8-6e9d70b23095": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cancelled", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_canceled_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "1e6309f2-d416-4ffd-8fd0-3b12321073a0": { + "kind": "Panel", + "spec": { + "display": { + "name": "Started", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_started_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "32a0c6b0-ff33-4ff2-858e-f04cee22dac7": { + "kind": "Panel", + "spec": { + "display": { + "name": "LRA participant duration in milliseconds", + "description": "LRA participant duration in milliseconds" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": true + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p75" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "3d15d9bb-4f17-4299-9adc-07b2f7bc6674": { + "kind": "Panel", + "spec": { + "display": { + "name": "Enlisted", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participants_enlisted_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Participants" + } + } + } + } + ], + "links": [] + } + }, + "5fa06be4-1c8e-4449-836a-ee7bb6786faa": { + "kind": "Panel", + "spec": { + "display": { + "name": "Heuristic", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "5fa71fbb-c97e-4dae-8765-d0b70938b73a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Confirmed", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participants_confirmed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Participants" + } + } + } + } + ], + "links": [] + } + }, + "5fedda2e-9c7a-4af9-a9d7-a916c0495b36": { + "kind": "Panel", + "spec": { + "display": { + "name": "Rolled Back branches", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branches_rolledback_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Branches" + } + } + } + } + ], + "links": [] + } + }, + "6a5e9653-549e-4afb-803d-fbf45c9bad88": { + "kind": "Panel", + "spec": { + "display": { + "name": "Cancelled", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_canceled_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "71c04124-b6cc-497d-9ea4-7916c6a40511": { + "kind": "Panel", + "spec": { + "display": { + "name": "Committed", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_committed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "74536aea-946e-45f3-9995-30e8df2f3326": { + "kind": "Panel", + "spec": { + "display": { + "name": "Canceled", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participants_canceled_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Participants" + } + } + } + } + ], + "links": [] + } + }, + "75f6ec5c-68bb-4364-971d-559a4683f34d": { + "kind": "Panel", + "spec": { + "display": { + "name": "Committed branches", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branches_committed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Branches" + } + } + } + } + ], + "links": [] + } + }, + "7656160d-5b69-4d79-a29d-4083e48dac34": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number of active XA branches", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branches", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Branches" + } + } + } + } + ], + "links": [] + } + }, + "7ccb18a2-0495-4759-99a6-6d6d25691db1": { + "kind": "Panel", + "spec": { + "display": { + "name": "XA branch duration in milliseconds", + "description": "XA branch duration in milliseconds" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": true + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branch_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branch_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p75" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branch_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branch_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_branch_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "7f7fd81a-b759-408a-b8ff-95252425a673": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number of active XA Transactions", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions", + "temporality": "", + "timeAggregation": "latest", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "80817485-fa76-4de1-86c5-308ee5d2ab61": { + "kind": "Panel", + "spec": { + "display": { + "name": "MicroTx Pods Memory Usage", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "decbytes", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "container.memory.usage", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "filter": { + "expression": "k8s.container.name = 'otmm-tcs'" + }, + "groupBy": [ + { + "name": "k8s_pod_name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + }, + { + "name": "k8s_container_name", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "{{k8s_pod_name}}/{{k8s_container_name}}: Memory Usage" + } + } + } + } + ], + "links": [] + } + }, + "87356c72-d9e5-49f2-9ea1-580846d478cc": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number of active LRA Participants", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participants", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Participants" + } + } + } + } + ], + "links": [] + } + }, + "92802480-5807-414d-9bed-3f070d535d90": { + "kind": "Panel", + "spec": { + "display": { + "name": "Initiated", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_initiated_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "a6a0f180-5d51-4765-b10e-04f8d60f1147": { + "kind": "Panel", + "spec": { + "display": { + "name": "LRA Transaction throughput", + "description": "Transaction rate in last five minutes" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "last_5_min", + "fillSpans": false + }, + "formatting": { + "unit": "cps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_closed_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_canceled_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_closed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_canceled_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "F", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A+B+C", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Rate" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F2", + "expression": "D+E+F", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Overall" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "a78ea8ba-a87e-4426-9817-8c598e3bb343": { + "kind": "Panel", + "spec": { + "display": { + "name": "Number of active TCC Transactions", + "description": "" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "global_time", + "fillSpans": false + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions", + "temporality": "", + "timeAggregation": "sum", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "ab4d38e4-fed1-4eed-bb86-0219e207619a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Compensated", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_participants_compensated_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Participants" + } + } + } + } + ], + "links": [] + } + }, + "aecfecd7-1ec6-425d-8cda-6d3e795f8808": { + "kind": "Panel", + "spec": { + "display": { + "name": "XA Transaction duration in milliseconds", + "description": "XA Transaction duration in milliseconds" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": true + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p75" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "b9a4d8f0-79c5-46ee-89a0-0dc621d8904a": { + "kind": "Panel", + "spec": { + "display": { + "name": "Rolled Back", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "xa_transactions_rolledback_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "c2272e67-83ad-41fd-80d0-ed18a2d1f989": { + "kind": "Panel", + "spec": { + "display": { + "name": "InProcess", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_inprocess_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "cf54e23b-89e9-487b-94e2-bf4355c3f817": { + "kind": "Panel", + "spec": { + "display": { + "name": "Closed", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_closed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "deff5228-9a36-4c67-94e1-eeeb45520646": { + "kind": "Panel", + "spec": { + "display": { + "name": "Heuristic", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "e1ed0d93-6e11-48f6-99ec-a69852844b8c": { + "kind": "Panel", + "spec": { + "display": { + "name": "TCC participant duration in milliseconds", + "description": "TCC participant duration in milliseconds" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": true + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p75" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_participant_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "e26fcc3e-e88d-45c8-a21e-4102e9cc1aee": { + "kind": "Panel", + "spec": { + "display": { + "name": "Confirmed", + "description": "" + }, + "plugin": { + "kind": "signoz/NumberPanel", + "spec": { + "visualization": { + "timePreference": "global_time" + }, + "formatting": { + "unit": "none", + "decimalPrecision": "2" + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "scalar", + "spec": { + "name": "A", + "plugin": { + "kind": "signoz/BuilderQuery", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_confirmed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "sum" + } + ], + "disabled": false, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "Transactions" + } + } + } + } + ], + "links": [] + } + }, + "e44016ed-f381-4032-999e-97463d61a45b": { + "kind": "Panel", + "spec": { + "display": { + "name": "TCC transaction duration in milliseconds", + "description": "TCC transaction duration in milliseconds" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": true + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p75" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "ec572ebe-86d1-4dbb-9019-99a88e1ea877": { + "kind": "Panel", + "spec": { + "display": { + "name": "TCC Transaction throughput", + "description": "Transaction rate in last five minutes" + }, + "plugin": { + "kind": "signoz/TimeSeriesPanel", + "spec": { + "visualization": { + "timePreference": "last_5_min", + "fillSpans": false + }, + "formatting": { + "unit": "cps", + "decimalPrecision": "2" + }, + "chartAppearance": { + "lineInterpolation": "spline", + "showPoints": false, + "lineStyle": "solid", + "fillMode": "none", + "spanGaps": { + "fillOnlyBelow": false, + "fillLessThan": "" + } + }, + "axes": { + "softMin": 0, + "softMax": 0, + "isLogScale": false + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + }, + "thresholds": null + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_confirmed_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_canceled_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "rate", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_confirmed_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_canceled_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_query", + "spec": { + "name": "F", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "tcc_transactions_heuristic_total", + "temporality": "", + "timeAggregation": "increase", + "spaceAggregation": "sum", + "reduceTo": "avg" + } + ], + "disabled": true, + "groupBy": [], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F1", + "expression": "A+B+C", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Rate" + } + }, + { + "type": "builder_formula", + "spec": { + "name": "F2", + "expression": "D+E+F", + "disabled": false, + "having": { + "expression": "" + }, + "legend": "Overall" + } + } + ] + } + } + } + } + ], + "links": [] + } + }, + "eca7aa86-0e8b-41bb-b198-c31356051a6a": { + "kind": "Panel", + "spec": { + "display": { + "name": "LRA transaction duration in milliseconds", + "description": "LRA transaction duration in milliseconds" + }, + "plugin": { + "kind": "signoz/HistogramPanel", + "spec": { + "histogramBuckets": { + "bucketCount": 100, + "bucketWidth": 0, + "mergeAllActiveQueries": true + }, + "legend": { + "position": "bottom", + "mode": "list", + "customColors": null + } + } + }, + "queries": [ + { + "kind": "time_series", + "spec": { + "plugin": { + "kind": "signoz/CompositeQuery", + "spec": { + "queries": [ + { + "type": "builder_query", + "spec": { + "name": "A", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "", + "spaceAggregation": "p90", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p50" + } + }, + { + "type": "builder_query", + "spec": { + "name": "B", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p75" + } + }, + { + "type": "builder_query", + "spec": { + "name": "C", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p90" + } + }, + { + "type": "builder_query", + "spec": { + "name": "D", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p95" + } + }, + { + "type": "builder_query", + "spec": { + "name": "E", + "stepInterval": 60, + "signal": "metrics", + "source": "", + "aggregations": [ + { + "metricName": "lra_transaction_duration_milliseconds.bucket", + "temporality": "", + "timeAggregation": "avg", + "spaceAggregation": "avg", + "reduceTo": "avg" + } + ], + "disabled": true, + "filter": { + "expression": "" + }, + "groupBy": [ + { + "name": "le", + "signal": "", + "fieldContext": "attribute", + "fieldDataType": "string" + } + ], + "order": [], + "having": { + "expression": "" + }, + "functions": [], + "legend": "p99" + } + } + ] + } + } + } + } + ], + "links": [] + } + } + }, + "layouts": [ + { + "kind": "Grid", + "spec": { + "display": { + "title": "Coordinator Resources", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/106eb0e1-b050-48bd-9ca3-6066ae293d7d" + } + }, + { + "x": 6, + "y": 0, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/80817485-fa76-4de1-86c5-308ee5d2ab61" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "XA Transactions", + "collapse": { + "open": true + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/7f7fd81a-b759-408a-b8ff-95252425a673" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/92802480-5807-414d-9bed-3f070d535d90" + } + }, + { + "x": 6, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/71c04124-b6cc-497d-9ea4-7916c6a40511" + } + }, + { + "x": 8, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/b9a4d8f0-79c5-46ee-89a0-0dc621d8904a" + } + }, + { + "x": 10, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/5fa06be4-1c8e-4449-836a-ee7bb6786faa" + } + }, + { + "x": 0, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/7656160d-5b69-4d79-a29d-4083e48dac34" + } + }, + { + "x": 4, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/75f6ec5c-68bb-4364-971d-559a4683f34d" + } + }, + { + "x": 8, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/5fedda2e-9c7a-4af9-a9d7-a916c0495b36" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/1602683b-5245-4858-8577-f98c3176a469" + } + }, + { + "x": 0, + "y": 17, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/aecfecd7-1ec6-425d-8cda-6d3e795f8808" + } + }, + { + "x": 0, + "y": 22, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/7ccb18a2-0495-4759-99a6-6d6d25691db1" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "LRA Transactions", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/0a1014be-414e-4bb3-91ef-ddb23671318c" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/1e6309f2-d416-4ffd-8fd0-3b12321073a0" + } + }, + { + "x": 6, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/cf54e23b-89e9-487b-94e2-bf4355c3f817" + } + }, + { + "x": 8, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/6a5e9653-549e-4afb-803d-fbf45c9bad88" + } + }, + { + "x": 10, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/deff5228-9a36-4c67-94e1-eeeb45520646" + } + }, + { + "x": 0, + "y": 6, + "width": 6, + "height": 6, + "content": { + "$ref": "#/spec/panels/87356c72-d9e5-49f2-9ea1-580846d478cc" + } + }, + { + "x": 6, + "y": 6, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/3d15d9bb-4f17-4299-9adc-07b2f7bc6674" + } + }, + { + "x": 8, + "y": 6, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/0ffd8b7d-6745-4093-b091-4dd6e4e634f4" + } + }, + { + "x": 10, + "y": 6, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/ab4d38e4-fed1-4eed-bb86-0219e207619a" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/a6a0f180-5d51-4765-b10e-04f8d60f1147" + } + }, + { + "x": 0, + "y": 17, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/eca7aa86-0e8b-41bb-b198-c31356051a6a" + } + }, + { + "x": 0, + "y": 22, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/32a0c6b0-ff33-4ff2-858e-f04cee22dac7" + } + } + ] + } + }, + { + "kind": "Grid", + "spec": { + "display": { + "title": "TCC Transactions", + "collapse": { + "open": false + } + }, + "items": [ + { + "x": 0, + "y": 0, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/a78ea8ba-a87e-4426-9817-8c598e3bb343" + } + }, + { + "x": 4, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/e26fcc3e-e88d-45c8-a21e-4102e9cc1aee" + } + }, + { + "x": 6, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/c2272e67-83ad-41fd-80d0-ed18a2d1f989" + } + }, + { + "x": 8, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/1658b8b1-ca91-4afc-adf8-6e9d70b23095" + } + }, + { + "x": 10, + "y": 0, + "width": 2, + "height": 6, + "content": { + "$ref": "#/spec/panels/13513153-f696-46ee-9757-5624ec4a3622" + } + }, + { + "x": 0, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/09f001c3-2949-4f85-ae67-b644696063a4" + } + }, + { + "x": 4, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/5fa71fbb-c97e-4dae-8765-d0b70938b73a" + } + }, + { + "x": 8, + "y": 6, + "width": 4, + "height": 6, + "content": { + "$ref": "#/spec/panels/74536aea-946e-45f3-9995-30e8df2f3326" + } + }, + { + "x": 0, + "y": 12, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/ec572ebe-86d1-4dbb-9019-99a88e1ea877" + } + }, + { + "x": 0, + "y": 17, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/e44016ed-f381-4032-999e-97463d61a45b" + } + }, + { + "x": 0, + "y": 22, + "width": 12, + "height": 5, + "content": { + "$ref": "#/spec/panels/e1ed0d93-6e11-48f6-99ec-a69852844b8c" + } + } + ] + } + } + ], + "duration": "", + "refreshInterval": "", + "links": [] + } +} diff --git a/helm/infra-charts/obaas/examples/README.md b/helm/infra-charts/obaas/examples/README.md index a5a687046..d63f19489 100644 --- a/helm/infra-charts/obaas/examples/README.md +++ b/helm/infra-charts/obaas/examples/README.md @@ -2,6 +2,16 @@ This directory contains example values files demonstrating different configuration scenarios for the OBaaS Helm chart. +Draft SigNoz [small, medium and distributed resource profiles](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles) +provide starting allocations and document topology, storage and validation +boundaries. The optional [PostgreSQL metadata example](values-signoz-postgres.yaml) +can be layered with any size profile; sizing profiles do not configure PostgreSQL. +An optional [persistent collector queue example](https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-persistent-queue) +adds a dedicated PVC for a single small/medium collector. +Resource profiles add memory controls to every tier. The distributed profile +provides shard capacity; it has no ClickHouse replica redundancy and requires +per-pod ingestion checks. + ## Available Examples ### 1. Default Configuration (`values-default.yaml`) @@ -96,23 +106,6 @@ Example configuration for using Oracle Database Free as a container in the clust helm upgrade --install obaas . -f examples/values-sidb-free.yaml -n obaas --create-namespace ``` -SIDB-FREE and ADB-FREE persistent storage is enabled by default. The database -PVC uses the cluster default StorageClass unless you select a storage class -appropriate for a single-writer database volume: - -```yaml -database: - persistence: - enabled: true - storageClass: "fast-ssd" - size: 250Gi -``` - -Set `database.persistence.enabled: false` only when ephemeral database data is -acceptable. OBaaS deletes PVCs during -Helm uninstall by default (`global.cleanupPVCs: true`). To retain the database -PVC when the release is removed, set `global.cleanupPVCs: false`. - ### 6. SigNoz Existing Secret (`values-signoz-existing-secret.yaml`) Use a pre-existing Kubernetes secret for SigNoz admin authentication instead of auto-generating one. @@ -133,8 +126,7 @@ helm upgrade --install obaas . -f examples/values-signoz-existing-secret.yaml -n ### 7. Kafka Enabled Configuration (`values-kafka.yaml`) -Create a Strimzi-managed Kafka cluster in the OBaaS release namespace, with full Kafka -observability in SigNoz (the "Kafka Server Monitoring Dashboard") included by default. +Create a Strimzi-managed Kafka cluster in the OBaaS release namespace. **Use case:** Kafka integration testing, CloudBank Helidon producer/consumer workloads, Kafka observability validation @@ -151,6 +143,15 @@ helm upgrade --install obaas . \ --create-namespace ``` +**Optional Kafka metrics in SigNoz:** +```bash +helm upgrade --install obaas . \ + -f examples/values-kafka.yaml \ + -f extensions/kafka-metrics.yaml \ + -n obaas \ + --create-namespace +``` + With release name `obaas`, Kafka clients can use `obaas-kafka-cluster-kafka-bootstrap:9092`. The chart also creates the stable alias `kafka-bootstrap:9092`. @@ -207,6 +208,50 @@ kubectl create secret docker-registry myregistry-secret \ helm upgrade --install obaas . -f examples/values-private-registry.yaml ``` +### 9. SigNoz 0.142.1 Two-Stage Upgrade Profiles + +These files are upgrade profiles and must not be used for a fresh installation: + +| File | Purpose | +|---|---| +| `values-signoz-0.142.1-stage1.yaml` | Selects Stage 1 for a Kubernetes provider with a compatible CSI snapshot class | +| `values-signoz-0.142.1-stage1-oke.yaml` | Adds the OKE OCI Block Volume snapshot class configuration to Stage 1 | +| `values-signoz-0.142.1-stage2.yaml` | Selects the guarded SigNoz and telemetry-migration stage | + +Layer the selected profile after the customer's normal values files and use the +same Helm release name and namespace for both stages. Do not use this README as +the upgrade procedure. Follow [Upgrade SigNoz](https://oracle.github.io/microservices-backend/obaas/docs/observability/upgrade/) +to select a supported path and [Upgrade with protected recovery](https://oracle.github.io/microservices-backend/obaas/docs/observability/upgrade/protected-recovery) +for the complete two-stage procedure, prerequisites, commands, validation, and +recovery guidance. + +### 10. MicroTx Enterprise Edition ([`values-microtx-ee.yaml`](values-microtx-ee.yaml)) + +Enables the Enterprise Edition coordinator, workflow server, and console with +database-backed coordinator storage and a retained 10Gi workflow-file PVC. + +**Use case:** MicroTx Enterprise Edition deployments with durable transaction state +and workflow files + +**Prerequisites:** + +1. Accept the Enterprise Edition image terms and create `ocr-secret` in the release namespace. +2. Prepare database privileges and quota. The example defaults to shared OBaaS application credentials; configure a separate coordinator schema when running both the coordinator and workflow server. +3. Select a suitable StorageClass or existing workflow-file claim. The example disables the namespace PVC cleanup hook to preserve retained files. + +See [MicroTx database storage](../../../../docs-source/site/docs/platform/otmm.md#coordinator-database-storage) +for credentials, wallet configuration, and schema initialization. + +**Installation:** + +```bash +# Run from helm/infra-charts/obaas; layer after your complete environment values. +helm upgrade --install obaas . \ + -n obaas --create-namespace \ + -f \ + -f examples/values-microtx-ee.yaml +``` + ## Customizing Examples You can combine examples or create your own custom values file: diff --git a/helm/infra-charts/obaas/examples/signoz-collector-queue-pvc.yaml b/helm/infra-charts/obaas/examples/signoz-collector-queue-pvc.yaml new file mode 100644 index 000000000..4310cba26 --- /dev/null +++ b/helm/infra-charts/obaas/examples/signoz-collector-queue-pvc.yaml @@ -0,0 +1,21 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# Kubernetes manifest, NOT Helm values. Apply in the OBaaS release namespace. +# One independently managed claim per single-collector release. Change this +# name and the values overlay's claimName together if needed. +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: signoz-collector-queue +spec: + # Requires a CSI driver supporting ReadWriteOncePod. This fences concurrent + # pod access, including pods on the same node. Do not substitute ReadWriteMany. + accessModes: + - ReadWriteOncePod + # Uses the default StorageClass. Select a durable CSI class with working + # fsGroup permissions and file locking; avoid node-local ephemeral storage. + # storageClassName: + resources: + requests: + # Illustrative capacity for all exporter queues plus compaction headroom. + storage: 20Gi diff --git a/helm/infra-charts/obaas/examples/values-ai-optimizer.yaml b/helm/infra-charts/obaas/examples/values-ai-optimizer.yaml index b0689d2c9..632d428bf 100644 --- a/helm/infra-charts/obaas/examples/values-ai-optimizer.yaml +++ b/helm/infra-charts/obaas/examples/values-ai-optimizer.yaml @@ -25,7 +25,7 @@ database: sqlcl: image: repository: container-registry.oracle.com/database/sqlcl - tag: "26.2.0" + tag: "26.2.2" privAuthN: secretName: "db-priv-authn" diff --git a/helm/infra-charts/obaas/examples/values-byodb.yaml b/helm/infra-charts/obaas/examples/values-byodb.yaml index 3880615c5..39b8205b0 100644 --- a/helm/infra-charts/obaas/examples/values-byodb.yaml +++ b/helm/infra-charts/obaas/examples/values-byodb.yaml @@ -50,12 +50,12 @@ database: sqlcl: image: repository: container-registry.oracle.com/database/sqlcl - tag: "26.2.0" + tag: "26.2.2" # For SIDB-FREE/ADB-FREE: container image configuration (exclude for ADB-S) image: repository: "container-registry.oracle.com/database/free" - tag: "23.26.2.0" + tag: "23.26.3.0" # For OTHER: External database connectivity # Either provide 'dsn' OR all of (host, port, service_name) diff --git a/helm/infra-charts/obaas/examples/values-existing-adb.yaml b/helm/infra-charts/obaas/examples/values-existing-adb.yaml index c0b0c71de..303c559ca 100644 --- a/helm/infra-charts/obaas/examples/values-existing-adb.yaml +++ b/helm/infra-charts/obaas/examples/values-existing-adb.yaml @@ -37,7 +37,7 @@ database: sqlcl: image: repository: container-registry.oracle.com/database/sqlcl - tag: "26.2.0" + tag: "26.2.2" # For SIDB-FREE/ADB-FREE: container image configuration (exclude for ADB-S) image: diff --git a/helm/infra-charts/obaas/examples/values-kafka.yaml b/helm/infra-charts/obaas/examples/values-kafka.yaml index 9fd90d537..a1ec30a2e 100644 --- a/helm/infra-charts/obaas/examples/values-kafka.yaml +++ b/helm/infra-charts/obaas/examples/values-kafka.yaml @@ -63,10 +63,6 @@ otmm: oracle-database-exporter: enabled: true -# Observability -signoz: - enabled: true - # AI Optimizer (disabled by default) ai-optimizer: enabled: false @@ -85,11 +81,13 @@ kafka: # automatically via the signoz.io/scrape pod annotation. metricsEnabled: true +# Observability # Scrape Kafka broker/topic/partition/consumer-group facts (broker count, # topic count, consumer lag, replicas, offsets) into SigNoz via the OTel # collector's kafkametrics receiver, for the "Kafka Server Monitoring # Dashboard". signoz: + enabled: true otelCollector: config: receivers: diff --git a/helm/infra-charts/obaas/examples/values-microtx-ee.yaml b/helm/infra-charts/obaas/examples/values-microtx-ee.yaml new file mode 100644 index 000000000..3a8f7f007 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-microtx-ee.yaml @@ -0,0 +1,67 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# Example: MicroTx Enterprise Edition with coordinator database storage. +# Layer after the complete values for your OBaaS installation: +# +# helm upgrade --install helm/infra-charts/obaas \ +# -n --create-namespace \ +# -f \ +# -f helm/infra-charts/obaas/examples/values-microtx-ee.yaml +# +# Prerequisites: +# - Accept the applicable EE image terms and create ocr-secret in the namespace. +# - Prepare database access, schema-creation privileges, and tablespace quota. +# - Select a StorageClass for the workflow files, or provide an existing claim. +# +# By default the coordinator reuses the OBaaS application credentials and wallet. +# Oracle requires separate coordinator and workflow schemas when both use Oracle +# Database. For that setup, override coordinator.storage.db.credentialSecretName +# and connectionString, and provide a custom wallet when required. See: +# https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/26.1/tmmdg/create-data-store.html +# Coordinator schema initialization is enabled by default. The workflow PVC below +# stores uploaded files/connectors; coordinator transaction state is in Oracle DB. + +global: + # Keep the namespace cleanup hook from deleting retained workflow files. + cleanupPVCs: false + +otmm: + coordinator: + imagePullSecrets: + - ocr-secret + enabled: true + storage: + type: db + image: + repository: container-registry.oracle.com/database/microtx-ee-coordinator + tag: "26.1.2" + pullPolicy: IfNotPresent + + workflowServer: + imagePullSecrets: + - ocr-secret + enabled: true + config: + storage: + fileSystem: + persistence: + enabled: true + size: 10Gi + accessModes: [ReadWriteOnce] + retain: true + # Set storageClass for your cluster, or use an existing claim: + # storageClass: "" + # existingClaim: microtx-workflow-files + image: + repository: container-registry.oracle.com/database/microtx-ee-workflow + tag: "26.1.2" + pullPolicy: IfNotPresent + + console: + imagePullSecrets: + - ocr-secret + enabled: true + image: + repository: container-registry.oracle.com/database/microtx-ee-console + tag: "26.1.2" + pullPolicy: IfNotPresent diff --git a/helm/infra-charts/obaas/examples/values-private-registry.yaml b/helm/infra-charts/obaas/examples/values-private-registry.yaml index 1aeb31714..38edcf792 100644 --- a/helm/infra-charts/obaas/examples/values-private-registry.yaml +++ b/helm/infra-charts/obaas/examples/values-private-registry.yaml @@ -72,7 +72,7 @@ global: image: registry: myregistry.example.com repository: alpine/k8s - tag: "1.36.2" + tag: "1.36.4" nginx: image: registry: myregistry.example.com @@ -100,18 +100,18 @@ ai-optimizer: replicaCount: 1 # -- Image details: Required for BYO Infra # imagePullSecrets: [] - # image: - # repository: localhost/ai-optimizer-server - # tag: latest - # pullPolicy: IfNotPresent + image: + repository: myregistry.example.com/obaas/optimizer + tag: "2.5.0" + pullPolicy: IfNotPresent client: enabled: true # -- Image details: Required for BYO Infra # imagePullSecrets: [] - # image: - # repository: localhost/ai-optimizer-client - # tag: latest - # pullPolicy: IfNotPresent + image: + repository: myregistry.example.com/obaas/optimizer + tag: "2.5.0" + pullPolicy: IfNotPresent # Eureka Service Discovery eureka: @@ -124,7 +124,7 @@ eureka: connectionIdleTimeout: 90s image: repository: myregistry.example.com/obaas/service-registry - tag: "2.1.1" + tag: "2.1.2" # Override default resources if needed (defaults: cpu 250m-500m, memory 1Gi-1200Mi) resources: {} @@ -136,7 +136,7 @@ admin-server: replicas: 1 image: repository: myregistry.example.com/obaas/admin-server - tag: "2.1.1" + tag: "2.1.2" # Override default resources if needed (defaults: cpu 250m-500m, memory 256Mi-512Mi) # resources: {} @@ -148,7 +148,7 @@ config-server: replicas: 1 image: repository: myregistry.example.com/obaas/config-server - tag: "2.1.1" + tag: "2.1.2" # Override default resources if needed (defaults: cpu 250m-500m, memory 256Mi-512Mi) # resources: {} @@ -164,7 +164,7 @@ otmm: replicas: 1 image: repository: myregistry.example.com/database/microtx-coordinator - tag: "26.1.1" + tag: "26.1.2" # Override default resources if needed (defaults: cpu 250m, memory 1Gi) # resources: {} workflowServer: @@ -172,12 +172,12 @@ otmm: replicas: 1 image: repository: myregistry.example.com/database/microtx-workflow - tag: "26.1.1" + tag: "26.1.2" console: enabled: true image: repository: myregistry.example.com/database/microtx-console - tag: "26.1.1" + tag: "26.1.2" # Oracle Database Exporter (Prometheus metrics for Oracle Database) oracle-database-exporter: @@ -188,7 +188,7 @@ oracle-database-exporter: replicas: 1 image: repository: myregistry.example.com/database/observability-exporter - tag: "2.4.2" + tag: "2.5.0" # Busybox sidecar for tailing alert.log busybox: repository: myregistry.example.com/busybox @@ -210,12 +210,12 @@ database: sqlcl: image: repository: myregistry.example.com/database/sqlcl - tag: "26.2.0" + tag: "26.2.2" # For SIDB-FREE/ADB-FREE: container image configuration (exclude for ADB-S) image: repository: "myregistry.example.com/database/free" - tag: "23.26.2.0" + tag: "23.26.3.0" # For ADB-S: OCI Autonomous Database OCID (exclude for SIDB-FREE/ADB-FREE/OTHER) oci: @@ -303,15 +303,15 @@ gateway-helm: imagePullSecrets: *imagePullSecrets images: envoyGateway: - image: "myregistry.example.com/envoyproxy/gateway:v1.8.2" + image: "myregistry.example.com/envoyproxy/gateway:v1.9.1" pullPolicy: Always pullSecrets: *imagePullSecrets envoyProxy: - image: "myregistry.example.com/envoyproxy/envoy:distroless-v1.38.3" + image: "myregistry.example.com/envoyproxy/envoy:distroless-v1.39.1" pullPolicy: IfNotPresent pullSecrets: *imagePullSecrets ratelimit: - image: "myregistry.example.com/envoyproxy/ratelimit:17b1956c" + image: "myregistry.example.com/envoyproxy/ratelimit:8fe6ea42" pullPolicy: IfNotPresent pullSecrets: *imagePullSecrets @@ -360,7 +360,7 @@ apisix: # Uses global.imagePullSecrets (expects string list format) global: imagePullSecrets: *imagePullSecrets - security: + security: allowInsecureImages: true # RBAC required for Kubernetes service discovery @@ -469,9 +469,12 @@ apisix: # so APISIX can fail over within the same registry refresh cycle. eureka: host: - - "http://{{ .Release.Name }}-eureka-0.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" - - "http://{{ .Release.Name }}-eureka-1.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" - - "http://{{ .Release.Name }}-eureka-2.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-0.{{ .Release.Name }}-eureka.\ + {{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-1.{{ .Release.Name }}-eureka.\ + {{ .Release.Namespace }}.svc.cluster.local:8761" + - "http://{{ .Release.Name }}-eureka-2.{{ .Release.Name }}-eureka.\ + {{ .Release.Namespace }}.svc.cluster.local:8761" prefix: "/eureka/" fetch_interval: 30 timeout: @@ -521,7 +524,7 @@ apisix: # Full registry path required for clusters with short name mode enforcing image: repository: "myregistry.example.com/apache/apisix" - tag: "3.17.0-ubuntu" + tag: "3.18.0-ubuntu" # Init container image initContainer: @@ -537,15 +540,15 @@ apisix: signoz: enabled: true + setup: + image: + registry: myregistry.example.com + repository: os/oraclelinux + tag: "9" global: imageRegistry: myregistry.example.com - # Utility images for setup jobs + # Utility images for initialization jobs utilities: - curlJq: - image: - registry: myregistry.example.com - repository: curlimages/curl - tag: "8.20.0" busybox: image: registry: myregistry.example.com @@ -674,7 +677,7 @@ signoz: target_label: kubernetes_pod_name - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance] action: replace - target_label: app + target_label: app service: pipelines: logs: @@ -692,6 +695,7 @@ signoz: image: registry: myregistry.example.com repository: signoz/zookeeper + tag: 3.8.4 image: registry: myregistry.example.com repository: clickhouse/clickhouse-server @@ -735,12 +739,12 @@ k8s-infra: image: registry: myregistry.example.com repository: otel/opentelemetry-collector-contrib - tag: 0.139.0 + tag: 0.160.0 otelDeployment: image: registry: myregistry.example.com repository: otel/opentelemetry-collector-contrib - tag: 0.139.0 + tag: 0.160.0 presets: otlpExporter: enabled: true diff --git a/helm/infra-charts/obaas/examples/values-rancher-jwt.yaml b/helm/infra-charts/obaas/examples/values-rancher-jwt.yaml index c30154046..257195fbf 100644 --- a/helm/infra-charts/obaas/examples/values-rancher-jwt.yaml +++ b/helm/infra-charts/obaas/examples/values-rancher-jwt.yaml @@ -56,34 +56,25 @@ otmm: jwksUri: "http://azn-server.obaas.svc.cluster.local:8080/oauth2/jwks" identityProviderUrl: "http://azn-server.obaas.svc.cluster.local:8080/oauth2/token" audience: "microtx-workflow" - adminUserRoles: "microtx-conductor-admin" - adminUserRolesPath: "roles" - policy: - claimsRolePaths: "roles" - roles: - superAdmin: "microtx-conductor-super-admin" - admin: "microtx-conductor-admin" - user: "microtx-conductor-user" - readOnlyUser: "microtx-conductor-read-only-user" - metadataManager: "microtx-conductor-metadata-manager" - worker: "microtx-conductor-worker" + roleMappings: + coordinator: + adminUserRoles: "microtx-conductor-admin" + adminUserRolesPath: "roles" + workflow: + claimsRolePaths: "roles" + roles: + superAdmin: "microtx-conductor-super-admin" + admin: "microtx-conductor-admin" + user: "microtx-conductor-user" + readOnlyUser: "microtx-conductor-read-only-user" + metadataManager: "microtx-conductor-metadata-manager" + worker: "microtx-conductor-worker" coordinator: enabled: true workflowServer: enabled: true - security: - identityProvider: - policy: - claimsRolePaths: "roles" - roles: - superAdmin: "microtx-conductor-super-admin" - admin: "microtx-conductor-admin" - user: "microtx-conductor-user" - readOnlyUser: "microtx-conductor-read-only-user" - metadataManager: "microtx-conductor-metadata-manager" - worker: "microtx-conductor-worker" # The API validation does not require the browser console. Enable it separately # after registering an authorization-code client and cookie-encryption Secret. diff --git a/helm/infra-charts/obaas/examples/values-sidb-free.yaml b/helm/infra-charts/obaas/examples/values-sidb-free.yaml index 0acfeaed8..5fda8d7d8 100644 --- a/helm/infra-charts/obaas/examples/values-sidb-free.yaml +++ b/helm/infra-charts/obaas/examples/values-sidb-free.yaml @@ -16,7 +16,7 @@ database: # Container image for the database # image: # repository: "container-registry.oracle.com/database/free" - # tag: "23.26.2.0" + # tag: "23.26.3.0" # Persistent database storage is enabled by default. Disable it only when # ephemeral database data is acceptable. diff --git a/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage1-oke.yaml b/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage1-oke.yaml new file mode 100644 index 000000000..2d98a0dc8 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage1-oke.yaml @@ -0,0 +1,10 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# OKE overlay for the SigNoz 0.142.1 Stage 1 profile. +# +# Run tools/prepare-oke-volume-snapshots.sh before using this file. The explicit +# class avoids changing or depending on the cluster-wide default snapshot class. + +signozUpgrade: + backup: + volumeSnapshotClassName: obaas-oci-bv-snapshot diff --git a/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage1.yaml b/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage1.yaml new file mode 100644 index 000000000..ab6e18dea --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage1.yaml @@ -0,0 +1,39 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# SigNoz 0.142.1 two-stage upgrade: Stage 1 profile. +# +# Creates retained CSI snapshots, upgrades ClickHouse to 25.12.5, validates the live +# version and snapshot/PVC identities, and writes the completion marker required by +# Stage 2. +# +# Layer this file after the customer's normal values files and use the same Helm +# release name and namespace that own the existing OBaaS installation. Set the Helm +# command timeout higher than signozUpgrade.backup.timeout (30m is recommended for +# the default 20m snapshot timeout). + +signozUpgrade: + stage: stage1 + # Set this if the cluster does not provide one compatible default class: + # backup: + # volumeSnapshotClassName: example-snapshot-class + # OKE users should prepare the cluster with tools/prepare-oke-volume-snapshots.sh + # and layer examples/values-signoz-0.142.1-stage1-oke.yaml after this file. + # Or map heterogeneous PVC StorageClasses to their snapshot classes: + # volumeSnapshotClassByStorageClass: + # example-storage-class: example-snapshot-class + +# Keep SigNoz on the OBaaS 2.1.0 intermediate version during Stage 1 while +# ClickHouse is upgraded to the version required by SigNoz 0.142.1. An OBaaS +# 2.0.0 source installation therefore passes through this intermediate version. +signoz: + signoz: + image: + tag: v0.113.0 + otelCollector: + image: + tag: v0.144.1 + telemetryStoreMigrator: + enabled: false + clickhouse: + image: + tag: 25.12.5 diff --git a/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage2.yaml b/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage2.yaml new file mode 100644 index 000000000..74619f937 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-0.142.1-stage2.yaml @@ -0,0 +1,13 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# SigNoz 0.142.1 two-stage upgrade: Stage 2 profile. +# +# Enforces the Stage 1 result, upgrades SigNoz to 0.142.1 and the collector to +# 0.144.10, runs telemetry migrations, removes obsolete OIDC mock resources, reruns +# login/dashboard setup, and validates historical plus newly ingested telemetry. +# +# Layer this file after the customer's normal values files and use the same Helm +# release name and namespace that own the existing OBaaS installation. + +signozUpgrade: + stage: stage2 diff --git a/helm/infra-charts/obaas/examples/values-signoz-cold-storage.yaml b/helm/infra-charts/obaas/examples/values-signoz-cold-storage.yaml index 43a9e2a6b..5b4c14566 100644 --- a/helm/infra-charts/obaas/examples/values-signoz-cold-storage.yaml +++ b/helm/infra-charts/obaas/examples/values-signoz-cold-storage.yaml @@ -28,4 +28,4 @@ signoz: secretAccess: persistence: enabled: true - size: 100Gi \ No newline at end of file + size: 100Gi diff --git a/helm/infra-charts/obaas/examples/values-signoz-distributed.yaml b/helm/infra-charts/obaas/examples/values-signoz-distributed.yaml new file mode 100644 index 000000000..2b07065d7 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-distributed.yaml @@ -0,0 +1,307 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# +# Draft SigNoz distributed profile: Upstream resource reference; two shards without replica redundancy. +# Starting allocations only: no certified ingestion rate or loss guarantee. +# Fresh installations only. Review migration/recovery before applying to an +# existing release; never use a profile to implicitly change stored-data topology. +# Layer ONE profile after environment values. See +# https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles for usage, PostgreSQL +# credentials, storage planning, and validation boundaries. + +signoz: + enabled: true + signoz: + replicaCount: 1 + resources: + requests: + cpu: "4" + memory: 8Gi + limits: + cpu: "4" + memory: 8Gi + persistence: + enabled: true + size: 10Gi + clickhouse: + layout: + shardsCount: 2 + replicasCount: 1 + podDistribution: + - type: ClickHouseAntiAffinity + topologyKey: kubernetes.io/hostname + # Resources and PVC capacity are per ClickHouse instance. Storage sizes + # are illustrative; choose StorageClasses and capacities in a final overlay. + resources: + requests: + cpu: "16" + memory: 32Gi + limits: + cpu: "16" + memory: 32Gi + persistence: + enabled: true + size: 1Ti + zookeeper: + replicaCount: 3 + # MiB; leave room for JVM native memory and filesystem cache. + heapSize: 4096 + podAntiAffinityPreset: hard + resources: + requests: + cpu: "2" + memory: 8Gi + limits: + cpu: "2" + memory: 8Gi + persistence: + enabled: true + size: 20Gi + clickhouseOperator: + resources: + requests: + cpu: "100m" + memory: 256Mi + limits: + cpu: "500m" + memory: 512Mi + metricsExporter: + resources: + requests: + cpu: "100m" + memory: 128Mi + limits: + cpu: "500m" + memory: 256Mi + # These TTLs cover diagnostic history, not application telemetry. + zookeeperLog: + ttl: 3 + queryLog: + ttl: 7 + partLog: + ttl: 7 + traceLog: + ttl: 3 + asynchronousInsertLog: + ttl: 3 + asynchronousMetricLog: + ttl: 3 + metricLog: + ttl: 3 + queryThreadLog: + ttl: 3 + queryViewsLog: + ttl: 3 + processorsProfileLog: + ttl: 3 + sessionLog: + ttl: 7 + blobStorageLog: + ttl: 3 + backupLog: + ttl: 3 + crashLog: + ttl: 7 + telemetryStoreMigrator: + # Keep the bundled chart's replication behavior; this is its current value + # name, rather than schemaMigrator from older upstream examples. + enableReplication: true + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "2" + memory: 2Gi + otelCollector: + replicaCount: 3 + autoscaling: + enabled: false + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: kubernetes.io/hostname + whenUnsatisfiable: DoNotSchedule + labelSelector: + matchLabels: + app.kubernetes.io/component: otel-collector + resources: + requests: + cpu: "4" + memory: 16Gi + limits: + cpu: "4" + memory: 16Gi + additionalEnvs: + GOMEMLIMIT: 9600MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 12288 + spike_limit_mib: 2048 + batch: + send_batch_size: 2048 + send_batch_max_size: 4096 + timeout: 1s + batch/meter: + send_batch_size: 2048 + send_batch_max_size: 4096 + timeout: 1s + # Preserve inherited receivers/exporters and add the limiter first. + # Queues/retries remain inherited and are NOT persistent storage. + service: + pipelines: + traces: + processors: [memory_limiter, signozspanmetrics/delta, batch] + metrics: + # Inherited pull receiver definitions remain unused. Only the + # singleton k8s-infra collector activates them in its pipelines. + receivers: [otlp] + processors: [memory_limiter, batch] + logs: + receivers: [otlp, httplogreceiver/heroku, httplogreceiver/json] + processors: [memory_limiter, batch] + metrics/meter: + processors: [memory_limiter, batch/meter] + +k8s-infra: + # Presets prepend metadata enrichment ahead of memory_limiter. Preserve those + # processors; see the profile guide for ordering and custom-pipeline caveats. + otelAgent: + additionalEnvs: + GOMEMLIMIT: 600MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 768 + spike_limit_mib: 128 + service: + pipelines: + traces: + processors: [memory_limiter, batch] + metrics: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + # Per scheduled worker node, in addition to the central components above. + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + otelDeployment: + replicaCount: 1 + # Singleton cluster-wide collection; do not scale pull receivers blindly. + resources: + requests: + cpu: "1" + memory: 2Gi + limits: + cpu: "2" + memory: 4Gi + clusterRole: + # Preserve the bundled deployment permissions and add discovery access. + rules: + - apiGroups: [""] + resources: [events, namespaces, namespaces/status, nodes, nodes/spec, nodes/status, pods, pods/status, replicationcontrollers, replicationcontrollers/status, resourcequotas, services, endpoints] + verbs: [get, list, watch] + - apiGroups: [apps] + resources: [daemonsets, deployments, replicasets, statefulsets] + verbs: [get, list, watch] + - apiGroups: [extensions] + resources: [replicasets] + verbs: [get, list, watch] + - apiGroups: [batch] + resources: [jobs, cronjobs] + verbs: [get, list, watch] + - apiGroups: [autoscaling] + resources: [horizontalpodautoscalers] + verbs: [get, list, watch] + - apiGroups: [discovery.k8s.io] + resources: [endpointslices] + verbs: [get, list, watch] + additionalEnvs: + GOMEMLIMIT: 2400MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 3072 + spike_limit_mib: 512 + receivers: + k8s_events: + auth_type: serviceAccount + prometheus: + config: + global: + scrape_interval: 30s + scrape_timeout: 10s + scrape_configs: + - job_name: kube-state-metrics + kubernetes_sd_configs: + - role: endpointslice + relabel_configs: + - source_labels: [__meta_kubernetes_service_name] + action: keep + regex: .*kube-state-metrics + - source_labels: [__meta_kubernetes_endpointslice_port_name] + action: keep + regex: http + - job_name: apisix + kubernetes_sd_configs: + - role: pod + relabel_configs: + - source_labels: + [__meta_kubernetes_pod_label_app_kubernetes_io_name] + action: keep + regex: apisix + - source_labels: [__meta_kubernetes_pod_ip] + target_label: __address__ + # Escape capture groups through Collector config expansion. + replacement: $$1:9091 + # scrape all the pods with the signoz annotations on them + - job_name: "signoz-annotated-pods" + kubernetes_sd_configs: + - role: pod + relabel_configs: + - source_labels: + [__meta_kubernetes_pod_annotation_signoz_io_scrape] + action: keep + regex: true + - source_labels: + [__meta_kubernetes_pod_annotation_signoz_io_path] + action: replace + target_label: __metrics_path__ + regex: (.+) + - source_labels: + [ + __meta_kubernetes_pod_ip, + __meta_kubernetes_pod_annotation_signoz_io_port, + ] + action: replace + regex: ([^;]+);([^;]+) + replacement: $$1:$$2 + target_label: __address__ + - source_labels: [__meta_kubernetes_namespace] + action: replace + target_label: kubernetes_namespace + - source_labels: [__meta_kubernetes_pod_name] + action: replace + target_label: kubernetes_pod_name + - source_labels: + [__meta_kubernetes_pod_label_app_kubernetes_io_instance] + action: replace + target_label: app + service: + pipelines: + metrics/internal: + processors: [memory_limiter, batch] + metrics/scraper: + processors: [memory_limiter, batch] + receivers: [prometheus] + logs: + processors: [memory_limiter, batch] + receivers: [k8s_events] diff --git a/helm/infra-charts/obaas/examples/values-signoz-medium.yaml b/helm/infra-charts/obaas/examples/values-signoz-medium.yaml new file mode 100644 index 000000000..edd014e2b --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-medium.yaml @@ -0,0 +1,205 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# +# Draft SigNoz medium profile: Custom single-shard deployment; larger vertical allocations. +# Starting allocations only: no certified ingestion rate or loss guarantee. +# Fresh installations only. Review migration/recovery before applying to an +# existing release; never use a profile to implicitly change stored-data topology. +# Layer ONE profile after environment values. See +# https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles for usage, PostgreSQL +# credentials, storage planning, and validation boundaries. + +signoz: + enabled: true + signoz: + replicaCount: 1 + resources: + requests: + cpu: "500m" + memory: 1Gi + limits: + cpu: "2" + memory: 2Gi + persistence: + enabled: true + size: 10Gi + clickhouse: + layout: + shardsCount: 1 + replicasCount: 1 + # Resources and PVC capacity are per ClickHouse instance. Storage sizes + # are illustrative; choose StorageClasses and capacities in a final overlay. + resources: + requests: + cpu: "4" + memory: 16Gi + limits: + cpu: "8" + memory: 32Gi + persistence: + enabled: true + size: 500Gi + zookeeper: + replicaCount: 1 + # MiB; leave room for JVM native memory and filesystem cache. + heapSize: 1024 + resources: + requests: + cpu: "250m" + memory: 2Gi + limits: + cpu: "1" + memory: 4Gi + persistence: + enabled: true + size: 20Gi + clickhouseOperator: + resources: + requests: + cpu: "100m" + memory: 256Mi + limits: + cpu: "500m" + memory: 512Mi + metricsExporter: + resources: + requests: + cpu: "100m" + memory: 128Mi + limits: + cpu: "500m" + memory: 256Mi + # These TTLs cover diagnostic history, not application telemetry. + zookeeperLog: + ttl: 3 + queryLog: + ttl: 7 + partLog: + ttl: 7 + traceLog: + ttl: 3 + asynchronousInsertLog: + ttl: 3 + asynchronousMetricLog: + ttl: 3 + metricLog: + ttl: 3 + queryThreadLog: + ttl: 3 + queryViewsLog: + ttl: 3 + processorsProfileLog: + ttl: 3 + sessionLog: + ttl: 7 + blobStorageLog: + ttl: 3 + backupLog: + ttl: 3 + crashLog: + ttl: 7 + telemetryStoreMigrator: + # Keep the bundled chart's replication behavior; this is its current value + # name, rather than schemaMigrator from older upstream examples. + enableReplication: true + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "2" + memory: 2Gi + otelCollector: + replicaCount: 1 + autoscaling: + enabled: false + resources: + requests: + cpu: "1" + memory: 2Gi + limits: + cpu: "2" + memory: 4Gi + additionalEnvs: + GOMEMLIMIT: 2400MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 3072 + spike_limit_mib: 512 + batch: + send_batch_size: 2048 + send_batch_max_size: 4096 + timeout: 1s + batch/meter: + send_batch_size: 2048 + send_batch_max_size: 4096 + timeout: 1s + # Preserve inherited receivers/exporters and add the limiter first. + # Queues/retries remain inherited and are NOT persistent storage. + service: + pipelines: + traces: + processors: [memory_limiter, signozspanmetrics/delta, batch] + metrics: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + metrics/meter: + processors: [memory_limiter, batch/meter] + +k8s-infra: + # Presets prepend metadata enrichment ahead of memory_limiter. Preserve those + # processors; see the profile guide for ordering and custom-pipeline caveats. + otelAgent: + additionalEnvs: + GOMEMLIMIT: 600MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 768 + spike_limit_mib: 128 + service: + pipelines: + traces: + processors: [memory_limiter, batch] + metrics: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + # Per scheduled worker node, in addition to the central components above. + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + otelDeployment: + additionalEnvs: + GOMEMLIMIT: 1200MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 1536 + spike_limit_mib: 256 + service: + pipelines: + metrics/internal: + processors: [memory_limiter, batch] + metrics/scraper: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + replicaCount: 1 + # Singleton cluster-wide collection; do not scale pull receivers blindly. + resources: + requests: + cpu: "500m" + memory: 1Gi + limits: + cpu: "2" + memory: 2Gi diff --git a/helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml b/helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml new file mode 100644 index 000000000..c94b27e38 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-persistent-queue.yaml @@ -0,0 +1,70 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# +# Persistent exporter queues for ONE SigNoz collector (small or medium only). +# Layer after the size profile. Create signoz-collector-queue-pvc.yaml in the +# release namespace first. For the complete steps, see +# https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-persistent-queue +# Do not layer onto distributed: that profile requires independent queue claims +# for each collector. Never scale this Deployment with the shared claim below. +# This overlay replaces extraVolumes, extraVolumeMounts and service.extensions +# lists; merge any site-specific entries explicitly. + +signoz: + enabled: true + otelCollector: + replicaCount: 1 + autoscaling: + enabled: false + # Prevent overlapping old/new pods during upgrades. Restarts interrupt + # ingestion; SDK/agent retries still need to cover that interruption. + strategy: Recreate + podSecurityContext: + fsGroup: 10001 + fsGroupChangePolicy: OnRootMismatch + securityContext: + runAsUser: 10001 + runAsGroup: 10001 + runAsNonRoot: true + extraVolumes: + - name: exporter-queue + persistentVolumeClaim: + claimName: signoz-collector-queue + extraVolumeMounts: + - name: exporter-queue + mountPath: /var/lib/otelcol/queue + config: + extensions: + file_storage/queue: + directory: /var/lib/otelcol/queue/storage + create_directory: true + fsync: true + compaction: + on_rebound: true + directory: /var/lib/otelcol/queue/compaction + exporters: + clickhousetraces: &persistentExporter + timeout: 30s + sending_queue: + enabled: true + storage: file_storage/queue + sizer: requests + # Per exporter, measured in requests/batches, not bytes or records. + # These are starting values, not a tested outage-duration budget. + queue_size: 1000 + num_consumers: 2 + block_on_overflow: true + retry_on_failure: + enabled: true + initial_interval: 5s + max_interval: 30s + # Keep retrying retryable failures; permanent errors can still drop + # data. Storage and queue capacity remain finite. + max_elapsed_time: 0s + signozclickhousemetrics: *persistentExporter + clickhouselogsexporter: *persistentExporter + metadataexporter: *persistentExporter + signozclickhousemeter: *persistentExporter + service: + # Helm replaces lists: preserve the default diagnostic extensions. + extensions: [health_check, zpages, pprof, file_storage/queue] diff --git a/helm/infra-charts/obaas/examples/values-signoz-postgres.yaml b/helm/infra-charts/obaas/examples/values-signoz-postgres.yaml new file mode 100644 index 000000000..b4bee7856 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-postgres.yaml @@ -0,0 +1,69 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# +# Example: SigNoz metadata in the bundled PostgreSQL database. +# PostgreSQL stores users, dashboards, alerts, and configuration; ClickHouse +# remains the telemetry store. This overlay does not change ingestion capacity. +# +# Intended for a fresh installation. Enabling PostgreSQL does not copy an +# existing SQLite database. For an existing installation, back up metadata and +# validate a separate migration and restore procedure before switching stores. +# +# Create the credential secret in the release namespace before installation. +# Supply a password file containing only the password, without a trailing newline: +# Use a URL-safe password (for example, random hexadecimal characters): the +# bundled chart interpolates it into a PostgreSQL URI without percent-encoding. +# +# kubectl -n obaas create secret generic signoz-postgres-auth \ +# --from-file=password=/secure/path/postgres-password +# +# From the repository root, layer this after your normal environment values: +# +# helm upgrade --install obaas helm/infra-charts/obaas \ +# -n obaas --create-namespace \ +# -f \ +# -f helm/infra-charts/obaas/examples/values-signoz-postgres.yaml +# +# The namespace must already exist when creating the secret. Resource and +# storage sizes below are starting allocations, not measured capacity ratings. +# The bundled chart does not configure PostgreSQL replication or failover; +# keep replicaCount at 1. Plan backups and test restoration separately. +# See https://signoz.io/docs/manage/administrator-guide/configuration/relational-database/ + +signoz: + enabled: true + # The parent chart configures the SigNoz SQL store provider, DSN, and + # credential environment from these values. + postgresql: + enabled: true + replicaCount: 1 + + # Use the bundled chart's PostgreSQL 15 image with a fresh chart-owned PVC. + image: + repository: docker.io/library/postgres + tag: "15" + + auth: + username: signoz + database: signoz + # User-supplied password secret. This secret must be created, or + # auth.password configured. + existingSecret: signoz-postgres-auth + secretKeys: + userPasswordKey: password + + # Sample sizing + resources: + requests: + cpu: 250m + memory: 512Mi + limits: + cpu: "1" + memory: 2Gi + + persistence: + enabled: true + # OCI Block Volume CSI example; replace with a suitable StorageClass + # available in your cluster. The chart requests ReadWriteOnce storage. + storageClass: oci-bv + size: 50Gi diff --git a/helm/infra-charts/obaas/examples/values-signoz-small.yaml b/helm/infra-charts/obaas/examples/values-signoz-small.yaml new file mode 100644 index 000000000..6003aa245 --- /dev/null +++ b/helm/infra-charts/obaas/examples/values-signoz-small.yaml @@ -0,0 +1,205 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +# +# Draft SigNoz small profile: Evaluation; one ClickHouse shard and one collector. +# Starting allocations only: no certified ingestion rate or loss guarantee. +# Fresh installations only. Review migration/recovery before applying to an +# existing release; never use a profile to implicitly change stored-data topology. +# Layer ONE profile after environment values. See +# https://oracle.github.io/microservices-backend/obaas/docs/observability/signoz-profiles for usage, PostgreSQL +# credentials, storage planning, and validation boundaries. + +signoz: + enabled: true + signoz: + replicaCount: 1 + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi + persistence: + enabled: true + size: 10Gi + clickhouse: + layout: + shardsCount: 1 + replicasCount: 1 + # Resources and PVC capacity are per ClickHouse instance. Storage sizes + # are illustrative; choose StorageClasses and capacities in a final overlay. + resources: + requests: + cpu: "2" + memory: 8Gi + limits: + cpu: "4" + memory: 16Gi + persistence: + enabled: true + size: 200Gi + zookeeper: + replicaCount: 1 + # MiB; leave room for JVM native memory and filesystem cache. + heapSize: 1024 + resources: + requests: + cpu: "250m" + memory: 2Gi + limits: + cpu: "1" + memory: 4Gi + persistence: + enabled: true + size: 20Gi + clickhouseOperator: + resources: + requests: + cpu: "100m" + memory: 256Mi + limits: + cpu: "500m" + memory: 512Mi + metricsExporter: + resources: + requests: + cpu: "100m" + memory: 128Mi + limits: + cpu: "500m" + memory: 256Mi + # These TTLs cover diagnostic history, not application telemetry. + zookeeperLog: + ttl: 3 + queryLog: + ttl: 7 + partLog: + ttl: 7 + traceLog: + ttl: 3 + asynchronousInsertLog: + ttl: 3 + asynchronousMetricLog: + ttl: 3 + metricLog: + ttl: 3 + queryThreadLog: + ttl: 3 + queryViewsLog: + ttl: 3 + processorsProfileLog: + ttl: 3 + sessionLog: + ttl: 7 + blobStorageLog: + ttl: 3 + backupLog: + ttl: 3 + crashLog: + ttl: 7 + telemetryStoreMigrator: + # Keep the bundled chart's replication behavior; this is its current value + # name, rather than schemaMigrator from older upstream examples. + enableReplication: true + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "2" + memory: 2Gi + otelCollector: + replicaCount: 1 + autoscaling: + enabled: false + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "1" + memory: 2Gi + additionalEnvs: + GOMEMLIMIT: 1200MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 1536 + spike_limit_mib: 256 + batch: + send_batch_size: 2048 + send_batch_max_size: 4096 + timeout: 1s + batch/meter: + send_batch_size: 2048 + send_batch_max_size: 4096 + timeout: 1s + # Preserve inherited receivers/exporters and add the limiter first. + # Queues/retries remain inherited and are NOT persistent storage. + service: + pipelines: + traces: + processors: [memory_limiter, signozspanmetrics/delta, batch] + metrics: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + metrics/meter: + processors: [memory_limiter, batch/meter] + +k8s-infra: + # Presets prepend metadata enrichment ahead of memory_limiter. Preserve those + # processors; see the profile guide for ordering and custom-pipeline caveats. + otelAgent: + additionalEnvs: + GOMEMLIMIT: 300MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 384 + spike_limit_mib: 64 + service: + pipelines: + traces: + processors: [memory_limiter, batch] + metrics: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + # Per scheduled worker node, in addition to the central components above. + resources: + requests: + cpu: "100m" + memory: 256Mi + limits: + cpu: "500m" + memory: 512Mi + otelDeployment: + additionalEnvs: + GOMEMLIMIT: 600MiB + config: + processors: + memory_limiter: + check_interval: 1s + limit_mib: 768 + spike_limit_mib: 128 + service: + pipelines: + metrics/internal: + processors: [memory_limiter, batch] + metrics/scraper: + processors: [memory_limiter, batch] + logs: + processors: [memory_limiter, batch] + replicaCount: 1 + # Singleton cluster-wide collection; do not scale pull receivers blindly. + resources: + requests: + cpu: "250m" + memory: 512Mi + limits: + cpu: "1" + memory: 1Gi diff --git a/helm/infra-charts/obaas/extensions/kafka-metrics.yaml b/helm/infra-charts/obaas/extensions/kafka-metrics.yaml new file mode 100644 index 000000000..36abac13d --- /dev/null +++ b/helm/infra-charts/obaas/extensions/kafka-metrics.yaml @@ -0,0 +1,35 @@ +# ============================================================================= +# Universal Extension: Kafka Metrics for SigNoz +# ============================================================================= +# This file provides "Opt-in" Kafka observability. +# It enables the 'kafkametrics' scraper in the SigNoz OpenTelemetry collector. +# +# USAGE: +# Include this file in your helm upgrade command using '-f': +# helm upgrade obaas ./helm/infra-charts/obaas -f extensions/kafka-metrics.yaml ... +# +# SCENARIOS: +# 1. Manual Kafka (Docs): Default works out of the box (basic-kafka-...). +# 2. Platform Kafka: Change 'brokers' to 'obaas-kafka-cluster-kafka-bootstrap:9092'. +# ============================================================================= + +signoz: + otelCollector: + config: + receivers: + kafkametrics: + brokers: + - "kafka-bootstrap:9092" + protocol_version: "2.0.0" + scrapers: + - brokers + - topics + - consumers + + service: + pipelines: + metrics: + receivers: + - otlp + - prometheus + - kafkametrics diff --git a/helm/infra-charts/obaas/files/signoz/setup.py b/helm/infra-charts/obaas/files/signoz/setup.py new file mode 100644 index 000000000..b19d8798d --- /dev/null +++ b/helm/infra-charts/obaas/files/signoz/setup.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +"""Reconcile bundled OBaaS system dashboards through the SigNoz V2 API.""" + +import json +import os +from pathlib import Path +import sys +import time +from urllib.error import HTTPError, URLError +from urllib.parse import quote, urlencode +from urllib.request import Request, urlopen +from uuid import UUID + + +class SigNoz: + def __init__(self, url): + self.url = url.rstrip("/") + self.token = None + + def request(self, method, path, payload=None): + headers = {} + if self.token: + headers["Authorization"] = "Bearer " + self.token + body = None + if payload is not None: + headers["Content-Type"] = "application/json" + body = json.dumps(payload).encode("utf-8") + request = Request(self.url + path, data=body, headers=headers, method=method) + try: + with urlopen(request, timeout=30) as response: + content = response.read() + except HTTPError as error: + # Error bodies may contain credentials or tokens; do not log them. + raise RuntimeError(f"SigNoz {method} {path.split('?')[0]}: HTTP {error.code}") from None + except (URLError, TimeoutError) as error: + raise RuntimeError(f"SigNoz {method} {path.split('?')[0]}: connection failed") from error + return json.loads(content) if content else None + + def wait_until_ready(self): + while True: + try: + self.request("GET", "/api/v1/health?live=1") + print("query-service ready.", flush=True) + return + except (RuntimeError, ValueError): + print("Waiting for query-service...", flush=True) + time.sleep(5) + + def login(self, auth_directory): + email = (auth_directory / "email").read_text().strip() + password = (auth_directory / "password").read_text().rstrip("\r\n") + org_file = auth_directory / "orgID" + org_id = org_file.read_text().strip() if org_file.exists() else "" + if not org_id: + context = self.request("GET", "/api/v2/sessions/context?" + urlencode({"email": email})) + orgs = context["data"]["orgs"] + if len(orgs) != 1: + raise ValueError( + f"Expected one organization for the configured email; found {len(orgs)}. " + "Set orgID in the credential secret to select one explicitly." + ) + org_id = orgs[0]["id"] + UUID(org_id) + response = self.request("POST", "/api/v2/sessions/email_password", { + "email": email, "password": password, "orgID": org_id, + }) + token = response["data"]["accessToken"] + if not isinstance(token, str) or not token: + raise ValueError("SigNoz login returned no access token") + self.token = token + print("Login successful", flush=True) + + def dashboards(self): + dashboards = [] + offset = 0 + while True: + data = self.request("GET", f"/api/v2/dashboards?limit=200&offset={offset}")["data"] + page, total = data["dashboards"], data["total"] + if not isinstance(page, list) or type(total) is not int or total < 0: + raise ValueError("Invalid SigNoz dashboard list response") + dashboards.extend(page) + offset += len(page) + if offset >= total: + return dashboards + if not page: + raise ValueError("SigNoz dashboard pagination stopped before reaching total") + + +def load_dashboards(directories): + dashboards = [] + for directory in directories: + for path in sorted(directory.glob("*.json")): + dashboard = json.loads(path.read_text()) + if "schemaVersion" not in dashboard and dashboard.get("version") in ("v4", "v5"): + # The shell importer also skipped bundled legacy payloads. + print(f"Skipping legacy dashboard: {path.name}", flush=True) + continue + if dashboard.get("schemaVersion") != "v6": + raise ValueError(f"Expected a V2/Perses dashboard in {path}") + title = dashboard["spec"]["display"]["name"] + if not isinstance(title, str) or not title: + raise ValueError(f"Missing dashboard name in {path}") + dashboards.append(dashboard) + if not dashboards: + raise ValueError("No bundled dashboards found") + return dashboards + + +def reconcile(client, dashboards): + titles = {dashboard["spec"]["display"]["name"] for dashboard in dashboards} + # Fetch every page before deleting, so deletions cannot shift pagination. + existing = client.dashboards() + for dashboard in existing: + title = dashboard.get("spec", {}).get("display", {}).get("name") + if title in titles: + # V2 also lists unmigratable V1 dashboards as legacy records. + client.request("DELETE", "/api/v2/dashboards/" + quote(dashboard["id"], safe="")) + for dashboard in dashboards: + print("Creating dashboard: " + dashboard["spec"]["display"]["name"], flush=True) + client.request("POST", "/api/v2/dashboards", dashboard) + print("SigNoz setup complete", flush=True) + + +def main(): + dashboards = load_dashboards([Path("/signoz-dashboards-1"), Path("/signoz-dashboards-2")]) + client = SigNoz(os.environ["SIGNOZ_URL"]) + client.wait_until_ready() + client.login(Path("/signoz-authn")) + reconcile(client, dashboards) + + +if __name__ == "__main__": + try: + main() + except (RuntimeError, ValueError, KeyError, TypeError, OSError) as error: + # Malformed API responses and secret files must not leak their contents. + message = str(error) if isinstance(error, RuntimeError) else "Invalid setup input or API response" + print("ERROR: " + message, file=sys.stderr) + sys.exit(1) diff --git a/helm/infra-charts/obaas/templates/_helpers.tpl b/helm/infra-charts/obaas/templates/_helpers.tpl index e57554fe5..8e589ac40 100644 --- a/helm/infra-charts/obaas/templates/_helpers.tpl +++ b/helm/infra-charts/obaas/templates/_helpers.tpl @@ -572,25 +572,9 @@ coordinator and workflowServer are disabled. {{- and .Values.otmm.console.enabled (or .Values.otmm.coordinator.enabled .Values.otmm.workflowServer.enabled) -}} {{- end -}} -{{/* Validate the only supported existing-release SigNoZ upgrade path. */}} +{{/* Validate only explicitly requested destructive SigNoZ replacement. */}} {{- define "obaas.signozUpgrade.validate" -}} -{{- if .Release.IsUpgrade -}} -{{- if ne (.Values.signozUpgrade.mode | default "") "destructive-replace" -}} -{{- fail `Destructive upgrade warning -============ -SigNoZ upgrades are disabled by default in this optional patch release. - -To permanently delete and replace existing SigNoZ telemetry and configuration, -set signozUpgrade.mode=destructive-replace and signozUpgrade.confirmDataLoss=true. - -This permanently deletes existing SigNoZ telemetry, dashboards, users, alerts, -ClickHouse data, and ZooKeeper data. - -For the required procedure and data-loss details, see: -https://oracle.github.io/microservices-backend/obaas/observability/upgrade/` -}} -{{- end -}} -{{- if not .Values.signozUpgrade.confirmDataLoss -}} +{{- if and .Release.IsUpgrade (eq (.Values.signozUpgrade.mode | default "") "destructive-replace") (not .Values.signozUpgrade.confirmDataLoss) -}} {{- fail "signozUpgrade.confirmDataLoss=true is required for destructive SigNoZ replacement." -}} {{- end -}} {{- end -}} -{{- end -}} diff --git a/helm/infra-charts/obaas/templates/database/adb-wallet-secret.yaml b/helm/infra-charts/obaas/templates/database/adb-wallet-secret.yaml index 7481554ba..92afb6298 100644 --- a/helm/infra-charts/obaas/templates/database/adb-wallet-secret.yaml +++ b/helm/infra-charts/obaas/templates/database/adb-wallet-secret.yaml @@ -5,6 +5,7 @@ # ADB Wallet Password Secret {{- if .Values.database }} {{- if eq (include "obaas.database.isADBS" .) "true" }} +{{- $walletPassword := include "obaas.randomPassword" . }} apiVersion: v1 kind: Secret metadata: @@ -13,6 +14,8 @@ metadata: app.kubernetes.io/component: database {{- include "obaas.labels" . | nindent 4 }} stringData: - {{ .Release.Name }}-adb-wallet-pass-{{ .Release.Revision }}: {{ include "obaas.randomPassword" . | quote }} + # Database operator may look for either + password: {{ $walletPassword | quote }} + {{ .Release.Name }}-adb-wallet-pass-{{ .Release.Revision }}: {{ $walletPassword | quote }} {{- end }} {{- end }} diff --git a/helm/infra-charts/obaas/templates/observability/ConfigMap-signoz-setup.yaml b/helm/infra-charts/obaas/templates/observability/ConfigMap-signoz-setup.yaml new file mode 100644 index 000000000..4b5d3be82 --- /dev/null +++ b/helm/infra-charts/obaas/templates/observability/ConfigMap-signoz-setup.yaml @@ -0,0 +1,16 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +{{- if and .Values.signoz.enabled .Values.signoz.setup.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-signoz-setup + namespace: {{ .Release.Namespace }} + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-weight": "19" + "helm.sh/hook-delete-policy": before-hook-creation +data: + setup.py: | +{{ .Files.Get "files/signoz/setup.py" | indent 4 }} +{{- end }} diff --git a/helm/infra-charts/obaas/templates/observability/Job-signoz-setup.yaml b/helm/infra-charts/obaas/templates/observability/Job-signoz-setup.yaml index 469bed4c5..24fcde198 100644 --- a/helm/infra-charts/obaas/templates/observability/Job-signoz-setup.yaml +++ b/helm/infra-charts/obaas/templates/observability/Job-signoz-setup.yaml @@ -1,6 +1,6 @@ ## Copyright (c) 2024, 2026, Oracle and/or its affiliates. ## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. -{{- if .Values.signoz.enabled }} +{{- if and .Values.signoz.enabled .Values.signoz.setup.enabled }} apiVersion: batch/v1 kind: Job metadata: @@ -28,105 +28,19 @@ spec: {{- if .Values.signoz.podAffinity }} affinity: {{- toYaml .Values.signoz.podAffinity | nindent 8 }} - {{- else }} - affinity: - podAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app.kubernetes.io/component - operator: In - values: - - signoz - topologyKey: "kubernetes.io/hostname" {{- end }} {{- include "obaas.imagePullSecrets" (dict "local" .Values.signoz.global.imagePullSecrets "global" .Values.global.imagePullSecrets "secretName" .Values.global.imagePullSecretName) | nindent 6 }} containers: - - args: - - | - set -e - SIGNOZ_URL="http://{{ .Release.Name }}-signoz:8080" - email=$(cat /signoz-authn/email) - password=$(cat /signoz-authn/password) - - # Prioritize discovered Org ID, fallback to secret - if [ -f /shared/orgID ]; then - org_id=$(cat /shared/orgID) - echo "Using discovered Org ID: ${org_id}" - elif [ -f /signoz-authn/orgID ]; then - org_id=$(cat /signoz-authn/orgID) - echo "Using Org ID from secret: ${org_id}" - else - echo "ERROR: No Org ID found in shared volume or secret. Dynamic discovery failed." - exit 1 - fi - - # Login and extract JWT token using v2 API - echo "Logging in..." - login_response=$(curl -sf -H 'Content-Type: application/json' \ - -d "{\"email\": \"${email}\", \"password\": \"${password}\", \"orgID\": \"${org_id}\"}" \ - "${SIGNOZ_URL}/api/v2/sessions/email_password") - - TOKEN=$(echo "$login_response" | sed 's/.*"accessToken":"\([^"]*\)".*/\1/') - - if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then - echo "ERROR: Failed to extract Access Token from v2 login response" - echo "Response: $login_response" - exit 1 - fi - echo "Login successful" - - # Use JWT token for all subsequent requests - AUTH_HEADER="Authorization: Bearer ${TOKEN}" - - # Function to extract title from dashboard JSON file - get_title() { - grep -o '"title"[[:space:]]*:[[:space:]]*"[^"]*"' "$1" | head -1 | sed 's/.*:[[:space:]]*"\([^"]*\)".*/\1/' - } - - # Function to find dashboard UUID by title from API response - find_dashboard_uuid() { - local search_title="$1" - local response="$2" - # Extract id that appears before matching title in the response - echo "$response" | tr '{}' '\n' | grep -B1 "\"title\":\"${search_title}\"" | grep '"id"' | sed 's/.*"id":"\([^"]*\)".*/\1/' | head -1 - } - - # Get existing dashboards - echo "Fetching existing dashboards..." - dashboards_response=$(curl -sf -H "${AUTH_HEADER}" "${SIGNOZ_URL}/api/v1/dashboards") - - # Process dashboards from both directories - for dir in /signoz-dashboards-1 /signoz-dashboards-2; do - [ -d "$dir" ] || continue - for f in $(find -L "$dir" -maxdepth 1 -type f 2>/dev/null); do - title=$(get_title "$f") - [ -z "$title" ] && continue - echo "Reconciling dashboard: $title" - - # Find and delete existing dashboard with same title - uuid=$(find_dashboard_uuid "$title" "$dashboards_response") - if [ -n "$uuid" ]; then - echo " Deleting existing dashboard: $uuid" - curl -sf -H "${AUTH_HEADER}" -X DELETE "${SIGNOZ_URL}/api/v1/dashboards/$uuid" || true - fi - - # Create new dashboard - echo " Creating dashboard..." - curl -sf -H "${AUTH_HEADER}" -H 'Content-Type: application/json' \ - -d @"${f}" "${SIGNOZ_URL}/api/v1/dashboards" && echo " Done" || echo " Failed" - done - done - - echo "SigNoz setup complete" - command: - - /bin/sh - - -c - image: {{ .Values.signoz.utilities.curlJq.image.registry }}/{{ .Values.signoz.utilities.curlJq.image.repository }}:{{ .Values.signoz.utilities.curlJq.image.tag }} + - command: ["python3", "-u", "/signoz-setup/setup.py"] + env: + - name: SIGNOZ_URL + value: "http://{{ .Release.Name }}-signoz:8080" + image: {{ .Values.signoz.setup.image.registry }}/{{ .Values.signoz.setup.image.repository }}:{{ .Values.signoz.setup.image.tag }} name: signoz-setup volumeMounts: - - mountPath: /shared - name: shared-data + - mountPath: /signoz-setup + name: signoz-setup-script + readOnly: true - mountPath: /signoz-dashboards-1 name: signoz-dashboards-1 readOnly: true @@ -136,49 +50,11 @@ spec: - mountPath: /signoz-dashboards-2 name: signoz-dashboards-2 readOnly: true - initContainers: - - name: wait-for-query-service - image: {{ .Values.signoz.utilities.curlJq.image.registry }}/{{ .Values.signoz.utilities.curlJq.image.repository }}:{{ .Values.signoz.utilities.curlJq.image.tag }} - command: - - sh - - -c - - | - until wget --spider -q {{ .Release.Name }}-signoz:8080/api/v1/health?live=1; do - echo "Waiting for query-service..."; sleep 5; - done - echo "query-service ready." - - name: signoz-id-discovery - image: {{ .Values.signoz.clickhouse.image.registry }}/{{ .Values.signoz.clickhouse.image.repository }}:{{ .Values.signoz.clickhouse.image.tag | default .Chart.AppVersion }} - command: - - sh - - -c - - | - echo "Extracting Org ID from database using clickhouse-local..." - - # Extract Org ID using clickhouse-local (SQLite engine) - ORG_ID=$(clickhouse-local -q "SELECT id FROM sqlite('/signoz-db/signoz.db', 'organizations') LIMIT 1") - - if [ -n "$ORG_ID" ]; then - echo "$ORG_ID" > /shared/orgID - echo "Found Org ID: $ORG_ID" - else - echo "ERROR: Could not find Org ID in DB file" - exit 1 - fi - volumeMounts: - - mountPath: /shared - name: shared-data - - mountPath: /signoz-db - name: signoz-db - readOnly: true restartPolicy: OnFailure volumes: - - name: shared-data - emptyDir: {} - - name: signoz-db - persistentVolumeClaim: - claimName: signoz-db-{{ .Release.Name }}-signoz-0 - readOnly: true + - name: signoz-setup-script + configMap: + name: {{ .Release.Name }}-signoz-setup - configMap: defaultMode: 420 name: {{ .Release.Name }}-signoz-dashboards diff --git a/helm/infra-charts/obaas/templates/otmm/_security.tpl b/helm/infra-charts/obaas/templates/otmm/_security.tpl new file mode 100644 index 000000000..cacbdb9bc --- /dev/null +++ b/helm/infra-charts/obaas/templates/otmm/_security.tpl @@ -0,0 +1,49 @@ +{{/* Copyright (c) 2026, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. */}} + +{{/* Keep existing OBaaS role overrides working while adopting the 26.1 paths. +Legacy overrides take precedence; remove them when migrating to roleMappings. */}} +{{- define "obaas.otmm.coordinatorRoles" -}} +{{- $idp := .Values.otmm.commonConfiguration.security.identityProvider -}} +{{- mergeOverwrite (deepCopy $idp.roleMappings.coordinator) (pick $idp "adminUserRoles" "adminUserRolesPath") | toYaml -}} +{{- end -}} + +{{- define "obaas.otmm.workflowRoles" -}} +{{- $idp := .Values.otmm.commonConfiguration.security.identityProvider -}} +{{- $legacy := dig "security" "identityProvider" "policy" (dict) .Values.otmm.workflowServer -}} +{{- mergeOverwrite (deepCopy $idp.roleMappings.workflow) ($idp.policy | default dict) $legacy | toYaml -}} +{{- end -}} + +{{- define "obaas.otmm.requestsWithNoJWT" -}} +{{- .Values.otmm.coordinator.authentication.requestsWithNoJWT | default (ternary "DENY" "ALLOW" .Values.otmm.commonConfiguration.security.enabled) -}} +{{- end -}} + +{{- define "obaas.otmm.validateSecurity" -}} +{{- $security := .Values.otmm.commonConfiguration.security -}} +{{- $idp := $security.identityProvider -}} +{{- $jwtRequired := eq (include "obaas.otmm.requestsWithNoJWT" .) "DENY" -}} +{{- if and .Values.otmm.coordinator.enabled $security.enabled (not $jwtRequired) -}} +{{- fail "MicroTx security.enabled requires coordinator.authentication.requestsWithNoJWT: DENY (or empty to derive DENY)" -}} +{{- end -}} +{{- if or $security.enabled (and .Values.otmm.coordinator.enabled $jwtRequired) -}} +{{- $_ := required "MicroTx JWT authentication requires otmm.commonConfiguration.security.identityProvider.issuer" $idp.issuer -}} +{{- $_ := required "MicroTx JWT authentication requires otmm.commonConfiguration.security.identityProvider.jwksUri" $idp.jwksUri -}} +{{- end -}} +{{- if and .Values.otmm.coordinator.enabled $jwtRequired -}} +{{- $_ := required "MicroTx coordinator JWT authentication requires identityProvider.audience" $idp.audience -}} +{{- end -}} +{{- if and (ne $idp.serverType "idcs") $idp.scopes -}} +{{- fail "MicroTx identityProvider.scopes is for serverType: idcs only; leave it empty for other providers" -}} +{{- end -}} +{{- if and $security.enabled (eq (include "otmm.console.enabled" .) "true") -}} +{{- $roles := include "obaas.otmm.coordinatorRoles" . | fromYaml -}} +{{- $_ := required "MicroTx console requires security.clientSecretName (Secret keys: clientId, clientPassword)" $security.clientSecretName -}} +{{- $_ := required "MicroTx console requires identityProvider.identityProviderUrl" $idp.identityProviderUrl -}} +{{- $_ := required "MicroTx console requires identityProvider.audience" $idp.audience -}} +{{- $_ := required "MicroTx console requires identityProvider.roleMappings.coordinator.adminUserRoles" $roles.adminUserRoles -}} +{{- $_ := required "MicroTx console requires identityProvider.roleMappings.coordinator.adminUserRolesPath" $roles.adminUserRolesPath -}} +{{- $_ := required "MicroTx console requires console.cookieEncryptionPasswordSecretName" .Values.otmm.console.cookieEncryptionPasswordSecretName -}} +{{- $_ := required "MicroTx console requires commonConfiguration.externalURL.protocol" .Values.otmm.commonConfiguration.externalURL.protocol -}} +{{- $_ := required "MicroTx console requires commonConfiguration.externalURL.host" .Values.otmm.commonConfiguration.externalURL.host -}} +{{- end -}} +{{- end -}} diff --git a/helm/infra-charts/obaas/templates/otmm/_storage.tpl b/helm/infra-charts/obaas/templates/otmm/_storage.tpl new file mode 100644 index 000000000..71f4036f1 --- /dev/null +++ b/helm/infra-charts/obaas/templates/otmm/_storage.tpl @@ -0,0 +1,116 @@ +{{/* Copyright (c) 2026, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. */}} +{{/* Validate required configuration before producing any MicroTx resources. */}} +{{- define "obaas.otmm.validateStorage" -}} +{{- $storage := .Values.otmm.coordinator.storage -}} +{{- if .Values.otmm.coordinator.enabled -}} +{{- if not (has $storage.type (list "memory" "db" "etcd")) -}} +{{- fail "otmm.coordinator.storage.type must be memory, db, or etcd" -}} +{{- end -}} +{{- if and (eq $storage.type "memory") (ne (int .Values.otmm.coordinator.replicas) 1) -}} +{{- fail "memory coordinator storage requires replicas: 1; use db or etcd for multiple replicas" -}} +{{- end -}} +{{- if eq $storage.type "db" -}} +{{- if $storage.db.credentialSecretName -}} +{{- $_ := required "A separate coordinator credential secret requires otmm.coordinator.storage.db.connectionString" $storage.db.connectionString -}} +{{- end -}} +{{- if and $storage.db.walletConfigMapName $storage.db.walletSecretName -}} +{{- fail "Configure only one of walletConfigMapName and walletSecretName" -}} +{{- end -}} +{{- else if eq $storage.type "etcd" -}} +{{- $_ := required "etcd storage requires otmm.coordinator.storage.etcd.endpoints" $storage.etcd.endpoints -}} +{{- if ne (empty $storage.etcd.credentialSecretName) (empty $storage.etcd.caConfigMapName) -}} +{{- fail "etcd TLS requires both credentialSecretName and caConfigMapName" -}} +{{- end -}} +{{- end -}} +{{- end -}} +{{- $fs := .Values.otmm.workflowServer.config.storage.fileSystem.persistence -}} +{{- if and .Values.otmm.workflowServer.enabled $fs.enabled (not (has "ReadWriteMany" $fs.accessModes)) (gt (int .Values.otmm.workflowServer.replicas) 1) -}} +{{- fail "Multiple workflow replicas require shared ReadWriteMany file storage" -}} +{{- end -}} +{{- if and .Values.otmm.workflowServer.enabled $fs.enabled $fs.retain .Values.global.cleanupPVCs -}} +{{- fail "Retaining workflow files requires global.cleanupPVCs: false; the namespace cleanup hook otherwise deletes retained PVCs" -}} +{{- end -}} +{{- end -}} + +{{- define "obaas.otmm.workflowClaim" -}} +{{- .Values.otmm.workflowServer.config.storage.fileSystem.persistence.existingClaim | default (printf "%s-otmm-workflow-files" .Release.Name | trunc 63 | trimSuffix "-") -}} +{{- end -}} + +{{/* Keep volume and startup decisions in sync for all coordinator containers. */}} +{{- define "obaas.otmm.coordinatorStorageOptions" -}} +{{- $storage := .Values.otmm.coordinator.storage -}} +{{- $sharedDatabase := and (eq $storage.type "db") (not $storage.db.credentialSecretName) -}} +{{- $databaseWallet := not (empty (or $storage.db.walletConfigMapName $storage.db.walletSecretName $sharedDatabase)) -}} +{{- toYaml (dict + "sharedDatabase" $sharedDatabase + "databaseWallet" $databaseWallet + "sharedWallet" (and $sharedDatabase (not $storage.db.walletConfigMapName) (not $storage.db.walletSecretName)) + "mountStorage" (or (and (eq $storage.type "db") $databaseWallet) (and (eq $storage.type "etcd") (not (empty $storage.etcd.credentialSecretName))))) -}} +{{- end -}} + +{{/* Shared startup configuration for schema initialization and the coordinator. */}} +{{- define "obaas.otmm.coordinatorConfig" -}} +{{- $root := .root -}} +{{- $storage := $root.Values.otmm.coordinator.storage -}} +{{- $options := .storageOptions -}} +{{- if $options.sharedDatabase }} +# MicroTx expects JSON credentials; serialize the shared secret at runtime. +command: ["/usr/bin/python3", "-c"] +args: +- | + import json, os + os.environ["STORAGE_DB_CREDENTIAL"] = json.dumps({ + "username": os.environ.pop("DB_USERNAME"), + "password": os.environ.pop("DB_PASSWORD"), + }) + os.environ["STORAGE_DB_CONNECTION_STRING"] = {{ $storage.db.connectionString | toJson }} or os.environ["DB_DSN"] + os.execv("/app/tcs", ["/app/tcs"]) +{{- end }} +# Use one configuration source so secret-backed environment settings apply. +envFrom: +- configMapRef: + name: {{ $root.Release.Name }}-otmm-config +env: +- name: INIT_CONTAINER_ENABLED + value: {{ .initialize | quote }} +- name: GIN_MODE + value: release +{{- if and $root.Values.otmm.commonConfiguration.security.enabled $root.Values.otmm.commonConfiguration.security.clientSecretName }} +- name: IDENTITY_PROVIDER_CLIENT_ID + valueFrom: + secretKeyRef: + name: {{ $root.Values.otmm.commonConfiguration.security.clientSecretName | quote }} + key: clientId +{{- end }} +{{- if eq $storage.type "db" }} +{{- if $options.sharedDatabase }} +{{- include "obaas.database.authN" $root | nindent 0 }} +{{- else }} +- name: STORAGE_DB_CREDENTIAL + valueFrom: + secretKeyRef: + name: {{ $storage.db.credentialSecretName | quote }} + key: {{ $storage.db.credentialSecretKey | quote }} +{{- end }} +{{- if $options.databaseWallet }} +- name: TNS_ADMIN + value: /etc/config/dbwallet +{{- end }} +{{- end }} +{{- if $options.mountStorage }} +volumeMounts: +{{- if and (eq $storage.type "db") $options.databaseWallet }} +- name: database-wallet + mountPath: /etc/config/dbwallet + readOnly: true +{{- else if and (eq $storage.type "etcd") $storage.etcd.credentialSecretName }} +- name: etcd-credentials + mountPath: /etcdecert + readOnly: true +- name: etcd-ca + mountPath: /etcdcacert + readOnly: true +{{- end }} +{{- end }} +{{- end -}} diff --git a/helm/infra-charts/obaas/templates/otmm/configmap.yaml b/helm/infra-charts/obaas/templates/otmm/configmap.yaml index d1bed3419..3b7ed0c35 100644 --- a/helm/infra-charts/obaas/templates/otmm/configmap.yaml +++ b/helm/infra-charts/obaas/templates/otmm/configmap.yaml @@ -1,6 +1,12 @@ ## Copyright (c) 2024, 2026, Oracle and/or its affiliates. ## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. {{- if .Values.otmm.coordinator.enabled }} +{{- include "obaas.otmm.validateStorage" . }} +{{- include "obaas.otmm.validateSecurity" . }} +{{- $storage := .Values.otmm.coordinator.storage }} +{{- $security := .Values.otmm.commonConfiguration.security }} +{{- $idp := $security.identityProvider }} +{{- $roles := include "obaas.otmm.coordinatorRoles" . | fromYaml }} apiVersion: v1 kind: ConfigMap metadata: @@ -13,7 +19,9 @@ metadata: {{- include "obaas.labels" . | nindent 4 }} data: APPLICATION_NAMESPACE: "" - AUTHORIZATION_ENABLED: "false" + AUTHENTICATION_ENABLED: {{ eq (include "obaas.otmm.requestsWithNoJWT" .) "DENY" | quote }} + AUTHORIZATION_ENABLED: {{ $security.enabled | quote }} + # Token propagation additionally requires encryption key configuration. AUTHORIZATION_TOKEN_PROPAGATION_ENABLED: "false" BATCH_INTERVAL: "60" CACHE_ENABLED: "true" @@ -26,9 +34,13 @@ data: HTTP_CLIENT_TIMEOUT_IN_SECS: "60" HTTP_TRACE_ENABLED: "true" ID: TCS01 - IDENTITY_PROVIDER_CLIENT_ID: "" - IDENTITY_PROVIDER_NAME: "" - IDENTITY_PROVIDER_URL: "" + IDENTITY_PROVIDER_SERVER_TYPE: {{ $idp.serverType | quote }} + IDENTITY_PROVIDER_URL: {{ $idp.identityProviderUrl | quote }} + JWT_ISSUER: {{ $idp.issuer | quote }} + JWT_JWKS_URI: {{ $idp.jwksUri | quote }} + JWT_AUDIENCES: {{ $idp.audience | quote }} + ADMIN_USER_ROLES: {{ $roles.adminUserRoles | quote }} + ADMIN_USER_ROLES_PATH: {{ $roles.adminUserRolesPath | quote }} INTERNAL_ADDR: {{ printf "http://%s-otmm-tcs:9000" .Release.Name }} ISTIO_INGRESS_GATEWAY: ingressgateway ISTIO_SYSTEM_NAMESPACE: "" @@ -41,10 +53,22 @@ data: NARAYANA_LRA_COMPATIBILITY_MODE: "false" NOTIFICATION_SPIKE_TIME_IN_SEC: "5" PORT: "9000" - REQUEST_WITH_NO_JWT: ALLOW - STORAGE_ETCD_ENDPOINTS: "" - STORAGE_ETCD_SKIP_HOSTNAME_VERIFICATION: "false" - STORAGE_TYPE: memory + REQUEST_WITH_NO_JWT: {{ include "obaas.otmm.requestsWithNoJWT" . | quote }} + SERVE_TLS_ENABLED: "false" + STORAGE_TYPE: {{ $storage.type | quote }} + STORAGE_ETCD_ENDPOINTS: {{ ternary $storage.etcd.endpoints "" (eq $storage.type "etcd") | quote }} + STORAGE_ETCD_SKIP_HOSTNAME_VERIFICATION: {{ ternary $storage.etcd.skipHostNameVerification false (eq $storage.type "etcd") | quote }} + {{- if eq $storage.type "db" }} + {{- if $storage.db.connectionString }} + STORAGE_DB_CONNECTION_STRING: {{ $storage.db.connectionString | quote }} + {{- end }} + STORAGE_DB_CONNECTION_PARAMS: {{ $storage.db.connectionParams | quote }} + {{- else if eq $storage.type "etcd" }} + {{- if $storage.etcd.credentialSecretName }} + STORAGE_ETCD_CREDENTIAL_SECRET_FILE_NAME: credentials.json + STORAGE_ETCD_CA_CERT_FILE_NAME: ca.pem + {{- end }} + {{- end }} TCC_COORDINATOR_ENABLED: "true" TMM_APPNAME: {{ .Release.Name }}-otmm-tcs TMM_IMAGE: "{{ .Values.otmm.coordinator.image.repository }}:{{ .Values.otmm.coordinator.image.tag }}" diff --git a/helm/infra-charts/obaas/templates/otmm/console.yaml b/helm/infra-charts/obaas/templates/otmm/console.yaml index fb35a268d..40b53490d 100644 --- a/helm/infra-charts/obaas/templates/otmm/console.yaml +++ b/helm/infra-charts/obaas/templates/otmm/console.yaml @@ -2,6 +2,16 @@ ## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. {{- if eq (include "otmm.console.enabled" .) "true" }} +{{- include "obaas.otmm.validateSecurity" . }} +{{- $coordinatorRoles := include "obaas.otmm.coordinatorRoles" . | fromYaml }} +{{- $security := .Values.otmm.commonConfiguration.security }} +{{- $idp := $security.identityProvider }} +{{- $externalURL := .Values.otmm.commonConfiguration.externalURL }} +{{- $consoleOrigin := printf "%s://%s" ($externalURL.protocol | default "http") ($externalURL.host | default (printf "%s-otmm-console" .Release.Name)) }} +{{- if $externalURL.port }} +{{- $consoleOrigin = printf "%s://%s:%v" $externalURL.protocol $externalURL.host $externalURL.port }} +{{- end }} +{{- $defaultScopes := ternary "openid groups" "openid" (eq $idp.serverType "idcs") }} apiVersion: v1 kind: Service metadata: @@ -82,17 +92,16 @@ spec: - name: http-console containerPort: 8080 protocol: TCP - readinessProbe: - httpGet: - path: /health - port: http-console - initialDelaySeconds: 10 - periodSeconds: 10 - timeoutSeconds: 3 - failureThreshold: 6 + {{- $probes := .Values.otmm.console.probes | default dict }} + {{- range $name := list "startup" "readiness" "liveness" }} + {{- with index $probes $name }} + {{ $name }}Probe: + {{- toYaml . | nindent 12 }} + {{- end }} + {{- end }} resources: {{- with .Values.otmm.console.resources }} - {{ toYaml . | nindent 6 }} + {{- toYaml . | nindent 12 }} {{- else }} limits: cpu: "2" @@ -112,13 +121,13 @@ spec: - name: TMM_TCS_URL value: "http://{{ .Release.Name }}-otmm-tcs:9000" {{- end }} - {{- if eq .Values.otmm.commonConfiguration.security.enabled true }} + {{- if $security.enabled }} - name: TMM_ADMIN_USER_ROLE_NAMES - value: {{ .Values.otmm.commonConfiguration.security.identityProvider.adminUserRoles }} + value: {{ $coordinatorRoles.adminUserRoles | quote }} - name: TMM_ROLES_PATH - value: {{ .Values.otmm.commonConfiguration.security.identityProvider.adminUserRolesPath }} + value: {{ $coordinatorRoles.adminUserRolesPath | quote }} - name: SECURITY_PROPERTIES_OIDC_IDENTITY_URI - value: {{ .Values.otmm.commonConfiguration.security.identityProvider.identityProviderUrl }} + value: {{ $idp.identityProviderUrl | quote }} - name: SECURITY_PROPERTIES_COOKIE_ENCRYPTION_PASSWORD valueFrom: secretKeyRef: @@ -127,39 +136,24 @@ spec: - name: SECURITY_PROPERTIES_OIDC_CLIENT_ID valueFrom: secretKeyRef: - name: {{ .Values.otmm.commonConfiguration.security.clientSecretName }} + name: {{ $security.clientSecretName }} key: clientId - name: SECURITY_PROPERTIES_OIDC_CLIENT_SECRET valueFrom: secretKeyRef: - name: {{ .Values.otmm.commonConfiguration.security.clientSecretName }} + name: {{ $security.clientSecretName }} key: clientPassword - name: SECURITY_PROPERTIES_OIDC_ISSUER - value: {{ .Values.otmm.commonConfiguration.security.identityProvider.issuer }} + value: {{ $idp.issuer | quote }} - name: SECURITY_PROPERTIES_OIDC_AUDIENCE - value: {{ .Values.otmm.commonConfiguration.security.identityProvider.audience }} + value: {{ $idp.audience | quote }} - name: SECURITY_PROPERTIES_OIDC_BASE_SCOPES - {{- if or (eq (.Values.otmm.commonConfiguration.security.identityProvider.scopes | toString) "") (not (.Values.commonConfiguration.security.identityProvider.scopes)) }} - {{- if (eq (.Values.otmm.commonConfiguration.security.identityProvider.serverType | toString) "idcs") }} - value: "openid groups" - {{- else }} - value: "openid" - {{- end }} - {{- else }} - value: {{ .Values.otmm.commonConfiguration.security.identityProvider.scopes }} - {{- end }} + value: {{ $idp.scopes | default $defaultScopes | quote }} - name: SECURITY_PROPERTIES_FRONTEND_URI - {{- if .Values.otmm.commonConfiguration.externalURL.port }} - value: "{{ .Values.otmm.commonConfiguration.externalURL.protocol }}://{{ .Values.otmm.commonConfiguration.externalURL.host }}:{{ .Values.otmm.commonConfiguration.externalURL.port }}/console" - {{- else }} - value: "{{ .Values.commonConfiguration.externalURL.protocol }}://{{ .Values.otmm.commonConfiguration.externalURL.host }}/console" + value: {{ printf "%s/console" $consoleOrigin | quote }} {{- end }} - name: SECURITY_ENABLED - value: "true" - {{- else }} - - name: SECURITY_ENABLED - value: "false" - {{- end }} + value: {{ $security.enabled | quote }} {{- if .Values.otmm.workflowServer.enabled }} # WorkflowServer URL configuration - name: WF_SERVER @@ -167,17 +161,10 @@ spec: - name: CONDUCTOR_BACKEND_ENDPOINT value: "http://{{ .Release.Name }}-otmm-workflow-server:9010" - name: CONDUCTOR_FRONTEND_ENDPOINT - {{- if .Values.otmm.commonConfiguration.externalURL.port }} - value: "{{ .Values.otmm.commonConfiguration.externalURL.protocol }}://{{ .Values.otmm.commonConfiguration.externalURL.host }}:{{ .Values.otmm.commonConfiguration.externalURL.port }}" - {{- else }} - value: "{{ .Values.otmm.commonConfiguration.externalURL.protocol | default "http" }}://{{ .Values.otmm.commonConfiguration.externalURL.host | default (printf "%s-otmm-console" .Release.Name) }}" - {{- end }} + value: {{ $consoleOrigin | quote }} {{- end }} - # temporary - name: SECURITY_PROPERTIES_COOKIE_ENCRYPTION_ENABLED - value: "false" + value: {{ .Values.otmm.console.cookieEncryption.enabled | quote }} - name: FAST_REFRESH value: "false" - # securityContext: - # runAsUser: 1000 {{- end }} diff --git a/helm/infra-charts/obaas/templates/otmm/pvc.yaml b/helm/infra-charts/obaas/templates/otmm/pvc.yaml new file mode 100644 index 000000000..829943bab --- /dev/null +++ b/helm/infra-charts/obaas/templates/otmm/pvc.yaml @@ -0,0 +1,27 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +{{- include "obaas.otmm.validateStorage" . }} +{{- $persistence := .Values.otmm.workflowServer.config.storage.fileSystem.persistence }} +{{- if and .Values.otmm.workflowServer.enabled $persistence.enabled (not $persistence.existingClaim) }} +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "obaas.otmm.workflowClaim" . }} + namespace: {{ $.Release.Namespace }} + labels: + {{- include "obaas.labels" $ | nindent 4 }} + {{- if $persistence.retain }} + annotations: + helm.sh/resource-policy: keep + {{- end }} +spec: + accessModes: + {{- toYaml $persistence.accessModes | nindent 4 }} + {{- if $persistence.storageClass }} + storageClassName: {{ $persistence.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ $persistence.size | quote }} +{{- end }} diff --git a/helm/infra-charts/obaas/templates/otmm/statefulset.yaml b/helm/infra-charts/obaas/templates/otmm/statefulset.yaml index db8bef603..b95878c4a 100644 --- a/helm/infra-charts/obaas/templates/otmm/statefulset.yaml +++ b/helm/infra-charts/obaas/templates/otmm/statefulset.yaml @@ -1,6 +1,8 @@ ## Copyright (c) 2024, 2026, Oracle and/or its affiliates. ## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. {{- if .Values.otmm.coordinator.enabled }} +{{- $storage := .Values.otmm.coordinator.storage }} +{{- $storageOptions := include "obaas.otmm.coordinatorStorageOptions" . | fromYaml }} {{- $otmmMetrics := default dict .Values.otmm.coordinator.metrics }} {{- $otmmMetricsScrape := default dict $otmmMetrics.scrape }} {{- $otmmMetricsEnabled := true }} @@ -34,8 +36,12 @@ spec: labels: app.kubernetes.io/name: {{ .Release.Name }}-otmm-tcs app.kubernetes.io/component: transaction-coordinator - {{- if and .Values.signoz.enabled $otmmMetricsEnabled $otmmMetricsScrapeEnabled }} annotations: + checksum/otmm-config: {{ include (print $.Template.BasePath "/otmm/configmap.yaml") . | sha256sum }} + {{- if $storageOptions.sharedWallet }} + checksum/otmm-wallet-config: {{ include (print $.Template.BasePath "/otmm/wallet-configmap.yaml") . | sha256sum }} + {{- end }} + {{- if and .Values.signoz.enabled $otmmMetricsEnabled $otmmMetricsScrapeEnabled }} signoz.io/scrape: "true" signoz.io/port: {{ $otmmMetricsPort | quote }} signoz.io/path: {{ $otmmMetricsPath | quote }} @@ -45,6 +51,15 @@ spec: serviceAccountName: {{ .Release.Name }}-otmm-tcs securityContext: runAsUser: 1000 + + ## If using database storage, initialize the MicroTX Schema. + {{- if and (eq $storage.type "db") $storage.db.initializeSchema }} + initContainers: + - name: initialize-coordinator-schema + image: "{{ .Values.otmm.coordinator.image.repository }}:{{ .Values.otmm.coordinator.image.tag }}" + imagePullPolicy: {{ .Values.otmm.coordinator.image.pullPolicy | default "IfNotPresent" }} + {{- include "obaas.otmm.coordinatorConfig" (dict "root" . "initialize" true "storageOptions" $storageOptions) | nindent 8 }} + {{- end }} containers: - name: otmm-tcs image: "{{ .Values.otmm.coordinator.image.repository }}:{{ .Values.otmm.coordinator.image.tag }}" @@ -53,14 +68,14 @@ spec: - name: http containerPort: 9000 protocol: TCP - env: - - name: GIN_MODE - value: release - - name: CONFIG_MAP_PATH - value: /etc/config - volumeMounts: - - name: config-volume - mountPath: /etc/config + {{- include "obaas.otmm.coordinatorConfig" (dict "root" . "initialize" false "storageOptions" $storageOptions) | nindent 8 }} + {{- $probes := .Values.otmm.coordinator.probes | default dict }} + {{- range $name := list "startup" "readiness" "liveness" }} + {{- with index $probes $name }} + {{ $name }}Probe: + {{- toYaml . | nindent 10 }} + {{- end }} + {{- end }} resources: {{- if .Values.otmm.coordinator.resources }} {{- toYaml .Values.otmm.coordinator.resources | nindent 10 }} @@ -72,8 +87,42 @@ spec: cpu: 250m memory: 1Gi {{- end }} + {{- if $storageOptions.mountStorage }} volumes: - - name: config-volume + {{- if and (eq $storage.type "db") $storageOptions.databaseWallet }} + - name: database-wallet + {{- if $storage.db.walletSecretName }} + secret: + secretName: {{ $storage.db.walletSecretName | quote }} + {{- else if $storage.db.walletConfigMapName }} configMap: - name: {{ .Release.Name }}-otmm-config + name: {{ $storage.db.walletConfigMapName | quote }} + {{- else }} + projected: + sources: + - secret: + name: {{ ternary (include "obaas.databaseAdbTnsAdminSecret" .) (include "obaas.databaseTnsAdminSecret" .) (eq (include "obaas.database.isADB" .) "true") }} + optional: true + # The downloaded wallet points to ?/network/admin; use this mount instead. + - configMap: + name: {{ .Release.Name }}-otmm-wallet-config + items: + - key: sqlnet.ora + path: sqlnet.ora + {{- end }} + {{- else if and (eq $storage.type "etcd") $storage.etcd.credentialSecretName }} + - name: etcd-credentials + secret: + secretName: {{ $storage.etcd.credentialSecretName | quote }} + items: + - key: {{ $storage.etcd.credentialSecretKey | quote }} + path: credentials.json + - name: etcd-ca + configMap: + name: {{ $storage.etcd.caConfigMapName | quote }} + items: + - key: {{ $storage.etcd.caConfigMapKey | quote }} + path: ca.pem + {{- end }} + {{- end }} {{- end }} diff --git a/helm/infra-charts/obaas/templates/otmm/wallet-configmap.yaml b/helm/infra-charts/obaas/templates/otmm/wallet-configmap.yaml new file mode 100644 index 000000000..36ab15704 --- /dev/null +++ b/helm/infra-charts/obaas/templates/otmm/wallet-configmap.yaml @@ -0,0 +1,18 @@ +## Copyright (c) 2026, Oracle and/or its affiliates. +## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +# Point TCS at mounted wallet secret using sqlnet.ora. +{{- $db := .Values.otmm.coordinator.storage.db }} +{{- if and .Values.otmm.coordinator.enabled (eq .Values.otmm.coordinator.storage.type "db") (not $db.credentialSecretName) (not $db.walletConfigMapName) (not $db.walletSecretName) }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-otmm-wallet-config + namespace: {{ .Release.Namespace }} + labels: + {{- include "obaas.labels" . | nindent 4 }} +data: + sqlnet.ora: | + WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/etc/config/dbwallet"))) + SSL_SERVER_DN_MATCH=yes +{{- end }} diff --git a/helm/infra-charts/obaas/templates/otmm/workflow-server-deployment.yaml b/helm/infra-charts/obaas/templates/otmm/workflow-server-deployment.yaml index 23796f865..9535a0e0f 100644 --- a/helm/infra-charts/obaas/templates/otmm/workflow-server-deployment.yaml +++ b/helm/infra-charts/obaas/templates/otmm/workflow-server-deployment.yaml @@ -1,6 +1,10 @@ ## Copyright (c) 2026, Oracle and/or its affiliates. ## Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. {{- if .Values.otmm.workflowServer.enabled }} +{{- include "obaas.otmm.validateStorage" . }} +{{- include "obaas.otmm.validateSecurity" . }} +{{- $workflowRoles := include "obaas.otmm.workflowRoles" . | fromYaml }} +{{- $filePersistence := .Values.otmm.workflowServer.config.storage.fileSystem.persistence }} {{- $workflowMetrics := default dict .Values.otmm.workflowServer.metrics }} {{- $workflowMetricsScrape := default dict $workflowMetrics.scrape }} {{- $workflowMetricsEnabled := true }} @@ -33,6 +37,14 @@ metadata: {{- include "obaas.labels" . | nindent 4 }} spec: replicas: {{ .Values.otmm.workflowServer.replicas}} + {{- if and $filePersistence.enabled (not (has "ReadWriteMany" $filePersistence.accessModes)) }} + strategy: + type: Recreate + rollingUpdate: null + {{- else }} + strategy: + type: RollingUpdate + {{- end }} selector: matchLabels: app.kubernetes.io/name: {{ .Release.Name }}-otmm-workflow-server @@ -170,19 +182,19 @@ spec: value: {{ .Values.otmm.commonConfiguration.security.identityProvider.audience | quote }} {{- end }} - name: POLICY_SECURITY_CLAIMS_ROLE_PATHS - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.claimsRolePaths | quote }} + value: {{ $workflowRoles.claimsRolePaths | quote }} - name: POLICY_SECURITY_ROLE_SUPER_ADMIN - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.roles.superAdmin | quote }} + value: {{ $workflowRoles.roles.superAdmin | quote }} - name: POLICY_SECURITY_ROLE_ADMIN - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.roles.admin | quote }} + value: {{ $workflowRoles.roles.admin | quote }} - name: POLICY_SECURITY_ROLE_USER - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.roles.user | quote }} + value: {{ $workflowRoles.roles.user | quote }} - name: POLICY_SECURITY_ROLE_READ_ONLY_USER - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.roles.readOnlyUser | quote }} + value: {{ $workflowRoles.roles.readOnlyUser | quote }} - name: POLICY_SECURITY_ROLE_METADATA_MANAGER - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.roles.metadataManager | quote }} + value: {{ $workflowRoles.roles.metadataManager | quote }} - name: POLICY_SECURITY_ROLE_WORKER - value: {{ .Values.otmm.workflowServer.security.identityProvider.policy.roles.worker | quote }} + value: {{ $workflowRoles.roles.worker | quote }} - name: CONDUCTOR_SECURITY_ENABLED value: "true" {{- else }} @@ -250,7 +262,12 @@ spec: {{- end }} volumes: - name: workflow-fs-volume + {{- if $filePersistence.enabled }} + persistentVolumeClaim: + claimName: {{ include "obaas.otmm.workflowClaim" . }} + {{- else }} emptyDir: {} + {{- end }} - name: oracle-db-wallet-volume secret: optional: true diff --git a/helm/infra-charts/obaas/tests/fixtures/signoz-upgrade/mock-phase5-kubectl.sh b/helm/infra-charts/obaas/tests/fixtures/signoz-upgrade/mock-phase5-kubectl.sh new file mode 100755 index 000000000..e8cf398ed --- /dev/null +++ b/helm/infra-charts/obaas/tests/fixtures/signoz-upgrade/mock-phase5-kubectl.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail +SCENARIO="${MOCK_SCENARIO:-success}" +if [[ "$1" == wait ]]; then + [[ "${SCENARIO}" == migration-failed && "$2" == job/signoz-telemetrystore-migrator ]] && exit 1 + [[ "${SCENARIO}" == setup-failed && "$2" == job/*-signoz-setup ]] && exit 1 + exit 0 +fi +if [[ "$1" == get && "$2" == pods ]]; then + if [[ "$*" == *component=signoz* ]]; then + [[ "${SCENARIO}" == wrong-signoz ]] && echo docker.io/signoz/signoz:v0.113.0 || echo docker.io/signoz/signoz:v0.142.1 + else + [[ "${SCENARIO}" == wrong-collector ]] && echo docker.io/signoz/signoz-otel-collector:v0.144.1 || echo docker.io/signoz/signoz-otel-collector:v0.144.10 + fi + exit 0 +fi +exit 1 diff --git a/helm/infra-charts/obaas/tests/fixtures/signoz-upgrade/mock-stage2-kubectl.sh b/helm/infra-charts/obaas/tests/fixtures/signoz-upgrade/mock-stage2-kubectl.sh new file mode 100755 index 000000000..99c674ff6 --- /dev/null +++ b/helm/infra-charts/obaas/tests/fixtures/signoz-upgrade/mock-stage2-kubectl.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail +SCENARIO="${MOCK_SCENARIO:-success}" +last_argument="${!#}" + +if [[ "$1" == get && "$2" == secret ]]; then + [[ "${SCENARIO}" == no-marker ]] && exit 1 + [[ "$*" != *go-template* ]] && exit 0 + case "$*" in + *'"workflow"'*) echo 'signoz-0.142.1-two-stage' ;; + *'"stage"'*) echo 'stage1' ;; + *'"status"'*) [[ "${SCENARIO}" == malformed-marker ]] || echo 'complete' ;; + *'"releaseName"'*) echo 'obaas' ;; + *'"namespace"'*) echo 'obaas' ;; + *'"helmRevision"'*) [[ "${SCENARIO}" == stale-marker ]] && echo 6 || echo 7 ;; + *'"targetVersion"'*) echo '0.142.1' ;; + *'"clickhouseVersion"'*) echo '25.12.5.44' ;; + *'"snapshots"'*) printf 'clickhouse\tch-pvc\tuid-ch-pvc\tch-snap\nsignoz\tsignoz-pvc\tuid-signoz-pvc\tsignoz-snap\nzookeeper\tzk-pvc\tuid-zk-pvc\tzk-snap' ;; + *) exit 1 ;; + esac + exit 0 +fi + +if [[ "$1" == get && "$2" == pvc ]]; then + [[ "${SCENARIO}" == mismatched-pvc && "$3" == signoz-pvc ]] && echo replacement-uid || echo "uid-$3" + exit 0 +fi + +if [[ "$1" == get && "$2" == volumesnapshot.snapshot.storage.k8s.io ]]; then + snapshot="$3" + [[ "${SCENARIO}" == deleted-snapshot && "${snapshot}" == signoz-snap ]] && exit 1 + [[ "$*" != *jsonpath* ]] && exit 0 + case "${last_argument}" in + *readyToUse*) echo true ;; + *source-pvc-uid*) echo "uid-${snapshot%-snap}-pvc" ;; + *source-pvc*) echo "${snapshot%-snap}-pvc" ;; + *helm-revision*) echo 7 ;; + *) exit 1 ;; + esac + exit 0 +fi + +if [[ "$1" == wait ]]; then exit 0; fi +if [[ "$1" == get && "$2" == pods ]]; then echo clickhouse-0; exit 0; fi +if [[ "$1" == get && "$2" == pod ]]; then + [[ "${SCENARIO}" == wrong-clickhouse ]] && echo docker.io/clickhouse/clickhouse-server:25.5.6 || echo docker.io/clickhouse/clickhouse-server:25.12.5 + exit 0 +fi +if [[ "$1" == get && "$2" == clickhouseinstallations.clickhouse.altinity.com ]]; then echo obaas-clickhouse; exit 0; fi +if [[ "$1" == get && "$2" == clickhouseinstallation.clickhouse.altinity.com ]]; then echo password; exit 0; fi +if [[ "$1" == exec ]]; then + [[ "${SCENARIO}" == wrong-clickhouse ]] && echo 25.5.6.1 || echo 25.12.5.44 + exit 0 +fi +echo "Unexpected invocation: $*" >&2 +exit 1 diff --git a/helm/infra-charts/obaas/tests/test-apisix-chart-upgrade.sh b/helm/infra-charts/obaas/tests/test-apisix-chart-upgrade.sh index ca9e7d007..13866b6bd 100755 --- a/helm/infra-charts/obaas/tests/test-apisix-chart-upgrade.sh +++ b/helm/infra-charts/obaas/tests/test-apisix-chart-upgrade.sh @@ -1,9 +1,12 @@ #!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" -IMAGE_LIST="${CHART_DIR}/../tools/image_lists/k8s_images_2.1.1.txt" +IMAGE_LIST="${CHART_DIR}/../tools/image_lists/k8s_images_2.1.2.txt" RELEASE_NOTES="${CHART_DIR}/../../../docs-source/site/docs/rel_notes/index.mdx" PUBLIC_RENDER="$(mktemp)" PRIVATE_RENDER="$(mktemp)" @@ -42,16 +45,16 @@ require_command helm require_command tar require_command grep -assert_contains "${CHART_DIR}/Chart.yaml" 'version: "2.16.0"' -assert_contains "${CHART_DIR}/Chart.lock" 'version: 2.16.0' -assert_contains "${CHART_DIR}/values.yaml" 'tag: "3.17.0-ubuntu"' -assert_contains "${CHART_DIR}/examples/values-private-registry.yaml" 'tag: "3.17.0-ubuntu"' -assert_contains "${IMAGE_LIST}" 'docker.io/apache/apisix:3.17.0-ubuntu' -assert_contains "${RELEASE_NOTES}" '| Apache APISIX | `docker.io/apache/apisix` | 3.17.0-ubuntu |' +assert_contains "${CHART_DIR}/Chart.yaml" 'version: "2.17.0"' +assert_contains "${CHART_DIR}/Chart.lock" 'version: 2.17.0' +assert_contains "${CHART_DIR}/values.yaml" 'tag: "3.18.0-ubuntu"' +assert_contains "${CHART_DIR}/examples/values-private-registry.yaml" 'tag: "3.18.0-ubuntu"' +assert_contains "${IMAGE_LIST}" 'docker.io/apache/apisix:3.18.0-ubuntu' +assert_contains "${RELEASE_NOTES}" '| Apache APISIX | `docker.io/apache/apisix` | 3.18.0-ubuntu |' -CHART_METADATA="$(helm show chart "${CHART_DIR}/charts/apisix-2.16.0.tgz")" -grep -Fq -- 'version: 2.16.0' <<<"${CHART_METADATA}" -grep -Fq -- 'appVersion: 3.17.0' <<<"${CHART_METADATA}" +CHART_METADATA="$(helm show chart "${CHART_DIR}/charts/apisix-2.17.0.tgz")" +grep -Fq -- 'version: 2.17.0' <<<"${CHART_METADATA}" +grep -Fq -- 'appVersion: 3.18.0' <<<"${CHART_METADATA}" helm lint "${CHART_DIR}" -f "${CHART_DIR}/examples/values-default.yaml" helm template apisix-upgrade-test "${CHART_DIR}" \ @@ -61,10 +64,18 @@ helm template apisix-upgrade-test "${CHART_DIR}" \ --namespace apisix-upgrade-test \ -f "${CHART_DIR}/examples/values-private-registry.yaml" >"${PRIVATE_RENDER}" -assert_contains "${PUBLIC_RENDER}" 'image: "docker.io/apache/apisix:3.17.0-ubuntu"' -assert_contains "${PRIVATE_RENDER}" 'image: "myregistry.example.com/apache/apisix:3.17.0-ubuntu"' +assert_contains "${PUBLIC_RENDER}" 'image: "docker.io/apache/apisix:3.18.0-ubuntu"' +assert_contains "${PRIVATE_RENDER}" 'image: "myregistry.example.com/apache/apisix:3.18.0-ubuntu"' assert_contains "${PUBLIC_RENDER}" 'kind: Deployment' assert_contains "${PUBLIC_RENDER}" 'name: apisix-upgrade-test' +assert_contains "${PUBLIC_RENDER}" 'tracing: true' +assert_contains "${PRIVATE_RENDER}" 'tracing: true' +assert_contains "${PUBLIC_RENDER}" 'set_ngx_var: true' +assert_contains "${PRIVATE_RENDER}" 'set_ngx_var: true' +assert_contains "${PUBLIC_RENDER}" 'opentelemetry_trace_id' +assert_contains "${PRIVATE_RENDER}" 'opentelemetry_trace_id' +assert_contains "${PUBLIC_RENDER}" 'access_log_format_escape: json' +assert_contains "${PRIVATE_RENDER}" 'access_log_format_escape: json' assert_not_contains "${PUBLIC_RENDER}" 'apache/apisix:3.16.0-ubuntu' assert_not_contains "${PRIVATE_RENDER}" 'apache/apisix:3.16.0-ubuntu' diff --git a/helm/infra-charts/obaas/tests/test-microtx-etcd-tls.sh b/helm/infra-charts/obaas/tests/test-microtx-etcd-tls.sh new file mode 100755 index 000000000..bd0296a0f --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-microtx-etcd-tls.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +OUTPUT=$(mktemp) +trap 'rm -f "$OUTPUT"' EXIT + +helm template etcd-test "$CHART_DIR" \ + --set otmm.coordinator.storage.type=etcd \ + --set otmm.coordinator.storage.etcd.endpoints=https://etcd:2379 \ + --set otmm.coordinator.storage.etcd.credentialSecretName=etcd-auth \ + --set otmm.coordinator.storage.etcd.caConfigMapName=etcd-ca \ + --show-only templates/otmm/configmap.yaml \ + --show-only templates/otmm/statefulset.yaml > "$OUTPUT" + +# MicroTx prefixes these basenames with its fixed certificate directories. +rg -q 'STORAGE_ETCD_CREDENTIAL_SECRET_FILE_NAME: credentials.json' "$OUTPUT" +rg -q 'STORAGE_ETCD_CA_CERT_FILE_NAME: ca.pem' "$OUTPUT" +rg -q 'mountPath: /etcdecert$' "$OUTPUT" +rg -q 'mountPath: /etcdcacert$' "$OUTPUT" +rg -q 'path: credentials.json$' "$OUTPUT" +rg -q 'path: ca.pem$' "$OUTPUT" +if rg -q '/etc/otmm/etcd|initialize-coordinator-schema' "$OUTPUT"; then + echo 'Unexpected etcd path or database schema initialization' >&2 + exit 1 +fi +echo 'MicroTx etcd TLS render checks passed.' diff --git a/helm/infra-charts/obaas/tests/test-signoz-destructive-replace.sh b/helm/infra-charts/obaas/tests/test-signoz-destructive-replace.sh index 6848adbaf..4b5fb62f8 100755 --- a/helm/infra-charts/obaas/tests/test-signoz-destructive-replace.sh +++ b/helm/infra-charts/obaas/tests/test-signoz-destructive-replace.sh @@ -5,17 +5,19 @@ trap 'rm -f "$tmp"' EXIT helm lint "$chart" helm template obaas "$chart" -n obaas >"$tmp" ! grep -qE 'signoz-destructive-replace|kind: VolumeSnapshot|signoz-stage2' "$tmp" -if helm template obaas "$chart" -n obaas --is-upgrade >"$tmp" 2>&1; then exit 1; fi -grep -qF 'Destructive upgrade warning' "$tmp" -grep -qF 'signozUpgrade.mode=destructive-replace and signozUpgrade.confirmDataLoss=true' "$tmp" +helm template obaas "$chart" -n obaas --is-upgrade >"$tmp" +for image in 'signoz/signoz:v0.142.1' 'signoz/signoz-otel-collector:v0.144.10' 'clickhouse/clickhouse-server:25.12.5'; do grep -qF "$image" "$tmp"; done +if helm template obaas "$chart" -n obaas --is-upgrade \ + --set signozUpgrade.mode=destructive-replace >"$tmp" 2>&1; then exit 1; fi +grep -qF 'signozUpgrade.confirmDataLoss=true is required' "$tmp" helm template obaas "$chart" -n obaas --is-upgrade \ --set signozUpgrade.mode=destructive-replace \ --set signozUpgrade.confirmDataLoss=true >"$tmp" -for image in 'signoz/signoz:v0.134.0' 'signoz/signoz-otel-collector:v0.144.6' 'clickhouse/clickhouse-server:25.12.5'; do grep -qF "$image" "$tmp"; done +for image in 'signoz/signoz:v0.142.1' 'signoz/signoz-otel-collector:v0.144.10' 'clickhouse/clickhouse-server:25.12.5'; do grep -qF "$image" "$tmp"; done grep -qF 'erase-observability-data' "$tmp" grep -qF 'kubectl delete chi obaas-clickhouse' "$tmp" grep -qF 'kubectl delete job signoz-telemetrystore-migrator' "$tmp" grep -qF 'app.kubernetes.io/component=clickhouse' "$tmp" grep -qF 'name: signoz-telemetrystore-migrator' "$tmp" ! awk '/telemetrystore-migrator\/job.yaml/{found=1} found{print} found && /^---$/{exit}' "$tmp" | grep -q 'helm.sh/hook: pre-upgrade' -grep -qF 'Deleting existing dashboard:' "$tmp" +grep -qF 'Deleting existing system dashboard:' "$tmp" diff --git a/helm/infra-charts/obaas/tests/test-signoz-setup-toggle.sh b/helm/infra-charts/obaas/tests/test-signoz-setup-toggle.sh new file mode 100755 index 000000000..ccf40f8e7 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-setup-toggle.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +OUTPUT=$(mktemp) +trap 'rm -f "$OUTPUT"' EXIT + +helm template setup-test "$CHART_DIR" --is-upgrade > "$OUTPUT" +rg -q 'name: setup-test-signoz-setup$' "$OUTPUT" + +# First upgrade pass retains the old API and must not reconcile V2 dashboards. +helm template setup-test "$CHART_DIR" --is-upgrade \ + --set signoz.telemetryStoreMigrator.enabled=false \ + --set signoz.setup.enabled=false \ + --set signoz.signoz.image.tag=v0.113.0 > "$OUTPUT" +if rg -q 'name: setup-test-signoz-setup$' "$OUTPUT"; then + echo 'First-pass setup hook was not disabled' >&2 + exit 1 +fi + +# Second pass explicitly restores setup even if the first flag was saved. +helm template setup-test "$CHART_DIR" --is-upgrade \ + --set signoz.setup.enabled=false --set signoz.setup.enabled=true \ + --set signoz.telemetryStoreMigrator.enabled=true \ + --set signoz.signoz.image.tag=v0.142.1 > "$OUTPUT" +rg -q 'name: setup-test-signoz-setup$' "$OUTPUT" +rg -q '/api/v2/dashboards' "$OUTPUT" +echo 'SigNoz setup toggle render checks passed.' diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-oke-tools.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-oke-tools.sh new file mode 100755 index 000000000..4c74c4e24 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-oke-tools.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +TOOLS_DIR="${CHART_DIR}/../tools" +PREPARE="${TOOLS_DIR}/prepare-oke-volume-snapshots.sh" +DIAGNOSE="${TOOLS_DIR}/diagnose-signoz-upgrade.sh" +RESTORE="${TOOLS_DIR}/validate-signoz-snapshot-restore.sh" +MOCK="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-oke-preflight-kubectl.sh" +OKE_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage1-oke.yaml" +TMP="$(mktemp -d)" +trap 'rm -rf "${TMP}"' EXIT + +assert_contains() { + grep -Fq -- "$2" "$1" || { + echo "Expected $1 to contain: $2" >&2 + exit 1 + } +} + +chmod +x "${MOCK}" +bash -n "${PREPARE}" +bash -n "${DIAGNOSE}" +bash -n "${RESTORE}" + +env KUBECTL="${MOCK}" MOCK_STATE_DIR="${TMP}" \ + "${PREPARE}" >"${TMP}/prepare.log" + +assert_contains "${TMP}/kubectl.log" \ + 'external-snapshotter/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml' +assert_contains "${TMP}/class.yaml" 'name: obaas-oci-bv-snapshot' +assert_contains "${TMP}/class.yaml" 'driver: blockvolume.csi.oraclecloud.com' +assert_contains "${TMP}/class.yaml" 'backupType: full' +assert_contains "${TMP}/class.yaml" 'deletionPolicy: Retain' +assert_contains "${TMP}/prepare.log" 'Validated signoz' +assert_contains "${TMP}/prepare.log" 'OKE snapshot prerequisites are ready.' + +env KUBECTL="${MOCK}" MOCK_STATE_DIR="${TMP}" \ + "${PREPARE}" --check-only >"${TMP}/check.log" +assert_contains "${TMP}/check.log" "Existing VolumeSnapshotClass 'obaas-oci-bv-snapshot' is compatible." + +if env KUBECTL="${MOCK}" MOCK_STATE_DIR="${TMP}" MOCK_SCENARIO=wrong-driver \ + "${PREPARE}" --check-only >"${TMP}/wrong-driver.log" 2>&1; then + echo "Expected OKE preparation to reject a mismatched PV driver" >&2 + exit 1 +fi +assert_contains "${TMP}/wrong-driver.log" "does not match StorageClass provisioner" + +assert_contains "${OKE_VALUES}" 'volumeSnapshotClassName: obaas-oci-bv-snapshot' +assert_contains "${DIAGNOSE}" 'Snapshot contents and OCI backup handles' +assert_contains "${DIAGNOSE}" 'Stage 1 completion marker' +assert_contains "${DIAGNOSE}" 'obaas.oracle.com/signoz-upgrade-marker=true' +assert_contains "${RESTORE}" 'Snapshot restore validation passed.' +assert_contains "${RESTORE}" 'dataSource:' +assert_contains "${RESTORE}" 'kind: VolumeSnapshot' +assert_contains "${RESTORE}" ".status.restoreSize" +assert_contains "${RESTORE}" 'shasum -a 256' + +echo "SigNoZ OKE snapshot tooling regression test passed" diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase1.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase1.sh new file mode 100755 index 000000000..b87f4f999 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase1.sh @@ -0,0 +1,135 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +DEFAULT_VALUES="${CHART_DIR}/examples/values-default.yaml" +STAGE1_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage1.yaml" +STAGE2_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage2.yaml" +STANDARD_RENDER="$(mktemp)" +STAGE1_RENDER="$(mktemp)" +STAGE2_INSTALL_RENDER="$(mktemp)" +STAGE2_UPGRADE_RENDER="$(mktemp)" +ERROR_OUTPUT="$(mktemp)" + +cleanup() { + rm -f \ + "${STANDARD_RENDER}" \ + "${STAGE1_RENDER}" \ + "${STAGE2_INSTALL_RENDER}" \ + "${STAGE2_UPGRADE_RENDER}" \ + "${ERROR_OUTPUT}" +} +trap cleanup EXIT + +require_command() { + command -v "$1" >/dev/null 2>&1 || { + echo "Missing required command: $1" >&2 + exit 1 + } +} + +assert_contains() { + local file="$1" + local expected="$2" + grep -Fq -- "${expected}" "${file}" || { + echo "Expected ${file} to contain: ${expected}" >&2 + exit 1 + } +} + +assert_not_contains() { + local file="$1" + local unexpected="$2" + if grep -Fq -- "${unexpected}" "${file}"; then + echo "Unexpected value in ${file}: ${unexpected}" >&2 + exit 1 + fi +} + +assert_template_fails() { + local expected="$1" + shift + + if helm template signoz-phase1 "${CHART_DIR}" \ + --namespace signoz-phase1 \ + -f "${DEFAULT_VALUES}" \ + "$@" >"${ERROR_OUTPUT}" 2>&1; then + echo "Expected Helm rendering to fail: $*" >&2 + exit 1 + fi + assert_contains "${ERROR_OUTPUT}" "${expected}" +} + +require_command helm +require_command grep + +helm lint "${CHART_DIR}" -f "${DEFAULT_VALUES}" +helm lint "${CHART_DIR}" -f "${DEFAULT_VALUES}" -f "${STAGE1_VALUES}" +helm lint "${CHART_DIR}" -f "${DEFAULT_VALUES}" -f "${STAGE2_VALUES}" + +helm template signoz-phase1 "${CHART_DIR}" \ + --namespace signoz-phase1 \ + -f "${DEFAULT_VALUES}" >"${STANDARD_RENDER}" +helm template signoz-phase1 "${CHART_DIR}" \ + --namespace signoz-phase1 \ + -f "${DEFAULT_VALUES}" \ + -f "${STAGE1_VALUES}" >"${STAGE1_RENDER}" +helm template signoz-phase1 "${CHART_DIR}" \ + --namespace signoz-phase1 \ + -f "${DEFAULT_VALUES}" \ + -f "${STAGE2_VALUES}" >"${STAGE2_INSTALL_RENDER}" +helm template signoz-phase1 "${CHART_DIR}" \ + --namespace signoz-phase1 \ + --is-upgrade \ + -f "${DEFAULT_VALUES}" \ + -f "${STAGE2_VALUES}" >"${STAGE2_UPGRADE_RENDER}" + +# Standard/fresh installs and Stage 2 render the final SigNoz stack. +for render in \ + "${STANDARD_RENDER}" \ + "${STAGE2_INSTALL_RENDER}" \ + "${STAGE2_UPGRADE_RENDER}"; do + assert_contains "${render}" 'image: docker.io/signoz/signoz:v0.142.1' + assert_contains "${render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.10' + assert_contains "${render}" 'image: docker.io/clickhouse/clickhouse-server:25.12.5' + assert_not_contains "${render}" 'kind: VolumeSnapshot' +done + + assert_not_contains "${STANDARD_RENDER}" 'signoz-upgrade-0-142-1-stage1' + assert_not_contains "${STAGE2_INSTALL_RENDER}" 'signoz-upgrade-0-142-1-stage1' +assert_contains "${STAGE2_UPGRADE_RENDER}" 'app.kubernetes.io/name: signoz-stage2-gate' + +# Stage 1 keeps SigNoz and its collector fixed while upgrading only ClickHouse. +assert_contains "${STAGE1_RENDER}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_contains "${STAGE1_RENDER}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_contains "${STAGE1_RENDER}" 'image: docker.io/clickhouse/clickhouse-server:25.12.5' +assert_not_contains "${STAGE1_RENDER}" 'image: docker.io/signoz/signoz:v0.142.1' +assert_not_contains "${STAGE1_RENDER}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.10' +assert_not_contains "${STAGE1_RENDER}" 'kind: VolumeSnapshot' +assert_not_contains "${STAGE1_RENDER}" 'signoz-upgrade-0-142-1-stage1' + +# Schema validation rejects malformed workflow configuration. +assert_template_fails "at '/signozUpgrade/stage': value must be one of 'standard', 'stage1', 'stage2'" \ + --set signozUpgrade.stage=invalid +assert_template_fails "at '/signozUpgrade/backup/provider': value must be 'csi'" \ + --set signozUpgrade.backup.provider=filesystem +assert_template_fails "at '/signozUpgrade/backup/timeout': 'forever' does not match pattern" \ + --set signozUpgrade.backup.timeout=forever +assert_template_fails "at '/signozUpgrade/target/chartVersion': value must be '0.142.1'" \ + --set signozUpgrade.target.chartVersion=0.133.0 +assert_template_fails "at '/signozUpgrade/target/signozVersion': value must be 'v0.142.1'" \ + --set signozUpgrade.target.signozVersion=v0.133.0 + +# Cross-field validation prevents selecting an upgrade stage without SigNoz. +assert_template_fails 'signozUpgrade.stage=stage1 requires signoz.enabled=true' \ + -f "${STAGE1_VALUES}" \ + --set signoz.enabled=false +assert_template_fails 'signozUpgrade.stage=stage2 requires signoz.enabled=true' \ + -f "${STAGE2_VALUES}" \ + --set signoz.enabled=false + +echo "SigNoz upgrade Phase 1 regression test passed" diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase2.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase2.sh new file mode 100755 index 000000000..fa26124a3 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase2.sh @@ -0,0 +1,172 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +SNAPSHOT_SCRIPT="${CHART_DIR}/files/signoz-upgrade/create-snapshots.sh" +MOCK_KUBECTL="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-kubectl.sh" +DEFAULT_VALUES="${CHART_DIR}/examples/values-default.yaml" +STAGE1_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage1.yaml" +STAGE2_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage2.yaml" +TEST_ROOT="$(mktemp -d)" + +cleanup() { + rm -rf "${TEST_ROOT}" +} +trap cleanup EXIT + +assert_contains() { + local file="$1" + local expected="$2" + grep -Fq -- "${expected}" "${file}" || { + echo "Expected ${file} to contain: ${expected}" >&2 + exit 1 + } +} + +assert_not_contains() { + local file="$1" + local unexpected="$2" + if grep -Fq -- "${unexpected}" "${file}"; then + echo "Unexpected value in ${file}: ${unexpected}" >&2 + exit 1 + fi +} + +render_chart() { + local output="$1" + shift + helm template signoz-phase2 "${CHART_DIR}" \ + --namespace signoz-phase2 \ + -f "${DEFAULT_VALUES}" \ + "$@" >"${output}" +} + +run_snapshot_script() { + local scenario="$1" + local case_name="$2" + local explicit_class="${3:-}" + local mappings="${4:-}" + local case_dir="${TEST_ROOT}/${case_name}" + mkdir -p "${case_dir}" + + env \ + KUBECTL="${MOCK_KUBECTL}" \ + MOCK_SCENARIO="${scenario}" \ + MOCK_OUTPUT_DIR="${case_dir}" \ + NAMESPACE="obaas-test" \ + RELEASE_NAME="obaas" \ + RELEASE_REVISION="7" \ + TARGET_VERSION="0.142.1" \ + SNAPSHOT_TIMEOUT="20m" \ + MARKER_SECRET_NAME="obaas-signoz-upgrade-0-142-1-stage1" \ + SNAPSHOT_CLASS_NAME="${explicit_class}" \ + SNAPSHOT_CLASS_MAPPINGS="${mappings}" \ + /bin/sh "${SNAPSHOT_SCRIPT}" >"${case_dir}/output.log" 2>&1 +} + +assert_snapshot_script_fails() { + local scenario="$1" + local case_name="$2" + local expected="$3" + local explicit_class="${4:-}" + local case_dir="${TEST_ROOT}/${case_name}" + + if run_snapshot_script "${scenario}" "${case_name}" "${explicit_class}"; then + echo "Expected snapshot scenario '${scenario}' to fail" >&2 + exit 1 + fi + assert_contains "${case_dir}/output.log" "${expected}" +} + +for command in helm grep find wc; do + command -v "${command}" >/dev/null 2>&1 || { + echo "Missing required command: ${command}" >&2 + exit 1 + } +done + +standard_upgrade="${TEST_ROOT}/standard-upgrade.yaml" +stage1_install="${TEST_ROOT}/stage1-install.yaml" +stage1_upgrade="${TEST_ROOT}/stage1-upgrade.yaml" +stage1_mapped="${TEST_ROOT}/stage1-mapped.yaml" +stage2_upgrade="${TEST_ROOT}/stage2-upgrade.yaml" + +render_chart "${standard_upgrade}" --is-upgrade +render_chart "${stage1_install}" -f "${STAGE1_VALUES}" +render_chart "${stage1_upgrade}" --is-upgrade -f "${STAGE1_VALUES}" +render_chart "${stage1_mapped}" --is-upgrade -f "${STAGE1_VALUES}" \ + --set signozUpgrade.backup.volumeSnapshotClassByStorageClass.oci-bv=oci-bv-snap +render_chart "${stage2_upgrade}" --is-upgrade -f "${STAGE2_VALUES}" + +if render_chart "${TEST_ROOT}/invalid-class.yaml" --is-upgrade -f "${STAGE1_VALUES}" \ + --set signozUpgrade.backup.volumeSnapshotClassName=Invalid_Class \ + >"${TEST_ROOT}/invalid-class.log" 2>&1; then + echo "Expected an invalid VolumeSnapshotClass name to fail Helm validation" >&2 + exit 1 +fi +assert_contains "${TEST_ROOT}/invalid-class.log" "does not match pattern" + +# The hook is limited to an existing release explicitly selecting Stage 1. +for render in "${standard_upgrade}" "${stage1_install}" "${stage2_upgrade}"; do + assert_not_contains "${render}" 'app.kubernetes.io/name: signoz-upgrade-snapshot' +done +assert_contains "${stage1_upgrade}" 'app.kubernetes.io/name: signoz-upgrade-snapshot' +assert_contains "${stage1_upgrade}" '"helm.sh/hook": pre-upgrade' +assert_contains "${stage1_upgrade}" 'resources: ["pods", "persistentvolumeclaims"]' +assert_contains "${stage1_upgrade}" 'resources: ["persistentvolumes"]' +assert_contains "${stage1_upgrade}" 'resources: ["storageclasses"]' +assert_not_contains "${stage1_upgrade}" 'resources: ["storageclasses", "csidrivers"]' +assert_contains "${stage1_upgrade}" 'resources: ["volumesnapshotclasses"]' +assert_contains "${stage1_upgrade}" 'resources: ["volumesnapshots"]' +assert_contains "${stage1_upgrade}" 'Kubernetes snapshot API resource' +assert_contains "${stage1_upgrade}" "--for=jsonpath='{.status.readyToUse}'=true" +assert_contains "${stage1_mapped}" $'oci-bv\toci-bv-snap' + +# Stage 1 keeps SigNoz and the collector on their intermediate versions while +# Phase 3 changes only ClickHouse. +assert_contains "${stage1_upgrade}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_contains "${stage1_upgrade}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_contains "${stage1_upgrade}" 'image: docker.io/clickhouse/clickhouse-server:25.12.5' +assert_not_contains "${stage1_upgrade}" 'image: docker.io/signoz/signoz:v0.142.1' + +# Exercise the snapshot logic with a mocked Kubernetes API. +run_snapshot_script "success" "success" +snapshot_count="$(find "${TEST_ROOT}/success" -name 'snapshot-*.yaml' | wc -l | tr -d ' ')" +[[ "${snapshot_count}" == "3" ]] +assert_contains "${TEST_ROOT}/success/output.log" 'All SigNoz Stage 1 CSI snapshots are ready.' +assert_contains "${TEST_ROOT}/success/snapshot-1.yaml" 'helm.sh/resource-policy: keep' +assert_contains "${TEST_ROOT}/success/snapshot-1.yaml" 'obaas.oracle.com/source-pvc-uid:' +assert_contains "${TEST_ROOT}/success/snapshot-1.yaml" 'obaas.oracle.com/upgrade-target: "0.142.1"' +assert_contains "${TEST_ROOT}/success/snapshot-1.yaml" 'volumeSnapshotClassName: default-snap' + +mappings=$'fast-sc\tfast-snap\nblock-sc\tblock-snap' +run_snapshot_script "mapped-classes" "mapped-classes" "" "${mappings}" +assert_contains "${TEST_ROOT}/mapped-classes/snapshot-1.yaml" 'volumeSnapshotClassName: block-snap' +assert_contains "${TEST_ROOT}/mapped-classes/snapshot-2.yaml" 'volumeSnapshotClassName: fast-snap' + +assert_snapshot_script_fails "missing-crd" "missing-crd" \ + "snapshot API resource 'volumesnapshotcontents.snapshot.storage.k8s.io' is not installed" +assert_snapshot_script_fails "missing-class" "missing-class" \ + "No default VolumeSnapshotClass uses CSI driver 'csi.example.com'" +assert_snapshot_script_fails "multiple-defaults" "multiple-defaults" \ + "Multiple default VolumeSnapshotClasses use CSI driver 'csi.example.com'" +assert_snapshot_script_fails "missing-explicit-class" "missing-explicit-class" \ + "VolumeSnapshotClass 'does-not-exist' does not exist" "does-not-exist" +assert_snapshot_script_fails "success" "incompatible-driver" \ + "VolumeSnapshotClass 'wrong-snap' uses driver 'other.csi.example.com'" "wrong-snap" +assert_snapshot_script_fails "non-csi-pv" "non-csi-pv" \ + "is not backed by a CSI driver" +assert_snapshot_script_fails "mismatched-pv-driver" "mismatched-pv-driver" \ + "uses CSI driver 'other.csi.example.com', but StorageClass 'shared-sc' uses 'csi.example.com'" +assert_snapshot_script_fails "missing-pvc" "missing-pvc" \ + "No mounted PVC was found for required SigNoz component 'zookeeper'" +assert_snapshot_script_fails "unbound-pvc" "unbound-pvc" \ + "is not Bound (phase: Pending)" +assert_snapshot_script_fails "timeout" "timeout" \ + "Timed out or failed while waiting for CSI snapshots" + +echo "SigNoz upgrade Phase 2 regression test passed" diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase3.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase3.sh new file mode 100755 index 000000000..9540696d7 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase3.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +VALIDATION_SCRIPT="${CHART_DIR}/files/signoz-upgrade/validate-clickhouse.sh" +MOCK_KUBECTL="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-validation-kubectl.sh" +DEFAULT_VALUES="${CHART_DIR}/examples/values-default.yaml" +STAGE1_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage1.yaml" +STAGE2_VALUES="${CHART_DIR}/examples/values-signoz-0.142.1-stage2.yaml" +IMAGE_LIST="${CHART_DIR}/../tools/image_lists/k8s_images_2.1.2.txt" +TEST_ROOT="$(mktemp -d)" +trap 'rm -rf "${TEST_ROOT}"' EXIT + +assert_contains() { grep -Fq -- "$2" "$1" || { echo "Expected $1 to contain: $2" >&2; exit 1; }; } +assert_not_contains() { ! grep -Fq -- "$2" "$1" || { echo "Unexpected value in $1: $2" >&2; exit 1; }; } + +render() { + helm template signoz-phase3 "${CHART_DIR}" --namespace signoz-phase3 \ + -f "${DEFAULT_VALUES}" "$@" +} + +run_validation() { + local scenario="$1" + local case_dir="${TEST_ROOT}/${scenario}" + mkdir -p "${case_dir}" + env KUBECTL="${MOCK_KUBECTL}" MOCK_SCENARIO="${scenario}" MOCK_OUTPUT_DIR="${case_dir}" \ + NAMESPACE=obaas RELEASE_NAME=obaas RELEASE_REVISION=7 TARGET_VERSION=0.142.1 \ + CLICKHOUSE_VERSION=25.12.5 VALIDATION_TIMEOUT=10m \ + MARKER_SECRET_NAME=obaas-signoz-upgrade-0-142-1-stage1 \ + /bin/sh "${VALIDATION_SCRIPT}" >"${case_dir}/output.log" 2>&1 +} + +assert_validation_fails() { + local scenario="$1" + local expected="$2" + if run_validation "${scenario}"; then + echo "Expected validation scenario ${scenario} to fail" >&2 + exit 1 + fi + assert_contains "${TEST_ROOT}/${scenario}/output.log" "${expected}" + [[ ! -f "${TEST_ROOT}/${scenario}/marker.yaml" ]] +} + +stage1="${TEST_ROOT}/stage1.yaml" +standard="${TEST_ROOT}/standard.yaml" +stage2="${TEST_ROOT}/stage2.yaml" +render --is-upgrade -f "${STAGE1_VALUES}" >"${stage1}" +render --is-upgrade >"${standard}" +render --is-upgrade -f "${STAGE2_VALUES}" >"${stage2}" + +assert_contains "${stage1}" 'image: docker.io/clickhouse/clickhouse-server:25.12.5' +assert_contains "${stage1}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_contains "${stage1}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_contains "${stage1}" 'app.kubernetes.io/name: signoz-upgrade-validation' +assert_contains "${stage1}" '"helm.sh/hook": post-upgrade' +assert_contains "${stage1}" 'resources: ["pods/exec"]' +assert_contains "${stage1}" 'resources: ["volumesnapshots"]' +assert_contains "${stage1}" 'resources: ["clickhouseinstallations"]' +assert_contains "${IMAGE_LIST}" 'docker.io/clickhouse/clickhouse-server:25.12.5' +assert_not_contains "${standard}" 'app.kubernetes.io/name: signoz-upgrade-validation' +assert_not_contains "${stage2}" 'app.kubernetes.io/name: signoz-upgrade-validation' + +run_validation success +assert_contains "${TEST_ROOT}/success/output.log" 'Stage 1 completion marker' +assert_contains "${TEST_ROOT}/success/marker.yaml" 'status: "complete"' +assert_contains "${TEST_ROOT}/success/marker.yaml" 'clickhouseVersion: "25.12.5.44"' +assert_contains "${TEST_ROOT}/success/marker.yaml" 'telemetryRows: "100"' +assert_contains "${TEST_ROOT}/success/marker.yaml" 'helmRevision: "7"' +assert_contains "${TEST_ROOT}/success/marker.yaml" $'clickhouse\tdata-volumeclaim-template-chi-0-0-0' + +assert_validation_fails pods-not-ready 'pods did not become Ready' +assert_validation_fails wrong-image 'does not use target 25.12.5' +assert_validation_fails wrong-version "reported version '25.11.1.1'" +assert_validation_fails query-failed 'clickhouse-client' +assert_validation_fails stale-pvc-uid 'No ready snapshot matches PVC' +assert_validation_fails snapshot-not-ready 'No ready snapshot matches PVC' +assert_validation_fails marker-write-failed 'kubectl' + +echo "SigNoz upgrade Phase 3 regression test passed" diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase4.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase4.sh new file mode 100755 index 000000000..d9ac8e113 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase4.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +GATE_SCRIPT="${CHART_DIR}/files/signoz-upgrade/enforce-stage2.sh" +MOCK="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-stage2-kubectl.sh" +DEFAULT="${CHART_DIR}/examples/values-default.yaml" +STAGE2="${CHART_DIR}/examples/values-signoz-0.142.1-stage2.yaml" +TMP="$(mktemp -d)" +trap 'rm -rf "${TMP}"' EXIT + +assert_contains() { grep -Fq -- "$2" "$1" || { echo "Expected $1 to contain: $2" >&2; exit 1; }; } +assert_not_contains() { ! grep -Fq -- "$2" "$1" || { echo "Unexpected $2 in $1" >&2; exit 1; }; } + +run_gate() { + local scenario="$1" + env KUBECTL="${MOCK}" MOCK_SCENARIO="${scenario}" NAMESPACE=obaas RELEASE_NAME=obaas \ + RELEASE_REVISION=8 TARGET_VERSION=0.142.1 CLICKHOUSE_VERSION=25.12.5 \ + VALIDATION_TIMEOUT=10m MARKER_SECRET_NAME=obaas-signoz-upgrade-0-142-1-stage1 \ + /bin/sh "${GATE_SCRIPT}" >"${TMP}/${scenario}.log" 2>&1 +} + +expect_failure() { + if run_gate "$1"; then echo "Expected $1 to block Stage 2" >&2; exit 1; fi + assert_contains "${TMP}/$1.log" "$2" +} + +upgrade_render="${TMP}/upgrade.yaml" +install_render="${TMP}/install.yaml" +helm template phase4 "${CHART_DIR}" -n obaas --is-upgrade -f "${DEFAULT}" -f "${STAGE2}" >"${upgrade_render}" +helm template phase4 "${CHART_DIR}" -n obaas -f "${DEFAULT}" -f "${STAGE2}" >"${install_render}" +assert_contains "${upgrade_render}" 'app.kubernetes.io/name: signoz-stage2-gate' +assert_contains "${upgrade_render}" '"helm.sh/hook-weight": "-39"' +assert_contains "${upgrade_render}" 'helm.sh/hook-weight: "-40"' +assert_not_contains "${install_render}" 'app.kubernetes.io/name: signoz-stage2-gate' + +# The gate is deliberately read-only except for exec used to query ClickHouse. +for mutation in 'kube apply' 'kube create' 'kube delete' 'kube patch' 'kube scale'; do + assert_not_contains "${GATE_SCRIPT}" "${mutation}" +done + +expect_failure no-marker 'completion marker' +expect_failure malformed-marker "missing required field 'status'" +expect_failure stale-marker 'is stale' +expect_failure deleted-snapshot "snapshot 'signoz-snap' no longer exists" +expect_failure mismatched-pvc "PVC 'signoz-pvc' UID changed" +expect_failure wrong-clickhouse 'live ClickHouse image' +run_gate success +assert_contains "${TMP}/success.log" 'Stage 2 prerequisite validation passed' + +echo "SigNoz upgrade Phase 4 regression test passed" diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase5.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase5.sh new file mode 100755 index 000000000..01438a446 --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase5.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +RESOURCE_SCRIPT="${CHART_DIR}/files/signoz-upgrade/validate-signoz-stage2.sh" +DATA_SCRIPT="${CHART_DIR}/files/signoz-upgrade/validate-signoz-data.sh" +MOCK_KUBECTL="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-phase5-kubectl.sh" +MOCK_CURL="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-phase5-curl.sh" +DEFAULT="${CHART_DIR}/examples/values-default.yaml" +STAGE1="${CHART_DIR}/examples/values-signoz-0.142.1-stage1.yaml" +STAGE2="${CHART_DIR}/examples/values-signoz-0.142.1-stage2.yaml" +SIGNOZ_ARCHIVE="${CHART_DIR}/charts/signoz-0.142.1.tgz" +OLD_SIGNOZ_ARCHIVE="${CHART_DIR}/charts/signoz-0.133.0.tgz" +IMAGE_LIST="${CHART_DIR}/../tools/image_lists/k8s_images_2.1.2.txt" +TMP="$(mktemp -d)"; trap 'rm -rf "${TMP}"' EXIT +assert_contains() { grep -Fq -- "$2" "$1" || { echo "Expected $1 to contain: $2" >&2; exit 1; }; } +assert_not_contains() { ! grep -Fq -- "$2" "$1" || { echo "Unexpected $2 in $1" >&2; exit 1; }; } + +stage1_render="${TMP}/stage1.yaml"; stage2_render="${TMP}/stage2.yaml" +signoz_values="${TMP}/signoz-values.yaml" +helm template phase5 "${CHART_DIR}" -n phase5 --is-upgrade -f "${DEFAULT}" -f "${STAGE1}" >"${stage1_render}" +helm template phase5 "${CHART_DIR}" -n phase5 --is-upgrade -f "${DEFAULT}" -f "${STAGE2}" >"${stage2_render}" +helm show values "${SIGNOZ_ARCHIVE}" >"${signoz_values}" +assert_contains "${CHART_DIR}/Chart.yaml" 'version: "0.142.1"' +assert_contains "${CHART_DIR}/Chart.lock" 'version: 0.142.1' +[ -f "${SIGNOZ_ARCHIVE}" ] || { echo "Missing ${SIGNOZ_ARCHIVE}" >&2; exit 1; } +[ ! -e "${OLD_SIGNOZ_ARCHIVE}" ] || { echo "Obsolete ${OLD_SIGNOZ_ARCHIVE} is still present" >&2; exit 1; } +[ "$(shasum -a 256 "${SIGNOZ_ARCHIVE}" | awk '{print $1}')" = \ + "4b0088757612584d7ff5e596ab0a2ffc4d1f90e43edc6bf7e179208fca1b2277" ] || { + echo "SigNoZ 0.142.1 chart digest does not match the official artifact" >&2 + exit 1 +} +assert_contains "${signoz_values}" 'tag: v0.142.1' +assert_contains "${signoz_values}" 'tag: v0.144.10' +assert_contains "${signoz_values}" 'tag: 25.12.5' +assert_contains "${signoz_values}" 'postgresql:' +[ "$(awk '/^postgresql:/{found=1; next} found && /^[[:space:]]+enabled:/{print $2; exit}' "${signoz_values}")" = "false" ] || { + echo "The embedded SigNoZ PostgreSQL metastore must remain disabled by default" >&2 + exit 1 +} +assert_contains "${IMAGE_LIST}" 'docker.io/signoz/signoz:v0.142.1' +assert_not_contains "${IMAGE_LIST}" 'docker.io/signoz/signoz:v0.133.0' +assert_contains "${stage1_render}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_contains "${stage1_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_contains "${stage2_render}" 'image: docker.io/signoz/signoz:v0.142.1' +assert_contains "${stage2_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.10' +assert_contains "${stage2_render}" 'name: signoz-telemetrystore-migrator' +assert_contains "${stage2_render}" 'app.kubernetes.io/name: signoz-stage2-validation' +assert_contains "${stage2_render}" '"helm.sh/hook-weight": "31"' +assert_contains "${stage2_render}" 'job/signoz-telemetrystore-migrator' +assert_contains "${stage2_render}" 'Historical telemetry and new ingestion validated.' + +run_resource() { + env KUBECTL="${MOCK_KUBECTL}" MOCK_SCENARIO="$1" NAMESPACE=obaas RELEASE_NAME=obaas \ + VALIDATION_TIMEOUT=10m SIGNOZ_VERSION=v0.142.1 COLLECTOR_VERSION=v0.144.10 \ + /bin/sh "${RESOURCE_SCRIPT}" >"${TMP}/resource-$1.log" 2>&1 +} +run_resource success +assert_contains "${TMP}/resource-success.log" 'migrations, login, and dashboards validated' +for scenario in migration-failed setup-failed wrong-signoz wrong-collector; do + if run_resource "${scenario}"; then echo "Expected ${scenario} failure" >&2; exit 1; fi +done + +run_data() { + local dir="${TMP}/data-$1"; mkdir -p "${dir}/bin" + cp "${MOCK_CURL}" "${dir}/bin/curl" + printf '#!/bin/sh\nexit 0\n' >"${dir}/bin/sleep"; chmod +x "${dir}/bin/curl" "${dir}/bin/sleep" + env PATH="${dir}/bin:${PATH}" MOCK_SCENARIO="$1" MOCK_STATE_DIR="${dir}" \ + SIGNOZ_URL=http://signoz COLLECTOR_URL=http://collector CLICKHOUSE_URL=http://clickhouse \ + CLICKHOUSE_PASSWORD=password BASELINE_ROWS=100 /bin/sh "${DATA_SCRIPT}" >"${dir}/output.log" 2>&1 +} +run_data success +assert_contains "${TMP}/data-success/output.log" 'Historical telemetry and new ingestion validated.' +for scenario in historical-lost no-ingestion; do + if run_data "${scenario}"; then echo "Expected ${scenario} failure" >&2; exit 1; fi +done + +echo "SigNoz upgrade Phase 5 regression test passed" diff --git a/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase6.sh b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase6.sh new file mode 100755 index 000000000..4afefc1af --- /dev/null +++ b/helm/infra-charts/obaas/tests/test-signoz-upgrade-phase6.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash +# Copyright (c) 2026, Oracle and/or its affiliates. +# Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CHART_DIR="${CHART_DIR:-$(cd "${SCRIPT_DIR}/.." && pwd)}" +CLEANUP_SCRIPT="${CHART_DIR}/files/signoz-upgrade/cleanup-signoz-oidc-mock.sh" +MOCK_KUBECTL="${SCRIPT_DIR}/fixtures/signoz-upgrade/mock-phase6-kubectl.sh" +DEFAULT="${CHART_DIR}/examples/values-default.yaml" +PRIVATE="${CHART_DIR}/examples/values-private-registry.yaml" +STAGE1="${CHART_DIR}/examples/values-signoz-0.142.1-stage1.yaml" +STAGE2="${CHART_DIR}/examples/values-signoz-0.142.1-stage2.yaml" +IMAGE_LIST="${CHART_DIR}/../tools/image_lists/k8s_images_2.1.2.txt" +TMP="$(mktemp -d)" +trap 'rm -rf "${TMP}"' EXIT + +assert_contains() { grep -Fq -- "$2" "$1" || { echo "Expected $1 to contain: $2" >&2; exit 1; }; } +assert_not_contains() { ! grep -Fq -- "$2" "$1" || { echo "Unexpected $2 in $1" >&2; exit 1; }; } + +fresh_render="${TMP}/fresh.yaml" +private_render="${TMP}/private.yaml" +stage1_render="${TMP}/stage1.yaml" +stage2_render="${TMP}/stage2.yaml" +helm template phase6 "${CHART_DIR}" -n phase6 -f "${DEFAULT}" >"${fresh_render}" +helm template phase6 "${CHART_DIR}" -n phase6 -f "${PRIVATE}" >"${private_render}" +helm template phase6 "${CHART_DIR}" -n phase6 --is-upgrade -f "${DEFAULT}" -f "${STAGE1}" >"${stage1_render}" +helm template phase6 "${CHART_DIR}" -n phase6 --is-upgrade -f "${DEFAULT}" -f "${STAGE2}" >"${stage2_render}" + +# Fresh installs contain only the final stack and do not run upgrade-only hooks. +assert_contains "${fresh_render}" 'image: docker.io/signoz/signoz:v0.142.1' +assert_contains "${fresh_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.10' +assert_contains "${fresh_render}" 'image: docker.io/clickhouse/clickhouse-server:25.12.5' +assert_contains "${fresh_render}" 'volumeClaimTemplates:' +assert_contains "${fresh_render}" 'kind: ClickHouseInstallation' +assert_contains "${fresh_render}" 'name: signoz-telemetrystore-migrator' +assert_contains "${fresh_render}" 'name: SIGNOZ_TOKENIZER_JWT_SECRET' +assert_contains "${fresh_render}" 'name: SIGNOZ_USER_ROOT_EMAIL' +assert_not_contains "${fresh_render}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_not_contains "${fresh_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_not_contains "${fresh_render}" 'image: docker.io/clickhouse/clickhouse-server:25.5.6' +assert_not_contains "${fresh_render}" 'app.kubernetes.io/name: signoz-upgrade-cleanup' +assert_not_contains "${fresh_render}" 'name: oidc-mock' +assert_not_contains "${fresh_render}" 'name: SSL_CERT_FILE' +assert_not_contains "${fresh_render}" 'name: SIGNOZ_JWT_SECRET' +assert_not_contains "${fresh_render}" 'signoz-schema-migrator' +assert_not_contains "${fresh_render}" 'groundnuty/k8s-wait-for' + +# Disconnected/private-registry installs no longer carry the obsolete nginx OIDC mock. +assert_not_contains "${private_render}" 'myregistry.example.com/nginx:alpine' +assert_not_contains "${private_render}" 'name: oidc-mock' +assert_not_contains "${private_render}" 'name: SSL_CERT_FILE' +assert_not_contains "${CHART_DIR}/values.yaml" 'airGapped:' +assert_not_contains "${PRIVATE}" 'airGapped:' +assert_not_contains "${IMAGE_LIST}" 'groundnuty/k8s-wait-for' +assert_not_contains "${IMAGE_LIST}" 'docker.io/nginx:alpine' + +# The two-stage path retains intermediate images only in Stage 1, then cleans live leftovers. +assert_contains "${stage1_render}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_contains "${stage1_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_contains "${stage1_render}" 'app.kubernetes.io/name: signoz-upgrade-snapshot' +assert_not_contains "${stage1_render}" 'app.kubernetes.io/name: signoz-upgrade-cleanup' +assert_contains "${stage2_render}" 'image: docker.io/signoz/signoz:v0.142.1' +assert_contains "${stage2_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.10' +assert_contains "${stage2_render}" 'app.kubernetes.io/name: signoz-upgrade-cleanup' +assert_contains "${stage2_render}" '"helm.sh/hook-weight": "-37"' +assert_contains "${stage2_render}" 'hook-delete-policy: before-hook-creation,hook-succeeded' +assert_contains "${stage2_render}" 'Obsolete SigNoz OIDC mock resources and StatefulSet settings are absent.' +assert_not_contains "${stage2_render}" 'image: docker.io/signoz/signoz:v0.113.0' +assert_not_contains "${stage2_render}" 'image: docker.io/signoz/signoz-otel-collector:v0.144.1' +assert_not_contains "${stage2_render}" ' name: phase6-signoz-airgap-patch' +assert_not_contains "${CLEANUP_SCRIPT}" 'delete pvc' +assert_not_contains "${CLEANUP_SCRIPT}" 'delete persistentvolumeclaim' +assert_not_contains "${CLEANUP_SCRIPT}" 'delete volumesnapshot' + +run_cleanup() { + local scenario="$1" + local state_dir="${TMP}/${scenario}" + mkdir -p "${state_dir}" + env KUBECTL="${MOCK_KUBECTL}" MOCK_SCENARIO="${scenario}" MOCK_STATE_DIR="${state_dir}" \ + MOCK_LOG="${state_dir}/kubectl.log" NAMESPACE=phase6 STATEFULSET_NAME=phase6-signoz \ + OIDC_MOCK_HOOK_NAME=phase6-signoz-airgap-patch \ + /bin/sh "${CLEANUP_SCRIPT}" >"${state_dir}/output.log" 2>&1 +} + +run_cleanup oidc-mock +assert_contains "${TMP}/oidc-mock/output.log" 'Obsolete SigNoz OIDC mock resources and StatefulSet settings are absent.' +assert_contains "${TMP}/oidc-mock/kubectl.log" 'patch statefulset phase6-signoz' +assert_contains "${TMP}/oidc-mock/kubectl.log" 'delete secret mock-google-cert' +assert_contains "${TMP}/oidc-mock/kubectl.log" 'delete role phase6-signoz-airgap-patch' + +run_cleanup clean +assert_not_contains "${TMP}/clean/kubectl.log" 'patch statefulset phase6-signoz' + +for scenario in patch-stuck delete-stuck; do + if run_cleanup "${scenario}"; then + echo "Expected cleanup scenario ${scenario} to fail" >&2 + exit 1 + fi +done +assert_contains "${TMP}/patch-stuck/output.log" 'still contains the obsolete OIDC mock configuration' +assert_contains "${TMP}/delete-stuck/output.log" "obsolete resource 'configmap/signoz-oidc-mock' still exists" + +echo "SigNoz upgrade Phase 6 regression test passed" diff --git a/helm/infra-charts/obaas/values.schema.json b/helm/infra-charts/obaas/values.schema.json index 1ec829ec8..4e91308f2 100644 --- a/helm/infra-charts/obaas/values.schema.json +++ b/helm/infra-charts/obaas/values.schema.json @@ -1,7 +1,173 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", + "$defs": { + "microtxPersistence": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { "type": "boolean" }, + "existingClaim": { "type": "string" }, + "storageClass": { "type": "string" }, + "size": { "type": "string", "minLength": 1 }, + "accessModes": { + "type": "array", + "minItems": 1, + "uniqueItems": true, + "items": { "enum": ["ReadWriteOnce", "ReadWriteMany", "ReadWriteOncePod"] } + }, + "retain": { "type": "boolean" } + } + } + }, "properties": { + "signoz": { + "type": "object", + "properties": { + "setup": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" } + } + } + } + }, + "otmm": { + "type": "object", + "properties": { + "commonConfiguration": { + "type": "object", + "properties": { + "security": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" }, + "clientSecretName": { "type": "string" }, + "identityProvider": { + "type": "object", + "properties": { + "issuer": { "type": "string" }, + "jwksUri": { "type": "string" }, + "identityProviderUrl": { "type": "string" }, + "audience": { "type": "string" }, + "scopes": { "type": "string" }, + "serverType": { + "enum": ["idcs", "other"] + }, + "roleMappings": { + "type": "object", + "properties": { + "coordinator": { + "type": "object", + "properties": { + "adminUserRoles": { "type": "string" }, + "adminUserRolesPath": { "type": "string" } + } + }, + "workflow": { + "type": "object", + "properties": { + "claimsRolePaths": { "type": "string" }, + "roles": { + "type": "object", + "properties": { + "superAdmin": { "type": "string" }, + "admin": { "type": "string" }, + "user": { "type": "string" }, + "readOnlyUser": { "type": "string" }, + "metadataManager": { "type": "string" }, + "worker": { "type": "string" } + } + } + } + } + } + } + } + } + } + } + } + }, + "coordinator": { + "type": "object", + "properties": { + "authentication": { + "type": "object", + "properties": { + "requestsWithNoJWT": { + "enum": ["", "ALLOW", "DENY"] + } + } + }, + "storage": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { "enum": ["memory", "db", "etcd"] }, + "db": { + "type": "object", + "additionalProperties": false, + "properties": { + "initializeSchema": { "type": "boolean" }, + "connectionString": { "type": "string" }, + "connectionParams": { "type": "string" }, + "credentialSecretName": { "type": "string" }, + "credentialSecretKey": { "type": "string", "minLength": 1 }, + "walletConfigMapName": { "type": "string" }, + "walletSecretName": { "type": "string" } + } + }, + "etcd": { + "type": "object", + "additionalProperties": false, + "properties": { + "endpoints": { "type": "string" }, + "skipHostNameVerification": { "type": "boolean" }, + "credentialSecretName": { "type": "string" }, + "credentialSecretKey": { "type": "string", "minLength": 1 }, + "caConfigMapName": { "type": "string" }, + "caConfigMapKey": { "type": "string", "minLength": 1 } + } + } + } + } + } + }, + "console": { + "type": "object", + "properties": { + "cookieEncryption": { + "type": "object", + "properties": { + "enabled": { "type": "boolean" } + } + } + } + }, + "workflowServer": { + "type": "object", + "properties": { + "config": { + "type": "object", + "properties": { + "storage": { + "type": "object", + "properties": { + "fileSystem": { + "type": "object", + "properties": { + "persistence": { "$ref": "#/$defs/microtxPersistence" } + } + } + } + } + } + } + } + } + } + }, "global": { "type": "object", "properties": { @@ -17,6 +183,73 @@ } } }, + "signozUpgrade": { + "type": "object", + "additionalProperties": false, + "required": ["stage", "target", "backup", "validation"], + "properties": { + "stage": { + "type": "string", + "enum": ["standard", "stage1", "stage2"] + }, + "mode": { + "type": "string", + "enum": ["destructive-replace"] + }, + "confirmDataLoss": { "type": "boolean" }, + "target": { + "type": "object", + "additionalProperties": false, + "required": ["chartVersion", "signozVersion", "otelCollectorVersion", "clickhouseVersion"], + "properties": { + "chartVersion": { "type": "string", "enum": ["0.142.1"] }, + "signozVersion": { "type": "string", "enum": ["v0.142.1"] }, + "otelCollectorVersion": { "type": "string", "enum": ["v0.144.10"] }, + "clickhouseVersion": { "type": "string", "enum": ["25.12.5"] } + } + }, + "backup": { + "type": "object", + "additionalProperties": false, + "required": ["provider", "volumeSnapshotClassName", "volumeSnapshotClassByStorageClass", "timeout"], + "properties": { + "provider": { "type": "string", "enum": ["csi"] }, + "volumeSnapshotClassName": { + "type": "string", + "maxLength": 253, + "pattern": "^$|^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$" + }, + "volumeSnapshotClassByStorageClass": { + "type": "object", + "propertyNames": { + "maxLength": 253, + "pattern": "^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$" + }, + "additionalProperties": { + "type": "string", + "minLength": 1, + "maxLength": 253, + "pattern": "^[a-z0-9]([-a-z0-9.]*[a-z0-9])?$" + } + }, + "timeout": { "type": "string", "pattern": "^[1-9][0-9]*[smh]$" } + } + }, + "validation": { + "type": "object", + "additionalProperties": false, + "required": ["timeout", "markerSecretName"], + "properties": { + "timeout": { "type": "string", "pattern": "^[1-9][0-9]*[smh]$" }, + "markerSecretName": { + "type": "string", + "maxLength": 63, + "pattern": "^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?$" + } + } + } + } + }, "networkPolicy": { "type": "object", "properties": { diff --git a/helm/infra-charts/obaas/values.yaml b/helm/infra-charts/obaas/values.yaml index e72bd36be..9b9a92ba3 100644 --- a/helm/infra-charts/obaas/values.yaml +++ b/helm/infra-charts/obaas/values.yaml @@ -40,15 +40,44 @@ global: image: registry: docker.io repository: alpine/k8s - tag: "1.36.2" + tag: "1.36.4" # OBAAS PLATFORM CONFIGURATION otelCollectorEndpoint: "obaas-signoz-otel-collector:4318" -# SigNoZ upgrades from the pre-0.134.0 stack are destructive replacements. -# Fresh installations do not use these values. +# ----------------------- +# -- SigNoz Two-Stage Upgrade Workflow +# +# These values establish the contract for upgrading an existing SigNoz installation +# to chart/application version 0.142.1. The default "standard" stage performs the +# normal in-place upgrade. The stage1 and stage2 profiles remain available for the +# optional staged workflow. signozUpgrade: - mode: "" - confirmDataLoss: false + # Supported values: standard, stage1, stage2 + stage: standard + + # Version contract recorded and checked by the two-stage workflow. + # These are implementation values and should not be overridden by installations. + target: + chartVersion: "0.142.1" + signozVersion: "v0.142.1" + otelCollectorVersion: "v0.144.10" + clickhouseVersion: "25.12.5" + + backup: + # CSI VolumeSnapshot is the provider-neutral backup mechanism for this workflow. + provider: csi + # Leave empty to use the cluster's default VolumeSnapshotClass. Set this when + # the cluster has no default or when a specific snapshot class is required. + volumeSnapshotClassName: "" + # Optional per-StorageClass overrides for clusters where the SigNoz, + # ClickHouse, and ZooKeeper PVCs use different CSI drivers. + volumeSnapshotClassByStorageClass: {} + timeout: 20m + + validation: + timeout: 10m + # Leave empty to derive a release-scoped marker Secret name. + markerSecretName: "" # ----------------------- # -- Network Policy Configuration @@ -106,18 +135,18 @@ ai-optimizer: replicaCount: 1 # -- Image details: Required for BYO Infra # imagePullSecrets: [] - # image: - # repository: localhost/ai-optimizer-server - # tag: latest - # pullPolicy: IfNotPresent + image: + repository: container-registry.oracle.com/obaas/optimizer + tag: 2.5.0 + pullPolicy: IfNotPresent client: enabled: true # -- Image details: Required for BYO Infra # imagePullSecrets: [] - # image: - # repository: localhost/ai-optimizer-client - # tag: latest - # pullPolicy: IfNotPresent + image: + repository: container-registry.oracle.com/obaas/optimizer + tag: 2.5.0 + pullPolicy: IfNotPresent # Eureka Service Discovery eureka: @@ -128,7 +157,7 @@ eureka: connectionIdleTimeout: 90s image: repository: container-registry.oracle.com/obaas/service-registry - tag: "2.1.1" + tag: "2.1.2" # Override default resources if needed (defaults: cpu 250m-500m, memory 1Gi-1200Mi) resources: {} @@ -153,27 +182,27 @@ gateway-helm: images: envoyGateway: # This is the full image name including the hub, repo, and tag. - image: "docker.io/envoyproxy/gateway:v1.8.2" + image: "docker.io/envoyproxy/gateway:v1.9.1" # Specify image pull policy if default behavior isn't desired. # Default behavior: latest images will be Always else IfNotPresent. pullPolicy: Always - # List of secrets in the same namespace of the component that can be used to pull images from private repositories. + # List of secrets in the same namespace that can pull the component image. pullSecrets: *imagePullSecrets envoyProxy: # Envoy proxy data plane image — override to use a private registry. # Legacy overrides under config.envoyGateway.provider.kubernetes.envoyDeployment # are still honored by OBaaS templates when this value is empty. - image: "docker.io/envoyproxy/envoy:distroless-v1.38.3" + image: "docker.io/envoyproxy/envoy:distroless-v1.39.1" pullPolicy: IfNotPresent # List of secrets in the same namespace that can pull the Envoy proxy image. pullSecrets: *imagePullSecrets ratelimit: # This is the full image name including the hub, repo, and tag. - image: "docker.io/envoyproxy/ratelimit:17b1956c" + image: "docker.io/envoyproxy/ratelimit:8fe6ea42" # Specify image pull policy if default behavior isn't desired. # Default behavior: latest images will be Always else IfNotPresent. pullPolicy: IfNotPresent - # List of secrets in the same namespace of the component that can be used to pull images from private repositories. + # List of secrets in the same namespace that can pull the component image. pullSecrets: *imagePullSecrets deployment: @@ -219,6 +248,10 @@ apisix: # APISIX configuration apisix: + # Emit spans for the complete APISIX request lifecycle, not only the + # gateway request span. + tracing: true + # Minimal plugins list - only what routes actually use # (prometheus is in APISIX defaults, but opentelemetry is not) plugins: @@ -317,9 +350,11 @@ apisix: # so APISIX can fail over within the same registry refresh cycle. eureka: host: + # yamllint disable rule:line-length - "http://{{ .Release.Name }}-eureka-0.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" - "http://{{ .Release.Name }}-eureka-1.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" - "http://{{ .Release.Name }}-eureka-2.{{ .Release.Name }}-eureka.{{ .Release.Namespace }}.svc.cluster.local:8761" + # yamllint enable rule:line-length prefix: "/eureka/" fetch_interval: 30 timeout: @@ -351,7 +386,9 @@ apisix: batch_timeout: 2 inactive_timeout: 1 max_export_batch_size: 16 - set_ngx_var: false + # Expose trace context as NGINX variables for JSON access-log + # correlation in the cluster filelog receiver. + set_ngx_var: true prometheus: export_uri: /metrics metric_prefix: apisix_ @@ -365,6 +402,11 @@ apisix: envs: - KUBERNETES_SERVICE_HOST - KUBERNETES_SERVICE_PORT + logs: + enableAccessLog: true + accessLogFormat: >- + {"time":"$time_iso8601","trace_id":"$opentelemetry_trace_id","span_id":"$opentelemetry_span_id","traceparent":"$opentelemetry_context_traceparent","request_method":"$request_method","uri":"$uri","status":$status} + accessLogFormatEscape: json # etcd configuration etcd: @@ -383,7 +425,7 @@ apisix: # Full registry path required for clusters with short name mode enforcing image: repository: "docker.io/apache/apisix" - tag: "3.17.0-ubuntu" + tag: "3.18.0-ubuntu" # Init container image initContainer: @@ -400,7 +442,7 @@ apisix: # source of truth instead of a duplicated payload here. extraContainers: - name: apisix-plugin-metadata - image: "docker.io/alpine/k8s:1.36.2" + image: "docker.io/alpine/k8s:1.36.4" command: ["sh", "-c"] args: - | @@ -444,7 +486,7 @@ admin-server: replicas: 1 image: repository: container-registry.oracle.com/obaas/admin-server - tag: "2.1.1" + tag: "2.1.2" # Override default resources if needed (defaults: cpu 250m-500m, memory 256Mi-512Mi) # resources: {} @@ -454,7 +496,7 @@ config-server: replicas: 1 image: repository: container-registry.oracle.com/obaas/config-server - tag: "2.1.1" + tag: "2.1.2" # Override default resources if needed (defaults: cpu 250m-500m, memory 256Mi-512Mi) # resources: {} @@ -464,32 +506,96 @@ otmm: commonConfiguration: externalURL: {} security: + # Enable JWT validation and RBAC for MicroTx. Required in production. enabled: false + # Namespace-local Secret with clientId and clientPassword (console access). clientSecretName: "" identityProvider: + # idcs for Oracle IDCS; other for other supported identity providers. serverType: "other" + # Copy issuer and jwks_uri from the provider's discovery document. issuer: "" jwksUri: "" + # Provider URL used for token refresh and console OIDC discovery. identityProviderUrl: "" + # Required for coordinator JWT authentication and console access. + # Must match the access token's aud claim; exported as JWT_AUDIENCES. audience: "" + # IDCS only; empty uses "openid groups". Leave empty for other providers. scopes: "" - adminUserRoles: "" - adminUserRolesPath: "roles" - policy: - claimsRolePaths: "roles" - roles: - superAdmin: "microtx-conductor-super-admin" - admin: "microtx-conductor-admin" - user: "microtx-conductor-user" - readOnlyUser: "microtx-conductor-read-only-user" - metadataManager: "microtx-conductor-metadata-manager" - worker: "microtx-conductor-worker" + roleMappings: + coordinator: + adminUserRoles: "" + # Comma-separated path, e.g. "realm_access, roles" for Keycloak. + adminUserRolesPath: "roles" + workflow: + # Dot-separated path, e.g. "realm_access.roles" for Keycloak. + claimsRolePaths: "roles" + roles: + superAdmin: "microtx-conductor-super-admin" + admin: "microtx-conductor-admin" + user: "microtx-conductor-user" + readOnlyUser: "microtx-conductor-read-only-user" + metadataManager: "microtx-conductor-metadata-manager" + worker: "microtx-conductor-worker" coordinator: enabled: true + authentication: + # Empty derives DENY when common security is enabled, ALLOW otherwise. + # Explicit DENY also enables JWT validation without enabling common RBAC. + requestsWithNoJWT: "" replicas: 1 + # Native Kubernetes probe fields. Set an entry to null to disable that probe. + probes: + # Allow up to five minutes for startup and transaction recovery. + startup: + httpGet: + path: /health + port: http + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 30 + readiness: + httpGet: + path: /health + port: http + periodSeconds: 5 + timeoutSeconds: 3 + failureThreshold: 3 + liveness: + httpGet: + path: /health + port: http + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 + # Durable stores require a MicroTx edition that supports persistence. + storage: + type: memory # memory, db, etcd + db: + # Run the image's schema initialization/migrations before starting TCS. + # Disable when a DBA provisions and upgrades the schema separately. + initializeSchema: true + # Empty values reuse the OBaaS application credentials, service, and wallet, + # as used by the metrics exporter. The coordinator image needs Python 3. + connectionString: "" + connectionParams: "" + # Optional separate database: pre-existing secret key contains JSON + # {"username":"...","password":"..."}; also set connectionString. + credentialSecretName: "" + credentialSecretKey: secret + walletConfigMapName: "" + walletSecretName: "" + etcd: + endpoints: "" + skipHostNameVerification: false + credentialSecretName: "" + credentialSecretKey: etcdecred.json + caConfigMapName: "" + caConfigMapKey: ca.pem image: repository: container-registry.oracle.com/database/microtx-coordinator - tag: "26.1.1" + tag: "26.1.2" pullPolicy: IfNotPresent metrics: enabled: true @@ -540,10 +646,19 @@ otmm: indexing: enabled: true storage: - fileSystem: {} + fileSystem: + # Separate from Oracle Database workflow/queue/metadata persistence. + persistence: + enabled: false + existingClaim: "" + storageClass: "" + size: 10Gi + accessModes: [ReadWriteOnce] + # Retention also requires global.cleanupPVCs: false. + retain: true image: repository: container-registry.oracle.com/database/microtx-workflow - tag: "26.1.1" + tag: "26.1.2" pullPolicy: IfNotPresent replicas: 1 resources: @@ -555,9 +670,37 @@ otmm: memory: 4Gi console: enabled: true + cookieEncryption: + # Preserve the existing console behavior; enable with a compatible cookie + # encryption password Secret after validating browser login. + enabled: false + # Native Kubernetes probe fields. Set an entry to null to disable that probe. + probes: + startup: + httpGet: + path: /health + port: http-console + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 18 + readiness: + httpGet: + path: /health + port: http-console + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 3 + failureThreshold: 6 + liveness: + httpGet: + path: /health + port: http-console + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 6 image: repository: container-registry.oracle.com/database/microtx-console - tag: "26.1.1" + tag: "26.1.2" pullPolicy: IfNotPresent # Override default resources if needed (defaults: cpu 250m, memory 1Gi) # resources: {} @@ -568,7 +711,7 @@ oracle-database-exporter: replicas: 1 image: repository: container-registry.oracle.com/database/observability-exporter - tag: "2.4.2" + tag: "2.5.0" # Busybox sidecar for tailing alert.log busybox: repository: docker.io/busybox @@ -585,22 +728,19 @@ database: sqlcl: image: repository: container-registry.oracle.com/database/sqlcl - tag: "26.2.0" + tag: "26.2.2" # For SIDB-FREE/ADB-FREE: container image configuration (exclude for ADB-S) image: repository: "container-registry.oracle.com/database/free" - tag: "23.26.2.0" + tag: "23.26.3.0" - # Persistent storage for SIDB-FREE and ADB-FREE data files. - # Enabled by default, so database data persists when the Pod is replaced. + # For SIDB-FREE/ADB-FREE: persistent storage for database files. + # Enabled by default; disable only when ephemeral database data is acceptable. persistence: enabled: true - # StorageClass to request. Leave empty to use the cluster default. storageClass: "" - # Requested size for the data PersistentVolumeClaim. - size: 250Gi - # Kubernetes access modes for the data PersistentVolumeClaim. + size: 50Gi accessModes: - ReadWriteOnce @@ -677,15 +817,18 @@ database: signoz: enabled: true + # Disable only during the first ClickHouse upgrade pass; re-enable for SigNoz. + setup: + enabled: true + # Oracle Linux 9 includes Python 3; no runtime package installation is needed. + image: + registry: container-registry.oracle.com + repository: os/oraclelinux + tag: "9" global: imagePullSecrets: *imagePullSecrets - # Utility images for setup jobs + # Utility images for initialization jobs utilities: - curlJq: - image: - registry: docker.io - repository: curlimages/curl - tag: "8.20.0" busybox: image: registry: docker.io @@ -716,7 +859,7 @@ signoz: value: none - name: OTEL_EXPORTER_OTLP_PROTOCOL value: http/protobuf - + # Change to override individual component images signoz: # Auto-provision root user in SigNoz backend @@ -750,10 +893,6 @@ signoz: tag: "1.37" telemetryStoreMigrator: enabled: true - # The migrator initializes the telemetry schema for a replacement ClickHouse - # instance. It must be a regular Job so a destructive replacement creates - # ClickHouse before the migrator runs. - upgradeHelmHooks: false otelCollector: image: registry: docker.io @@ -815,7 +954,8 @@ signoz: regex: apisix - source_labels: [__meta_kubernetes_pod_ip] target_label: __address__ - replacement: ${1}:9091 + # Escape capture groups through Collector config expansion. + replacement: $$1:9091 # scrape all the pods with the signoz annotations on them - job_name: "signoz-annotated-pods" kubernetes_sd_configs: @@ -837,7 +977,7 @@ signoz: ] action: replace regex: ([^;]+);([^;]+) - replacement: $1:$2 + replacement: $$1:$$2 target_label: __address__ - source_labels: [__meta_kubernetes_namespace] action: replace @@ -866,6 +1006,7 @@ signoz: image: registry: docker.io repository: signoz/zookeeper + tag: 3.8.4 image: registry: docker.io repository: clickhouse/clickhouse-server @@ -875,7 +1016,7 @@ signoz: image: registry: container-registry.oracle.com repository: obaas/dashboards - tag: "2.1.1" + tag: "2.1.0" command: - sh - -c @@ -890,13 +1031,6 @@ signoz: chmod +x "$dst" echo "histogram-quantile installed successfully" clickhouseOperator: - # Keep high-volume ClickHouse diagnostic logs for one day. These logs are - # useful during short-lived investigations, but longer retention can put - # substantial write, merge, and storage pressure on ClickHouse. - zookeeperLog: - ttl: 1 - processorsProfileLog: - ttl: 1 image: registry: docker.io repository: altinity/clickhouse-operator @@ -910,6 +1044,14 @@ k8s-infra: cloud: others clusterName: obaas deploymentEnvironment: obaas + + # Pin to latest until updated. + otelAgent: + image: + tag: "0.160.0" + otelDeployment: + image: + tag: "0.160.0" otelCollectorEndpoint: signoz-otel-collector:4317 otelInsecure: true presets: @@ -939,9 +1081,8 @@ k8s-infra: kafka: enabled: false - version: 4.2.0 - metadataVersion: 4.2-IV1 - metricsEnabled: false + version: 4.3.1 + metadataVersion: 4.3-IV0 # Create a Coherence cluster in the OBaaS release namespace. The Coherence # Operator is installed once per cluster by the obaas-prereqs chart. diff --git a/helm/infra-charts/tools/OCI_BUILD_README.md b/helm/infra-charts/tools/OCI_BUILD_README.md new file mode 100644 index 000000000..f10d51ac7 --- /dev/null +++ b/helm/infra-charts/tools/OCI_BUILD_README.md @@ -0,0 +1,48 @@ +# OCI Resource Manager Build Script + +`oci_build.py` packages the repository's top-level `opentofu/` configuration into a ZIP file for OCI Resource Manager. By default, it vendors the local `obaas-prereqs` and `obaas` charts. Use `--remote-charts` to have the stack install the published charts instead. + +## Usage + +Run from the repository root: + +```bash +python3 helm/infra-charts/tools/oci_build.py +``` + +The script can also be run from the tools directory: + +```bash +cd helm/infra-charts/tools +./oci_build.py +``` + +The output is written to `helm/infra-charts/stage/oci_build.zip`. + +To use published charts, add `--remote-charts`: + +```bash +python3 helm/infra-charts/tools/oci_build.py --remote-charts +``` + +The remote-chart package does not include local chart files and sets `k8s_use_local_charts = false`. Resource Manager must be able to reach the Helm repository configured in `opentofu/cfgmgt/apply.py` when it applies the stack. + +For a Marketplace build, add `--marketplace`: + +```bash +python3 helm/infra-charts/tools/oci_build.py --marketplace +``` + +That creates `oci_marketplace_build.zip` and sets `mktpl_use_image = true` in the packaged stack. + +## Package Contents + +- The files from the repository's top-level `opentofu/` directory. +- By default, the local charts at `helm/infra-charts/obaas-prereqs` and `helm/infra-charts/obaas`, placed in the archive at `helm/infra-charts/` so `cfgmgt/apply.py` can locate them. This is omitted when `--remote-charts` is selected. +- `local_charts.auto.tfvars`, which sets `k8s_use_local_charts` according to the selected chart source. + +For local charts, the builder adjusts `LOCAL_HELM_DIR` in the packaged `cfgmgt/apply.py` to resolve `../helm/infra-charts` relative to `cfgmgt/`. Both charts then resolve inside Resource Manager's extracted Terraform directory. The repository's original `opentofu/cfgmgt/apply.py` retains its repository-relative path. + +The builder excludes Terraform/OpenTofu variable files, state, private keys, caches, and generated `stage/` directories. Helm is not required. In the default local-chart mode, both local charts must have a `Chart.yaml` file. + +The builder enforces an 11 MB maximum ZIP size. The legacy `--local-charts` flag remains accepted for compatibility; local charts are already the default. diff --git a/helm/infra-charts/tools/image_lists/k8s_images_2.1.2.txt b/helm/infra-charts/tools/image_lists/k8s_images_2.1.2.txt index 67ab30d2a..262912990 100644 --- a/helm/infra-charts/tools/image_lists/k8s_images_2.1.2.txt +++ b/helm/infra-charts/tools/image_lists/k8s_images_2.1.2.txt @@ -1,5 +1,6 @@ # OBaaS Helm Charts - Complete Image List # Manually maintained for now. +# Includes optional components and Helm test-hook images. # # ============================================================================ @@ -9,18 +10,24 @@ container-registry.oracle.com/database/microtx-coordinator:26.1.2 container-registry.oracle.com/database/microtx-workflow:26.1.2 container-registry.oracle.com/database/observability-exporter:2.5.0 container-registry.oracle.com/database/operator:2.2.0 -container-registry.oracle.com/database/sqlcl:26.2.1 +container-registry.oracle.com/database/sqlcl:26.2.2 container-registry.oracle.com/middleware/coherence-ce:22.06.13 container-registry.oracle.com/middleware/coherence-operator:3.5.17 +container-registry.oracle.com/obaas/admin-server:2.1.2 +container-registry.oracle.com/obaas/config-server:2.1.2 container-registry.oracle.com/obaas/dashboards:2.1.0 -docker.io/alpine/k8s:1.36.2 +container-registry.oracle.com/obaas/optimizer:2.5.0 +container-registry.oracle.com/obaas/service-registry:2.1.2 +container-registry.oracle.com/os/oraclelinux:9 +docker.io/alpine/k8s:1.36.4 docker.io/altinity/clickhouse-operator:0.21.2 docker.io/altinity/metrics-exporter:0.21.2 docker.io/apache/apisix:3.18.0-ubuntu docker.io/bitnamilegacy/etcd:3.6.1 +docker.io/busybox:1.35 docker.io/busybox:1.37 +docker.io/busybox:latest docker.io/clickhouse/clickhouse-server:25.12.5 -docker.io/curlimages/curl:8.22.0 docker.io/envoyproxy/envoy:distroless-v1.39.1 docker.io/envoyproxy/gateway:v1.9.1 docker.io/envoyproxy/ratelimit:8fe6ea42 @@ -31,6 +38,7 @@ docker.io/signoz/zookeeper:3.8.4 ghcr.io/external-secrets/external-secrets:v2.10.0 ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:2.30.0 ghcr.io/open-telemetry/opentelemetry-operator/opentelemetry-operator:0.158.0 +ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-k8s:0.160.0 quay.io/jetstack/cert-manager-cainjector:v1.21.2 quay.io/jetstack/cert-manager-controller:v1.21.2 quay.io/jetstack/cert-manager-startupapicheck:v1.21.2 diff --git a/helm/infra-charts/tools/oci_build.py b/helm/infra-charts/tools/oci_build.py new file mode 100755 index 000000000..f2069cd13 --- /dev/null +++ b/helm/infra-charts/tools/oci_build.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +""" +Copyright (c) 2026, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +Build script that packages OCI terraform configuration. + +This script: +1. Copies the repository's opentofu configuration to a temporary directory +2. Vendors the local Helm charts where cfgmgt/apply.py expects to find them +3. Creates a zip archive and places it in the infra-charts stage folder +""" +import os +import sys +import argparse +import fnmatch +import shutil +import tempfile +from pathlib import Path + +# Patterns to exclude from the build +EXCLUDE_PATTERNS = [ + "terraform.tfstate", + "terraform.tfstate.backup", + "*.tfvars", + "*.pem", + ".terraform", + ".terraform.lock.hcl", + ".terraform.tfstate.lock.info", + "__pycache__", + "*.pyc", + "stage", + ".gitignore", +] +# Max Stack Size +MAX_STACK_SIZE_MB = 11 +LOCAL_CHART_NAMES = ("obaas-prereqs", "obaas") + + +def ignore_patterns(directory, files): + """Return list of files to ignore during copytree.""" + ignored = [] + for f in files: + for pattern in EXCLUDE_PATTERNS: + if fnmatch.fnmatch(f, pattern): + ignored.append(f) + break + return ignored + + +def validate_local_charts(helm_src): + missing_charts = [ + chart_name + for chart_name in LOCAL_CHART_NAMES + if not (helm_src / chart_name / "Chart.yaml").exists() + ] + if missing_charts: + missing = ", ".join(missing_charts) + raise FileNotFoundError(f"Local Helm chart(s) not found under {helm_src}: {missing}") + + +def copy_local_charts(helm_src, tmp_helm): + print(f"Copying {helm_src} to {tmp_helm}") + if tmp_helm.exists(): + shutil.rmtree(tmp_helm) + shutil.copytree(helm_src, tmp_helm) + + +def write_local_charts_override(tmp_oci, local_charts): + local_charts_tfvars = tmp_oci / "local_charts.auto.tfvars" + print(f"Writing chart source override to {local_charts_tfvars}") + local_charts_tfvars.write_text( + f"k8s_use_local_charts = {str(local_charts).lower()}\n", + encoding="utf-8", + ) + + +def configure_packaged_chart_path(tmp_oci): + """Resolve bundled charts relative to the extracted Resource Manager stack.""" + apply_script = tmp_oci / "cfgmgt" / "apply.py" + source = apply_script.read_text(encoding="utf-8") + repository_path = 'LOCAL_HELM_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "..", "helm", "infra-charts"))' + packaged_path = 'LOCAL_HELM_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "helm", "infra-charts"))' + if source.count(repository_path) != 1: + raise ValueError(f"Cannot configure bundled chart path in {apply_script}: unexpected LOCAL_HELM_DIR definition") + apply_script.write_text(source.replace(repository_path, packaged_path), encoding="utf-8") + + +def build_stack(marketplace: bool = False, local_charts: bool = True): + script_dir = Path(__file__).resolve().parent + repo_root = script_dir.parents[2] + + # Define source paths + opentofu_src = repo_root / "opentofu" + helm_src = repo_root / "helm" / "infra-charts" + stage_dir = script_dir.parent / "stage" + + # Validate source directories exist + if not opentofu_src.is_dir(): + raise FileNotFoundError(f"OpenTofu directory not found: {opentofu_src}") + if local_charts: + if not helm_src.is_dir(): + raise FileNotFoundError(f"Helm directory not found: {helm_src}") + validate_local_charts(helm_src) + + # Ensure stage directory exists + stage_dir.mkdir(parents=True, exist_ok=True) + + # Create temporary directory + with tempfile.TemporaryDirectory() as tmp_dir: + tmp_path = Path(tmp_dir) + tmp_oci = tmp_path / "opentofu" + + print(f"Copying {opentofu_src} to {tmp_oci}") + shutil.copytree(opentofu_src, tmp_oci, ignore=ignore_patterns) + + if local_charts: + # Resource Manager extracts the archive as the Terraform root. + # Keep charts inside that root and adapt the packaged apply script. + tmp_helm = tmp_oci / "helm" / "infra-charts" + tmp_helm.mkdir(parents=True, exist_ok=True) + for chart_name in LOCAL_CHART_NAMES: + copy_local_charts(helm_src / chart_name, tmp_helm / chart_name) + configure_packaged_chart_path(tmp_oci) + + write_local_charts_override(tmp_oci, local_charts) + + if marketplace: + marketplace_tfvars = tmp_oci / "marketplace.auto.tfvars" + print(f"Writing marketplace overrides to {marketplace_tfvars}") + marketplace_tfvars.write_text("mktpl_use_image = true\n", encoding="utf-8") + + # Create zip archive + zip_name = "oci_marketplace_build" if marketplace else "oci_build" + zip_path = stage_dir / zip_name + zip_file = Path(f"{zip_path}.zip") + + # Remove existing zip file if it exists + if zip_file.exists(): + print(f"Removing existing archive: {zip_file}") + zip_file.unlink() + + print(f"Creating archive at {zip_file}") + shutil.make_archive(str(zip_path), "zip", tmp_oci) + + zip_file_size = round(os.path.getsize(zip_file) / 1048576, 2) + if zip_file_size > MAX_STACK_SIZE_MB: + sys.exit(f"Stack is too large {zip_file_size}M > {MAX_STACK_SIZE_MB}M") + + print(f"Stack File: {zip_file}") + print(f"Stack Size: {zip_file_size}M") + + return zip_file + +########################################################################## +# MAIN +########################################################################## +def main(args=None): + parser = argparse.ArgumentParser( + description="Stack Builder", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + parser.add_argument('--marketplace', action='store_true', help="Marketplace Build; Enables Dummy VM") + chart_source = parser.add_mutually_exclusive_group() + chart_source.add_argument( + '--remote-charts', + dest='remote_charts', + action='store_true', + help="Use published Helm charts instead of this checkout's local charts", + ) + chart_source.add_argument( + '--local-charts', + dest='remote_charts', + action='store_false', + help=argparse.SUPPRESS, + ) + parser.set_defaults(remote_charts=False) + args = parser.parse_args(args) + + return build_stack(args.marketplace, local_charts=not args.remote_charts) + +if __name__ == "__main__": + main(sys.argv[1:]) diff --git a/helm/infra-charts/tools/oci_config.py b/helm/infra-charts/tools/oci_config.py index 7b8420021..94346bef4 100644 --- a/helm/infra-charts/tools/oci_config.py +++ b/helm/infra-charts/tools/oci_config.py @@ -45,7 +45,7 @@ def select_profile_config(config_text: str, profile: Optional[str], config_path: try: parser.read_string(config_text) except configparser.Error as exc: - print(f"Error: Failed to parse config file {config_path}: {exc}") + print(f"Error: Failed to parse config file {config_path}: {exc}", file=sys.stderr) sys.exit(1) defaults = OrderedDict(parser.defaults()) @@ -57,7 +57,7 @@ def select_profile_config(config_text: str, profile: Optional[str], config_path: elif available_profiles: selected_profile = available_profiles[0] else: - print(f"Error: No profiles found in config file {config_path}") + print(f"Error: No profiles found in config file {config_path}", file=sys.stderr) sys.exit(1) else: selected_profile = profile @@ -68,7 +68,8 @@ def select_profile_config(config_text: str, profile: Optional[str], config_path: print( "Error: Profile " f"'{selected_profile}' not found in {config_path}. Available profiles: " - + ", ".join(available_display) + + ", ".join(available_display), + file=sys.stderr, ) sys.exit(1) @@ -174,7 +175,7 @@ def ensure_namespace_exists(namespace: str) -> None: check=False, ) except FileNotFoundError: - print("Error: kubectl not found in PATH. Please install kubectl and try again.") + print("Error: kubectl not found in PATH. Please install kubectl and try again.", file=sys.stderr) sys.exit(1) if check_result.returncode == 0: @@ -188,7 +189,7 @@ def ensure_namespace_exists(namespace: str) -> None: check=False, ) except FileNotFoundError: - print("Error: kubectl not found in PATH. Please install kubectl and try again.") + print("Error: kubectl not found in PATH. Please install kubectl and try again.", file=sys.stderr) sys.exit(1) if create_result.stdout: @@ -233,7 +234,7 @@ def main(): dry_run = args.dry_run if not config_path.exists(): - print(f"Error: Config file not found: {config_path}") + print(f"Error: Config file not found: {config_path}", file=sys.stderr) sys.exit(1) # Read original config and extract key files @@ -241,15 +242,15 @@ def main(): selected_config_text = select_profile_config(original_config_text, profile, config_path) key_files = extract_key_files(selected_config_text) if not key_files: - print("Error: No key_file values found in the selected profile") + print("Error: No key_file values found in the selected profile", file=sys.stderr) sys.exit(1) # Check existence of all key files before proceeding missing_files = [str(f) for f in key_files if not f.exists()] if missing_files: - print("Error: The following key_file(s) do not exist:") + print("Error: The following key_file(s) do not exist:", file=sys.stderr) for f in missing_files: - print(f" - {f}") + print(f" - {f}", file=sys.stderr) sys.exit(1) # Rewrite key_file paths in the config content diff --git a/helm/tests/test_helm_contract.py b/helm/tests/test_helm_contract.py new file mode 100644 index 000000000..db1904052 --- /dev/null +++ b/helm/tests/test_helm_contract.py @@ -0,0 +1,116 @@ +"""Contract tests for the repository's OBaaS Helm charts.""" + +import os +import shutil +import subprocess +from pathlib import Path + +import pytest +import yaml + +REPOSITORY_ROOT = Path(__file__).resolve().parents[2] +CHART_DIR = REPOSITORY_ROOT / "helm" / "infra-charts" / "obaas" +PREREQS_CHART_DIR = REPOSITORY_ROOT / "helm" / "infra-charts" / "obaas-prereqs" +OPERATOR_ARCHIVE = PREREQS_CHART_DIR / "charts" / "oracle-database-operator-0.2.0.tgz" + +helm_bin = shutil.which("helm") +pytestmark = pytest.mark.skipif(helm_bin is None, reason="helm binary not available on PATH") + + +def _render(*sets: str, upgrade: bool = False) -> subprocess.CompletedProcess[str]: + command = [ + "helm", + "template", + "contract", + str(CHART_DIR), + "--namespace", + "contract", + "--kube-version", + os.environ.get("HELM_KUBE_VERSION", "1.36.0"), + "--set", + "global.api.apiKey=contract-api-key", + ] + if upgrade: + command.append("--is-upgrade") + for value in sets: + command.extend(["--set", value]) + return subprocess.run(command, capture_output=True, text=True, check=False) + + +def _docs(rendered: str) -> list[dict]: + return [document for document in yaml.safe_load_all(rendered) if isinstance(document, dict)] + + +def _resource_names(rendered: str, kind: str) -> set[str]: + return { + document["metadata"]["name"] + for document in _docs(rendered) + if document.get("kind") == kind and document.get("metadata", {}).get("name") + } + + +def test_default_chart_renders_core_resources(): + result = _render() + + assert result.returncode == 0, result.stderr[:500] + assert {"contract-admin-server", "contract-config-server", "contract-obaas-sidb"}.issubset( + _resource_names(result.stdout, "Service") + ) + assert "contract-eureka" in _resource_names(result.stdout, "StatefulSet") + + +def test_invalid_database_type_is_rejected(): + result = _render("database.type=invalid") + + assert result.returncode != 0 + assert "database.type must be one of" in result.stderr + + +def test_invalid_signoz_upgrade_stage_is_rejected(): + result = _render("signozUpgrade.stage=invalid") + + assert result.returncode != 0 + assert "/signozUpgrade/stage" in result.stderr + + +def test_other_database_requires_privileged_secret(): + result = _render("database.type=OTHER", "database.other.dsn=db.example:1521/service") + + assert result.returncode != 0 + assert "privAuthN.secretName is REQUIRED" in result.stderr + + +def test_oci_existing_config_cannot_mix_inline_values(): + result = _render( + "database.oci_config.configMapName=oci-config", + "database.oci_config.tenancy=ocid1.tenancy.test", + ) + + assert result.returncode != 0 + assert "cannot also provide tenancy" in result.stderr + + +# TODO: stale test for the removed two-stage SigNoz upgrade workflow (superseded +# by the destructive-replace design in aa5ddd7f). Commented out rather than deleted +# pending decision on related cleanup. +# def test_signoz_stage1_upgrade_hooks_render_only_for_upgrade(): +# install = _render("signozUpgrade.stage=stage1", "signoz.enabled=true") +# upgrade = _render("signozUpgrade.stage=stage1", "signoz.enabled=true", upgrade=True) +# +# assert install.returncode == 0, install.stderr[:500] +# assert upgrade.returncode == 0, upgrade.stderr[:500] +# assert "helm.sh/hook: post-upgrade" not in install.stdout +# assert "helm.sh/hook: post-upgrade" in upgrade.stdout + + +def test_operator_dependency_archive_is_locked_to_0_2_0(): + assert OPERATOR_ARCHIVE.is_file() + result = subprocess.run( + ["helm", "show", "chart", str(OPERATOR_ARCHIVE)], + capture_output=True, + text=True, + check=False, + ) + + assert result.returncode == 0, result.stderr + assert "version: 0.2.0" in result.stdout diff --git a/helm/tests/test_oci_config.py b/helm/tests/test_oci_config.py new file mode 100644 index 000000000..d9cd4518a --- /dev/null +++ b/helm/tests/test_oci_config.py @@ -0,0 +1,114 @@ +""" +Copyright (c) 2024, 2026, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. + +Contract tests for the release-packaged OCI config Secret helper. +""" + +import base64 +import subprocess +import sys +from pathlib import Path + +import yaml + +SCRIPT = Path(__file__).resolve().parent.parent.parent / "helm" / "infra-charts" / "tools" / "oci_config.py" + +def _run_helper(*args: str) -> subprocess.CompletedProcess[str]: + """Run the helper without loading any installed site packages.""" + return subprocess.run( + [sys.executable, "-I", "-S", str(SCRIPT), *args], + capture_output=True, + text=True, + check=False, + ) + + +def _dry_run(*args: str) -> subprocess.CompletedProcess[str]: + return _run_helper(*args, "--dry-run") + + +def test_emits_self_contained_secret_and_configmap_manifests(tmp_path: Path): + key_path = tmp_path / "oci_api_key.pem" + key_path.write_text("private-key-data", encoding="utf-8") + config_path = tmp_path / "config" + config_path.write_text( + f"[DEFAULT]\ntenancy=ocid1.tenancy.test\nkey_file={key_path}\n", + encoding="utf-8", + ) + + result = _dry_run( + "--config", + str(config_path), + "--namespace", + "ai-optimizer", + ) + + assert result.returncode == 0, result.stderr + secret, configmap = list(yaml.safe_load_all(result.stdout)) + assert secret["metadata"] == {"name": "oci-privatekey", "namespace": "ai-optimizer"} + assert secret["type"] == "Opaque" + assert base64.b64decode(secret["data"]["privatekey"]) == b"private-key-data" + assert configmap["metadata"] == {"name": "oci-config", "namespace": "ai-optimizer"} + assert configmap["data"]["tenancy"] == "ocid1.tenancy.test" + assert "key_file" not in configmap["data"] + assert result.stderr == "" + + +def test_missing_config_fails_without_manifest(tmp_path: Path): + result = _dry_run( + "--config", + str(tmp_path / "missing-config"), + "--namespace", + "ai-optimizer", + ) + + assert result.returncode != 0 + assert "Config file not found" in result.stderr + assert result.stdout == "" + + +def test_missing_key_file_fails_without_manifest(tmp_path: Path): + missing_key = tmp_path / "missing-key.pem" + config_path = tmp_path / "config" + config_path.write_text(f"[DEFAULT]\nkey_file={missing_key}\n", encoding="utf-8") + + result = _dry_run("--config", str(config_path), "--namespace", "ai-optimizer") + + assert result.returncode != 0 + assert str(missing_key) in result.stderr + assert result.stdout == "" + + +def test_missing_key_file_setting_fails_without_manifest(tmp_path: Path): + config_path = tmp_path / "config" + config_path.write_text("[DEFAULT]\ntenancy=ocid1.tenancy.test\n", encoding="utf-8") + + result = _dry_run("--config", str(config_path), "--namespace", "ai-optimizer") + + assert result.returncode != 0 + assert "No key_file values found" in result.stderr + assert result.stdout == "" + + +def test_profile_selects_requested_key_file(tmp_path: Path): + key_path = tmp_path / "profile-key.pem" + key_path.write_text("private-key", encoding="utf-8") + config_path = tmp_path / "config" + config_path.write_text( + f"[DEFAULT]\ntenancy=ocid1.default\n\n[DEV]\ntenancy=ocid1.dev\nkey_file={key_path}\n", + encoding="utf-8", + ) + + result = _dry_run( + "--config", + str(config_path), + "--namespace", + "ai-optimizer", + "--profile", + "DEV", + ) + + assert result.returncode == 0, result.stderr + _, configmap = list(yaml.safe_load_all(result.stdout)) + assert configmap["data"]["tenancy"] == "ocid1.dev" diff --git a/opentofu/.gitignore b/opentofu/.gitignore new file mode 100644 index 000000000..5fd1ba20f --- /dev/null +++ b/opentofu/.gitignore @@ -0,0 +1,33 @@ +############################################################################## +# OpenTofu +############################################################################## +# Ignore variable files (contain credentials) +*.tfvars +*.tfvars.json +# But allow example variable files for CI/CD testing (safe, no real credentials) +!examples/*.tfvars +!examples/*.tfvars.json + +# OpenTofu state, cache, plans, and local overrides +.terraform/ +.terraform.lock.hcl +.terraform.tfstate.lock.info +*.tfstate +*.tfstate.* +*.tfplan +*.tfplan.out +override.tf +override.tf.json +*_override.tf +*_override.tf.json +crash.log +crash.*.log + +# Private keys and sensitive files +*.pem + +# Generated configuration-management output +cfgmgt/stage/ + +# Local Helm Charts +cfgmgt/helm/ diff --git a/opentofu/README.md b/opentofu/README.md new file mode 100644 index 000000000..c668011da --- /dev/null +++ b/opentofu/README.md @@ -0,0 +1,256 @@ +# Oracle Backend for Microservices and AI - Terraform for OCI + +This directory contains Terraform configuration to deploy Oracle Backend for Microservices and AI (OBaaS) on Oracle Cloud Infrastructure (OCI). + +## Prerequisites + +- [Terraform](https://www.terraform.io/) (>= 1.5) +- [OCI CLI](https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm) configured with API key authentication +- OCI tenancy with sufficient quotas for: + - OKE (Oracle Kubernetes Engine) cluster + - Flexible compute shapes (VM.Standard.E4/E5.Flex or VM.Standard.A1/A2.Flex) + - Autonomous Database (unless using BYO database) + - Load Balancer (flexible shape) + +## Quick Start + +1. **Initialize the configuration:** + ```bash + terraform init + ``` + +2. **Copy an example configuration:** + ```bash + cp examples/k8s-new-adb.tfvars terraform.tfvars + ``` + +3. **Configure OCI credentials** in `terraform.tfvars`: + ```hcl + tenancy_ocid = "ocid1.tenancy.oc1..aaa..." + compartment_ocid = "ocid1.compartment.oc1..aaa..." + user_ocid = "ocid1.user.oc1..aaa..." + fingerprint = "xx:xx:xx:..." + private_key_path = "~/.oci/oci_api_key.pem" + region = "us-phoenix-1" + ``` + +4. **Review and apply:** + ```bash + terraform plan + terraform apply + ``` + +5. **Configure kubectl access** (after apply completes): + ```bash + # Use the kubeconfig_cmd output + oci ce cluster create-kubeconfig --cluster-id --region + ``` + +## Configuration Options + +### General Settings + +| Variable | Description | Default | +|----------|-------------|---------| +| `tenancy_ocid` | OCI Tenancy OCID | Required | +| `compartment_ocid` | Compartment for resources | Required | +| `region` | OCI Region | Required | +| `label_prefix` | Prefix for resource names (max 12 chars) | Auto-generated | + +### Database Options + +The deployment supports three database configurations: + +#### Option 1: New Autonomous Database (Default) +```hcl +# Leave byo_db_type empty (default) +adb_ecpu_core_count = 2 +adb_data_storage_size_in_gb = 20 +adb_license_model = "LICENSE_INCLUDED" # or "BRING_YOUR_OWN_LICENSE" +adb_networking = "PRIVATE_ENDPOINT_ACCESS" # or "SECURE_ACCESS" +``` + +#### Option 2: Bring Your Own Autonomous Database (ADB-S) +```hcl +byo_db_type = "ADB-S" +byo_db_password = "your_admin_password" +byo_adb_ocid = "ocid1.autonomousdatabase.oc1..." +``` + +#### Option 3: Bring Your Own Other Database +```hcl +byo_db_type = "OTHER" +byo_db_password = "your_system_password" +byo_odb_host = "db-host.example.com" +byo_odb_port = 1521 +byo_odb_service = "SERVICENAME" +``` + +### Kubernetes Options + +| Variable | Description | Default | +|----------|-------------|---------| +| `k8s_cpu_node_pool_size` | Number of CPU worker nodes | 3 | +| `k8s_api_is_public` | Expose K8s API publicly | true | +| `k8s_api_endpoint_allowed_cidrs` | CIDRs allowed to access K8s API | "0.0.0.0/0" | +| `k8s_node_pool_gpu_deploy` | Deploy GPU node pool | false | +| `k8s_gpu_node_pool_size` | Number of GPU worker nodes | 1 | +| `k8s_deploy_kafka` | Deploy a Kafka cluster using the Strimzi operator | false | +| `k8s_deploy_coherence` | Deploy a Coherence cluster using the Coherence Operator | false | +| `k8s_run_cfgmgt` | Run configuration management | true | +| `k8s_use_cluster_addons` | Install OKE cluster add-ons | true | +| `k8s_use_local_charts` | Use local Helm charts from `helm/` instead of the remote Helm repository | false | +| `k8s_byo_ocir_url` | BYO Oracle Container Registry URL | "" | + +### Local Helm Chart Development + +By default, the OCI Resource Manager build vendors the published Helm charts into the stack package. For local Terraform development, you can test charts from a local checkout without rebuilding the ZIP. + +`apply.py` looks for local charts under the sibling `helm` directory: + +```text +../helm/infra-charts/obaas-prereqs +../helm/infra-charts/obaas +``` + +Verify the charts are visible: + +```bash +ls ../helm/infra-charts/obaas/Chart.yaml +ls ../helm/infra-charts/obaas-prereqs/Chart.yaml +``` + +If the charts have dependencies, update them in the chart repo before applying: + +```bash +cd ../helm/infra-charts +helm dependency update obaas-prereqs +helm dependency update obaas +``` + +Then run Terraform with local charts enabled: + +```bash +cd opentofu +terraform plan -var='k8s_use_local_charts=true' +terraform apply -var='k8s_use_local_charts=true' +``` + +You can also set this in `terraform.tfvars`: + +```hcl +k8s_use_local_charts = true +``` + +To return to published charts for direct Terraform runs, remove that variable or set it to `false`. + +### Compute Options + +| Variable | Description | Default | +|----------|-------------|---------| +| `compute_cpu_shape` | CPU compute shape | VM.Standard.E5.Flex | +| `compute_cpu_ocpu` | OCPUs per CPU worker | 2 | +| `compute_gpu_shape` | GPU compute shape | VM.GPU.A10.1 | + +### Network Options + +By default, a new VCN with public and private subnets is created. To use existing networking: + +```hcl +byo_vcn_ocid = "ocid1.vcn.oc1..." +byo_public_subnet_ocid = "ocid1.subnet.oc1..." +byo_private_subnet_ocid = "ocid1.subnet.oc1..." +``` + +### Load Balancer Options + +| Variable | Description | Default | +|----------|-------------|---------| +| `lb_min_shape` | Minimum bandwidth (Mbps) | 10 | +| `lb_max_shape` | Maximum bandwidth (Mbps) | 10 | +| `client_allowed_cidrs` | CIDRs allowed for client access | "0.0.0.0/0" | +| `server_allowed_cidrs` | CIDRs allowed for server API access | "0.0.0.0/0" | + +### AI Optimizer + +| Variable | Description | Default | +|----------|-------------|---------| +| `deploy_optimizer` | Deploy AI Optimizer and Toolkit | false | + +## Examples + +See the [examples/](examples/) directory for complete configuration examples: + +| File | Description | +|------|-------------| +| `k8s-new-adb.tfvars` | Kubernetes deployment with new Autonomous Database | +| `k8s-byo-other-db.tfvars` | Kubernetes deployment with bring-your-own database | + +### Running Tests + +The `examples/manual-test.sh` script validates configurations using your OCI credentials: + +```bash +# Uses ~/.oci/config [DEFAULT] profile +./examples/manual-test.sh + +# Use a specific profile +./examples/manual-test.sh MYPROFILE +``` + +## Outputs + +After successful deployment: + +| Output | Description | +|--------|-------------| +| `app_name` | Application label/namespace | +| `app_version` | Deployed application version | +| `optimizer_client_url` | AI Optimizer web UI URL | +| `optimizer_server_url` | AI Optimizer API URL | +| `kubeconfig_cmd` | Command to generate kubeconfig | + +## OCI Resource Manager (ORM) + +This configuration is compatible with OCI Resource Manager for deployment via the OCI Console. The `schema.yaml` file defines the ORM form layout. + +## Directory Structure + +``` +. +├── README.md # This file +├── main.tf # Core resources (LB, ADB) +├── variables.tf # Root-level variables +├── output.tf # Root-level outputs +├── locals.tf # Local values +├── provider.tf # Provider configuration +├── versions.tf # Version constraints +├── data.tf # Data sources +├── nsgs.tf # Network Security Groups +├── module_network.tf # Network module invocation +├── module_kubernetes.tf # Kubernetes module invocation +├── schema.yaml # OCI ORM schema +├── examples/ # Example tfvars files +│ ├── README.md +│ ├── k8s-new-adb.tfvars +│ ├── k8s-byo-other-db.tfvars +│ └── manual-test.sh +├── modules/ +│ ├── kubernetes/ # OKE cluster and configuration +│ └── network/ # VCN, subnets, gateways +└── cfgmgt/ # Configuration management scripts +``` + +## Cleanup + +To destroy all resources: + +```bash +terraform destroy +``` + +## License + +Copyright (c) 2024, 2026, Oracle and/or its affiliates. +Licensed under the Universal Permissive License (UPL), Version 1.0. +See [LICENSE](http://oss.oracle.com/licenses/upl) for details. diff --git a/opentofu/cfgmgt/apply.py b/opentofu/cfgmgt/apply.py new file mode 100644 index 000000000..717a373fa --- /dev/null +++ b/opentofu/cfgmgt/apply.py @@ -0,0 +1,344 @@ +""" +# Copyright (c) 2025, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +""" +# spell-checker:ignore kubeconfig obaas prereqs + +import subprocess +import argparse +import os +import sys +import time + +# --- Constants --- +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) +STAGE_PATH = os.path.join(SCRIPT_DIR, "stage") +LOCAL_HELM_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "..", "helm", "infra-charts")) +os.environ["KUBECONFIG"] = os.path.join(STAGE_PATH, "kubeconfig") + +ORACLE_OPERATOR_NS = "oracle-database-operator-system" +ORACLE_OPERATOR_DEPLOYMENT = "oracle-database-operator-controller-manager" + +# --- Helm Charts Configuration --- +# IMPORTANT: Order matters! Charts are applied in the order listed below. +HELM_REPO_NAME = "obaas" +HELM_REPO_URL = "https://oracle.github.io/microservices-backend/helm" +# Production remote chart version. Local vendored development charts may be newer. +HELM_CHART_VERSION = "0.0.1" + +HELM_CHARTS = [ + { + "name": "obaas-prereqs", + "chart_ref": "obaas/obaas-prereqs", + "repo_url": HELM_REPO_URL, + "repo_name": HELM_REPO_NAME, + "namespace": "obaas-system", # Always deployed to obaas-system + "values_file": "obaas-prereqs-values.yaml", + }, + { + "name": "obaas", + "chart_ref": "obaas/obaas", + "repo_url": HELM_REPO_URL, + "repo_name": HELM_REPO_NAME, + "values_file": "obaas-values.yaml", + }, + # ai-optimizer is now a subchart of obaas, configured via obaas-values.yaml +] + + +# --- Utility Functions --- +def mod_kubeconfig(private_endpoint: str = None): + """Modify Kubeconfig with private endpoint if applicable""" + if not private_endpoint: + return + + kubeconfig_path = os.environ["KUBECONFIG"] + with open(kubeconfig_path, "r", encoding="utf-8") as f: + lines = f.read().splitlines() + + with open(kubeconfig_path, "w", encoding="utf-8") as f: + for line in lines: + stripped = line.strip() + indent = line[: len(line) - len(line.lstrip())] + + if stripped.startswith("server:"): + f.write(f"{indent}server: https://{private_endpoint}:6443\n") + elif stripped.startswith("certificate-authority-data:"): + f.write(f"{indent}insecure-skip-tls-verify: true\n") + else: + f.write(line + "\n") + + print("✅ Modified kubeconfig with private endpoint.\n") + + +def run_cmd(cmd, capture_output=True): + """Execute a shell command and return stdout, stderr, and return code""" + try: + result = subprocess.run( + cmd, + stdout=subprocess.PIPE if capture_output else None, + stderr=subprocess.PIPE if capture_output else None, + text=True, + check=False, + ) + stdout = result.stdout.strip() if result.stdout else "" + stderr = result.stderr.strip() if result.stderr else "" + return stdout, stderr, result.returncode + except subprocess.SubprocessError as e: + return "", str(e), 1 + + +def retry(func, retries=5, delay=15): + """Retry a function on failure using exponential backoff""" + current_delay = delay + for attempt in range(1, retries + 1): + print(f"🔁 Attempt {attempt}/{retries}") + if func(attempt): + return True + if attempt < retries: + print(f"⏳ Retrying in {current_delay} seconds...") + time.sleep(current_delay) + current_delay *= 2 + print("🚨 Maximum retries reached. Exiting.") + sys.exit(1) + + +def check_resource_exists(resource_type, resource_name, namespace=None): + """Check if a Kubernetes resource exists""" + cmd = ["kubectl", "get", resource_type, resource_name] + if namespace: + cmd.extend(["-n", namespace]) + _, _, rc = run_cmd(cmd, capture_output=True) + return rc == 0 + + +# --- Core Functionalities --- +def helm_repo_add_if_missing(repos_to_add): + """Add/Update Helm Repos for charts that need remote repositories""" + if not repos_to_add: + return + + for repo_name, repo_url in repos_to_add.items(): + print(f"➕ Adding Helm repo '{repo_name}'...") + _, stderr, rc = run_cmd(["helm", "repo", "add", repo_name, repo_url, "--force-update"], capture_output=False) + if rc != 0: + print(f"❌ Failed to add repo '{repo_name}':\n{stderr}") + sys.exit(1) + + print("⬆️ Updating Helm repos...") + _, stderr, rc = run_cmd(["helm", "repo", "update"], capture_output=False) + if rc != 0: + print(f"❌ Failed to update repos:\n{stderr}") + sys.exit(1) + print("✅ Repos added and updated.\n") + + +def delete_jobs(namespace, skip_buildkit=False): + """Delete all Jobs in the namespace (Jobs are immutable and block re-apply)""" + print(f"🗑️ Deleting existing Jobs in namespace '{namespace}'...") + stdout, _, rc = run_cmd(["kubectl", "get", "jobs", "-n", namespace, "-o", "jsonpath={.items[*].metadata.name}"]) + if rc != 0 or not stdout: + return + for job in stdout.split(): + if skip_buildkit and job == "optimizer-buildkit": + continue + run_cmd(["kubectl", "delete", "job", job, "-n", namespace, "--ignore-not-found=true"]) + + +def apply_helm_chart_inner(chart_config, namespace, optimizer_version=None, use_force_fallback=False, attempt=1, local_charts=False): + """Apply a single Helm Chart""" + chart_name = chart_config["name"] + values_file = chart_config["values_file"] + + # Use chart-specific namespace if defined, otherwise use provided namespace + target_namespace = chart_config.get("namespace", namespace) + + # Determine chart reference: local or remote + if local_charts: + local_path = os.path.join(LOCAL_HELM_DIR, chart_name) + if os.path.isdir(local_path): + chart_ref = local_path + else: + raise FileNotFoundError(f"Local chart for {chart_name} not found: {local_path}") + else: + chart_ref = chart_config["chart_ref"] + + values_path = os.path.join(STAGE_PATH, values_file) + + if attempt > 1: + delete_jobs(target_namespace, skip_buildkit=True) + + # Use --force-conflicts (Helm 3.13+) or fallback to --force for older versions + force_flag = "--force" if use_force_fallback else "--force-conflicts" + cmd = [ + "helm", "upgrade", "--install", force_flag, + chart_name, chart_ref, + "--namespace", target_namespace, + "--values", values_path, + ] + if not local_charts: + cmd.extend(["--version", HELM_CHART_VERSION]) + + print(f"🚀 Applying Helm chart '{chart_name}' to namespace '{target_namespace}'...") + print(f"📄 Chart: {chart_ref}") + print(f"📄 Values: {values_file}") + + stdout, stderr, rc = run_cmd(cmd) + if rc == 0: + print(f"✅ Helm chart '{chart_name}' applied successfully.") + if stdout: + print(f" {stdout}") + return True + + # Fallback: if --force-conflicts is not supported, retry with --force + if not use_force_fallback and "unknown flag: --force-conflicts" in stderr: + print("⚠️ Helm version doesn't support --force-conflicts, retrying with --force...") + return apply_helm_chart_inner(chart_config, namespace, optimizer_version, use_force_fallback=True, attempt=attempt, local_charts=local_charts) + + print(f"❌ Failed to apply Helm chart '{chart_name}':\n{stderr}") + return False + + +def apply_helm_chart(chart_config, namespace, optimizer_version=None, local_charts=False): + """Apply a Helm Chart with retry logic""" + retry(lambda attempt: apply_helm_chart_inner(chart_config, namespace, optimizer_version, attempt=attempt, local_charts=local_charts)) + + +def apply_all_helm_charts(namespace, optimizer_version=None, local_charts=False): + """Apply Helm charts in order if their values files exist""" + charts_to_apply = [] + + # Discover which charts have values files + for chart_config in HELM_CHARTS: + values_path = os.path.join(STAGE_PATH, chart_config["values_file"]) + if os.path.isfile(values_path): + print(f"✓ Found values file for '{chart_config['name']}': {chart_config['values_file']}") + charts_to_apply.append(chart_config) + else: + print(f"⊘ Skipping '{chart_config['name']}': values file not found") + + if not charts_to_apply: + print("\n⚠️ No charts to apply (no matching values files found).\n") + return + + print() + + # Add remote Helm repo when using remote charts (default) + if not local_charts: + repos_to_add = { + chart_config["repo_name"]: chart_config["repo_url"] + for chart_config in charts_to_apply + if chart_config.get("repo_name") and chart_config.get("repo_url") + } + helm_repo_add_if_missing(repos_to_add) + else: + print("📁 Using local Helm charts.\n") + + # Apply charts in order + print(f"📦 Applying {len(charts_to_apply)} Helm chart(s)...\n") + for chart_config in charts_to_apply: + apply_helm_chart(chart_config, namespace, optimizer_version, local_charts=local_charts) + print() + + print("✅ All Helm charts applied successfully.\n") + + +def apply_manifest_inner(namespace, attempt=1): + """Apply Kubernetes manifest""" + manifest_path = os.path.join(STAGE_PATH, "k8s-manifest.yaml") + if not os.path.isfile(manifest_path): + print(f"⚠️ Manifest not found: {manifest_path}") + return False + + if attempt > 1: + delete_jobs(namespace) + + print("🚀 Applying Kubernetes manifest: k8s-manifest.yaml") + _, stderr, rc = run_cmd(["kubectl", "apply", "-f", manifest_path], capture_output=False) + if rc == 0: + print("✅ Manifest applied.\n") + return True + + print(f"❌ Failed to apply manifest:\n{stderr}") + return False + + +def apply_manifest(namespace): + """Apply Kubernetes manifest with retry logic""" + retry(lambda attempt: apply_manifest_inner(namespace, attempt=attempt)) + + +def patch_oracle_operator(): + """Patch Oracle Database Operator deployment and wait for readiness""" + # Check if namespace exists + print(f"🔍 Checking if {ORACLE_OPERATOR_NS} namespace exists...") + if not check_resource_exists("namespace", ORACLE_OPERATOR_NS): + print(f"⊘ Namespace {ORACLE_OPERATOR_NS} not found. Skipping operator patch.\n") + return + + # Check if deployment exists + if not check_resource_exists("deployment", ORACLE_OPERATOR_DEPLOYMENT, ORACLE_OPERATOR_NS): + print(f"⊘ Deployment {ORACLE_OPERATOR_DEPLOYMENT} not found. Skipping operator patch.\n") + return + + # Apply patch + print("🔧 Patching oracle-database-operator deployment...") + patch_json = ( + '[{"op": "replace", "path": ' + '"/spec/template/spec/containers/0/securityContext/readOnlyRootFilesystem", ' + '"value": false}]' + ) + cmd = [ + "kubectl", "-n", ORACLE_OPERATOR_NS, + "patch", "deployment", ORACLE_OPERATOR_DEPLOYMENT, + "--type", "json", "-p", patch_json, + ] + _, stderr, rc = run_cmd(cmd, capture_output=False) + if rc != 0: + print(f"❌ Failed to patch operator:\n{stderr}") + sys.exit(1) + + print("✅ Oracle operator patched.\n") + + # Wait for operator to be ready + print("⏳ Waiting for Oracle Database Operator to be ready...") + wait_cmd = [ + "kubectl", "wait", + "--for=condition=Available", + "--timeout=300s", + "-n", ORACLE_OPERATOR_NS, + f"deployment/{ORACLE_OPERATOR_DEPLOYMENT}", + ] + _, stderr, rc = run_cmd(wait_cmd, capture_output=False) + if rc != 0: + print(f"❌ Operator readiness check failed:\n{stderr}") + sys.exit(1) + + print("✅ Oracle Database Operator is ready.\n") + print("⏳ Waiting 30 seconds for webhook stabilization...") + time.sleep(30) + + +# --- Entry Point --- +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Apply Helm charts and Kubernetes manifests.") + parser.add_argument("namespace", help="Kubernetes namespace") + parser.add_argument("--private_endpoint", help="Kubernetes Private Endpoint") + parser.add_argument( + "--optimizer_version", + choices=["Stable", "Experimental"], + default="Stable", + help="AI Optimizer version (default: Stable)", + ) + parser.add_argument( + "--local-charts", + action="store_true", + default=False, + help="Use local Helm charts instead of the remote repository", + ) + args = parser.parse_args() + + mod_kubeconfig(args.private_endpoint) + apply_manifest(args.namespace) + patch_oracle_operator() + apply_all_helm_charts(args.namespace, args.optimizer_version, args.local_charts) diff --git a/opentofu/data.tf b/opentofu/data.tf new file mode 100644 index 000000000..5b0a18cfe --- /dev/null +++ b/opentofu/data.tf @@ -0,0 +1,25 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +data "oci_identity_availability_domains" "all" { + compartment_id = var.tenancy_ocid +} + +data "oci_core_services" "core_services" { + filter { + name = "name" + values = ["All .* Services In Oracle Services Network"] + regex = true + } +} + +data "oci_database_autonomous_database" "byo_adb" { + for_each = var.byo_db_type == "ADB-S" ? { byo = true } : {} + autonomous_database_id = var.byo_adb_ocid +} + +data "oci_core_subnet" "byo_vcn_private" { + count = var.byo_vcn_ocid != "" ? 1 : 0 + subnet_id = var.byo_private_subnet_ocid +} \ No newline at end of file diff --git a/opentofu/examples/README.md b/opentofu/examples/README.md new file mode 100644 index 000000000..358e374aa --- /dev/null +++ b/opentofu/examples/README.md @@ -0,0 +1,76 @@ +# OpenTofu Example Variable Files + +This directory contains example `.tfvars` files for different deployment scenarios. + +## Quick Start + +```bash +# Load credentials from ~/.oci/config and run all tests +cd /path/to/terraform/ +./examples/manual-test.sh +``` + +The test script automatically loads credentials from `~/.oci/config`, sets compartment to your tenancy root, and runs `tofu plan` on all testable examples. + +## Example Scenarios + +| File | Description | Database | +|------|-------------|----------| +| `k8s-new-adb.tfvars` | Kubernetes deployment with new Autonomous Database | New ADB | +| `k8s-byo-other-db.tfvars` | Kubernetes deployment with bring-your-own database | BYO OTHER | + +### k8s-new-adb.tfvars + +Creates a new OKE cluster with a new Autonomous Database: +- Private endpoint ADB networking +- E4.Flex compute shape with 2 OCPUs +- Flexible load balancer (10-100 Mbps) + +### k8s-byo-other-db.tfvars + +Creates a new OKE cluster using an existing external database: +- Requires `byo_odb_host`, `byo_odb_port`, `byo_odb_service`, and `byo_db_password` +- A1.Flex (ARM) compute shape with 4 OCPUs +- Flexible load balancer (10-50 Mbps) + +## Manual Setup (Without Helper Script) + +If you prefer not to use the helper script: + +1. Copy an example: + ```bash + cd /path/to/terraform/ + cp examples/k8s-new-adb.tfvars terraform.tfvars + ``` + +2. Edit `terraform.tfvars` and add the authentication variables: + ```hcl + tenancy_ocid = "ocid1.tenancy.oc1..aaa..." + compartment_ocid = "ocid1.compartment.oc1..aaa..." + user_ocid = "ocid1.user.oc1..aaa..." + fingerprint = "xx:xx:xx:..." + private_key_path = "~/.oci/oci_api_key.pem" + region = "us-phoenix-1" + ``` + +3. Run OpenTofu: + ```bash + tofu init + tofu plan + tofu apply + ``` + +## OCI Config File Format + +The helper script `manual-test.sh` reads from `~/.oci/config` which should look like: + +```ini +[DEFAULT] +user=ocid1.user.oc1..aaa... +tenancy=ocid1.tenancy.oc1..aaa... +region=us-phoenix-1 +fingerprint=xx:xx:xx:... +key_file=~/.oci/oci_api_key.pem +``` + +If you don't have this file, run: `oci setup config` diff --git a/opentofu/examples/k8s-byo-other-db.tfvars b/opentofu/examples/k8s-byo-other-db.tfvars new file mode 100644 index 000000000..81cc8990c --- /dev/null +++ b/opentofu/examples/k8s-byo-other-db.tfvars @@ -0,0 +1,21 @@ +# Example: Kubernetes with BYO Other Database (non-ADB) + +# Run: ./examples/manual-test.sh + +# Deployment Configuration +label_prefix = "CITEST" + +# BYO Other Database +byo_db_type = "OTHER" +byo_db_password = "FakePassword123!NotReal" +byo_odb_host = "fake-db-host.example.com" +byo_odb_port = 1521 +byo_odb_service = "FAKEPDB.example.com" + +# Compute +compute_cpu_shape = "VM.Standard.A1.Flex" +compute_cpu_ocpu = 4 + +# Load Balancer +lb_min_shape = 10 +lb_max_shape = 50 diff --git a/opentofu/examples/k8s-new-adb.tfvars b/opentofu/examples/k8s-new-adb.tfvars new file mode 100644 index 000000000..1e309e8cc --- /dev/null +++ b/opentofu/examples/k8s-new-adb.tfvars @@ -0,0 +1,22 @@ +# Example: Kubernetes deployment with new Autonomous Database + +# Run: ./examples/manual-test.sh + +# Deployment Configuration +label_prefix = "CITEST" + +# New Autonomous Database +adb_ecpu_core_count = 2 +adb_data_storage_size_in_gb = 20 +adb_is_cpu_auto_scaling_enabled = true +adb_license_model = "LICENSE_INCLUDED" +adb_networking = "PRIVATE_ENDPOINT_ACCESS" +adb_whitelist_cidrs = "" + +# Compute +compute_cpu_shape = "VM.Standard.E4.Flex" +compute_cpu_ocpu = 2 + +# Load Balancer +lb_min_shape = 10 +lb_max_shape = 100 diff --git a/opentofu/examples/manual-test.sh b/opentofu/examples/manual-test.sh new file mode 100755 index 000000000..ea423ac17 --- /dev/null +++ b/opentofu/examples/manual-test.sh @@ -0,0 +1,129 @@ +#!/bin/bash +# Test script to validate OpenTofu infrastructure with real OCI credentials +# Usage: examples/test.sh [profile_name] + +set -euo pipefail + +# Navigate to opentofu root +cd "$(dirname "$(dirname "$0")")" || exit 1 + +# Check for tofu or terraform in PATH +if command -v tofu &> /dev/null; then + TF_CMD="tofu" +elif command -v terraform &> /dev/null; then + TF_CMD="terraform" +else + echo "Error: Neither 'tofu' nor 'terraform' found in PATH" >&2 + exit 1 +fi + +echo "Using command: $TF_CMD" +echo "" + +PROFILE="${1:-DEFAULT}" +OCI_CONFIG="${OCI_CONFIG_FILE:-$HOME/.oci/config}" + +[ -f "$OCI_CONFIG" ] || { echo "Error: OCI config not found at $OCI_CONFIG" >&2; exit 1; } + +# Parse OCI config file +SECTION_FOUND=false +while IFS='=' read -r key value; do + key=$(echo "$key" | xargs) + value=$(echo "$value" | xargs) + + # Check for section header + if [ "${key#\[}" != "$key" ]; then + [ "$(echo "$key" | tr -d '[]')" = "$PROFILE" ] && SECTION_FOUND=true || SECTION_FOUND=false + continue + fi + + # Extract credentials from matching section + [ "$SECTION_FOUND" = "true" ] || continue + case "$key" in + user) export TF_VAR_user_ocid="$value" ;; + tenancy) export TF_VAR_tenancy_ocid="$value" ;; + region) export TF_VAR_region="$value" ;; + fingerprint) export TF_VAR_fingerprint="$value" ;; + key_file) export TF_VAR_private_key_path="$value" ;; + esac +done < "$OCI_CONFIG" + +# Verify credentials loaded +[ -n "${TF_VAR_user_ocid:-}" ] && [ -n "${TF_VAR_tenancy_ocid:-}" ] && [ -n "${TF_VAR_region:-}" ] || \ + { echo "Error: Failed to load credentials from profile [$PROFILE]" >&2; exit 1; } + +export TF_VAR_compartment_ocid="$TF_VAR_tenancy_ocid" + +echo "✅ OCI credentials loaded (Profile: $PROFILE, Region: $TF_VAR_region)" +echo "" + +# Pre-flight checks: format and validate +echo "Running pre-flight checks..." +echo "" + +echo "1. Formatting code with '$TF_CMD fmt --recursive'..." +if $TF_CMD fmt --recursive > /dev/null; then + echo " ✅ Format check passed" +else + echo " ❌ Format check failed" + exit 1 +fi + +echo "2. Validating configuration with '$TF_CMD validate'..." +if $TF_CMD validate > /dev/null 2>&1; then + echo " ✅ Validation passed" +else + echo " ❌ Validation failed" + echo "" + echo "Re-run: $TF_CMD validate" + exit 1 +fi + +echo "" + +# Check for existing deployed resources +if [ -f "terraform.tfstate" ] && [ -s "terraform.tfstate" ]; then + echo "Checking for deployed resources..." + + # Use terraform state list to check if there are any managed resources + if resource_count=$($TF_CMD state list 2>/dev/null | wc -l | xargs); then + if [ "$resource_count" -gt 0 ]; then + echo "❌ ERROR: Found $resource_count deployed resource(s) in the state" + echo "" + echo "This test script requires a clean state to test multiple configurations." + echo "Please destroy existing resources first:" + echo "" + echo " $TF_CMD destroy -auto-approve" + echo "" + exit 1 + else + echo " ✅ State file exists but no resources are deployed (likely from previous destroy)" + fi + fi +fi + +# Run tests +EXAMPLES=( + examples/k8s-new-adb.tfvars + examples/k8s-byo-other-db.tfvars +) + +for example in "${EXAMPLES[@]}"; do + echo "Testing $example..." + + if plan_output=$($TF_CMD plan -var-file="$example" 2>&1); then + plan_summary=$(echo "$plan_output" | grep -i "plan:" | tail -1 | sed 's/^[[:space:]]*//') + echo " ✅ ${plan_summary:-PASSED}" + else + echo " ❌ FAILED" + echo "" + echo "Error output:" + echo "$plan_output" | tail -20 + echo "" + echo "Re-run: $TF_CMD plan -var-file=$example" + exit 1 + fi +done + +echo "" +echo "✅ All tests passed" diff --git a/opentofu/locals.tf b/opentofu/locals.tf new file mode 100644 index 000000000..c2fdd2f54 --- /dev/null +++ b/opentofu/locals.tf @@ -0,0 +1,82 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +// Housekeeping +locals { + compartment_ocid = var.compartment_ocid != "" ? var.compartment_ocid : var.tenancy_ocid + label_prefix = var.label_prefix != "" ? substr(lower(var.label_prefix), 0, 12) : substr(lower(random_pet.label.id), 0, 12) +} + + +// Availability Domains +locals { + ads = data.oci_identity_availability_domains.all.availability_domains + + // Map of parsed availability domain numbers to tenancy-specific names + // Used by resources with AD placement for generic selection + ad_numbers_to_names = local.ads != null ? { + for ad in local.ads : parseint(substr(ad.name, -1, -1), 10) => ad.name + } : { -1 : "" } # Fallback handles failure when unavailable but not required + + // List of availability domain numbers in region + // Used to intersect desired AD lists against presence in region + ad_numbers = local.ads != null ? sort(keys(local.ad_numbers_to_names)) : [] + + availability_domains = compact([for ad_number in tolist(local.ad_numbers) : + lookup(local.ad_numbers_to_names, ad_number, null) + ]) +} + +// Network +locals { + vcn_ocid = var.byo_vcn_ocid == "" ? module.network["managed"].vcn_ocid : var.byo_vcn_ocid + public_subnet_ocid = var.byo_vcn_ocid == "" ? module.network["managed"].public_subnet_ocid : var.byo_public_subnet_ocid + private_subnet_ocid = var.byo_vcn_ocid == "" ? module.network["managed"].private_subnet_ocid : var.byo_private_subnet_ocid + private_subnet_cidr_block = var.byo_vcn_ocid == "" ? module.network["managed"].private_subnet_cidr_block : data.oci_core_subnet.byo_vcn_private[0].cidr_block +} + +// Database +locals { + db_ocid = ( + var.byo_db_type == "" ? oci_database_autonomous_database.default_adb["managed"].id : + var.byo_db_type == "ADB-S" ? data.oci_database_autonomous_database.byo_adb["byo"].id : + "N/A" + ) + + db_name = ( + var.byo_db_type == "" ? upper(format("%sDB", local.label_prefix)) : + var.byo_db_type == "ADB-S" ? data.oci_database_autonomous_database.byo_adb["byo"].db_name : + var.byo_odb_service + ) + + db_conn = { + db_type = var.byo_db_type == "OTHER" ? "OTHER" : "ADB" + username = var.byo_db_type == "OTHER" ? "SYSTEM" : "ADMIN" + password = ( + var.byo_db_type == "" ? format("%s%s", random_password.adb_char[0].result, random_password.adb_rest[0].result) : + var.byo_db_password + ) + service = ( + var.byo_db_type == "OTHER" ? format("%s:%s/%s", var.byo_odb_host, var.byo_odb_port, var.byo_odb_service) : + format("%s_TP", local.db_name) + ) + } + + adb_whitelist_cidrs = ( + var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? null : + concat( + var.adb_whitelist_cidrs != "" ? split(",", replace(var.adb_whitelist_cidrs, "/\\s+/", "")) : [], + [local.vcn_ocid] + ) + ) + adb_nsg = var.byo_vcn_ocid == "" && var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? [oci_core_network_security_group.adb[0].id] : [] + adb_subnet_id = var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? local.private_subnet_ocid : "" + adb_private_endpoint_label = var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? local.label_prefix : "" +} + +// Load Balancer Ports +locals { + lb_http_port = 80 + lb_https_port = 443 +} \ No newline at end of file diff --git a/opentofu/main.tf b/opentofu/main.tf new file mode 100644 index 000000000..26cff76bc --- /dev/null +++ b/opentofu/main.tf @@ -0,0 +1,77 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +// random +resource "random_pet" "label" { + length = 1 +} + +resource "random_password" "adb_char" { + count = var.byo_db_password == "" ? 1 : 0 + length = 2 + special = false + numeric = false +} + +resource "random_password" "adb_rest" { + count = var.byo_db_password == "" ? 1 : 0 + length = 14 + min_numeric = 2 + min_lower = 2 + min_upper = 2 + min_special = 2 + override_special = "!$%^*-_" + keepers = { + uuid = "uuid()" + } +} + +// Load Balancer +resource "oci_load_balancer_load_balancer" "lb" { + compartment_id = local.compartment_ocid + display_name = format("%s-lb", local.label_prefix) + shape = "flexible" + is_private = false + shape_details { + minimum_bandwidth_in_mbps = var.lb_min_shape + maximum_bandwidth_in_mbps = var.lb_max_shape + } + subnet_ids = [ + local.public_subnet_ocid + ] + network_security_group_ids = [ + oci_core_network_security_group.lb.id, + ] +} + +// Autonomous Database +resource "oci_database_autonomous_database" "default_adb" { + for_each = var.byo_db_type == "" ? { managed = true } : {} + admin_password = local.db_conn.password + autonomous_maintenance_schedule_type = "REGULAR" + character_set = "AL32UTF8" + compartment_id = local.compartment_ocid + compute_count = var.adb_ecpu_core_count + compute_model = "ECPU" + data_storage_size_in_gb = var.adb_data_storage_size_in_gb + database_edition = var.adb_license_model == "BRING_YOUR_OWN_LICENSE" ? var.adb_edition : null + db_name = local.db_name + db_version = var.adb_version + db_workload = "OLTP" + display_name = local.db_name + is_free_tier = false + is_auto_scaling_enabled = var.adb_is_cpu_auto_scaling_enabled + is_auto_scaling_for_storage_enabled = var.adb_is_storage_auto_scaling_enabled + is_dedicated = false + license_model = var.adb_license_model + is_mtls_connection_required = true + nsg_ids = local.adb_nsg + whitelisted_ips = local.adb_whitelist_cidrs + private_endpoint_label = local.adb_private_endpoint_label + subnet_id = local.adb_subnet_id + lifecycle { + // cannot change from PRIVATE_ENDPOINT_ACCESS to SECURE_ACCESS + ignore_changes = [whitelisted_ips, private_endpoint_label, subnet_id] + } +} \ No newline at end of file diff --git a/opentofu/module_kubernetes.tf b/opentofu/module_kubernetes.tf new file mode 100644 index 000000000..1876a470d --- /dev/null +++ b/opentofu/module_kubernetes.tf @@ -0,0 +1,138 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +variable "k8s_run_cfgmgt" { + description = "Run Configuration Management Scripts?" + type = bool + default = true +} + +variable "k8s_use_cluster_addons" { + description = "Install Cluster Add-Ons?" + type = bool + default = true +} + +variable "k8s_use_local_charts" { + description = "Use local Helm charts from ../helm/infra-charts instead of the remote Helm repository." + type = bool + default = false +} + +//Deploy basic Kafka Cluster +variable "k8s_deploy_kafka" { + description = "Deploy a cluster using the Strimzi Operator." + type = bool + default = false +} + +variable "k8s_deploy_coherence" { + description = "Deploy a cluster using the Coherence Operator." + type = bool + default = false +} + +variable "k8s_api_is_public" { + description = "Make K8s API endpoint accessible from external networks via NSG rules. If false, only ORM deployments can apply Helm automatically." + type = bool + default = true +} + +variable "k8s_api_endpoint_allowed_cidrs" { + description = "Comma separated string of CIDR blocks from which the API Endpoint can be accessed." + type = string + default = "0.0.0.0/0" + validation { + condition = can(regex("$|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$", var.k8s_api_endpoint_allowed_cidrs)) + error_message = "Must be a comma separated string of valid CIDRs." + } +} + +variable "k8s_cpu_node_pool_size" { + description = "Number of Workers in the CPU Node Pool." + type = number + default = 3 +} + +variable "k8s_node_pool_gpu_deploy" { + description = "Deploy a GPU Node Pool?" + type = bool + default = false +} + +variable "k8s_gpu_node_pool_size" { + description = "Number of Workers in the GPU Node Pool." + type = number + default = 1 +} + + + +variable "k8s_byo_ocir_url" { + description = "BYO Oracle Cluster Image Repository URL" + type = string + default = "" +} + +# Validation: Configuration management requires either public API endpoint or ORM installation +resource "terraform_data" "k8s_cfgmgt_validation" { + count = 1 + lifecycle { + precondition { + condition = !var.k8s_run_cfgmgt || var.k8s_api_is_public || var.current_user_ocid != "" + error_message = "Cannot run configuration management with a private K8s API endpoint from local Terraform. Set k8s_api_is_public=true, k8s_run_cfgmgt=false, or use ORM." + } + } +} + +module "kubernetes" { + for_each = { managed = true } + source = "./modules/kubernetes" + label_prefix = local.label_prefix + tenancy_id = var.tenancy_ocid + compartment_id = local.compartment_ocid + vcn_id = local.vcn_ocid + oci_services = data.oci_core_services.core_services.services.0 + region = var.region + lb = { + id = oci_load_balancer_load_balancer.lb.id + compartment_id = oci_load_balancer_load_balancer.lb.compartment_id + ip_address_details = oci_load_balancer_load_balancer.lb.ip_address_details + shape_details = oci_load_balancer_load_balancer.lb.shape_details + } + db_ocid = local.db_ocid + db_name = local.db_name + db_conn = local.db_conn + api_is_public = var.k8s_api_is_public + node_pool_gpu_deploy = var.k8s_node_pool_gpu_deploy + gpu_node_pool_size = var.k8s_gpu_node_pool_size + kubernetes_version = local.k8s_version + cpu_node_pool_size = var.k8s_cpu_node_pool_size + api_endpoint_allowed_cidrs = var.k8s_api_endpoint_allowed_cidrs + use_cluster_addons = var.k8s_use_cluster_addons + use_local_charts = var.k8s_use_local_charts + run_cfgmgt = var.k8s_run_cfgmgt + compute_os_ver = local.compute_os_ver + compute_cpu_ocpu = var.compute_cpu_ocpu + compute_gpu_shape = var.compute_gpu_shape + compute_cpu_shape = var.compute_cpu_shape + availability_domains = local.availability_domains + public_subnet_id = local.public_subnet_ocid + private_subnet_id = local.private_subnet_ocid + lb_nsg_id = oci_core_network_security_group.lb.id + orm_install = var.current_user_ocid != "" + byo_ocir_url = var.k8s_byo_ocir_url + optimizer_version = "Stable" + deploy_optimizer = var.deploy_optimizer + deploy_kafka = var.k8s_deploy_kafka + deploy_coherence = var.k8s_deploy_coherence + providers = { + oci.home_region = oci.home_region + } +} + +output "kubeconfig_cmd" { + description = "Command to generate kubeconfig file" + value = module.kubernetes["managed"].kubeconfig_cmd +} diff --git a/opentofu/module_network.tf b/opentofu/module_network.tf new file mode 100644 index 000000000..821353d0d --- /dev/null +++ b/opentofu/module_network.tf @@ -0,0 +1,30 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +variable "byo_vcn_ocid" { + description = "Bring Your Own Virtual Cloud Network - VCN OCID" + type = string + default = "" +} + +variable "byo_public_subnet_ocid" { + description = "Bring Your Own Virtual Cloud Network - Pubic Subnet OCID" + type = string + default = "" +} + +variable "byo_private_subnet_ocid" { + description = "Bring Your Own Virtual Cloud Network - Private Subnet OCID" + type = string + default = "" +} + +module "network" { + for_each = var.byo_vcn_ocid == "" ? { managed = true } : {} + source = "./modules/network" + compartment_id = local.compartment_ocid + label_prefix = local.label_prefix + oci_services = data.oci_core_services.core_services.services.0 + +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/cfgmgt.tf b/opentofu/modules/kubernetes/cfgmgt.tf new file mode 100644 index 000000000..7a037a21a --- /dev/null +++ b/opentofu/modules/kubernetes/cfgmgt.tf @@ -0,0 +1,74 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +locals { + k8s_manifest = templatefile("${path.module}/templates/k8s-manifest.yaml", { + label = var.label_prefix + repository_host = local.repository_host + repository_base = local.repository_base + compartment_ocid = var.lb.compartment_id + lb_ocid = var.lb.id + lb_subnet_ocid = var.public_subnet_id + lb_ip_ocid = var.lb.ip_address_details[0].ip_address + lb_nsgs = var.lb_nsg_id + lb_min_shape = var.lb.shape_details[0].minimum_bandwidth_in_mbps + lb_max_shape = var.lb.shape_details[0].maximum_bandwidth_in_mbps + db_name = local.db_name + db_username = var.db_conn.username + db_password = var.db_conn.password + db_service = var.db_conn.service + signoz_secret = random_password.signoz_secret.result + clickhouse_secret = random_password.clickhouse_secret.result + deploy_buildkit = var.byo_ocir_url == "" + use_cluster_addons = var.use_cluster_addons + deploy_buildkit = var.byo_ocir_url == "" + deploy_optimizer = var.deploy_optimizer + optimizer_version = var.optimizer_version + optimizer_api_key = random_string.optimizer_api_key.result + ca_crt = base64encode(tls_self_signed_cert.acme_ca.cert_pem) + tls_crt = base64encode(tls_locally_signed_cert.example_com.cert_pem) + tls_key = base64encode(tls_private_key.example_com.private_key_pem) + }) +} + +resource "local_sensitive_file" "kubeconfig" { + content = data.oci_containerengine_cluster_kube_config.default_cluster_kube_config.content + filename = "${path.root}/cfgmgt/stage/kubeconfig" + file_permission = 0600 +} + +resource "local_sensitive_file" "k8s_manifest" { + content = local.k8s_manifest + filename = "${path.root}/cfgmgt/stage/k8s-manifest.yaml" + file_permission = 0600 +} + +resource "null_resource" "apply" { + count = var.run_cfgmgt ? 1 : 0 + triggers = { + always_run = "${timestamp()}" + } + + lifecycle { + precondition { + condition = local.can_apply_cfgmgt + error_message = local.cfgmgt_error_message + } + } + + provisioner "local-exec" { + command = < r.key } + image_region = lookup(local.region_map, var.region) + repository_host = lower(format("%s.ocir.io", local.image_region)) + repository_base = var.byo_ocir_url != "" ? var.byo_ocir_url : lower(format("%s/%s/%s", local.repository_host, data.oci_objectstorage_namespace.objectstorage_namespace.namespace, var.label_prefix)) +} + +// Cluster Details +locals { + cluster_name = format("%s-k8s", var.label_prefix) + + // Compute Images + compute_cpu_arch = ( + can(regex("^VM\\.Standard\\.A[0-9]+\\.Flex$", var.compute_cpu_shape)) + ? "aarch64" : "x86_64" + ) + + oke_worker_images = try({ + for k, v in data.oci_containerengine_node_pool_option.images.sources : v.image_id => merge( + try(element(regexall("OKE-(?P[0-9\\.]+)-(?P[0-9]+)", v.source_name), 0), { version = "none" }), + { + arch = length(regexall("aarch64", v.source_name)) > 0 ? "aarch64" : "x86_64" + image_type = length(regexall("OKE", v.source_name)) > 0 ? "oke" : "platform" + is_gpu = length(regexall("GPU", v.source_name)) > 0 + os = trimspace(replace(element(regexall("^[a-zA-Z-]+", v.source_name), 0), "-", " ")) + os_version = element(regexall("[0-9\\.]+", v.source_name), 0) + source_name = v.source_name + }, + ) + }, {}) + oke_worker_cpu_image = length(local.oke_worker_images) > 0 ? [ + for key, value in local.oke_worker_images : key if + value["image_type"] == "oke" && + value["arch"] == local.compute_cpu_arch && + value["os_version"] == var.compute_os_ver && + value["version"] == var.kubernetes_version && + !value["is_gpu"] + ][0] : null + //GPU Data + oke_worker_gpu_image = length(local.oke_worker_images) > 0 ? [ + for key, value in local.oke_worker_images : key if + value["image_type"] == "oke" && + value["arch"] == "x86_64" && + value["os_version"] == var.compute_os_ver && + value["version"] == var.kubernetes_version && + value["is_gpu"] + ][0] : null + + // ADs + gpu_availability_domains = [ + for limit in data.oci_limits_limit_values.gpu_ad_limits.limit_values : limit.availability_domain + if tonumber(limit.value) > 0 + ] +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/main.tf b/opentofu/modules/kubernetes/main.tf new file mode 100644 index 000000000..6ac2bae6f --- /dev/null +++ b/opentofu/modules/kubernetes/main.tf @@ -0,0 +1,260 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +resource "random_password" "signoz_secret" { + length = 16 + special = true + upper = true + lower = true + numeric = true + min_upper = 1 + min_lower = 1 + min_numeric = 1 + min_special = 1 + override_special = "!@#$%^&*()-_=+[]{}|:,.<>?" +} + +resource "random_password" "clickhouse_secret" { + length = 16 + special = true + upper = true + lower = true + numeric = true + min_upper = 1 + min_lower = 1 + min_numeric = 1 + min_special = 1 + override_special = "!@#$%^&*()-_=+[]{}|:,.<>?" +} + +resource "random_string" "optimizer_api_key" { + length = 32 + special = true + upper = true + lower = true + numeric = true + override_special = "!@#$%^&*()-_=+[]{}|:,.<>?" +} + +// oci_artifacts_container_repository +// OCIR +resource "oci_artifacts_container_repository" "optimizer_repositories" { + for_each = var.byo_ocir_url != "" ? toset([]) : toset(local.optimizer_container_repositories) + compartment_id = var.compartment_id + display_name = lower(format("%s/%s", var.label_prefix, each.value)) + is_immutable = false + is_public = false +} + +// Oracle Resource Manager +resource "oci_resourcemanager_private_endpoint" "orm_pe" { + count = local.create_orm_pe ? 1 : 0 + compartment_id = var.compartment_id + vcn_id = var.vcn_id + display_name = format("%s-orm-pe", var.label_prefix) + description = "Private Endpoint for Resource Manager to OKE" + subnet_id = var.private_subnet_id + nsg_id_list = [ + oci_core_network_security_group.k8s_workers.id, + oci_core_network_security_group.k8s_api_endpoint.id + ] +} + +// Cluster +resource "oci_containerengine_cluster" "default_cluster" { + compartment_id = var.compartment_id + kubernetes_version = format("v%s", var.kubernetes_version) + name = local.cluster_name + vcn_id = var.vcn_id + type = "ENHANCED_CLUSTER" + + cluster_pod_network_options { + cni_type = "FLANNEL_OVERLAY" + } + + endpoint_config { + // Architecture Decision: Keep endpoint on public subnet with public IP to avoid resource destruction + // when toggling public/private access. Access control is managed via NSG rules instead: + // - When api_is_public=true: NSG allows ingress from specified CIDRs (see nsgs.tf) + // - When api_is_public=false: NSG only allows internal VCN traffic (effectively private) + // This approach prevents cluster recreation when changing access patterns. + is_public_ip_enabled = true + nsg_ids = [oci_core_network_security_group.k8s_api_endpoint.id] + subnet_id = var.public_subnet_id + } + + image_policy_config { + is_policy_enabled = false + } + options { + add_ons { + is_kubernetes_dashboard_enabled = false + is_tiller_enabled = false + } + + admission_controller_options { + is_pod_security_policy_enabled = "false" + } + persistent_volume_config { + freeform_tags = { + "clusterName" = local.cluster_name + } + } + service_lb_config { + freeform_tags = { + "clusterName" = local.cluster_name + } + } + service_lb_subnet_ids = [var.public_subnet_id] + } + freeform_tags = { + "clusterName" = local.cluster_name + } + lifecycle { + ignore_changes = [defined_tags, freeform_tags] + } +} + +resource "oci_containerengine_addon" "oraoper_addon" { + count = var.use_cluster_addons ? 1 : 0 + addon_name = "OracleDatabaseOperator" + cluster_id = oci_containerengine_cluster.default_cluster.id + remove_addon_resources_on_delete = true + lifecycle { + create_before_destroy = false + } +} + +resource "oci_containerengine_addon" "certmgr_addon" { + count = var.use_cluster_addons ? 1 : 0 + addon_name = "CertManager" + cluster_id = oci_containerengine_cluster.default_cluster.id + remove_addon_resources_on_delete = true + lifecycle { + create_before_destroy = false + } +} + +resource "oci_containerengine_addon" "ingress_addon" { + count = var.use_cluster_addons ? 1 : 0 + addon_name = "NativeIngressController" + cluster_id = oci_containerengine_cluster.default_cluster.id + remove_addon_resources_on_delete = true + configurations { + key = "compartmentId" + value = var.compartment_id + } + configurations { + key = "loadBalancerSubnetId" + value = var.public_subnet_id + } + configurations { + key = "authType" + value = "workloadIdentity" + } + lifecycle { + create_before_destroy = false + } +} + +resource "oci_containerengine_node_pool" "cpu_node_pool_details" { + cluster_id = oci_containerengine_cluster.default_cluster.id + compartment_id = var.compartment_id + kubernetes_version = format("v%s", var.kubernetes_version) + name = format("%s-np-cpu", var.label_prefix) + initial_node_labels { + key = "name" + value = local.cluster_name + } + node_config_details { + node_pool_pod_network_option_details { + cni_type = "FLANNEL_OVERLAY" + } + dynamic "placement_configs" { + for_each = var.availability_domains + iterator = ad + content { + availability_domain = ad.value + subnet_id = var.private_subnet_id + } + } + size = var.cpu_node_pool_size + nsg_ids = [oci_core_network_security_group.k8s_workers.id] + } + node_eviction_node_pool_settings { + eviction_grace_duration = "PT5M" + is_force_delete_after_grace_duration = true + } + node_pool_cycling_details { + is_node_cycling_enabled = true + maximum_surge = "25%" + maximum_unavailable = "25%" + } + node_shape = var.compute_cpu_shape + node_shape_config { + memory_in_gbs = var.compute_cpu_ocpu * 16 + ocpus = var.compute_cpu_ocpu + } + node_source_details { + image_id = local.oke_worker_cpu_image + source_type = "IMAGE" + boot_volume_size_in_gbs = 100 + } + node_metadata = { + user_data = data.cloudinit_config.workers.rendered + areLegacyImdsEndpointsDisabled = "true" + } + lifecycle { + ignore_changes = [defined_tags, freeform_tags, node_config_details[0].size] + } +} + +resource "oci_containerengine_node_pool" "gpu_node_pool_details" { + count = var.node_pool_gpu_deploy ? 1 : 0 + cluster_id = oci_containerengine_cluster.default_cluster.id + compartment_id = var.compartment_id + kubernetes_version = format("v%s", var.kubernetes_version) + name = format("%s-np-gpu", var.label_prefix) + initial_node_labels { + key = "name" + value = local.cluster_name + } + node_config_details { + node_pool_pod_network_option_details { + cni_type = "FLANNEL_OVERLAY" + } + dynamic "placement_configs" { + for_each = local.gpu_availability_domains + iterator = ad + content { + availability_domain = ad.value + subnet_id = var.private_subnet_id + } + } + size = var.gpu_node_pool_size + nsg_ids = [oci_core_network_security_group.k8s_workers.id] + } + node_eviction_node_pool_settings { + eviction_grace_duration = "PT5M" + is_force_delete_after_grace_duration = true + } + node_pool_cycling_details { + is_node_cycling_enabled = true + maximum_surge = "25%" + maximum_unavailable = "25%" + } + node_shape = var.compute_gpu_shape + node_source_details { + image_id = local.oke_worker_gpu_image + source_type = "IMAGE" + boot_volume_size_in_gbs = 100 + } + node_metadata = { + user_data = data.cloudinit_config.workers.rendered + areLegacyImdsEndpointsDisabled = "true" + } + lifecycle { + ignore_changes = [defined_tags, freeform_tags, node_config_details[0].size] + } +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/nsgs.tf b/opentofu/modules/kubernetes/nsgs.tf new file mode 100644 index 000000000..5ed964a01 --- /dev/null +++ b/opentofu/modules/kubernetes/nsgs.tf @@ -0,0 +1,171 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +locals { + api_endpoint_allowed_cidrs = split(",", replace(var.api_endpoint_allowed_cidrs, "/\\s+/", "")) + api_endpoint_custom_rules = var.api_is_public ? { + for allowed_cidr in local.api_endpoint_allowed_cidrs : + "Allow custom ingress to kube-apiserver from ${allowed_cidr}" => { + protocol = 6, port = 6443, source = allowed_cidr, source_type = "CIDR_BLOCK" + } + } : {} +} + +resource "oci_core_network_security_group" "k8s_api_endpoint" { + compartment_id = var.compartment_id + vcn_id = var.vcn_id + display_name = format("%s-k8s-api-endpoint", var.label_prefix) + lifecycle { + ignore_changes = [defined_tags, freeform_tags] + } +} + +resource "oci_core_network_security_group" "k8s_workers" { + compartment_id = var.compartment_id + vcn_id = var.vcn_id + display_name = format("%s-k8s-workers", var.label_prefix) + lifecycle { + ignore_changes = [defined_tags, freeform_tags] + } +} + +######################################################################### +# Static NSGs - Mess with these at your peril +######################################################################### +locals { + api_endpoint_default_rules = { + "K8s API Endpoint from Workers." : { + protocol = 6, port = 6443, + source = data.oci_core_subnet.private.cidr_block, source_type = "CIDR_BLOCK" + }, + "Control Plane from Workers." : { + protocol = 6, port = 12250, + source = data.oci_core_subnet.private.cidr_block, source_type = "CIDR_BLOCK" + }, + "K8s API Endpoint Path Discovery - Ingress." : { + protocol = 1, source = data.oci_core_subnet.private.cidr_block, source_type = "CIDR_BLOCK" + }, + "Control Plane to K8s Services." : { + protocol = 6, port = 443, + destination = var.oci_services.cidr_block, destination_type = "SERVICE_CIDR_BLOCK" + }, + "K8s API Endpoint to Workers" : { + protocol = 6, port = -1 + destination = data.oci_core_subnet.private.cidr_block, destination_type = "CIDR_BLOCK" + }, + "K8s API Endpoint Path Discovery - Egress." : { + protocol = 1, destination = data.oci_core_subnet.private.cidr_block, destination_type = "CIDR_BLOCK" + }, + } + + workers_default_rules = { + "Workers from Workers." : { + protocol = "all", port = -1, + source = data.oci_core_subnet.private.cidr_block, source_type = "CIDR_BLOCK" + }, + "Workers from Load Balancer (Health Checks)." : { + protocol = 6, port = 10256, + source = data.oci_core_subnet.public.cidr_block, source_type = "CIDR_BLOCK" + }, + "Workers from Load Balancer." : { + protocol = 6, port_min = 30000, port_max = 32767, + source = data.oci_core_subnet.public.cidr_block, source_type = "CIDR_BLOCK" + }, + "Workers from Control Plane." : { + protocol = 6, port = -1, + source = data.oci_core_subnet.public.cidr_block, source_type = "CIDR_BLOCK" + }, + "Workers Path Discovery - Ingress." : { + protocol = 1, source = one(data.oci_core_vcn.vcn.cidr_blocks), source_type = "CIDR_BLOCK" + }, + "Workers to Workers." : { + protocol = "all", port = -1, + destination = data.oci_core_subnet.private.cidr_block, destination_type = "CIDR_BLOCK" + }, + "Workers to K8s API Endpoint." : { + protocol = 6, port = 6443, + destination = data.oci_core_subnet.public.cidr_block, destination_type = "CIDR_BLOCK" + }, + "Workers to Control Plane." : { + protocol = 6, port = 12250, + destination = data.oci_core_subnet.public.cidr_block, destination_type = "CIDR_BLOCK" + }, + "Workers to K8s Services." : { + protocol = 6, port = -1, port_min = 443, port_max = 443, + destination = var.oci_services.cidr_block, destination_type = "SERVICE_CIDR_BLOCK" + }, + "Workers to the Internet." : { + protocol = 6, port = -1 + destination = "0.0.0.0/0", destination_type = "CIDR_BLOCK" + }, + "Workers Path Discovery - Egress." : { + protocol = 1, destination = "0.0.0.0/0", destination_type = "CIDR_BLOCK" + }, + } +} +######################################################################### +# Implementation +######################################################################### +locals { + # Dynamic map of all NSG rules for enabled NSGs + all_rules = { for x, y in merge( + { for k, v in local.api_endpoint_custom_rules : k => merge(v, { "nsg_id" = oci_core_network_security_group.k8s_api_endpoint.id }) }, + { for k, v in local.api_endpoint_default_rules : k => merge(v, { "nsg_id" = oci_core_network_security_group.k8s_api_endpoint.id }) }, + { for k, v in local.workers_default_rules : k => merge(v, { "nsg_id" = oci_core_network_security_group.k8s_workers.id }) }, + ) : x => merge(y, { + description = x + network_security_group_id = lookup(y, "nsg_id") + direction = contains(keys(y), "source") ? "INGRESS" : "EGRESS" + protocol = lookup(y, "protocol") + source = lookup(y, "source", null) + source_type = lookup(y, "source_type", null) + destination = lookup(y, "destination", null) + destination_type = lookup(y, "destination_type", null) + }) } +} + +resource "oci_core_network_security_group_security_rule" "k8s" { + for_each = local.all_rules + stateless = false + description = each.value.description + destination = each.value.destination + destination_type = each.value.destination_type + direction = each.value.direction + network_security_group_id = each.value.network_security_group_id + protocol = each.value.protocol + source = each.value.source + source_type = each.value.source_type + + dynamic "tcp_options" { + for_each = (tostring(each.value.protocol) == tostring(6) && + tonumber(lookup(each.value, "port", 0)) != -1 ? [each.value] : [] + ) + content { + destination_port_range { + min = tonumber(lookup(tcp_options.value, "port_min", lookup(tcp_options.value, "port", 0))) + max = tonumber(lookup(tcp_options.value, "port_max", lookup(tcp_options.value, "port", 0))) + } + } + } + + dynamic "udp_options" { + for_each = (tostring(each.value.protocol) == tostring(17) && + tonumber(lookup(each.value, "port", 0)) != -1 ? [each.value] : [] + ) + content { + destination_port_range { + min = tonumber(lookup(udp_options.value, "port_min", lookup(udp_options.value, "port", 0))) + max = tonumber(lookup(udp_options.value, "port_max", lookup(udp_options.value, "port", 0))) + } + } + } + + dynamic "icmp_options" { + for_each = tostring(each.value.protocol) == tostring(1) ? [1] : [] + content { + type = 3 + code = 4 + } + } +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/output.tf b/opentofu/modules/kubernetes/output.tf new file mode 100644 index 000000000..9b5c808fa --- /dev/null +++ b/opentofu/modules/kubernetes/output.tf @@ -0,0 +1,18 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +output "kubeconfig_cmd" { + description = "Command to generate kubeconfig file" + value = format( + "oci ce cluster create-kubeconfig --cluster-id %s --region %s --token-version 2.0.0 --kube-endpoint %s --file $HOME/.kube/config --with-auth-context --profile DEFAULT", + oci_containerengine_cluster.default_cluster.id, + var.region, + oci_containerengine_cluster.default_cluster.endpoint_config[0].is_public_ip_enabled ? "PUBLIC_ENDPOINT" : "PRIVATE_ENDPOINT" + ) +} + +output "helm_manual_instructions" { + description = "Instructions for manual Helm deployment (when cfgmgt was skipped)" + value = local.should_show_manual_steps ? local.manual_helm_instructions : null +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/provider.tf b/opentofu/modules/kubernetes/provider.tf new file mode 100644 index 000000000..48b523b89 --- /dev/null +++ b/opentofu/modules/kubernetes/provider.tf @@ -0,0 +1,12 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +terraform { + required_providers { + oci = { + source = "oracle/oci" + configuration_aliases = [oci.home_region] + } + } +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/templates/cloudinit-oke.sh b/opentofu/modules/kubernetes/templates/cloudinit-oke.sh new file mode 100644 index 000000000..7c9207b8f --- /dev/null +++ b/opentofu/modules/kubernetes/templates/cloudinit-oke.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +## https://docs.oracle.com/en-us/iaas/Content/Compute/Tasks/gettingmetadata.htm +oke_init_url='http://169.254.169.254/opc/v2/instance/metadata/oke_init_script' +curl --fail -H "Authorization: Bearer Oracle" -L0 "${oke_init_url}" | base64 --decode >/var/run/oke-init.sh + +# detect architecture +arch=$(uname -m) +if [ "$arch" = "aarch64" ]; then + binary_url="https://github.com/oracle-devrel/oke-credential-provider-for-ocir/releases/latest/download/oke-credential-provider-for-ocir-linux-arm64" +else + binary_url="https://github.com/oracle-devrel/oke-credential-provider-for-ocir/releases/latest/download/oke-credential-provider-for-ocir-linux-amd64" +fi + +# download OCIR Access binaries on the worker node +wget "$binary_url" -O /usr/local/bin/credential-provider-oke +wget https://github.com/oracle-devrel/oke-credential-provider-for-ocir/releases/latest/download/credential-provider-config.yaml -P /etc/kubernetes/ +# add permission to execute +sudo chmod 755 /usr/local/bin/credential-provider-oke +# configure kubelet with image credential provider +bash /var/run/oke-init.sh --kubelet-extra-args "--image-credential-provider-bin-dir=/usr/local/bin/ --image-credential-provider-config=/etc/kubernetes/credential-provider-config.yaml" \ No newline at end of file diff --git a/opentofu/modules/kubernetes/templates/k8s-manifest.yaml b/opentofu/modules/kubernetes/templates/k8s-manifest.yaml new file mode 100644 index 000000000..e8d33c17b --- /dev/null +++ b/opentofu/modules/kubernetes/templates/k8s-manifest.yaml @@ -0,0 +1,286 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +--- +apiVersion: v1 +kind: Namespace +metadata: + name: "obaas-system" +--- +apiVersion: v1 +kind: Namespace +metadata: + name: ${label} +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${label}-signoz + namespace: ${label} +type: Opaque +stringData: + email: "admin@example.com" + password: "${signoz_secret}" +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${label}-clickhouse + namespace: ${label} +type: Opaque +stringData: + username: "clickhouse_operator" + password: "${clickhouse_secret}" +%{ if deploy_optimizer ~} +--- +apiVersion: v1 +kind: Secret +metadata: + name: ${label}-optimizer-api-key + namespace: ${label} +type: Opaque +stringData: + apiKey: "${optimizer_api_key}" +--- +# Secret containing non-privileged DB User details. +# Used for Optimizer application connectivity to database. +# User is created during cfgmgt init-containter +apiVersion: v1 +kind: Secret +metadata: + name: ${db_name}-optimizer-db-authn + namespace: ${label} +type: Opaque +stringData: + username: AI_OPTIMIZER + password: "${db_password}" + service: ${db_service} +%{ endif } +--- +# Secret containing non-privileged DB User details. +# Used for OBaaS application connectivity to database. +apiVersion: v1 +kind: Secret +metadata: + name: ${db_name}-obaas-db-authn + namespace: ${label} +type: Opaque +stringData: + username: OBAAS_USER + password: "${db_password}" + service: ${db_service} +--- +# Secret containing privileged DB User details. +# Used to create user defined in -db-authn in init-container +apiVersion: v1 +kind: Secret +metadata: + name: ${db_name}-db-priv-authn + namespace: ${label} +type: Opaque +stringData: + username: ${db_username} + password: "${db_password}" + service: ${db_service} +--- +# Secret containing self-signed certificate; used for LB TLS +apiVersion: v1 +kind: Secret +metadata: + name: example-tls-secret + namespace: ${label} +type: kubernetes.io/tls +data: + ca.crt : "${ca_crt}" + tls.crt: "${tls_crt}" + tls.key: "${tls_key}" +%{ if use_cluster_addons ~} +--- +apiVersion: "ingress.oraclecloud.com/v1beta1" +kind: IngressClassParameters +metadata: + name: native-ic-params + namespace: ${label} +spec: + compartmentId: ${compartment_ocid} + subnetId: ${lb_subnet_ocid} + loadBalancerName: "${label}-lb" + reservedPublicAddressId: ${lb_ip_ocid} + isPrivate: false + maxBandwidthMbps: ${lb_max_shape} + minBandwidthMbps: ${lb_min_shape} +--- +apiVersion: networking.k8s.io/v1 +kind: IngressClass +metadata: + name: native-ic + namespace: ${label} + annotations: + ingressclass.kubernetes.io/is-default-class: "true" + oci-native-ingress.oraclecloud.com/network-security-group-ids: ${lb_nsgs} + oci-native-ingress.oraclecloud.com/id: ${lb_ocid} + oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true" +spec: + controller: oci.oraclecloud.com/native-ingress-controller + parameters: + scope: Namespace + namespace: ${label} + apiGroup: ingress.oraclecloud.com + kind: IngressClassParameters + name: native-ic-params +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: oracle-database-operator-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: oracle-database-operator-manager-role +subjects: +- kind: ServiceAccount + name: default + namespace: oracle-database-operator-system +%{ endif } +%{ if deploy_buildkit && deploy_optimizer ~} +--- +# Builds and pushes application images to container registry. +# Uses instance principles. +apiVersion: batch/v1 +kind: Job +metadata: + name: optimizer-buildkit + namespace: ${label} +spec: + ttlSecondsAfterFinished: 300 + template: + spec: + restartPolicy: Never + initContainers: + - name: prepare-source-code + image: docker.io/alpine:latest + command: + - sh + - -c + - | + if [ "${optimizer_version}" = "Experimental" ]; then + echo "Downloading Code from MAIN branch" + wget -qO- https://github.com/oracle/ai-optimizer/archive/refs/heads/main.tar.gz \ + | tar -xz -C /workspace --strip-components=1 ai-optimizer-main/src ai-optimizer-main/pyproject.toml + else + echo "Downloading Code from LATEST release" + wget -qO- https://github.com/oracle/ai-optimizer/releases/latest/download/ai-optimizer-src.tar.gz \ + | tar -xz -C /workspace + fi + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + volumeMounts: + - name: workspace + mountPath: /workspace + - name: init-ocir-login + image: ghcr.io/oracle/oci-cli:latest + command: + - sh + - -c + - | + REPO_PATH=$(echo "${repository_base}" | cut -d'/' -f2-) + + # Fetch separate tokens for each repository + for IMAGE in client server; do + TOKEN_RESPONSE=$(oci raw-request \ + --http-method GET \ + --target-uri \ + "https://${repository_host}/20180419/docker/token?scope=repository:$REPO_PATH/ai-optimizer-$IMAGE:push,pull&service=${repository_host}" 2>&1) + TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.data.token') + echo "{\"auths\":{\"${repository_host}\":{\"auth\":\"$(echo -n "BEARER_TOKEN:$TOKEN" | base64 -w0)\"}}}" > /docker-config/$IMAGE/config.json + chown 1000:1000 /docker-config/$IMAGE/config.json + done + env: + - name: OCI_CLI_AUTH + value: oke_workload_identity + volumeMounts: + - name: docker-auth-client + mountPath: /docker-config/client + - name: docker-auth-server + mountPath: /docker-config/server + containers: + - name: buildkit-client + image: docker.io/moby/buildkit:master-rootless + env: + - name: BUILDKITD_FLAGS + value: --oci-worker-no-process-sandbox --oci-worker-gc=false + command: + - sh + - -c + args: + - | + buildctl-daemonless.sh build \ + --no-cache \ + --progress plain \ + --frontend dockerfile.v0 \ + --local context=/workspace \ + --local dockerfile=/workspace/src/client \ + --output type=image,name=${repository_base}/ai-optimizer-client:latest,push=true + securityContext: + seccompProfile: + type: Unconfined + appArmorProfile: + type: Unconfined + runAsUser: 1000 + runAsGroup: 1000 + volumeMounts: + - name: workspace + mountPath: /workspace + readOnly: true + - name: buildkitd-client + mountPath: /home/user/.local/share/buildkit + - name: docker-auth-client + mountPath: /home/user/.docker + readOnly: true + - name: buildkit-server + image: docker.io/moby/buildkit:master-rootless + env: + - name: BUILDKITD_FLAGS + value: --oci-worker-no-process-sandbox --oci-worker-gc=false + command: + - sh + - -c + args: + - | + buildctl-daemonless.sh build \ + --no-cache \ + --progress plain \ + --frontend dockerfile.v0 \ + --local context=/workspace \ + --local dockerfile=/workspace/src/server \ + --output type=image,name=${repository_base}/ai-optimizer-server:latest,push=true + securityContext: + seccompProfile: + type: Unconfined + appArmorProfile: + type: Unconfined + runAsUser: 1000 + runAsGroup: 1000 + volumeMounts: + - name: workspace + mountPath: /workspace + readOnly: true + - name: buildkitd-server + mountPath: /home/user/.local/share/buildkit + - name: docker-auth-server + mountPath: /home/user/.docker + readOnly: true + volumes: + - name: workspace + emptyDir: {} + - name: buildkitd-client + emptyDir: {} + - name: buildkitd-server + emptyDir: {} + - name: docker-auth-client + emptyDir: {} + - name: docker-auth-server + emptyDir: {} +%{ endif } diff --git a/opentofu/modules/kubernetes/templates/obaas-prereqs-values.yaml b/opentofu/modules/kubernetes/templates/obaas-prereqs-values.yaml new file mode 100644 index 000000000..6cfe83e27 --- /dev/null +++ b/opentofu/modules/kubernetes/templates/obaas-prereqs-values.yaml @@ -0,0 +1,30 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +#-- Included in OKE as add-on; applies to cert-manager +oracle-database-operator: + enabled: false + +%{ if byo_ocir_url != "" ~} +external-secrets: + image: + repository: ${byo_ocir_url}/external-secrets/external-secrets + webhook: + image: + repository: ${byo_ocir_url}/external-secrets/external-secrets + certController: + image: + repository: ${byo_ocir_url}/external-secrets/external-secrets + +metrics-server: + image: + repository: ${byo_ocir_url}/metrics-server/metrics-server + +kube-state-metrics: + image: + registry: ${byo_ocir_url} + +strimzi-kafka-operator: + defaultImageRegistry: ${byo_ocir_url} +%{ endif ~} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/templates/obaas-values.yaml b/opentofu/modules/kubernetes/templates/obaas-values.yaml new file mode 100644 index 000000000..90da2b514 --- /dev/null +++ b/opentofu/modules/kubernetes/templates/obaas-values.yaml @@ -0,0 +1,283 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +#-- Included in OKE as add-on +ingress-nginx: + enabled: false + +#-- Deploy Envoy Gateway +gateway-helm: + enabled: false + +# Deploy Kafka cluster +kafka: + enabled: ${deploy_kafka} + +coherence: + enabled: ${deploy_coherence} + +#-- Customizations +signoz: + auth: + existingSecret: "${label}-signoz" + signoz: + env: + SIGNOZ_USER_ROOT_PASSWORD: + valueFrom: + secretKeyRef: + name: "${label}-signoz" + key: password + SIGNOZ_API_KEY: + valueFrom: + secretKeyRef: + name: "${label}-signoz" + key: password + SIGNOZ_TOKENIZER_JWT_SECRET: + valueFrom: + secretKeyRef: + name: "${label}-signoz" + key: password +%{ if byo_ocir_url != "" ~} + global: + imageRegistry: ${byo_ocir_url} + utilities: + curlJq: + image: + registry: ${byo_ocir_url} + busybox: + image: + registry: ${byo_ocir_url} + kubectl: + image: + registry: ${byo_ocir_url} + signoz: + image: + registry: ${byo_ocir_url} + initContainers: + init: + image: + registry: ${byo_ocir_url} + schemaMigrator: + image: + registry: ${byo_ocir_url} + initContainers: + init: + image: + registry: ${byo_ocir_url} + chReady: + image: + registry: ${byo_ocir_url} + wait: + image: + registry: ${byo_ocir_url} + otelCollector: + image: + registry: ${byo_ocir_url} + clickhouse: + image: + registry: ${byo_ocir_url} + zookeeper: + image: + registry: ${byo_ocir_url} + initContainers: + udf: + image: + registry: ${byo_ocir_url} + clickhouseOperator: + image: + registry: ${byo_ocir_url} + metricsExporter: + image: + registry: ${byo_ocir_url} +%{ endif ~} + +%{ if byo_ocir_url != "" ~} +eureka: + image: + repository: ${byo_ocir_url}/eureka + +admin-server: + image: + repository: ${byo_ocir_url}/admin-server + +conductor-server: + image: + repository: ${byo_ocir_url}/conductor-server + +otmm: + image: + repository: ${byo_ocir_url}/database/otmm + +otmm: + coordinator: + image: + repository: ${byo_ocir_url}/database/microtx-coordinator + workflowServer: + image: + repository: ${byo_ocir_url}/database/microtx-workflow + console: + image: + repository: ${byo_ocir_url}/database/microtx-console + +oracle-database-exporter: + image: + repository: ${byo_ocir_url}/database/observability-exporter + busybox: + repository: ${byo_ocir_url}/busybox + +coherence-operator: + image: + registry: ${byo_ocir_url}/middleware + defaultCoherenceImage: + registry: ${byo_ocir_url}/middleware +%{ endif ~} + +# -- APISIX +apisix: +%{ if byo_ocir_url != "" ~} + global: + security: + allowInsecureImages: true + image: + repository: ${byo_ocir_url}/apache/apisix + initContainer: + image: ${byo_ocir_url}/busybox + etcd: + image: + registry: ${byo_ocir_url} + ingress-controller: + enabled: false + image: + repository: ${byo_ocir_url}/apache/apisix-ingress-controller +%{ endif ~} + service: + type: NodePort + externalTrafficPolicy: Cluster + http: + enabled: true + servicePort: 80 + containerPort: 9080 + additionalContainerPorts: [] + ingress: + enabled: true + className: native-ic + annotations: + oci-native-ingress.oraclecloud.com/http-listener-port: "80" + oci-native-ingress.oraclecloud.com/healthcheck-protocol: TCP + hosts: + - host: "" + paths: + - "/" + +# -- Oracle Database Configuration +database: +%{ if db_type == "OTHER" ~} + type: "OTHER" + other: + dsn: "${db_dsn}" +%{ else ~} + type: "ADB-S" + oci: + ocid: "${db_ocid}" +%{ endif ~} + authN: + secretName: "${db_name}-obaas-db-authn" + privAuthN: + secretName: "${db_name}-db-priv-authn" + oci_config: + oke: true + region: "${oci_region}" +%{ if byo_ocir_url != "" ~} + sqlcl: + image: + repository: ${byo_ocir_url}/database/sqlcl +%{ endif ~} + +%{ if deploy_optimizer ~} +ai-optimizer: + enabled: true + global: + api: + secretName: "${label}-optimizer-api-key" + + # -- API Server configuration + server: + image: + repository: ${repository_base}/ai-optimizer-server + tag: "latest" + pullPolicy: Always + + ingress: + enabled: true + className: native-ic + annotations: + oci-native-ingress.oraclecloud.com/http-listener-port: "80" + oci-native-ingress.oraclecloud.com/healthcheck-protocol: HTTP + oci-native-ingress.oraclecloud.com/healthcheck-path: "/ai-optimizer/v1/readiness" + + service: + type: "NodePort" + + # -- Enable Workload Identity + oci_config: + oke: true + region: "${oci_region}" + + # -- Oracle Database Configuration + database: +%{ if db_type == "OTHER" ~} + type: "OTHER" + other: + dsn: "${db_dsn}" +%{ else ~} + type: "ADB-S" + oci: + ocid: "${db_ocid}" + # Use existing obaas ADB secrets (created by parent chart) + adb: + useExisting: true +%{ endif ~} + authN: + secretName: "${db_name}-optimizer-db-authn" + privAuthN: + secretName: "${db_name}-db-priv-authn" + + client: + enable: true + image: + repository: ${repository_base}/ai-optimizer-client + tag: "latest" + pullPolicy: Always + + ingress: + enabled: true + className: native-ic + annotations: + oci-native-ingress.oraclecloud.com/http-listener-port: "80" + oci-native-ingress.oraclecloud.com/healthcheck-protocol: HTTP + oci-native-ingress.oraclecloud.com/healthcheck-path: "/ai-optimizer/ping" + + service: + type: "NodePort" + + features: + disableTestbed: "false" + disableApi: "false" + disableTools: "false" + disableDbCfg: "false" + disableModelCfg: "false" + disableOciCfg: "false" + disableSettings: "false" + + ollama: + enabled: ${node_pool_gpu_deploy} + models: + enabled: true + modelPullList: + - llama3.1 + - mxbai-embed-large + resources: + limits: + nvidia.com/gpu: 1 +%{ endif ~} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/tls.tf b/opentofu/modules/kubernetes/tls.tf new file mode 100644 index 000000000..76ea42e4f --- /dev/null +++ b/opentofu/modules/kubernetes/tls.tf @@ -0,0 +1,60 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +resource "tls_private_key" "acme_ca" { + algorithm = "RSA" + rsa_bits = "4096" +} + +resource "tls_self_signed_cert" "acme_ca" { + private_key_pem = tls_private_key.acme_ca.private_key_pem + is_ca_certificate = true + + subject { + common_name = "Acme Self Signed CA" + organization = "Acme Self Signed" + organizational_unit = "acme" + } + + validity_period_hours = 87659 + + allowed_uses = [ + "digital_signature", + "cert_signing", + "crl_signing", + ] +} + +resource "tls_private_key" "example_com" { + algorithm = "RSA" + rsa_bits = "4096" +} + +resource "tls_cert_request" "example_com" { + private_key_pem = tls_private_key.example_com.private_key_pem + + dns_names = ["example.com"] + + subject { + common_name = "example.com" + organization = "Example Self Signed" + country = "GB" + organizational_unit = "example.com" + } +} + +resource "tls_locally_signed_cert" "example_com" { + cert_request_pem = tls_cert_request.example_com.cert_request_pem + ca_private_key_pem = tls_private_key.acme_ca.private_key_pem + ca_cert_pem = tls_self_signed_cert.acme_ca.cert_pem + + validity_period_hours = 87659 + + allowed_uses = [ + "digital_signature", + "key_encipherment", + "server_auth", + "client_auth", + ] +} \ No newline at end of file diff --git a/opentofu/modules/kubernetes/variables.tf b/opentofu/modules/kubernetes/variables.tf new file mode 100644 index 000000000..da4cdeb95 --- /dev/null +++ b/opentofu/modules/kubernetes/variables.tf @@ -0,0 +1,162 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +variable "tenancy_id" { + type = string +} + +variable "compartment_id" { + type = string +} + +variable "vcn_id" { + type = string +} + +variable "oci_services" { + description = "OCI Services Network object containing id, name, and cidr_block" + type = object({ + cidr_block = string + id = string + name = string + }) +} + +variable "public_subnet_id" { + type = string +} + +variable "private_subnet_id" { + type = string +} + +variable "orm_install" { + type = bool +} + +variable "lb" { + type = object({ + id = string + compartment_id = string + ip_address_details = list(object({ + ip_address = string + })) + shape_details = list(object({ + minimum_bandwidth_in_mbps = number + maximum_bandwidth_in_mbps = number + })) + }) +} + +variable "region" { + type = string +} + +variable "availability_domains" { + type = list(any) +} + +variable "label_prefix" { + type = string +} + +variable "db_ocid" { + type = string +} +variable "db_name" { + type = string +} + +variable "db_conn" { + type = object({ + db_type = string + username = string + password = string + service = string + }) +} + +variable "kubernetes_version" { + type = string +} + +variable "api_is_public" { + type = bool +} + +variable "node_pool_gpu_deploy" { + type = bool +} + +variable "cpu_node_pool_size" { + type = number +} + +variable "gpu_node_pool_size" { + type = number +} + +variable "compute_gpu_shape" { + type = string +} + +variable "compute_os_ver" { + type = string +} + +variable "compute_cpu_shape" { + type = string +} + +variable "compute_cpu_ocpu" { + type = number +} + +variable "lb_nsg_id" { + type = string +} + +variable "api_endpoint_allowed_cidrs" { + type = string + default = "" +} + +variable "run_cfgmgt" { + type = bool +} +variable "use_cluster_addons" { + type = bool + default = true +} + +variable "use_local_charts" { + type = bool + default = false +} + +variable "byo_ocir_url" { + type = string +} + +variable "optimizer_version" { + type = string +} + +// Deployments +variable "deploy_optimizer" { + type = bool + default = false +} + +// Deploy Kafka cluster +variable "deploy_kafka" { + type = bool + default = false +} + +variable "deploy_coherence" { + description = "Deploy a cluster using the Coherence Operator." + type = bool + default = false +} diff --git a/opentofu/modules/network/main.tf b/opentofu/modules/network/main.tf new file mode 100644 index 000000000..686f73ebc --- /dev/null +++ b/opentofu/modules/network/main.tf @@ -0,0 +1,116 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +resource "oci_core_vcn" "vcn" { + compartment_id = var.compartment_id + cidr_blocks = var.vcn_cidr + display_name = format("%s-vcn", var.label_prefix) + dns_label = var.label_prefix + lifecycle { + ignore_changes = [ + cidr_blocks, + ] + } +} + +// Lock Down Default Sec List +resource "oci_core_default_security_list" "lockdown" { + compartment_id = oci_core_vcn.vcn.compartment_id + display_name = format("%s-default-sec-list", var.label_prefix) + manage_default_resource_id = oci_core_vcn.vcn.default_security_list_id + egress_security_rules { + description = "Egress for Bastion Access" + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" + protocol = "all" + stateless = "false" + } +} + +// Public Subnet +resource "oci_core_internet_gateway" "igw" { + compartment_id = oci_core_vcn.vcn.compartment_id + vcn_id = oci_core_vcn.vcn.id + display_name = format("%s-igw", var.label_prefix) + enabled = "true" +} + +resource "oci_core_default_route_table" "public_route_table" { + display_name = format("%s-public-route-table", var.label_prefix) + route_rules { + description = "traffic to/from internet" + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" + network_entity_id = oci_core_internet_gateway.igw.id + } + manage_default_resource_id = oci_core_vcn.vcn.default_route_table_id +} + +resource "oci_core_subnet" "public" { + cidr_block = cidrsubnet(one(oci_core_vcn.vcn.cidr_blocks), 1, 1) + compartment_id = oci_core_vcn.vcn.compartment_id + vcn_id = oci_core_vcn.vcn.id + display_name = format("%s-public", var.label_prefix) + dns_label = oci_core_vcn.vcn.dns_label == null ? null : "publ" + prohibit_public_ip_on_vnic = false + route_table_id = oci_core_default_route_table.public_route_table.id + lifecycle { + ignore_changes = [ + cidr_block, + ] + } +} + +// Private Subnet +resource "oci_core_service_gateway" "sgw" { + compartment_id = oci_core_vcn.vcn.compartment_id + vcn_id = oci_core_vcn.vcn.id + display_name = format("%s-sgw", var.label_prefix) + services { + service_id = var.oci_services.id + } +} + +resource "oci_core_nat_gateway" "ngw" { + compartment_id = oci_core_vcn.vcn.compartment_id + vcn_id = oci_core_vcn.vcn.id + display_name = format("%s-ngw", var.label_prefix) + block_traffic = "false" +} + +resource "oci_core_route_table" "private_route_table" { + compartment_id = oci_core_vcn.vcn.compartment_id + vcn_id = oci_core_vcn.vcn.id + display_name = format("%s-private-route-table", var.label_prefix) + route_rules { + description = "traffic to the internet" + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" + network_entity_id = oci_core_nat_gateway.ngw.id + } + route_rules { + description = "traffic to OCI services" + destination = var.oci_services.cidr_block + destination_type = "SERVICE_CIDR_BLOCK" + network_entity_id = oci_core_service_gateway.sgw.id + } + lifecycle { + ignore_changes = all + } +} + +resource "oci_core_subnet" "private" { + cidr_block = cidrsubnet(one(oci_core_vcn.vcn.cidr_blocks), 1, 0) + compartment_id = oci_core_vcn.vcn.compartment_id + vcn_id = oci_core_vcn.vcn.id + display_name = format("%s-private", var.label_prefix) + dns_label = oci_core_vcn.vcn.dns_label == null ? null : "priv" + prohibit_public_ip_on_vnic = true + route_table_id = oci_core_route_table.private_route_table.id + lifecycle { + ignore_changes = [ + cidr_block, + ] + } +} \ No newline at end of file diff --git a/opentofu/modules/network/output.tf b/opentofu/modules/network/output.tf new file mode 100644 index 000000000..09c2838bc --- /dev/null +++ b/opentofu/modules/network/output.tf @@ -0,0 +1,36 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +// VCN +output "vcn_ocid" { + description = "VCN Identifier." + value = oci_core_vcn.vcn.id +} + +output "vcn_cidr_block" { + description = "VCN CIDR Block." + value = one(oci_core_vcn.vcn.cidr_blocks) +} + +// Private Subnet +output "private_subnet_ocid" { + description = "Private Subnet Identifier." + value = try(oci_core_subnet.private.id, null) +} + +output "private_subnet_cidr_block" { + description = "Private Subnet CIDR Block." + value = try(oci_core_subnet.private.cidr_block, null) +} + +// Public Subnet +output "public_subnet_ocid" { + description = "Public Subnet Identifier." + value = oci_core_subnet.public.id +} + +output "public_subnet_cidr_block" { + description = "Public Subnet CIDR Block." + value = oci_core_subnet.public.cidr_block +} \ No newline at end of file diff --git a/opentofu/modules/network/provider.tf b/opentofu/modules/network/provider.tf new file mode 100644 index 000000000..86cb3e019 --- /dev/null +++ b/opentofu/modules/network/provider.tf @@ -0,0 +1,11 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +terraform { + required_providers { + oci = { + source = "oracle/oci" + } + } +} \ No newline at end of file diff --git a/opentofu/modules/network/variables.tf b/opentofu/modules/network/variables.tf new file mode 100644 index 000000000..f7f397d85 --- /dev/null +++ b/opentofu/modules/network/variables.tf @@ -0,0 +1,25 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +variable "compartment_id" { + type = string +} + +variable "label_prefix" { + type = string +} + +variable "vcn_cidr" { + type = list(string) + default = ["10.42.0.0/16"] +} + +variable "oci_services" { + description = "OCI Services Network object containing id, name, and cidr_block" + type = object({ + cidr_block = string + id = string + name = string + }) +} \ No newline at end of file diff --git a/opentofu/nsgs.tf b/opentofu/nsgs.tf new file mode 100644 index 000000000..7c5b882ed --- /dev/null +++ b/opentofu/nsgs.tf @@ -0,0 +1,91 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +// Load Balancer +resource "oci_core_network_security_group" "lb" { + compartment_id = local.compartment_ocid + vcn_id = local.vcn_ocid + display_name = format("%s-lb", local.label_prefix) + lifecycle { + ignore_changes = [defined_tags, freeform_tags] + } +} + +resource "oci_core_network_security_group_security_rule" "lb_http_ingress" { + for_each = toset(split(",", replace(var.client_allowed_cidrs, "/\\s+/", ""))) + network_security_group_id = oci_core_network_security_group.lb.id + description = "Loadbalancer Client Access - ${each.value}." + direction = "INGRESS" + protocol = "6" + source = each.value + source_type = "CIDR_BLOCK" + tcp_options { + destination_port_range { + min = local.lb_http_port + max = local.lb_http_port + } + } +} + +resource "oci_core_network_security_group_security_rule" "lb_https_ingress" { + for_each = toset(split(",", replace(var.server_allowed_cidrs, "/\\s+/", ""))) + network_security_group_id = oci_core_network_security_group.lb.id + description = "Loadbalancer Server Access - ${each.value}." + direction = "INGRESS" + protocol = "6" + source = each.value + source_type = "CIDR_BLOCK" + tcp_options { + destination_port_range { + min = local.lb_https_port + max = local.lb_https_port + } + } +} + +resource "oci_core_network_security_group_security_rule" "lb_egress" { + network_security_group_id = oci_core_network_security_group.lb.id + description = "Loadbalancer VCN Access." + direction = "EGRESS" + protocol = "6" + destination = local.private_subnet_cidr_block + destination_type = "CIDR_BLOCK" +} + +// ADB +resource "oci_core_network_security_group" "adb" { + count = var.byo_vcn_ocid == "" && var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? 1 : 0 + compartment_id = local.compartment_ocid + vcn_id = local.vcn_ocid + display_name = format("%s-adb", local.label_prefix) + lifecycle { + ignore_changes = [defined_tags, freeform_tags] + } +} + +resource "oci_core_network_security_group_security_rule" "adb_ingress" { + count = var.byo_vcn_ocid == "" && var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? 1 : 0 + network_security_group_id = oci_core_network_security_group.adb[0].id + description = "ADB from Workers." + direction = "INGRESS" + protocol = "6" + source = local.private_subnet_cidr_block + source_type = "CIDR_BLOCK" + tcp_options { + destination_port_range { + min = 1521 + max = 1522 + } + } +} + +resource "oci_core_network_security_group_security_rule" "adb_egress" { + count = var.byo_vcn_ocid == "" && var.adb_networking == "PRIVATE_ENDPOINT_ACCESS" ? 1 : 0 + network_security_group_id = oci_core_network_security_group.adb[0].id + description = "ADB to the Internet." + direction = "EGRESS" + protocol = "6" + destination = "0.0.0.0/0" + destination_type = "CIDR_BLOCK" +} \ No newline at end of file diff --git a/opentofu/oci_images.tf b/opentofu/oci_images.tf new file mode 100644 index 000000000..cc309addb --- /dev/null +++ b/opentofu/oci_images.tf @@ -0,0 +1,134 @@ +# Copyright © 2023, 2025, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl + +/******************** +Marketplace UI Parameters +https://docs.oracle.com/en-us/iaas/Content/partner-portal/partner-portal_build-subscribe_terraform_configurations_to_marketplace_images.htm +********************/ +# Controls if we need to subscribe to marketplace PIC image and accept terms & conditions +# false -> for internal testing. +# true -> for publishing +# This will be over-rode during build.py for the ORM stack +variable "mktpl_use_image" { + default = "false" +} + +variable "mktpl_listing_resource_version" { + description = "Package Version Reference" + default = "1.0.0" # Metered +} + +variable "mktpl_listing_id" { + description = "Listing OCID" + default = "ocid1.appcataloglisting.oc1..aaaaaaaa3tfuluibh4gneqv7fd4bxpczepgt5qmyglrjaoxrihyncifkubkq" # Metered +} + +variable "mktpl_listing_resource_id" { + description = "Image OCID (from Marketplace)" + default = "ocid1.image.oc1..aaaaaaaapxqd742nhqijxtquidej4zji2fxlk4pcldtkeakknbqtsv4zusnq" # Metered +} + +/******************** +Marketplace Data +********************/ +# Gets the partner image subscription +data "oci_core_app_catalog_subscriptions" "oci_core_app_catalog_subscriptions" { + for_each = var.mktpl_use_image ? { marketplace = true } : {} + compartment_id = local.compartment_ocid + listing_id = var.mktpl_listing_id + filter { + name = "listing_resource_version" + values = [var.mktpl_listing_resource_version] + } +} + +// Look for where the Micro Instance can be placed (in case using non-Flex) +data "oci_limits_limit_values" "limits_limit_values" { + for_each = var.mktpl_use_image ? { marketplace = true } : {} + + compartment_id = var.tenancy_ocid + service_name = "compute" + scope_type = "AD" + name = "vm-standard-e2-1-micro-count" + filter { + name = "value" + values = ["2"] + } +} + +// If we have a value from limits, use that, otherwise use AD-1 +locals { + is_flexible_shape = length(regexall("Flex", var.compute_cpu_shape)) > 0 ? true : false + mktpl_ad = var.mktpl_use_image && try(length(data.oci_limits_limit_values.limits_limit_values["marketplace"].limit_values), 0) > 0 ? ( + data.oci_limits_limit_values.limits_limit_values["marketplace"].limit_values[0].availability_domain + ) : ( + data.oci_identity_availability_domains.all.availability_domains[0]["name"] + ) +} + +/******************** +Marketplace Resources +********************/ +# Get Image Agreement +resource "oci_core_app_catalog_listing_resource_version_agreement" "mktpl_image_agreement" { + for_each = var.mktpl_use_image ? { marketplace = true } : {} + listing_id = var.mktpl_listing_id + listing_resource_version = var.mktpl_listing_resource_version +} + +# Accept Terms and Subscribe to the image, placing the image in a particular compartment +resource "oci_core_app_catalog_subscription" "mktpl_image_subscription" { + for_each = var.mktpl_use_image ? { marketplace = true } : {} + compartment_id = local.compartment_ocid + eula_link = oci_core_app_catalog_listing_resource_version_agreement.mktpl_image_agreement["marketplace"].eula_link + listing_id = oci_core_app_catalog_listing_resource_version_agreement.mktpl_image_agreement["marketplace"].listing_id + listing_resource_version = oci_core_app_catalog_listing_resource_version_agreement.mktpl_image_agreement["marketplace"].listing_resource_version + oracle_terms_of_use_link = oci_core_app_catalog_listing_resource_version_agreement.mktpl_image_agreement["marketplace"].oracle_terms_of_use_link + signature = oci_core_app_catalog_listing_resource_version_agreement.mktpl_image_agreement["marketplace"].signature + time_retrieved = oci_core_app_catalog_listing_resource_version_agreement.mktpl_image_agreement["marketplace"].time_retrieved + timeouts { + create = "20m" + } +} + + + +resource "oci_core_instance" "mktpl_instance" { + for_each = var.mktpl_use_image ? { marketplace = true } : {} + compartment_id = local.compartment_ocid + availability_domain = local.mktpl_ad + display_name = format("%s-mktpl-instance", local.label_prefix) + agent_config { + are_all_plugins_disabled = "true" + } + availability_config { + recovery_action = "RESTORE_INSTANCE" + } + create_vnic_details { + assign_private_dns_record = "false" + assign_public_ip = "false" + subnet_id = local.private_subnet_ocid + } + shape = local.is_flexible_shape ? var.compute_cpu_shape : "VM.Standard.E2.1.Micro" + dynamic "shape_config" { + for_each = local.is_flexible_shape ? [1] : [] + content { + memory_in_gbs = "1" + ocpus = "1" + } + } + launch_options { + boot_volume_type = "PARAVIRTUALIZED" + firmware = "UEFI_64" + is_consistent_volume_naming_enabled = "true" + network_type = "PARAVIRTUALIZED" + remote_data_volume_type = "PARAVIRTUALIZED" + } + source_details { + boot_volume_size_in_gbs = "50" + boot_volume_vpus_per_gb = "10" + source_id = var.mktpl_listing_resource_id + source_type = "image" + } + state = "STOPPED" +} diff --git a/opentofu/output.tf b/opentofu/output.tf new file mode 100644 index 000000000..e5267f576 --- /dev/null +++ b/opentofu/output.tf @@ -0,0 +1,23 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +output "app_version" { + description = "Application Version" + value = local.app_version +} + +output "app_name" { + description = "Application Name (Label) tied to all resources. The namespace for K8s installations" + value = local.label_prefix +} + +output "optimizer_client_url" { + description = "URL for AI Optimizer and Toolkit Client Access" + value = var.deploy_optimizer ? format("http://%s/ai-optimizer", oci_load_balancer_load_balancer.lb.ip_address_details[0].ip_address) : "N/A" +} + +output "optimizer_server_url" { + description = "URL for AI Optimizer and Toolkit Server API Access" + value = var.deploy_optimizer ? format("http://%s/ai-optimizer/v1/docs", oci_load_balancer_load_balancer.lb.ip_address_details[0].ip_address) : "N/A" +} \ No newline at end of file diff --git a/opentofu/provider.tf b/opentofu/provider.tf new file mode 100644 index 000000000..31a33a4b7 --- /dev/null +++ b/opentofu/provider.tf @@ -0,0 +1,45 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +terraform { + required_providers { + oci = { + source = "oracle/oci" + version = "~> 9.0" // Last evaluated 10-Sept-26 + } + } + required_version = ">= 1.5" +} + +data "oci_identity_region_subscriptions" "home_region" { + tenancy_id = var.tenancy_ocid + filter { + name = "is_home_region" + values = ["true"] + } +} + +locals { + home_region = data.oci_identity_region_subscriptions.home_region.region_subscriptions[0].region_name + user_ocid = var.user_ocid != "" ? var.user_ocid : var.current_user_ocid +} + +provider "oci" { + region = var.region + tenancy_ocid = var.tenancy_ocid + user_ocid = local.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + private_key = var.private_key +} + +provider "oci" { + region = local.home_region + tenancy_ocid = var.tenancy_ocid + user_ocid = local.user_ocid + fingerprint = var.fingerprint + private_key_path = var.private_key_path + private_key = var.private_key + alias = "home_region" +} \ No newline at end of file diff --git a/opentofu/schema.yaml b/opentofu/schema.yaml new file mode 100644 index 000000000..2d195cee0 --- /dev/null +++ b/opentofu/schema.yaml @@ -0,0 +1,552 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: ignore ocid ecpu mydb byodb mbps autonomousdatabase cfgmgt ocpu ocir + +title: "Oracle Backend for Microservices and AI" +description: "Explore the capabilities of the Oracle AI Database." +informationalText: "https://github.com/oracle/microservices-datadriven" +schemaVersion: 1.1.0 +version: "20190304" +locale: "en" + +variableGroups: + ######################################################################### + # Hidden + ######################################################################### + - title: "Default Hidden" + variables: + - tenancy_ocid + - region + - user_ocid + - current_user_ocid + - fingerprint + - private_key_path + - private_key + - mktpl_use_image + - mktpl_listing_resource_version + - mktpl_listing_id + - mktpl_listing_resource_id + visible: false + + - title: "Hidden (Defaults)" + variables: + - adb_version + - k8s_run_cfgmgt + - k8s_use_cluster_addons + - k8s_use_local_charts + visible: false + + ######################################################################### + # General + ######################################################################### + - title: "Oracle Backend for Microservices and AI" + variables: + - compartment_ocid + - label_prefix + - deploy_optimizer + visible: true + + ######################################################################### + # Infrastructure - Kubernetes + ######################################################################### + - title: "Kubernetes Infrastructure Options" + variables: + - k8s_api_is_public + - k8s_api_endpoint_allowed_cidrs + - k8s_cpu_node_pool_size + - k8s_node_pool_gpu_deploy + - k8s_gpu_node_pool_size + - k8s_byo_ocir + - k8s_byo_ocir_url + - k8s_deploy_kafka + - k8s_deploy_coherence + + ######################################################################### + # Compute Options + ######################################################################### + - title: "Compute Instance Options" + variables: + - compute_cpu_shape + - compute_cpu_ocpu + - compute_gpu_shape + + ######################################################################### + # Network Options (BYO Only) + ######################################################################### + - title: "Network Options" + variables: + - byo_vcn + - byo_vcn_compartment + - byo_vcn_ocid + - byo_private_subnet_compartment + - byo_private_subnet_ocid + - byo_public_subnet_compartment + - byo_public_subnet_ocid + visible: true + + ######################################################################### + # Load Balancer + ######################################################################### + - title: "Load Balancers Options" + variables: + - lb_min_shape + - lb_max_shape + - client_allowed_cidrs + - server_allowed_cidrs + visible: true + + ######################################################################### + # Database + ######################################################################### + - title: "Database Options" + variables: + - byo_db + - byo_db_type + - adb_license_model + - adb_edition + - adb_networking + - adb_whitelist_cidrs + - adb_ecpu_core_count + - adb_is_cpu_auto_scaling_enabled + - adb_data_storage_size_in_gb + - adb_is_storage_auto_scaling_enabled + - byo_db_password + - byo_adb_compartment + - byo_adb_ocid + - byo_odb_host + - byo_odb_port + - byo_odb_service + visible: true + +########################################################################### +variables: + compartment_ocid: + type: oci:identity:compartment:id + title: "Compartment" + required: true + + label_prefix: + type: string + title: "Application Name" + pattern: "^$|^[a-zA-Z0-9]{1,12}$" + required: false + + deploy_optimizer: + type: boolean + title: "Install the AI Optimizer and Toolkit?" + description: "It is recommended to 'Deploy GPU Node Pool' when installing the Optimizer." + required: true + + ######################################################################### + k8s_api_is_public: + type: boolean + title: "Public API Endpoint?" + required: true + + k8s_api_endpoint_allowed_cidrs: + type: array + title: "API Endpoint Access Control" + required: true + default: "0.0.0.0/0" + pattern: "$|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$" + visible: k8s_api_is_public + + k8s_cpu_node_pool_size: + type: integer + title: "CPU Workers" + required: true + minimum: 1 + maximum: 80 + multipleOf: 1 + + k8s_node_pool_gpu_deploy: + type: boolean + title: "Deploy GPU Node Pool?" + description: "Create a GPU Node Pool for AI capabilities." + required: true + + k8s_gpu_node_pool_size: + type: integer + title: "GPU Workers" + required: true + minimum: 1 + maximum: 80 + multipleOf: 1 + visible: k8s_node_pool_gpu_deploy + + k8s_deploy_kafka: + type: boolean + title: "Deploy Kafka Cluster?" + description: "Create a Kafka cluster using the Strimzi operator." + default: false + required: true + + k8s_deploy_coherence: + type: boolean + title: "Deploy Coherence Cluster?" + description: "Create a Coherence cluster using the Coherence Operator." + default: false + required: true + + k8s_byo_ocir: + title: "Bring Your Own Oracle Container Image Registry (OCIR)?" + description: | + All container images should pre-exist in and will be pulled from the BYO OCIR. + For more information: + type: boolean + default: false + required: true + + k8s_byo_ocir_url: + title: "URL for existing OCIR" + description: "Example: iad.ocir.io/namespace" + type: string + visible: k8s_byo_ocir + + k8s_use_local_charts: + type: boolean + title: "Use Local Helm Charts?" + description: "Use Helm charts from ../helm/infra-charts instead of the remote Helm repository." + default: false + required: true + + ######################################################################### + compute_cpu_shape: + type: enum + title: "CPU Worker Shape" + required: true + default: "VM.Standard.E5.Flex" + enum: + - "VM.Standard.E4.Flex" + - "VM.Standard.E5.Flex" + + compute_cpu_ocpu: + type: integer + title: "CPU Worker Core Count" + required: true + minimum: 1 + maximum: 64 + multipleOf: 1 + + compute_gpu_shape: + type: enum + title: "GPU Worker Shape" + required: true + default: "VM.GPU.A10.1" + enum: + - "VM.GPU.A10.1" + - "VM.GPU.A10.2" + visible: k8s_node_pool_gpu_deploy + + ######################################################################### + byo_vcn: + type: boolean + title: "Bring Your Own Virtual Cloud Network?" + default: false + + byo_vcn_compartment: + title: "Virtual Cloud Network Compartment" + description: "BYO VCN Compartment" + type: oci:identity:compartment:id + required: true + default: compartment_ocid + visible: byo_vcn + + byo_vcn_ocid: + type: oci:core:vcn:id + title: "Virtual Cloud Network (VCN)" + description: "BYO VCN Resource" + dependsOn: + compartmentId: byo_vcn_compartment + required: true + visible: byo_vcn + + byo_public_subnet_compartment: + title: "Public Subnet Compartment" + description: "BYO VCN Public Subnet Compartment" + type: oci:identity:compartment:id + required: true + default: byo_vcn_compartment + visible: byo_vcn + + byo_public_subnet_ocid: + type: oci:core:subnet:id + title: "Public Subnet" + description: "BYO VCN Public Subnet" + dependsOn: + compartmentId: byo_public_subnet_compartment + vcnId: byo_vcn_ocid + hidePublicSubnet: false + hidePrivateSubnet: true + required: true + visible: byo_vcn + + byo_private_subnet_compartment: + title: "Private Subnet Compartment" + description: "BYO VCN Private Subnet Compartment" + type: oci:identity:compartment:id + required: true + default: byo_vcn_compartment + visible: byo_vcn + + byo_private_subnet_ocid: + type: oci:core:subnet:id + title: "Private Subnet" + description: "BYO VCN Private Subnet" + dependsOn: + compartmentId: byo_private_subnet_compartment + vcnId: byo_vcn_ocid + hidePublicSubnet: true + hidePrivateSubnet: false + required: true + visible: byo_vcn + + ######################################################################### + lb_min_shape: + type: integer + title: "Minimum Load Balancer Bandwidth (Mbps)" + required: true + minimum: 10 + maximum: 10 + multipleOf: 10 + + lb_max_shape: + type: integer + title: "Maximum Load Balancer Bandwidth (Mbps)" + required: true + minimum: 10 + maximum: 8000 + multipleOf: 10 + + client_allowed_cidrs: + type: array + title: "Access Control for Application GUI" + required: true + default: "0.0.0.0/0" + pattern: "((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$" + + server_allowed_cidrs: + type: array + title: "Access Control for Application API Server" + required: true + default: "0.0.0.0/0" + pattern: "((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$" + + ######################################################################### + byo_db: + type: boolean + title: "Bring Your Own Oracle Database?" + required: true + + byo_db_type: + title: "Bring Your Own Database - Type" + type: enum + required: true + default: "ADB-S" + enum: + - "ADB-S" + - "OTHER" + visible: byo_db + + ### Provision New ADB ### + adb_license_model: + type: enum + title: "Autonomous Database License Model" + required: true + default: "LICENSE_INCLUDED" + enum: + - "LICENSE_INCLUDED" + - "BRING_YOUR_OWN_LICENSE" + visible: + not: + - byo_db + + adb_edition: + type: enum + title: "Oracle Database Edition" + required: true + default: "ENTERPRISE_EDITION" + enum: + - "ENTERPRISE_EDITION" + - "STANDARD_EDITION" + visible: + and: + - not: + - byo_db + - eq: + - adb_license_model + - BRING_YOUR_OWN_LICENSE + + adb_networking: + type: enum + title: "Autonomous Database Network Access" + required: true + default: "SECURE_ACCESS" + enum: + - "SECURE_ACCESS" + - "PRIVATE_ENDPOINT_ACCESS" + visible: + not: + - byo_db + + adb_whitelist_cidrs: + type: array + title: "Access Control for the Autonomous Database" + required: true + default: "0.0.0.0/0" + pattern: "((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$" + visible: + and: + - not: + - byo_db + - eq: + - adb_networking + - PRIVATE_ENDPOINT_ACCESS + + adb_ecpu_core_count: + type: number + title: "Autonomous Database Core Count" + required: true + minimum: 2 + multipleOf: 1 + visible: + not: + - byo_db + + adb_is_cpu_auto_scaling_enabled: + type: boolean + title: "Allow Autonomous Database CPU Auto Scaling? (3x CPU)" + required: true + visible: + not: + - byo_db + + adb_data_storage_size_in_gb: + type: number + title: "Autonomous Database Data Storage Size (GB)" + description: "" + required: true + minimum: 20 + maximum: 393216 + multipleOf: 1 + visible: + not: + - byo_db + + adb_is_storage_auto_scaling_enabled: + type: boolean + title: "Allow Autonomous Database Storage Auto Scaling?" + required: true + visible: + not: + - byo_db + + ### BYODB - AuthN ### + byo_db_password: + title: "Bring Your Own Database - Password" + description: "Password for ADMIN (ADB) or SYSTEM (non-ADB)." + type: password + default: "" + required: true + confirmation: false + visible: byo_db + + ### BYODB - Use Existing ADB-S (Compartment/OCID) ### + byo_adb_compartment: + title: "BYO ADB-S Compartment" + description: "BYO ADB-S Compartment" + type: oci:identity:compartment:id + required: true + default: compartment_ocid + visible: + and: + - byo_db + - eq: + - byo_db_type + - "ADB-S" + + byo_adb_ocid: + title: "Bring Your Own Autonomous Database - OCID" + type: oci:database:autonomousdatabase:id + required: true + dependsOn: + compartmentId: byo_adb_compartment + visible: + and: + - byo_db + - eq: + - byo_db_type + - "ADB-S" + + ### BYODB - Use Existing Other (Host:Port/Service_Name) ### + byo_odb_host: + title: "Bring Your Own Other Database - Host" + type: string + default: "mydb.domain.com" + required: true + visible: + and: + - byo_db + - eq: + - byo_db_type + - "OTHER" + + byo_odb_port: + title: "Bring Your Own Other Database - Port" + type: integer + default: 1521 + required: true + visible: + and: + - byo_db + - eq: + - byo_db_type + - "OTHER" + + byo_odb_service: + title: "Bring Your Own Other Database - Service Name" + type: string + default: "OBAAS_TP" + visible: + and: + - byo_db + - eq: + - byo_db_type + - "OTHER" + +########################################################################### +# Output Groups +########################################################################### +outputGroups: + - title: "Access the Oracle Backend for Microservices and AI" + outputs: + - app_name + - app_version + - optimizer_client_url + - optimizer_server_url + + - title: "Kubernetes KUBECONFIG command" + outputs: + - kubeconfig_cmd + +########################################################################### +outputs: + app_name: + title: "Kubernetes Namespace" + type: string + + app_version: + title: "Application Version" + type: string + + optimizer_client_url: + title: "Web GUI" + type: link + + optimizer_server_url: + title: "Server API" + type: link + + kubeconfig_cmd: + title: "KUBECONFIG command" + type: string diff --git a/opentofu/tests/OMRMetaSchema.yaml b/opentofu/tests/OMRMetaSchema.yaml new file mode 100644 index 000000000..c27d012c9 --- /dev/null +++ b/opentofu/tests/OMRMetaSchema.yaml @@ -0,0 +1,1468 @@ +# Meta JSON Schema. +# +# This is used to validate the Schema file when the package is uploaded/loaded into Resource Manager. +# For marketplace, it is also used to validate the package when the package artifact is created in Partner Portal. +# +# NOTE: additionalProperties are set to true explicitly even though this is the default. It must be set to true in +# cases where we use the allOf. This is a quirk of JSON Schema. During validation, allOf means it has to match all of +# the individual definitions separately. It doesn't mean it has to match a Union of the individual definitions. This +# is a known issue with JSON Schema. +$schema: "http://json-schema.org/draft-07/schema#" +title: Schema +type: object +required: + - variables + - schemaVersion +additionalProperties: true +properties: + title: + type: string + description: + type: string + stackDescription: + type: string + packageVersion: + type: string + version: + type: string + schemaVersion: + type: string + enum: + - 1.0.0 + - 1.1.0 + locale: + $ref: "#/definitions/locale" + logoUrl: + oneOf: + - $ref: "#/definitions/url" + - type: string + pattern: "^data:image/(png|jpeg|jpg|gif|webp);base64,[A-Za-z0-9+/=]+$" + source: + $ref: "#/definitions/source" + informationalText: + type: string + instructions: + type: string + troubleshooting: + type: string + allowViewState: + type: boolean + variables: + $ref: "#/definitions/variables" + # Deprecated - use variableGroups instead + groupings: + $ref: "#/definitions/variableGroups" + variableGroups: + $ref: "#/definitions/variableGroups" + outputs: + $ref: "#/definitions/outputs" + outputGroups: + $ref: "#/definitions/outputGroups" + primaryOutputButton: + type: string + format: variablereference + +definitions: + source: + type: object + properties: + type: + enum: + - marketplace + - quickstart + - web + reference: + type: + - string + - number + additionalProperties: false + + variableGroups: + type: array + items: + $ref: "#/definitions/variableGroup" + + variableGroup: + type: object + required: + - title + - variables + properties: + title: + type: string + variables: + type: array + items: + type: string + format: variablereference + visible: + $ref: "#/definitions/booleanStatement" + additionalProperties: true + + locale: + enum: + - en + default: en + + url: + type: string + pattern: ^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,4}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)$ + + ocid: + type: string + pattern: ^ocid1\.([a-z0-9_-]{1,32})\.([a-z0-9_-]{1,15})\.([a-z0-9]{0,24})\.([a-z0-9]{60})$ + + variables: + type: object + additionalProperties: + $ref: "#/definitions/variable" + + variable: + oneOf: + - $ref: "#/definitions/staticVariable" + - $ref: "#/definitions/dynamicVariable" + - $ref: "#/definitions/complexVariable" + + baseVariable: + type: object + properties: + title: + type: string + minLength: 1 + description: + type: string + required: + type: boolean + default: false + visible: + $ref: "#/definitions/booleanStatement" + + booleanStatement: + oneOf: + - type: boolean + - type: string + - $ref: "#/definitions/equality" + - $ref: "#/definitions/greaterThanOrEqual" + - $ref: "#/definitions/lessThanOrEqual" + - $ref: "#/definitions/greaterThan" + - $ref: "#/definitions/lessThan" + - $ref: "#/definitions/booleanOr" + - $ref: "#/definitions/booleanAnd" + - $ref: "#/definitions/booleanNot" + + equality: + type: object + properties: + eq: + type: array + items: + - type: [string, number] + - type: [string, number] + additionalItems: false + additionalProperties: false + + greaterThanOrEqual: + type: object + properties: + ge: + type: array + items: + - type: [string, number] + - type: [string, number] + additionalItems: false + additionalProperties: false + + lessThanOrEqual: + type: object + properties: + le: + type: array + items: + - type: [string, number] + - type: [string, number] + additionalItems: false + additionalProperties: false + + greaterThan: + type: object + properties: + gt: + type: array + items: + - type: [string, number] + - type: [string, number] + additionalItems: false + additionalProperties: false + + lessThan: + type: object + properties: + lt: + type: array + items: + - type: [string, number] + - type: [string, number] + additionalItems: false + additionalProperties: false + + booleanOr: + type: object + properties: + or: + type: array + items: + - $ref: "#/definitions/booleanStatement" + - $ref: "#/definitions/booleanStatement" + additionalItems: false + additionalProperties: false + + booleanAnd: + type: object + properties: + and: + type: array + items: + - $ref: "#/definitions/booleanStatement" + - $ref: "#/definitions/booleanStatement" + additionalItems: false + additionalProperties: false + + booleanNot: + type: object + properties: + not: + type: array + items: + - $ref: "#/definitions/booleanStatement" + additionalItems: false + additionalProperties: false + + dependsOnCompartment: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - dependsOn + properties: + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + staticVariable: + oneOf: + - $ref: "#/definitions/arrayVariable" + - $ref: "#/definitions/booleanVariable" + - $ref: "#/definitions/enumVariable" + - $ref: "#/definitions/integerVariable" + - $ref: "#/definitions/numberVariable" + - $ref: "#/definitions/stringVariable" + - $ref: "#/definitions/multilineVariable" + - $ref: "#/definitions/fileVariable" + + - $ref: "#/definitions/passwordVariable" + - $ref: "#/definitions/datetimeVariable" + + dynamicVariable: + oneOf: + - $ref: "#/definitions/imageVariable" + - $ref: "#/definitions/identityDomainVariable" + - $ref: "#/definitions/instanceShapeVariable" + - $ref: "#/definitions/subnetVariable" + - $ref: "#/definitions/vcnVariable" + - $ref: "#/definitions/availabilityDomainVariable" + - $ref: "#/definitions/compartmentVariable" + - $ref: "#/definitions/faultDomainVariable" + - $ref: "#/definitions/regionVariable" + - $ref: "#/definitions/dbSystemVariable" + - $ref: "#/definitions/dbHomeVariable" + - $ref: "#/definitions/dbHomeVersionVariable" + - $ref: "#/definitions/databaseVariable" + - $ref: "#/definitions/autonomousDatabaseVariable" + - $ref: "#/definitions/autonomousDatabaseVersionVariable" + - $ref: "#/definitions/autonomousContainerDBVariable" + - $ref: "#/definitions/kmsVaultVariable" + - $ref: "#/definitions/containerClusterVariable" + - $ref: "#/definitions/volumeBackupPoliciesVariable" + - $ref: "#/definitions/loadBalancerVariable" + - $ref: "#/definitions/serviceGatewayVariable" + - $ref: "#/definitions/kubernetesVersionsVariable" + - $ref: "#/definitions/instanceVariable" + - $ref: "#/definitions/natGatewayVariable" + - $ref: "#/definitions/tagVariable" + - $ref: "#/definitions/nsgVariable" + - $ref: "#/definitions/mountTargetsVariable" + - $ref: "#/definitions/kmsKeyVariable" + - $ref: "#/definitions/kmsSecretVariable" + - $ref: "#/definitions/odsProjectVariable" + - $ref: "#/definitions/instanceShapeVariableWithFlex" + - $ref: "#/definitions/groupsVariable" + - $ref: "#/definitions/dynamicGroupsVariable" + - $ref: "#/definitions/logAnalyticsLogGroup" + - $ref: "#/definitions/logAnalyticsLogEntities" + - $ref: "#/definitions/logAnalyticsScheduledTasks" + - $ref: "#/definitions/logAnalyticsEntityTypes" + - $ref: "#/definitions/managementAgents" + - $ref: "#/definitions/logAnalyticsSources" + - $ref: "#/definitions/privateEndpointVariable" + - $ref: "#/definitions/apmDomainVariable" + complexVariable: + oneOf: + - $ref: "#/definitions/listVariable" + - $ref: "#/definitions/mapVariable" + - $ref: "#/definitions/objectVariable" + + mapVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type, valueType] + properties: + type: + enum: [map] + default: + type: [string] + valueType: + type: [string] + additionalProperties: true + + listVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type, valueType] + properties: + type: + enum: [list] + default: + type: [string] + valueType: + type: [string] + additionalProperties: true + + objectVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type, attributes] + properties: + type: + enum: [object] + default: + type: string + attributes: + type: [array] + items: + type: string + additionalProperties: true + + nonNegativeInteger: + type: integer + minimum: 0 + + nonNegativeIntegerDefault0: + allOf: + - $ref: "#/definitions/nonNegativeInteger" + - default: 0 + + arrayVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [array] + items: + $ref: "#/definitions/variable" + maxItems: + $ref: "#/definitions/nonNegativeInteger" + minItems: + $ref: "#/definitions/nonNegativeIntegerDefault0" + uniqueItems: + type: boolean + default: false + contains: + $ref: "#/definitions/variable" + additionalProperties: true + + booleanVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [boolean] + default: + $ref: "#/definitions/booleanStatement" + default: false + additionalProperties: true + + enumVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [enum] + enum: + type: array + items: + type: string + default: + $ref: "#/definitions/booleanStatement" + allowMultiple: + type: boolean + default: false + additionalProperties: true + + integerVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [integer] + default: + type: integer + multipleOf: + type: number + exclusiveMinimum: 0 + minimum: + type: number + maximum: + type: number + exclusiveMinimum: + type: number + exclusiveMaximum: + type: number + additionalProperties: true + + numberVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [number] + default: + type: number + multipleOf: + type: number + exclusiveMinimum: 0 + minimum: + type: number + maximum: + type: number + exclusiveMinimum: + type: number + exclusiveMaximum: + type: number + additionalProperties: true + + stringVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [string] + default: + $ref: "#/definitions/booleanStatement" + pattern: + type: string + maxLength: + $ref: "#/definitions/nonNegativeInteger" + minLength: + $ref: "#/definitions/nonNegativeIntegerDefault0" + additionalProperties: true + + multilineVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [text] + default: + $ref: "#/definitions/booleanStatement" + pattern: + type: string + multiline: + type: boolean + maxLength: + $ref: "#/definitions/nonNegativeInteger" + minLength: + $ref: "#/definitions/nonNegativeIntegerDefault0" + additionalProperties: true + + fileVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [file] + additionalProperties: true + + passwordVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [password] + default: + $ref: "#/definitions/booleanStatement" + confirmation: + $ref: "#/definitions/booleanStatement" + additionalProperties: true + + datetimeVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: [datetime] + default: + $ref: "#/definitions/booleanStatement" + additionalProperties: true + + identityDomainVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:identity:domains:id"] + pattern: + type: string + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + imageVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:image:id"] + pattern: + type: string + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + shape: + type: string + format: variablereference + operatingSystem: + type: string + format: variablereference + operatingSystemVersion: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + instanceShapeVariableWithFlex: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:instanceshapewithflex:name"] + pattern: + type: string + dependsOn: + type: object + required: + - compartmentId + properties: + imageId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + availabilityDomain: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + instanceShapeVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:instanceshape:name"] + pattern: + type: string + dependsOn: + type: object + required: + - compartmentId + properties: + imageId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + availabilityDomain: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + natGatewayVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:natgateway:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + vcnId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + instanceVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:instance:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + subnetVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:subnet:id"] + dependsOn: + type: object + required: + - vcnId + - compartmentId + properties: + vcnId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + hidePublicSubnet: + $ref: "#/definitions/booleanStatement" + hidePrivateSubnet: + $ref: "#/definitions/booleanStatement" + hideRegionalSubnet: + $ref: "#/definitions/booleanStatement" + hideAdSubnet: + $ref: "#/definitions/booleanStatement" + additionalProperties: false + additionalProperties: true + + serviceGatewayVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:servicegateway:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + vcnId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + logAnalyticsLogGroup: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:logan:loggroup:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + logAnalyticsScheduledTasks: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:logan:scheduledtask:id"] + dependsOn: + type: object + required: + - compartmentId + - taskType + properties: + compartmentId: + type: string + format: variablereference + taskType: + type: string + additionalProperties: false + additionalProperties: true + + logAnalyticsLogEntities: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:logan:logentity:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + logAnalyticsEntityTypes: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + properties: + type: + enum: ["oci:logan:entitytype:id"] + additionalProperties: true + + managementAgents: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:mgmt:agent:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + logAnalyticsSources: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:logan:source:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + nsgVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:core:nsg:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + vcnId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + vcnVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:core:vcn:id"] + additionalProperties: true + + availabilityDomainVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:identity:availabilitydomain:name"] + additionalProperties: true + + compartmentVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: ["oci:identity:compartment:id"] + default: + $ref: "#/definitions/booleanStatement" + additionalProperties: true + + faultDomainVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:identity:faultdomain:name"] + dependsOn: + type: object + required: + - compartmentId + - availabilityDomainName + properties: + compartmentId: + type: string + format: variablereference + availabilityDomainName: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + regionVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: ["oci:identity:region:name"] + default: + $ref: "#/definitions/booleanStatement" + default: ${session.region} + additionalProperties: true + + dbSystemVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:database:dbsystem:id"] + additionalProperties: true + + dbHomeVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:database:dbhome:id"] + dependsOn: + type: object + required: + - dbSystemId + - compartmentId + properties: + dbSystemId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + dbHomeVersionVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:database:dbhome:dbversion"] + dependsOn: + type: object + required: + - dbHomeId + properties: + dbHomeId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + databaseVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:database:database:id"] + dependsOn: + type: object + required: + - dbHomeId + - compartmentId + properties: + dbHomeId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + autonomousDatabaseVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:database:autonomousdatabase:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + dbWorkload: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + autonomousDatabaseVersionVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:database:autonomousdatabaseversion:id"] + dependsOn: + type: object + properties: + compartmentId: + type: string + format: variablereference + dbWorkload: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + autonomousContainerDBVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:database:autonomouscontainerdatabase:id"] + additionalProperties: true + + kmsVaultVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:kms:vault:id"] + additionalProperties: true + + kmsKeyVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:kms:key:id"] + dependsOn: + type: object + required: + - compartmentId + - vaultId + properties: + compartmentId: + type: string + format: variablereference + vaultId: + type: string + format: variablereference + protectionMode: + type: string + format: variablereference + algorithm: + type: string + format: variablereference + length: + type: number + format: variablereference + curveId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + kmsSecretVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:kms:secret:id"] + dependsOn: + type: object + required: + - compartmentId + properties: + compartmentId: + type: string + format: variablereference + vaultId: + type: string + format: variablereference + name: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + containerClusterVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:container:cluster:id"] + additionalProperties: true + + sshPublicKeyVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: ["oci:core:ssh:publickey"] + additionalProperties: true + + kubernetesVersionsVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:kubernetes:versions:id"] + dependsOn: + type: object + required: + - clusterOptionId + - compartmentId + properties: + clusterOptionId: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + volumeBackupPoliciesVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: ["oci:blockstorage:policies:id"] + dependsOn: + type: object + properties: + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + groupsVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:identity:groups:id"] + additionalProperties: true + + dynamicGroupsVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:identity:dynamicgroups:id"] + additionalProperties: true + + loadBalancerVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:loadbalancer:loadbalancer:id"] + pattern: + type: string + additionalProperties: true + + mountTargetsVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: + - type + - dependsOn + properties: + type: + enum: ["oci:mount:target:id"] + dependsOn: + type: object + required: + - compartmentId + - availabilityDomain + properties: + availabilityDomain: + type: string + format: variablereference + compartmentId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + tagVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:identity:tag:value"] + additionalProperties: true + + odsProjectVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:ods:project:id"] + additionalProperties: true + + privateEndpointVariable: + allOf: + - $ref: "#/definitions/baseVariable" + - required: [type] + properties: + type: + enum: ["oci:resourcemanager:privateendpoint:id"] + dependsOn: + type: object + required: + - compartmentId + - vcnId + properties: + compartmentId: + type: string + format: variablereference + vcnId: + type: string + format: variablereference + additionalProperties: false + additionalProperties: true + + apmDomainVariable: + allOf: + - $ref: "#/definitions/dependsOnCompartment" + - required: [type] + properties: + type: + enum: ["oci:apm:domain:id"] + additionalProperties: true + + outputs: + type: object + additionalProperties: + $ref: "#/definitions/output" + + output: + oneOf: + - $ref: "#/definitions/booleanOutput" + - $ref: "#/definitions/numberOutput" + - $ref: "#/definitions/stringOutput" + - $ref: "#/definitions/copyableStringOutput" + - $ref: "#/definitions/linkOutput" + - $ref: "#/definitions/ocidOutput" + - $ref: "#/definitions/mapOutput" + - $ref: "#/definitions/jsonOutput" + - $ref: "#/definitions/listOutput" + - $ref: "#/definitions/csvOutput" + + outputGroups: + type: array + items: + $ref: "#/definitions/outputGroup" + + outputGroup: + type: object + required: + - title + - outputs + properties: + title: + type: string + outputs: + type: array + items: + type: string + additionalProperties: true + + baseOutput: + type: object + properties: + title: + type: string + description: + type: string + sensitive: + type: boolean + default: false + format: + type: string + visible: + type: boolean + default: true + additionalProperties: true + + booleanOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [boolean] + value: + type: boolean + additionalProperties: true + + numberOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [number] + value: + type: number + additionalProperties: true + + stringOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [string] + value: + type: string + additionalProperties: true + + copyableStringOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [copyableString] + value: + type: string + additionalProperties: true + + mapOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [map] + value: + type: object + additionalProperties: true + + jsonOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [json] + value: + type: object + additionalProperties: true + + listOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [list] + value: + type: array + additionalProperties: true + + csvOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [csv] + value: + type: array + additionalProperties: true + + linkOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [link] + displayText: + type: string + minLength: 3 + maxLength: 45 + value: + $ref: "#/definitions/url" + additionalProperties: true + + ocidOutput: + allOf: + - $ref: "#/definitions/baseOutput" + - required: [type] + properties: + type: + enum: [ocid] + value: + $ref: "#/definitions/ocid" + additionalProperties: true diff --git a/opentofu/tests/validate_omr_schema.py b/opentofu/tests/validate_omr_schema.py new file mode 100644 index 000000000..faba7fd6e --- /dev/null +++ b/opentofu/tests/validate_omr_schema.py @@ -0,0 +1,113 @@ +# pylint: disable=protected-access,import-error,import-outside-toplevel +""" +Copyright (c) 2024, 2025, Oracle and/or its affiliates. +Licensed under the Universal Permissive License v1.0 as shown at http://oss.oracle.com/licenses/upl. +""" +# spell-checker:ignore opentofu + +import sys +import yaml +from jsonschema import Draft7Validator +from referencing import Registry, Resource + + +class DuplicateKeyError(Exception): + """Exception raised when duplicate keys are found in YAML""" + + +class DuplicateKeyChecker(yaml.SafeLoader): # pylint: disable=too-many-ancestors + """Custom YAML loader that detects duplicate keys""" + + +def construct_mapping(loader, node): + """Override construct_mapping to detect duplicate keys""" + loader.flatten_mapping(node) + pairs = loader.construct_pairs(node) + + seen_keys = {} + for key, value in pairs: + if key in seen_keys: + # Found a duplicate key + raise DuplicateKeyError(f"Duplicate key '{key}' found at line {node.start_mark.line + 1}") + seen_keys[key] = value + + return seen_keys + + +# Register the custom constructor +DuplicateKeyChecker.add_constructor(yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, construct_mapping) + + +def load_yaml_file(path): + """Safely Load YAML and check for duplicate keys""" + with open(path, "r", encoding="utf-8") as f: + try: + return yaml.load(f, Loader=DuplicateKeyChecker) + except DuplicateKeyError as e: + print(f"[ERROR] {e}") + sys.exit(1) + + +def check_duplicate_variables_in_groups(data): + """Check if any variable appears in multiple variable groups""" + if "variableGroups" not in data: + return True + + seen_variables = {} + errors = [] + + for idx, group in enumerate(data["variableGroups"]): + group_title = group.get("title", f"Group {idx}") + variables = group.get("variables", []) + + for var in variables: + if var in seen_variables: + errors.append( + f"Variable '{var}' is listed in multiple variable groups: " + f"'{seen_variables[var]}' and '{group_title}'" + ) + else: + seen_variables[var] = group_title + + if errors: + for error in errors: + print(f"[ERROR] {error}") + return False + + return True + + +def main(schema_file, data_file): + """Validate OMR Schema""" + schema = load_yaml_file(schema_file) + data = load_yaml_file(data_file) + + # Check for duplicate variables in variable groups + has_no_duplicate_vars = check_duplicate_variables_in_groups(data) + + registry = Registry().with_resource( + uri="", # root document + resource=Resource.from_contents(schema), + ) + + # Create a validator from the root resource + validator = Draft7Validator(schema, registry=registry) + + # Validate + errors = sorted(validator.iter_errors(data), key=lambda e: e.path) + + if errors or not has_no_duplicate_vars: + if errors: + for error in errors: + path = "/".join(map(str, error.absolute_path)) or "" + print(f"[ERROR] {path}: {error.message}") + sys.exit(1) + else: + print("OMR Schema YAML is valid") + + +if __name__ == "__main__": + if len(sys.argv) != 3: + print("Usage: validate_yaml.py ") + sys.exit(1) + main(sys.argv[1], sys.argv[2]) diff --git a/opentofu/variables.tf b/opentofu/variables.tf new file mode 100644 index 000000000..9e6d1d858 --- /dev/null +++ b/opentofu/variables.tf @@ -0,0 +1,256 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl +# spell-checker: disable + +######################################################################### +# NOTE!! Variables specific to modules are in thier own module_*.tf file +######################################################################### +// Standard Default Vars +variable "tenancy_ocid" { + description = "The Tenancy ID of the OCI Cloud Account in which to create the resources." + type = string +} + +variable "compartment_ocid" { + description = "The compartment in which to create OCI Resources." + type = string +} + +variable "region" { + description = "The OCI Region where resources will be created." + type = string +} + +variable "user_ocid" { + description = "The ID of the User that terraform will use to create the resources." + type = string + default = "" +} + +variable "current_user_ocid" { + description = "DO NOT SET! This is strictly used for OCI ORM Installs." + type = string + default = "" +} + +variable "fingerprint" { + description = "Fingerprint of the API private key to use with OCI API." + type = string + default = "" +} + +variable "private_key" { + description = "The contents of the private key file to use with OCI API. This takes precedence over private_key_path if both are specified in the provider." + sensitive = true + type = string + default = null +} + +variable "private_key_path" { + description = "The path to the OCI API private key." + type = string + default = "" +} + +// Infrastructure Type/Label +variable "label_prefix" { + description = "Alpha Numeric (less than 12 characters) string that will be prepended to all resources. Leave blank to auto-generate." + type = string + default = "" + validation { + condition = can(regex("^[a-zA-Z0-9]*$", var.label_prefix)) || length(var.label_prefix) < 12 + error_message = "Must be Alpha Numeric and less than 12 characters." + } +} + +// Optimizer +variable "deploy_optimizer" { + description = "Determines if the AI Optimizer and Toolkit is deployed" + type = bool + default = false +} + +// Database +variable "byo_db_type" { + description = "Bring Your Own Database - Type" + type = string + default = "" + validation { + condition = contains(["", "ADB-S", "OTHER"], var.byo_db_type) + error_message = "Must be either ADB-S or OTHER." + } +} + +variable "byo_db_password" { + description = "Bring Your Own Database - Password" + type = string + default = "" + sensitive = true +} + +variable "byo_adb_ocid" { + description = "Bring Your Own Autonomous Database - OCID" + type = string + default = "" +} + +variable "byo_odb_host" { + description = "Bring Your Own Other Database - Hostname" + type = string + default = "" +} + +variable "byo_odb_port" { + description = "Bring Your Own Other Database - Port" + type = number + default = 1521 +} + +variable "byo_odb_service" { + description = "Bring Your Own Other Database - Service Name" + type = string + default = "" +} + +variable "adb_version" { + description = "Autonomous Database Version" + type = string + default = "26ai" + validation { + condition = contains(["26ai"], var.adb_version) + error_message = "Must be 26ai." + } +} + +variable "adb_ecpu_core_count" { + description = "Choose how many ECPU cores will be elastically allocated." + type = number + default = 2 + validation { + condition = var.adb_ecpu_core_count >= 2 && var.adb_ecpu_core_count <= 512 + error_message = "ADB ECPU count must be between 2 and 512" + } +} + +variable "adb_data_storage_size_in_gb" { + description = "Choose ADB Database Data Storage Size in gigabytes." + type = number + default = 20 + validation { + condition = var.adb_data_storage_size_in_gb >= 20 && var.adb_data_storage_size_in_gb <= 393216 + error_message = "Must be equal or greater than 20 and equal or less than 393216." + } +} + +variable "adb_is_cpu_auto_scaling_enabled" { + type = bool + default = true +} + +variable "adb_is_storage_auto_scaling_enabled" { + type = bool + default = true +} + +variable "adb_license_model" { + description = "Choose Autonomous Database license model." + type = string + default = "LICENSE_INCLUDED" + validation { + condition = contains(["LICENSE_INCLUDED", "BRING_YOUR_OWN_LICENSE"], var.adb_license_model) + error_message = "Must be either LICENSE_INCLUDED or BRING_YOUR_OWN_LICENSE." + } +} + +variable "adb_edition" { + # Only Applicable when adb_license_model=BYOL + description = "Oracle Database Edition that applies to the Autonomous databases (BYOL)." + type = string + default = "ENTERPRISE_EDITION" + validation { + condition = contains(["", "ENTERPRISE_EDITION", "STANDARD_EDITION"], var.adb_edition) + error_message = "Must be either ENTERPRISE_EDITION or STANDARD_EDITION." + } +} + +variable "adb_whitelist_cidrs" { + # This is a string and not a list to support ORM/MP input, it will be converted to a list in locals + description = "Comma separated string of CIDR blocks from which the ADB can be accessed." + type = string + default = "" + validation { + condition = can(regex("$|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$", var.adb_whitelist_cidrs)) + error_message = "Must be a comma separated string of valid CIDRs." + } +} + +variable "adb_networking" { + description = "Choose the Autonomous Database Network Access." + type = string + default = "SECURE_ACCESS" + validation { + condition = contains(["PRIVATE_ENDPOINT_ACCESS", "SECURE_ACCESS"], var.adb_networking) + error_message = "Must be either PRIVATE_ENDPOINT_ACCESS or SECURE_ACCESS." + } +} + +// Compute - Either VM or Node Workers +variable "compute_cpu_shape" { + description = "Choose the shape of the CPU Computes." + type = string + default = "VM.Standard.E5.Flex" + validation { + condition = contains(["VM.Standard.E5.Flex", "VM.Standard.E4.Flex", "VM.Standard.A1.Flex", "VM.Standard.A2.Flex", ], var.compute_cpu_shape) + error_message = "Must be either VM.Standard.E5.Flex, VM.Standard.E4.Flex, VM.Standard.A1.Flex, or VM.Standard.A2.Flex" + } +} + +variable "compute_cpu_ocpu" { + description = "The initial number of CPU(s) for the Computes." + type = number + default = 2 +} + +variable "compute_gpu_shape" { + description = "Choose the shape of the GPU Computes." + type = string + default = "VM.GPU.A10.1" + validation { + condition = contains(["VM.GPU.A10.1", "VM.GPU.A10.2"], var.compute_gpu_shape) + error_message = "Must be either VM.GPU.A10.1, or VM.GPU.A10.2." + } +} + +// LoadBalancer +variable "lb_min_shape" { + description = "LoadBalancer minimum bandwidth (Mbps)." + type = number + default = 10 +} + +variable "lb_max_shape" { + description = "LoadBalancer maximum bandwidth (Mbps)." + type = number + default = 10 +} + +// NSGs +variable "client_allowed_cidrs" { + description = "Comma separated string of CIDR blocks from which the application client can be accessed." + type = string + default = "0.0.0.0/0" + validation { + condition = can(regex("$|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$", var.client_allowed_cidrs)) + error_message = "Must be a comma separated string of valid CIDRs." + } +} + +variable "server_allowed_cidrs" { + description = "Comma separated string of CIDR blocks from which the application server can be accessed." + type = string + default = "0.0.0.0/0" + validation { + condition = can(regex("$|((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]).(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/(3[0-2]|[1-2]?[0-9])(,?)( ?)){1,}$", var.server_allowed_cidrs)) + error_message = "Must be a comma separated string of valid CIDRs." + } +} \ No newline at end of file diff --git a/opentofu/versions.tf b/opentofu/versions.tf new file mode 100644 index 000000000..918749726 --- /dev/null +++ b/opentofu/versions.tf @@ -0,0 +1,9 @@ +# Copyright (c) 2024, 2026, Oracle and/or its affiliates. +# All rights reserved. The Universal Permissive License (UPL), Version 1.0 as shown at http://oss.oracle.com/licenses/upl + +# Do Not Modify. Updated during release cycle. +locals { + app_version = "0.0.0" + compute_os_ver = "8.10" + k8s_version = "1.36.4" +}