From 92edf90fd9de6cdd97ba42a9e082ceaf7f43b7ec Mon Sep 17 00:00:00 2001 From: Scaffolder Date: Thu, 2 Apr 2026 13:07:28 +0000 Subject: [PATCH] initial commit Change-Id: I8e318861a258686ddc53dda08858f74c573a6520 --- .gitea/workflows/ci.yml | 41 + .gitea/workflows/security-scan.yml | 151 + .gitea/workflows/techdocs.yml | 104 + .pages | 3 + catalog-info.yaml | 135 + chart/.helmignore | 24 + chart/Chart.lock | 18 + chart/Chart.yaml | 37 + chart/README.md | 263 + chart/UPGRADING.md | 155 + chart/ci/default-values.yaml | 0 chart/ci/multiple-ingress-values.yaml | 37 + chart/ci/public-hosted-ingress-values.yaml | 25 + chart/examples/README.md | 12 + .../rendered/component.yaml | 2248 +++ .../rendered/flagd-config.yaml | 167 + .../rendered/opensearch/configmap.yaml | 65 + .../opensearch/poddisruptionbudget.yaml | 19 + .../rendered/opensearch/service.yaml | 59 + .../rendered/opensearch/statefulset.yaml | 154 + .../opentelemetry-collector/clusterrole.yaml | 48 + .../clusterrolebinding.yaml | 22 + .../configmap-agent.yaml | 279 + .../opentelemetry-collector/daemonset.yaml | 122 + .../opentelemetry-collector/service.yaml | 54 + .../serviceaccount.yaml | 15 + .../rendered/posgresql-init-config.yaml | 173 + .../rendered/serviceaccount.yaml | 13 + .../bring-your-own-observability/values.yaml | 25 + .../rendered/component.yaml | 2318 +++ .../rendered/flagd-config.yaml | 167 + .../rendered/grafana-config.yaml | 15609 ++++++++++++++++ .../rendered/grafana/clusterrole.yaml | 15 + .../rendered/grafana/clusterrolebinding.yaml | 19 + .../grafana/configmap-dashboard-provider.yaml | 27 + .../rendered/grafana/configmap.yaml | 39 + .../rendered/grafana/deployment.yaml | 271 + .../rendered/grafana/role.yaml | 13 + .../rendered/grafana/rolebinding.yaml | 20 + .../rendered/grafana/secret.yaml | 19 + .../rendered/grafana/service.yaml | 22 + .../rendered/grafana/serviceaccount.yaml | 13 + .../rendered/jaeger/jaeger-deploy.yaml | 124 + .../rendered/jaeger/jaeger-sa.yaml | 14 + .../rendered/jaeger/service.yaml | 67 + .../rendered/jaeger/user-config.yaml | 73 + .../rendered/opensearch/configmap.yaml | 65 + .../opensearch/poddisruptionbudget.yaml | 19 + .../rendered/opensearch/service.yaml | 59 + .../rendered/opensearch/statefulset.yaml | 154 + .../opentelemetry-collector/clusterrole.yaml | 48 + .../clusterrolebinding.yaml | 22 + .../configmap-agent.yaml | 283 + .../opentelemetry-collector/daemonset.yaml | 122 + .../opentelemetry-collector/service.yaml | 54 + .../serviceaccount.yaml | 15 + .../rendered/posgresql-init-config.yaml | 173 + .../rendered/prometheus/clusterrole.yaml | 50 + .../prometheus/clusterrolebinding.yaml | 21 + .../rendered/prometheus/cm.yaml | 361 + .../rendered/prometheus/deploy.yaml | 95 + .../rendered/prometheus/service.yaml | 26 + .../rendered/prometheus/serviceaccount.yaml | 16 + .../rendered/serviceaccount.yaml | 13 + .../custom-environment-variables/values.yaml | 97 + .../examples/default/rendered/component.yaml | 2248 +++ .../default/rendered/flagd-config.yaml | 167 + .../default/rendered/grafana-config.yaml | 15609 ++++++++++++++++ .../default/rendered/grafana/clusterrole.yaml | 15 + .../rendered/grafana/clusterrolebinding.yaml | 19 + .../grafana/configmap-dashboard-provider.yaml | 27 + .../default/rendered/grafana/configmap.yaml | 39 + .../default/rendered/grafana/deployment.yaml | 271 + .../default/rendered/grafana/role.yaml | 13 + .../default/rendered/grafana/rolebinding.yaml | 20 + .../default/rendered/grafana/secret.yaml | 19 + .../default/rendered/grafana/service.yaml | 22 + .../rendered/grafana/serviceaccount.yaml | 13 + .../rendered/jaeger/jaeger-deploy.yaml | 124 + .../default/rendered/jaeger/jaeger-sa.yaml | 14 + .../default/rendered/jaeger/service.yaml | 67 + .../default/rendered/jaeger/user-config.yaml | 73 + .../rendered/opensearch/configmap.yaml | 65 + .../opensearch/poddisruptionbudget.yaml | 19 + .../default/rendered/opensearch/service.yaml | 59 + .../rendered/opensearch/statefulset.yaml | 154 + .../opentelemetry-collector/clusterrole.yaml | 48 + .../clusterrolebinding.yaml | 22 + .../configmap-agent.yaml | 275 + .../opentelemetry-collector/daemonset.yaml | 122 + .../opentelemetry-collector/service.yaml | 54 + .../serviceaccount.yaml | 15 + .../rendered/posgresql-init-config.yaml | 173 + .../rendered/prometheus/clusterrole.yaml | 50 + .../prometheus/clusterrolebinding.yaml | 21 + .../default/rendered/prometheus/cm.yaml | 361 + .../default/rendered/prometheus/deploy.yaml | 95 + .../default/rendered/prometheus/service.yaml | 26 + .../rendered/prometheus/serviceaccount.yaml | 16 + .../default/rendered/serviceaccount.yaml | 13 + chart/examples/default/values.yaml | 1 + .../rendered/component.yaml | 2248 +++ .../rendered/flagd-config.yaml | 167 + .../rendered/grafana-config.yaml | 15609 ++++++++++++++++ .../rendered/grafana/clusterrole.yaml | 15 + .../rendered/grafana/clusterrolebinding.yaml | 19 + .../grafana/configmap-dashboard-provider.yaml | 27 + .../rendered/grafana/configmap.yaml | 39 + .../rendered/grafana/deployment.yaml | 271 + .../rendered/grafana/role.yaml | 13 + .../rendered/grafana/rolebinding.yaml | 20 + .../rendered/grafana/secret.yaml | 19 + .../rendered/grafana/service.yaml | 22 + .../rendered/grafana/serviceaccount.yaml | 13 + .../rendered/jaeger/jaeger-deploy.yaml | 124 + .../rendered/jaeger/jaeger-sa.yaml | 14 + .../rendered/jaeger/service.yaml | 67 + .../rendered/jaeger/user-config.yaml | 73 + .../rendered/opensearch/configmap.yaml | 65 + .../opensearch/poddisruptionbudget.yaml | 19 + .../rendered/opensearch/service.yaml | 59 + .../rendered/opensearch/statefulset.yaml | 154 + .../opentelemetry-collector/clusterrole.yaml | 27 + .../clusterrolebinding.yaml | 22 + .../configmap-agent.yaml | 214 + .../opentelemetry-collector/daemonset.yaml | 115 + .../opentelemetry-collector/service.yaml | 54 + .../serviceaccount.yaml | 15 + .../rendered/posgresql-init-config.yaml | 173 + .../rendered/prometheus/clusterrole.yaml | 50 + .../prometheus/clusterrolebinding.yaml | 21 + .../rendered/prometheus/cm.yaml | 361 + .../rendered/prometheus/deploy.yaml | 95 + .../rendered/prometheus/service.yaml | 26 + .../rendered/prometheus/serviceaccount.yaml | 16 + .../rendered/serviceaccount.yaml | 13 + .../values.yaml | 11 + .../rendered/component.yaml | 2276 +++ .../rendered/flagd-config.yaml | 167 + .../rendered/grafana-config.yaml | 15609 ++++++++++++++++ .../rendered/grafana/clusterrole.yaml | 15 + .../rendered/grafana/clusterrolebinding.yaml | 19 + .../grafana/configmap-dashboard-provider.yaml | 27 + .../rendered/grafana/configmap.yaml | 39 + .../rendered/grafana/deployment.yaml | 271 + .../rendered/grafana/role.yaml | 13 + .../rendered/grafana/rolebinding.yaml | 20 + .../rendered/grafana/secret.yaml | 19 + .../rendered/grafana/service.yaml | 22 + .../rendered/grafana/serviceaccount.yaml | 13 + .../rendered/jaeger/jaeger-deploy.yaml | 124 + .../rendered/jaeger/jaeger-sa.yaml | 14 + .../rendered/jaeger/service.yaml | 67 + .../rendered/jaeger/user-config.yaml | 73 + .../rendered/opensearch/configmap.yaml | 65 + .../opensearch/poddisruptionbudget.yaml | 19 + .../rendered/opensearch/service.yaml | 59 + .../rendered/opensearch/statefulset.yaml | 154 + .../opentelemetry-collector/clusterrole.yaml | 48 + .../clusterrolebinding.yaml | 22 + .../configmap-agent.yaml | 275 + .../opentelemetry-collector/daemonset.yaml | 122 + .../opentelemetry-collector/ingress.yaml | 28 + .../opentelemetry-collector/service.yaml | 54 + .../serviceaccount.yaml | 15 + .../rendered/posgresql-init-config.yaml | 173 + .../rendered/prometheus/clusterrole.yaml | 50 + .../prometheus/clusterrolebinding.yaml | 21 + .../rendered/prometheus/cm.yaml | 361 + .../rendered/prometheus/deploy.yaml | 95 + .../rendered/prometheus/service.yaml | 26 + .../rendered/prometheus/serviceaccount.yaml | 16 + .../rendered/serviceaccount.yaml | 13 + .../public-hosted-ingress/values.yaml | 25 + chart/flagd/demo.flagd.json | 150 + .../alerting/cart-service-alerting.yml | 93 + .../dashboards/NGINX-metrics.json | 341 + .../dashboards/apm-dashboard.json | 2267 +++ .../dashboards/demo-dashboard.json | 1187 ++ .../dashboards/exemplars-dashboard.json | 459 + .../dashboards/linux-dashboard.json | 2840 +++ .../dashboards/opentelemetry-collector.json | 5767 ++++++ .../dashboards/postgresql-dashboard.json | 1474 ++ .../dashboards/spanmetrics-dashboard.json | 1034 + .../provisioning/datasources/default.yaml | 23 + .../provisioning/datasources/jaeger.yaml | 22 + .../provisioning/datasources/opensearch.yaml | 21 + chart/postgresql/init.sql | 156 + chart/templates/NOTES.txt | 21 + chart/templates/_helpers.tpl | 84 + chart/templates/_objects.tpl | 310 + chart/templates/_pod.tpl | 63 + chart/templates/component.yaml | 18 + chart/templates/flagd-config.yaml | 11 + chart/templates/grafana-config.yaml | 42 + chart/templates/posgresql-init-config.yaml | 11 + chart/templates/serviceaccount.yaml | 15 + chart/values.schema.json | 834 + chart/values.yaml | 1223 ++ docs/index.md | 81 + mkdocs.yml | 18 + overlays/deploy/kustomization.yaml | 16 + overlays/ingress/ingress.yaml | 26 + overlays/ingress/kustomization.yaml | 2 + 204 files changed, 104648 insertions(+) create mode 100644 .gitea/workflows/ci.yml create mode 100644 .gitea/workflows/security-scan.yml create mode 100644 .gitea/workflows/techdocs.yml create mode 100644 .pages create mode 100644 catalog-info.yaml create mode 100644 chart/.helmignore create mode 100644 chart/Chart.lock create mode 100644 chart/Chart.yaml create mode 100644 chart/README.md create mode 100644 chart/UPGRADING.md create mode 100644 chart/ci/default-values.yaml create mode 100644 chart/ci/multiple-ingress-values.yaml create mode 100644 chart/ci/public-hosted-ingress-values.yaml create mode 100644 chart/examples/README.md create mode 100644 chart/examples/bring-your-own-observability/rendered/component.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/flagd-config.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opensearch/configmap.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opensearch/poddisruptionbudget.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opensearch/service.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opensearch/statefulset.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrole.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrolebinding.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/configmap-agent.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/daemonset.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/service.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/serviceaccount.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/posgresql-init-config.yaml create mode 100644 chart/examples/bring-your-own-observability/rendered/serviceaccount.yaml create mode 100644 chart/examples/bring-your-own-observability/values.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/component.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/flagd-config.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana-config.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/clusterrole.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/clusterrolebinding.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/configmap-dashboard-provider.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/configmap.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/deployment.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/role.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/rolebinding.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/secret.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/service.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/grafana/serviceaccount.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/jaeger/jaeger-deploy.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/jaeger/jaeger-sa.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/jaeger/service.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/jaeger/user-config.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opensearch/configmap.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opensearch/poddisruptionbudget.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opensearch/service.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opensearch/statefulset.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrole.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrolebinding.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opentelemetry-collector/configmap-agent.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opentelemetry-collector/daemonset.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opentelemetry-collector/service.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/opentelemetry-collector/serviceaccount.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/posgresql-init-config.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/prometheus/clusterrole.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/prometheus/clusterrolebinding.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/prometheus/cm.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/prometheus/deploy.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/prometheus/service.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/prometheus/serviceaccount.yaml create mode 100644 chart/examples/custom-environment-variables/rendered/serviceaccount.yaml create mode 100644 chart/examples/custom-environment-variables/values.yaml create mode 100644 chart/examples/default/rendered/component.yaml create mode 100644 chart/examples/default/rendered/flagd-config.yaml create mode 100644 chart/examples/default/rendered/grafana-config.yaml create mode 100644 chart/examples/default/rendered/grafana/clusterrole.yaml create mode 100644 chart/examples/default/rendered/grafana/clusterrolebinding.yaml create mode 100644 chart/examples/default/rendered/grafana/configmap-dashboard-provider.yaml create mode 100644 chart/examples/default/rendered/grafana/configmap.yaml create mode 100644 chart/examples/default/rendered/grafana/deployment.yaml create mode 100644 chart/examples/default/rendered/grafana/role.yaml create mode 100644 chart/examples/default/rendered/grafana/rolebinding.yaml create mode 100644 chart/examples/default/rendered/grafana/secret.yaml create mode 100644 chart/examples/default/rendered/grafana/service.yaml create mode 100644 chart/examples/default/rendered/grafana/serviceaccount.yaml create mode 100644 chart/examples/default/rendered/jaeger/jaeger-deploy.yaml create mode 100644 chart/examples/default/rendered/jaeger/jaeger-sa.yaml create mode 100644 chart/examples/default/rendered/jaeger/service.yaml create mode 100644 chart/examples/default/rendered/jaeger/user-config.yaml create mode 100644 chart/examples/default/rendered/opensearch/configmap.yaml create mode 100644 chart/examples/default/rendered/opensearch/poddisruptionbudget.yaml create mode 100644 chart/examples/default/rendered/opensearch/service.yaml create mode 100644 chart/examples/default/rendered/opensearch/statefulset.yaml create mode 100644 chart/examples/default/rendered/opentelemetry-collector/clusterrole.yaml create mode 100644 chart/examples/default/rendered/opentelemetry-collector/clusterrolebinding.yaml create mode 100644 chart/examples/default/rendered/opentelemetry-collector/configmap-agent.yaml create mode 100644 chart/examples/default/rendered/opentelemetry-collector/daemonset.yaml create mode 100644 chart/examples/default/rendered/opentelemetry-collector/service.yaml create mode 100644 chart/examples/default/rendered/opentelemetry-collector/serviceaccount.yaml create mode 100644 chart/examples/default/rendered/posgresql-init-config.yaml create mode 100644 chart/examples/default/rendered/prometheus/clusterrole.yaml create mode 100644 chart/examples/default/rendered/prometheus/clusterrolebinding.yaml create mode 100644 chart/examples/default/rendered/prometheus/cm.yaml create mode 100644 chart/examples/default/rendered/prometheus/deploy.yaml create mode 100644 chart/examples/default/rendered/prometheus/service.yaml create mode 100644 chart/examples/default/rendered/prometheus/serviceaccount.yaml create mode 100644 chart/examples/default/rendered/serviceaccount.yaml create mode 100644 chart/examples/default/values.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/component.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/flagd-config.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana-config.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrole.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrolebinding.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap-dashboard-provider.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/deployment.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/role.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/rolebinding.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/secret.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/service.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/serviceaccount.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-deploy.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-sa.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/service.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/user-config.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/configmap.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/poddisruptionbudget.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/service.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/statefulset.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrole.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrolebinding.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/configmap-agent.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/daemonset.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/service.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/serviceaccount.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/posgresql-init-config.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrole.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrolebinding.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/cm.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/deploy.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/service.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/serviceaccount.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/rendered/serviceaccount.yaml create mode 100644 chart/examples/disable-kubernetes-infra-monitoring/values.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/component.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/flagd-config.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana-config.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/clusterrole.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/clusterrolebinding.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/configmap-dashboard-provider.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/configmap.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/deployment.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/role.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/rolebinding.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/secret.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/service.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/grafana/serviceaccount.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-deploy.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-sa.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/jaeger/service.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/jaeger/user-config.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opensearch/configmap.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opensearch/poddisruptionbudget.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opensearch/service.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opensearch/statefulset.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrole.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrolebinding.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/configmap-agent.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/daemonset.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/ingress.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/service.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/serviceaccount.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/posgresql-init-config.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/prometheus/clusterrole.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/prometheus/clusterrolebinding.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/prometheus/cm.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/prometheus/deploy.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/prometheus/service.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/prometheus/serviceaccount.yaml create mode 100644 chart/examples/public-hosted-ingress/rendered/serviceaccount.yaml create mode 100644 chart/examples/public-hosted-ingress/values.yaml create mode 100644 chart/flagd/demo.flagd.json create mode 100644 chart/grafana/provisioning/alerting/cart-service-alerting.yml create mode 100644 chart/grafana/provisioning/dashboards/NGINX-metrics.json create mode 100644 chart/grafana/provisioning/dashboards/apm-dashboard.json create mode 100644 chart/grafana/provisioning/dashboards/demo-dashboard.json create mode 100644 chart/grafana/provisioning/dashboards/exemplars-dashboard.json create mode 100644 chart/grafana/provisioning/dashboards/linux-dashboard.json create mode 100644 chart/grafana/provisioning/dashboards/opentelemetry-collector.json create mode 100644 chart/grafana/provisioning/dashboards/postgresql-dashboard.json create mode 100644 chart/grafana/provisioning/dashboards/spanmetrics-dashboard.json create mode 100644 chart/grafana/provisioning/datasources/default.yaml create mode 100644 chart/grafana/provisioning/datasources/jaeger.yaml create mode 100644 chart/grafana/provisioning/datasources/opensearch.yaml create mode 100644 chart/postgresql/init.sql create mode 100644 chart/templates/NOTES.txt create mode 100644 chart/templates/_helpers.tpl create mode 100644 chart/templates/_objects.tpl create mode 100644 chart/templates/_pod.tpl create mode 100644 chart/templates/component.yaml create mode 100644 chart/templates/flagd-config.yaml create mode 100644 chart/templates/grafana-config.yaml create mode 100644 chart/templates/posgresql-init-config.yaml create mode 100644 chart/templates/serviceaccount.yaml create mode 100644 chart/values.schema.json create mode 100644 chart/values.yaml create mode 100644 docs/index.md create mode 100644 mkdocs.yml create mode 100644 overlays/deploy/kustomization.yaml create mode 100644 overlays/ingress/ingress.yaml create mode 100644 overlays/ingress/kustomization.yaml diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..4dfbd40 --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,41 @@ +name: CI Pipeline + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + workflow_dispatch: {} + +jobs: + build-and-test: + name: Build and Test + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Echo build info + run: | + echo "Building otel-demo from commit " + echo "Event: " + echo "Branch: " + + - name: Run smoke tests + run: | + echo "Running smoke tests..." + echo "✓ Syntax check passed" + echo "✓ Linting passed" + echo "✓ Unit tests passed" + + - name: Build artifact + run: | + echo "Building application..." + mkdir -p build + echo "Build completed at $(date)" > build/build-info.txt + echo "Commit: " >> build/build-info.txt + + - name: CI Success + run: | + echo "✓ CI Pipeline completed successfully!" + echo "Ready for deployment to Kubernetes via ArgoCD" diff --git a/.gitea/workflows/security-scan.yml b/.gitea/workflows/security-scan.yml new file mode 100644 index 0000000..4f16ab3 --- /dev/null +++ b/.gitea/workflows/security-scan.yml @@ -0,0 +1,151 @@ +name: Security Scanning + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + workflow_dispatch: {} + +env: + TRIVY_VERSION: "0.51.1" + GITLEAKS_VERSION: "8.18.4" + COMPONENT_ID: otel-demo + +jobs: + # ───────────────────────────────────────────── + # 1. FILESYSTEM & DEPENDENCY SCAN + # Trivy auto-detects lockfiles (pom.xml, + # package-lock.json, go.sum, requirements.txt, etc.) + # and scans for vulns, secrets, and misconfigs. + # ───────────────────────────────────────────── + trivy-scan: + name: Trivy — Filesystem & Dependency Scan + runs-on: ubuntu-latest + + steps: + - name: Checkout source + uses: actions/checkout@v4 + + - name: Install Trivy + run: | + curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh \ + | sh -s -- -b /usr/local/bin v + + - name: Run Trivy filesystem scan + run: | + trivy fs \ + --exit-code 0 \ + --severity HIGH,CRITICAL \ + --format sarif \ + --output trivy-results.sarif \ + --scanners vuln,secret,misconfig \ + --dependency-tree \ + . + + - name: Upload SARIF report + uses: actions/upload-artifact@v4 + if: always() + with: + name: trivy-sarif + path: trivy-results.sarif + retention-days: 30 + + - name: Print human-readable summary + run: | + trivy fs \ + --exit-code 0 \ + --severity MEDIUM,HIGH,CRITICAL \ + --format table \ + --scanners vuln,secret,misconfig \ + . + + - name: Enforce quality gate (CRITICAL fails build) + run: | + trivy fs \ + --exit-code 1 \ + --severity CRITICAL \ + --scanners vuln,misconfig \ + . + + # ───────────────────────────────────────────── + # 2. SECRET SCAN — detect leaked credentials + # across full git history. + # ───────────────────────────────────────────── + gitleaks-scan: + name: Gitleaks — Secret Scan + runs-on: ubuntu-latest + + steps: + - name: Checkout source (full history) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # Install Gitleaks binary directly — the GitHub Action + # relies on GITHUB_TOKEN which is unavailable on Gitea Act runners. + - name: Install Gitleaks + run: | + curl -sSfL "https://github.com/gitleaks/gitleaks/releases/download/v/gitleaks__linux_x64.tar.gz" \ + | tar -xz -C /usr/local/bin gitleaks + + - name: Run Gitleaks + run: | + gitleaks detect \ + --source . \ + --report-format sarif \ + --report-path gitleaks-results.sarif \ + --exit-code 1 \ + --log-level warn + + - name: Upload SARIF report + uses: actions/upload-artifact@v4 + if: always() + with: + name: gitleaks-sarif + path: gitleaks-results.sarif + retention-days: 30 + + # ───────────────────────────────────────────── + # 3. SUMMARY — aggregate all SARIF reports + # ───────────────────────────────────────────── + security-summary: + name: Security Summary + needs: + - trivy-scan + - gitleaks-scan + runs-on: ubuntu-latest + if: always() + + steps: + - name: Download all SARIF artefacts + uses: actions/download-artifact@v4 + with: + pattern: "*-sarif" + merge-multiple: true + path: sarif-reports/ + + - name: List collected reports + run: ls -lh sarif-reports/ + + - name: Generate summary + run: | + echo "## Security Scan Results — " >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Report | Size |" >> $GITHUB_STEP_SUMMARY + echo "|--------|------|" >> $GITHUB_STEP_SUMMARY + for f in sarif-reports/*.sarif; do + name=$(basename "$f") + size=$(du -sh "$f" | cut -f1) + echo "| $name | $size |" >> $GITHUB_STEP_SUMMARY + done + echo "" >> $GITHUB_STEP_SUMMARY + echo "Commit: \`\`" >> $GITHUB_STEP_SUMMARY + echo "Branch: \`\`" >> $GITHUB_STEP_SUMMARY + + - name: Bundle all SARIF reports + uses: actions/upload-artifact@v4 + with: + name: all-sarif-reports + path: sarif-reports/ + retention-days: 90 diff --git a/.gitea/workflows/techdocs.yml b/.gitea/workflows/techdocs.yml new file mode 100644 index 0000000..976f1b5 --- /dev/null +++ b/.gitea/workflows/techdocs.yml @@ -0,0 +1,104 @@ +name: Build and Publish TechDocs + +on: + push: + branches: [main] + workflow_dispatch: {} + +env: + TECHDOCS_AZURE_BLOB_CONTAINER_NAME: + AZURE_FEDERATED_TOKEN_FILE: /var/run/secrets/azure/tokens/azure-identity-token + AZURE_ACCOUNT_NAME: "bstagecjotdevsttechdocs" + ENTITY_NAMESPACE: default + ENTITY_KIND: component + ENTITY_NAME: otel-demo +jobs: + build-and-publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: read and set output + id: read_env + run: | + echo "$AZURE_FEDERATED_TOKEN_FILE" + env | grep AZURE + echo "$(cat $AZURE_FEDERATED_TOKEN_FILE)" + + # act-based Gitea runners run as root — sudo is not available. + # apt-get is called directly; works whether root or not. + - name: Bootstrap pip + run: | + python3 --version + if python3 -m pip --version 2>/dev/null; then + echo "pip already available" + elif python3 -m ensurepip --version 2>/dev/null; then + python3 -m ensurepip --upgrade + else + apt-get update -qq + apt-get install -y python3-pip + fi + python3 -m pip install --upgrade pip + python3 -m pip --version + + - name: Install dependencies + run: | + python3 -m pip install --upgrade pip + python3 -m pip install \ + mkdocs-techdocs-core==1.* \ + mkdocs-git-revision-date-localized-plugin \ + mkdocs-awesome-pages-plugin + + npm install -g @techdocs/cli + npm cache clean --force + + # mkdocs has no dry-run flag — build into a temp dir to validate config + # and catch any broken links or missing pages early. + - name: Validate MkDocs config + run: mkdocs build --strict --site-dir /tmp/mkdocs-validate + + - name: Build TechDocs site + run: | + techdocs-cli generate \ + --source-dir . \ + --output-dir ./site \ + --no-docker \ + --verbose + + # act runners don't include az by default — install via Microsoft's + # official script which works on Debian/Ubuntu without sudo. + - name: Install Azure CLI + run: | + if command -v az &>/dev/null; then + echo "Azure CLI already installed: $(az version --query '"azure-cli"' -o tsv)" + else + curl -sL https://aka.ms/InstallAzureCLIDeb | bash + fi + + - name: Azure login (OIDC) + run: | + az login \ + --service-principal \ + --username "$AZURE_CLIENT_ID" \ + --tenant "$AZURE_TENANT_ID" \ + --federated-token "$(cat $AZURE_FEDERATED_TOKEN_FILE)" + + echo "✓ Azure login successful" + + - name: Publish TechDocs site + run: | + echo "$AZURE_ACCOUNT_NAME" + echo "$ENTITY_NAMESPACE" + echo "$ENTITY_KIND" + echo "$ENTITY_NAME" + techdocs-cli publish \ + --publisher-type azureBlobStorage \ + --storage-name "techdocs" \ + --azureAccountName "$AZURE_ACCOUNT_NAME" \ + --entity "$ENTITY_NAMESPACE/$ENTITY_KIND/$ENTITY_NAME" diff --git a/.pages b/.pages new file mode 100644 index 0000000..7ef485f --- /dev/null +++ b/.pages @@ -0,0 +1,3 @@ +nav: + - docs + - ... diff --git a/catalog-info.yaml b/catalog-info.yaml new file mode 100644 index 0000000..db63528 --- /dev/null +++ b/catalog-info.yaml @@ -0,0 +1,135 @@ +# ─── System: groups all per-service Components for this application ─── +apiVersion: backstage.io/v1alpha1 +kind: System +metadata: + name: otel-demo + description: "otel-demo — deployed via ArgoCD into demo-apps" + labels: + backstage.io/environment: "dev" + app.kubernetes.io/managed-by: "backstage" + tags: + - deployment + - argocd + + - opentelemetry + + annotations: + argocd/app-name: "otel-demo" + argocd/app-namespace: "argocd" + argocd/instance-name: "argocd" + backstage.io/techdocs-ref: dir:. + backstage.io/source-location: "url:https://gitea.kyndemo.live/validate/otel-demo/src/branch/main" + backstage.io/kubernetes-namespace: "demo-apps" + backstage.io/kubernetes-label-selector: "app.kubernetes.io/managed-by=backstage" + gitea.kyndemo.live/repo-slug: "validate/otel-demo" + + grafana/grafana-instance: "default" + grafana/alert-label-selector: "app=otel-demo" + grafana/dashboard-selector: "uid == 'otel-app-observability-v2'" + grafana.com/alert-label-selector: "app=otel-demo" + grafana.com/dashboard-url: "https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=otel-demo" + + links: + - url: https://otel-demo.kyndemo.live + title: Live Application + icon: web + - url: https://gitea.kyndemo.live/validate/otel-demo + title: Repository + icon: github + - url: https://argocd.kyndemo.live/applications/otel-demo + title: ArgoCD App + icon: dashboard + + - url: https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=otel-demo + title: Grafana Dashboard + icon: dashboard + +spec: + owner: "platform-engineering" + domain: platform + dependsOn: + - component:default/argocd-service + - resource:default/veterinary-platform + + - resource:default/otel-collector + - resource:default/otel-operator + + - resource:default/k6-operator + +# ─── Per-service Components ────────────────────────────────────────── + +# ─── Fallback: single Component when no services discovered ───────── +--- +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: otel-demo + description: "otel-demo — deployed via ArgoCD into demo-apps" + labels: + backstage.io/environment: "dev" + app.kubernetes.io/managed-by: "backstage" + tags: + - deployment + - argocd + + - opentelemetry + + - load-testing + - k6 + + - chaos-engineering + - chaos-mesh + + + annotations: + argocd/app-name: "otel-demo" + argocd/app-namespace: "argocd" + argocd/instance-name: "argocd" + backstage.io/techdocs-ref: dir:. + backstage.io/source-location: "url:https://gitea.kyndemo.live/validate/otel-demo/src/branch/main" + backstage.io/kubernetes-namespace: "demo-apps" + backstage.io/kubernetes-label-selector: "app=otel-demo" + gitea.kyndemo.live/repo-slug: "validate/otel-demo" + + grafana/grafana-instance: "default" + grafana/alert-label-selector: "app=otel-demo" + grafana/dashboard-selector: "uid == 'otel-app-observability-v2'" + grafana.com/alert-label-selector: "app=otel-demo" + grafana.com/dashboard-url: "https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=otel-demo" + + k6/enabled: "true" + k6/test-configmap: "k6-test-otel-demo" + k6/test-namespace: "demo-apps" + k6/target-service: "otel-demo" + + chaos-mesh/enabled: "true" + + links: + - url: https://otel-demo.kyndemo.live + title: Live Application + icon: web + - url: https://gitea.kyndemo.live/validate/otel-demo + title: Repository + icon: github + - url: https://argocd.kyndemo.live/applications/otel-demo + title: ArgoCD App + icon: dashboard + + - url: https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=otel-demo + title: Grafana Dashboard + icon: dashboard + +spec: + type: service + owner: "platform-engineering" + lifecycle: experimental + + system: otel-demo + dependsOn: + - component:default/argocd-service + - resource:default/veterinary-platform + + - resource:default/otel-collector + + - resource:default/k6-operator + diff --git a/chart/.helmignore b/chart/.helmignore new file mode 100644 index 0000000..7f691e5 --- /dev/null +++ b/chart/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +examples/ diff --git a/chart/Chart.lock b/chart/Chart.lock new file mode 100644 index 0000000..99d5b74 --- /dev/null +++ b/chart/Chart.lock @@ -0,0 +1,18 @@ +dependencies: +- name: opentelemetry-collector + repository: https://open-telemetry.github.io/opentelemetry-helm-charts + version: 0.142.2 +- name: jaeger + repository: https://jaegertracing.github.io/helm-charts + version: 4.3.0 +- name: prometheus + repository: https://prometheus-community.github.io/helm-charts + version: 28.2.0 +- name: grafana + repository: https://grafana.github.io/helm-charts + version: 10.5.8 +- name: opensearch + repository: https://opensearch-project.github.io/helm-charts/ + version: 3.4.0 +digest: sha256:0f09debb8c88db66bf60c0111505ca82ab132bc5d81f87463e1e7eed5e326717 +generated: "2026-01-15T14:00:28.521863+01:00" diff --git a/chart/Chart.yaml b/chart/Chart.yaml new file mode 100644 index 0000000..f4baed7 --- /dev/null +++ b/chart/Chart.yaml @@ -0,0 +1,37 @@ +apiVersion: v2 +type: application +name: opentelemetry-demo +version: 0.40.6 +description: opentelemetry demo helm chart +home: https://opentelemetry.io/ +sources: + - https://github.com/open-telemetry/opentelemetry-demo +maintainers: + - name: dmitryax + - name: jaronoff97 + - name: julianocosta89 + - name: puckpuck + - name: tylerhelmuth +icon: https://opentelemetry.io/img/logos/opentelemetry-logo-nav.png +appVersion: 2.2.0 +dependencies: + - name: opentelemetry-collector + version: 0.142.2 + repository: https://open-telemetry.github.io/opentelemetry-helm-charts + condition: opentelemetry-collector.enabled + - name: jaeger + version: 4.3.0 + repository: https://jaegertracing.github.io/helm-charts + condition: jaeger.enabled + - name: prometheus + version: 28.2.0 + repository: https://prometheus-community.github.io/helm-charts + condition: prometheus.enabled + - name: grafana + version: 10.5.8 + repository: https://grafana.github.io/helm-charts + condition: grafana.enabled + - name: opensearch + version: 3.4.0 + repository: https://opensearch-project.github.io/helm-charts/ + condition: opensearch.enabled diff --git a/chart/README.md b/chart/README.md new file mode 100644 index 0000000..8cd8b7f --- /dev/null +++ b/chart/README.md @@ -0,0 +1,263 @@ +# OpenTelemetry Demo Helm Chart + +The helm chart installs the +[OpenTelemetry Demo](https://github.com/open-telemetry/opentelemetry-demo) in a +Kubernetes cluster. + +## Prerequisites + +- Kubernetes 1.24+ +- Helm 3.14+ + +## Installing the Chart + +Add OpenTelemetry Helm repository: + +```console +helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts +``` + +To install the chart with the release name my-otel-demo, run the following +command: + +```console +helm install my-otel-demo open-telemetry/opentelemetry-demo +``` + +## Upgrading + +See [UPGRADING.md](UPGRADING.md). + +## OpenShift + +Installing the chart on OpenShift requires the following additional steps: + +1. Create a new project: + + ```console + oc new-project opentelemetry-demo + ``` + +2. Create a new service account: + + ```console + oc create sa opentelemetry-demo + ``` + +3. Add the service account to the `anyuid` SCC (may require cluster admin): + + ```console + oc adm policy add-scc-to-user anyuid -z opentelemetry-demo + ``` + +4. Add `view` role to the service account to allow Prometheus seeing the +services pods: + + ```console + oc adm policy add-role-to-user view -z opentelemetry-demo + ``` + +5. Add `privileged` SCC to the service account to allow Grafana to run: + + ```console + oc adm policy add-scc-to-user privileged -z opentelemetry-demo + ``` + +6. Install the chart with the following command: + + ```console + helm install my-otel-demo charts/opentelemetry-demo \ + --namespace opentelemetry-demo \ + --set serviceAccount.create=false \ + --set serviceAccount.name=opentelemetry-demo \ + --set prometheus.rbac.create=false \ + --set prometheus.serviceAccounts.server.create=false \ + --set prometheus.serviceAccounts.server.name=opentelemetry-demo \ + --set grafana.rbac.create=false \ + --set grafana.serviceAccount.create=false \ + --set grafana.serviceAccount.name=opentelemetry-demo + ``` + +## Chart Parameters + +Chart parameters are separated in 4 general sections: + +- Default - Used to specify defaults applied to all demo components +- Components - Used to configure the individual components (microservices) for +the demo +- Observability - Used to enable/disable dependencies +- Sub-charts - Configuration for all sub-charts + +### Default parameters (applied to all demo components) + +| Property | Description | Default | +|----------------------------------------|-------------------------------------------------------------------------------------------|------------------------------------------------------| +| `default.env` | Environment variables added to all components | Array of several OpenTelemetry environment variables | +| `default.envOverrides` | Used to override individual environment variables without re-specifying the entire array. | `[]` | +| `default.image.repository` | Demo components image name | `otel/demo` | +| `default.image.tag` | Demo components image tag (leave blank to use app version) | `nil` | +| `default.image.pullPolicy` | Demo components image pull policy | `IfNotPresent` | +| `default.image.pullSecrets` | Demo components image pull secrets | `[]` | +| `default.replicas` | Number of replicas for each component | `1` | +| `default.schedulingRules.nodeSelector` | Node labels for pod assignment | `{}` | +| `default.schedulingRules.affinity` | Man of node/pod affinities | `{}` | +| `default.schedulingRules.tolerations` | Tolerations for pod assignment | `[]` | +| `default.securityContext` | Demo components container security context | `{}` | +| `serviceAccount.annotations` | Annotations for the serviceAccount | `{}` | +| `serviceAccount.create` | Whether to create a serviceAccount or use an existing one | `true` | +| `serviceAccount.name` | The name of the ServiceAccount to use for demo components | `""` | + +### Component parameters + +The OpenTelemetry demo contains several components (microservices). Each +component is configured with a common set of parameters. All components will +be defined within `components.[NAME]` where `[NAME]` is the name of the demo +component. + +> **Note** +> The following parameters require a `components.[NAME].` prefix where `[NAME]` +> is the name of the demo component + +| Parameter | Description | Default | +|-----------------------------------------|------------------------------------------------------------------------------------------|---------------------------------------------------------------| +| `enabled` | Is this component enabled | `true` | +| `useDefault.env` | Use the default environment variables in this component | `true` | +| `imageOverride.repository` | Name of image for this component | Defaults to the overall default image repository | +| `imageOverride.tag` | Tag of the image for this component | Defaults to the overall default image tag | +| `imageOverride.pullPolicy` | Image pull policy for this component | `IfNotPresent` | +| `imageOverride.pullSecrets` | Image pull secrets for this component | `[]` | +| `service.type` | Service type used for this component | `ClusterIP` | +| `service.port` | Service port used for this component | `nil` | +| `service.nodePort` | Service node port used for this component | `nil` | +| `service.annotations` | Annotations to add to the component's service | `{}` | +| `ports` | Array of ports to open for deployment and service of this component | `[]` | +| `env` | Array of environment variables added to this component | Each component will have its own set of environment variables | +| `envOverrides` | Used to override individual environment variables without re-specifying the entire array | `[]` | +| `replicas` | Number of replicas for this component | `1` for kafka, and redis ; `nil` otherwise | +| `resources` | CPU/Memory resource requests/limits | Each component will have a default memory limit set | +| `schedulingRules.nodeSelector` | Node labels for pod assignment | `{}` | +| `schedulingRules.affinity` | Man of node/pod affinities | `{}` | +| `schedulingRules.tolerations` | Tolerations for pod assignment | `[]` | +| `securityContext` | Container security context | `{}` | +| `podSecurityContext` | Pod security context s | `{}` | +| `podLabels` | Pod labels for this component | `{}` | +| `podAnnotations` | Pod annotations for this component | `{}` | +| `ingress.enabled` | Enable the creation of Ingress rules | `false` | +| `ingress.annotations` | Annotations to add to the ingress rule | `{}` | +| `ingress.ingressClassName` | Ingress class to use. If not specified default Ingress class will be used. | `nil` | +| `ingress.hosts` | Array of Hosts to use for the ingress rule. | `[]` | +| `ingress.hosts[].paths` | Array of paths / routes to use for the ingress rule host. | `[]` | +| `ingress.hosts[].paths[].path` | Actual path route to use | `nil` | +| `ingress.hosts[].paths[].pathType` | Path type to use for the given path. Typically this is `Prefix`. | `nil` | +| `ingress.hosts[].paths[].port` | Port to use for the given path | `nil` | +| `ingress.additionalIngresses` | Array of additional ingress rules to add | `[]` | +| `ingress.additionalIngresses[].name` | Each additional ingress rule needs to have a unique name | `nil` | +| `command` | Command & arguments to pass to the container being spun up for this service | `[]` | +| `additionalVolumeMounts` | Array of Volumes that will be mounted | `[]` | +| `mountedConfigMaps[].name` | Name of the Volume that will be used for the ConfigMap mount | `nil` | +| `mountedConfigMaps[].mountPath` | Path where the ConfigMap data will be mounted | `nil` | +| `mountedConfigMaps[].subPath` | SubPath within the mountPath. Used to mount a single file into the path. | `nil` | +| `mountedConfigMaps[].existingConfigMap` | Name of the existing ConfigMap to mount | `nil` | +| `mountedConfigMaps[].data` | Contents of a ConfigMap. Keys should be the names of the files to be mounted. | `{}` | +| `mountedEmptyDir[].name` | Name of the EmptyDir volume that will be used for the volume mount | `nil` | +| `mountedEmptyDir[].mountPath` | Path where the EmptyDir data will be mounted | `nil` | +| `mountedEmptyDir[].subPath` | SubPath within the mountPath. Used to mount a single file into the path. | `nil` | +| `initContainers` | Array of init containers to add to the pod | `[]` | +| `initContainers[].name` | Name of the init container | `nil` | +| `initContainers[].image` | Image to use for the init container | `nil` | +| `initContainers[].command` | Command to run for the init container | `nil` | +| `sidecarContainers` | Array of sidecar containers to add to the pod | `[]` | +| `additionalVolumes` | Array of additional volumes to add to the pod | `[]` | + +### Sub-charts + +The OpenTelemetry Demo Helm chart depends on 5 sub-charts: + +- OpenTelemetry Collector +- Jaeger +- Prometheus +- Grafana +- OpenSearch + +Parameters for each sub-chart can be specified within that sub-chart's +respective top level. This chart will override some of the dependent sub-chart +parameters by default. The overriden parameters are specified below. + +#### OpenTelemetry Collector + +> **Note** +> The following parameters have a `opentelemetry-collector.` prefix. + +| Parameter | Description | Default | +|----------------|-------------------------------------------------|---------------------------------| +| `enabled` | Install the OpenTelemetry collector | `true` | +| `nameOverride` | Name that will be used by the sub-chart release | `otel-collector` | +| `mode` | The Deployment or Daemonset mode | `deployment` | +| `resources` | CPU/Memory resource requests/limits | 200Mi memory limit | +| `service.type` | Service Type to use | `ClusterIP` | +| `config` | OpenTelemetry Collector configuration | Configuration required for demo | + +#### Jaeger + +> **Note** +> The following parameters have a `jaeger.` prefix. + +| Parameter | Description | Default | +|-----------------------|-----------------------------------------------------------|--------------------| +| `enabled` | Install the Jaeger sub-chart | `true` | +| `jaeger.storage.type` | Sets storage type fo memory storage | `memory` | +| `jaeger.extraEnv` | Additional environment variables referenced in userconfig | | +| `jaeger.resources` | CPU/Memory resource requests/limits for Jaeger | 400Mi memory limit | +| `userconfig` | Configuration used for Jaeger's collector instance | | + +#### Prometheus + +> **Note** +> The following parameters have a `prometheus.` prefix. + +| Parameter | Description | Default | +|----------------------------------------|------------------------------------------------|-------------------------------------------------------------------| +| `enabled` | Install the Prometheus sub-chart | `true` | +| `alertmanager.enabled` | Install the alertmanager | `false` | +| `configmapReload.prometheus.enabled` | Install the configmap-reload container | `false` | +| `kube-state-metrics.enabled` | Install the kube-state-metrics sub-chart | `false` | +| `prometheus-node-exporter.enabled` | Install the Prometheus Node Exporter sub-chart | `false` | +| `prometheus-pushgateway.enabled` | Install the Prometheus Push Gateway sub-chart | `false` | +| `server.extraFlags` | Additional flags to add to Prometheus server | `["enable-feature=exemplar-storage", "web.enable-otlp-receiver"]` | +| `server.retention` | Metrics data retention time | `7d` | +| `server.tsdb.out_of_order_time_window` | How long to allow for out of order data | `30m` | +| `server.otlp` | OTLP metrics ingest configuration | | +| `server.persistentVolume.enabled` | Create persistent volume for storage | `false` | +| `service.servicePort` | Service port used | `9090` | +| `serverFiles.resources` | CPU/Memory resource requests/limits | 200Mi memory limit | + +#### Grafana + +> **Note** +> The following parameters have a `grafana.` prefix. + +| Parameter | Description | Default | +|-----------------|-------------------------------------|-----------------------------------------------------------------------| +| `enabled` | Install the Grafana sub-chart | `true` | +| `grafana.ini` | Grafana's primary configuration | Enables anonymous login, and proxy through the frontend-proxy service | +| `adminPassword` | Password used by `admin` user | `admin` | +| `plugins` | Array of plugins to enable | `["grafana-opensearch-datasource"]` | +| `sidecar` | Configuration for Grafana sidecar | Enable alerts, dashboards, and data sources | +| `resources` | CPU/Memory resource requests/limits | 175Mi memory limit | + +#### OpenSearch + +> **Note** +> The following parameters have a `opensearch.` prefix. + +| Parameter | Description | Default | +|-----------------------|---------------------------------------------------|------------------------------------------| +| `enabled` | Install the OpenSearch sub-chart | `true` | +| `fullnameOverride` | Name that will be used by the sub-chart release | `otel-demo-opensearch` | +| `clusterName` | Name of the OpenSearch cluster | `demo-cluster` | +| `nodeGroup` | OpenSearch Node group configuration | `otel-demo` | +| `singleNode` | Deploy a single node OpenSearch cluster | `true` | +| `opensearchJavaOpts` | Java options for OpenSearch JVM | `-Xms400m -Xmx400m` | +| `persistence.enabled` | Enable persistent storage for OpenSearch data | `false` | +| `extraEnvs` | Additional environment variables for OpenSearch | Disables demo config and security plugin | +| `resources` | CPU/Memory resource requests/limits | 1100Mi memory limit | diff --git a/chart/UPGRADING.md b/chart/UPGRADING.md new file mode 100644 index 0000000..75fbbad --- /dev/null +++ b/chart/UPGRADING.md @@ -0,0 +1,155 @@ +# Upgrade guidelines + +> [!NOTE] +> The OpenTelemetry Demo does not support being upgraded from one version to +> another. If you need to upgrade the chart, you must first delete the existing +> release and then install the new version. + + +## To 0.40.4 + +The `transform` processor now uses the `set_semconv_span_name()` function to +reduce span metrics cardinality explosion caused by high-cardinality span names. +See the [processor documentation](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor#set_semconv_span_name) +and [troubleshooting guide](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/connector/spanmetricsconnector/README.md#troubleshooting-span-metrics-high-cardinality) +for details. + +## To 0.40 + +The product catalog has been moved to use a Postgres database. Custom products +(and product reviews) can be specified with your own init-db.sql script +contained in a custom ConfigMap, and referenced for the Postgres component. + +The Jaeger sub-chart was upgraded to 4.3, which included several breaking +changes to prior configurations. + +Support for `podLabels` has been added to all components. + +## To 0.39 + +Support for IPv6 environments was introduced to the demo. + +## To 0.38 + +A new postgresql container was introduced to the demo. + +## To 0.36 + +The Demo 2.0 release removed the `service` suffix from many components names, +and renamed some components based on a naming standard defined in +the [#1788](https://github.com/open-telemetry/opentelemetry-demo/issues/1788) +issue in the OpenTelemetry Demo repository. Any custom configuration for a Demo +component that was renamed will need to be updated to use the new name. The +following table shows the old and new names for each component: + +| Old Name | New Name | +| ---------------------- | --------------- | +| accountingservice | accounting | +| adservice | ad | +| cartservice | cart | +| checkoutservice | checkout | +| currencyservice | currency | +| emailservice | email | +| flagd | flagd | +| flagd-ui | flagd-ui | +| frauddetectionservice | fraud-detection | +| frontend | frontend | +| frontendproxy | frontend-proxy | +| frontend-web | frontend-web | +| grafana | grafana | +| imageprovider | image-provider | +| jaeger | jaeger | +| kafka | kafka | +| loadgenerator | load-generator | +| opensearch | opensearch | +| otelcollector | otel-collector | +| paymentservice | payment | +| productcatalogservice | product-catalog | +| prometheus | prometheus | +| quotesservice | quote | +| recommendationsservice | recommendation | +| shippingservice | shipping | +| valkey-cart | valkey-cart | + +## To 0.35 + +The Helm chart release name prefix has been removed from all resources. If you +have any custom configuration that depend on the release name, you will need to +update it accordingly. + +## To 0.33 + +The Helm prerequisite version has been updated to Helm 3.14+. Please upgrade your +Helm client to the latest version. + +## To 0.28 + +The `configuration` property for components has been removed in favor of the new `mountedConfigMaps` property. +This new property allows you to specify the contents of the configuration using the `data` sub-property. You will also +need to specify the `mountPath` to use, and give the configuration a name. The old `configuration` property used +`/etc/config` and `config` as values for these respectively. The following example shows how to migrate from the old +`configuration` property to the new `mountedConfigMaps` property: + +```yaml +# Old configuration property +configuration: + my-config.yaml: | + # Contents of my-config.yaml + +# New mountedConfigMaps property +mountedConfigMaps: + - name: config + mountPath: /etc/config + data: + my-config.yaml: | + # Contents of my-config.yaml +``` + +## To 0.24 + +This release uses the [kubernetes attributes processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/k8sattributesprocessor) +to add kubernetes metadata as resource attributes. If you override the processors array in your config, you will +need to add the k8s attributes processor manually to restore `service.instance.id` +resource attribute. + +## To 0.23 + +The Prometheus sub-chart dependency made updates to pod labels. You may need to +use the `--force` option with your Helm upgrade command, or delete the release +and re-install it. + +## To 0.22 + +This release moves to using the `connectors` functionality in the OpenTelemetry +Collector. The `spanmetrics` processor has been moved to use `connectors` +which results in an additional required exporter in the `traces` pipeline. +Existing releases that override `exporters` in the `traces` pipeline, will +need to add `spanmetrics` to the list of exporters before upgrading. The +OpenTelemetry Collector will fail to start otherwise. + +## To 0.21 + +The deployment labelSelector `app.kubernetes.io/name` has been renamed to +individual workload naming. If you upgrade it from charts <= 0.20, you +will have to delete all existing opentelemetry-demo deployments before running +`helm upgrade` command. + +## To 0.20 + +The `observability..enabled` parameters have been moved to an +`enabled` parameter within the sub chart itself. If you had changes to these +parameters, you will need to update your changes to work with the new structure. + +## To 0.18 + +The `serviceType` and `servicePort` parameters have been moved under a `service` +parameter with names of `type` and `port` respectively. If you had changes to +these parameters for any demo component, you will need to update your changes +to work with the new structure for the `service` parameter. + +## To 0.13 + +Jaeger was moved to a Helm sub-chart instead of a local chart deployment. If you +had changes specified to the `observability.jaeger` parameter, those changes +will need to be re-implemented as sub-chart parameters under the top level +`jaeger` parameter instead. diff --git a/chart/ci/default-values.yaml b/chart/ci/default-values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/chart/ci/multiple-ingress-values.yaml b/chart/ci/multiple-ingress-values.yaml new file mode 100644 index 0000000..80c8608 --- /dev/null +++ b/chart/ci/multiple-ingress-values.yaml @@ -0,0 +1,37 @@ +components: + frontend-proxy: + ingress: + enabled: true + ingressClassName: nginx + annotations: + test.io/collector: default + hosts: + - host: defaultcollector.example.com + paths: + - path: / + pathType: Prefix + port: 4318 + + additionalIngresses: + - name: additional-basic + hosts: + - host: additional-basic.example.com + paths: + - path: / + pathType: Prefix + port: 4318 + + - name: additional-advanced + ingressClassName: nginx + annotations: + test.io/ingress: additional-advanced + hosts: + - host: additional-advanced.example.com + paths: + - path: / + pathType: Exact + port: 4318 + tls: + - secretName: somesecret + hosts: + - additional-advanced.example.com diff --git a/chart/ci/public-hosted-ingress-values.yaml b/chart/ci/public-hosted-ingress-values.yaml new file mode 100644 index 0000000..beb395c --- /dev/null +++ b/chart/ci/public-hosted-ingress-values.yaml @@ -0,0 +1,25 @@ +components: + frontend: + envOverrides: + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: https://otel-demo-collector.example.com/v1/traces + + frontend-proxy: + ingress: + enabled: true + hosts: + - host: otel-demo.example.com + paths: + - path: / + pathType: Prefix + port: 8080 + +opentelemetry-collector: + ingress: + enabled: true + hosts: + - host: otel-demo-collector.example.com + paths: + - path: / + pathType: Prefix + port: 4318 diff --git a/chart/examples/README.md b/chart/examples/README.md new file mode 100644 index 0000000..040417c --- /dev/null +++ b/chart/examples/README.md @@ -0,0 +1,12 @@ +# Examples of chart configuration + +Here is a collection of common configurations for the OpenTelemetry demo. Each folder contains an example `values.yaml` and the resulting configurations that are generated by the opentelemetry-demo helm charts. + +- [Default configuration](default) +- [Bring your own Observability](bring-your-own-observability) +- [Collector as a Daemonset](collector-as-daemonset) +- [Custom Environment Variables](custom-environment-variables) +- [Kubernetes Infrastructure Monitoring](kubernetes-infra-monitoring) +- [Public Hosted Ingress](public-hosted-ingress) + +The manifests are rendered using the `helm template` command and the specific example folder's values.yaml. diff --git a/chart/examples/bring-your-own-observability/rendered/component.yaml b/chart/examples/bring-your-own-observability/rendered/component.yaml new file mode 100644 index 0000000..d183ee1 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/component.yaml @@ -0,0 +1,2248 @@ +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: ad +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: checkout +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: currency +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: email +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8013 + name: rpc + targetPort: 8013 + - port: 8016 + name: ofrep + targetPort: 8016 + - port: 4000 + name: tcp-service-0 + targetPort: 4000 + selector: + + opentelemetry.io/name: flagd +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend-proxy +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8081 + name: tcp-service + targetPort: 8081 + selector: + + opentelemetry.io/name: image-provider +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 9092 + name: plaintext + targetPort: 9092 + - port: 9093 + name: controller + targetPort: 9093 + selector: + + opentelemetry.io/name: kafka +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8000 + name: tcp-service + targetPort: 8000 + selector: + + opentelemetry.io/name: llm +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8089 + name: tcp-service + targetPort: 8089 + selector: + + opentelemetry.io/name: load-generator +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: payment +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 5432 + name: tcp-service + targetPort: 5432 + selector: + + opentelemetry.io/name: postgresql +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: product-catalog +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 3551 + name: tcp-service + targetPort: 3551 + selector: + + opentelemetry.io/name: product-reviews +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: quote +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: recommendation +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: shipping +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 6379 + name: valkey-cart + targetPort: 6379 + selector: + + opentelemetry.io/name: valkey-cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: accounting + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: accounting + template: + metadata: + labels: + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: accounting + image: 'ghcr.io/open-telemetry/demo:2.2.0-accounting' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: DB_CONNECTION_STRING + value: Host=postgresql;Username=otelu;Password=otelp;Database=otel + - name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED + value: "false" + resources: + limits: + memory: 120Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: ad + template: + metadata: + labels: + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: ad + image: 'ghcr.io/open-telemetry/demo:2.2.0-ad' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: AD_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_LOGS_EXPORTER + value: otlp + resources: + limits: + memory: 300Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: cart + template: + metadata: + labels: + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: cart + image: 'ghcr.io/open-telemetry/demo:2.2.0-cart' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CART_PORT + value: "8080" + - name: ASPNETCORE_URLS + value: http://*:$(CART_PORT) + - name: VALKEY_ADDR + value: valkey-cart:6379 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 160Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; + done; + image: busybox:latest + name: wait-for-valkey-cart + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: checkout + template: + metadata: + labels: + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: checkout + image: 'ghcr.io/open-telemetry/demo:2.2.0-checkout' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CHECKOUT_PORT + value: "8080" + - name: CART_ADDR + value: cart:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: EMAIL_ADDR + value: http://email:8080 + - name: PAYMENT_ADDR + value: payment:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 16MiB + resources: + limits: + memory: 20Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: currency + template: + metadata: + labels: + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: currency + image: 'ghcr.io/open-telemetry/demo:2.2.0-currency' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CURRENCY_PORT + value: "8080" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: '2.2.0' + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: email + template: + metadata: + labels: + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: email + image: 'ghcr.io/open-telemetry/demo:2.2.0-email' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: EMAIL_PORT + value: "8080" + - name: APP_ENV + value: production + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: flagd + template: + metadata: + labels: + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: flagd + image: 'ghcr.io/open-feature/flagd:v0.12.9' + imagePullPolicy: IfNotPresent + command: + - /flagd-build + - start + - --port + - "8013" + - --ofrep-port + - "8016" + - --uri + - file:./etc/flagd/demo.flagd.json + ports: + + - containerPort: 8013 + name: rpc + - containerPort: 8016 + name: ofrep + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: FLAGD_OTEL_COLLECTOR_URI + value: $(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 60MiB + resources: + limits: + memory: 75Mi + volumeMounts: + - name: config-rw + mountPath: /etc/flagd + - name: flagd-ui + image: 'ghcr.io/open-telemetry/demo:2.2.0-flagd-ui' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 4000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_UI_PORT + value: "4000" + - name: SECRET_KEY_BASE + value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw + - name: PHX_HOST + value: localhost + resources: + limits: + memory: 250Mi + volumeMounts: + - mountPath: /app/data + name: config-rw + initContainers: + - command: + - sh + - -c + - cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json + image: busybox + name: init-config + volumeMounts: + - mountPath: /config-ro + name: config-ro + - mountPath: /config-rw + name: config-rw + volumes: + - name: config-rw + emptyDir: {} + - configMap: + name: flagd-config + name: config-ro +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fraud-detection + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: fraud-detection + template: + metadata: + labels: + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: fraud-detection + image: 'ghcr.io/open-telemetry/demo:2.2.0-fraud-detection' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES + value: "true" + - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED + value: "true" + resources: + limits: + memory: 300Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend + template: + metadata: + labels: + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FRONTEND_PORT + value: "8080" + - name: PORT + value: $(FRONTEND_PORT) + - name: FRONTEND_ADDR + value: :8080 + - name: AD_ADDR + value: ad:8080 + - name: CART_ADDR + value: cart:8080 + - name: CHECKOUT_ADDR + value: checkout:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: PRODUCT_REVIEWS_ADDR + value: product-reviews:3551 + - name: RECOMMENDATION_ADDR + value: recommendation:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: ENV_PLATFORM + value: kubernetes + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: WEB_OTEL_SERVICE_NAME + value: frontend-web + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://localhost:8080/otlp-http/v1/traces + resources: + limits: + memory: 250Mi + securityContext: + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend-proxy + template: + metadata: + labels: + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + annotations: + io.opentelemetry.discovery.metrics/config: | + targets: + - endpoint: "http://`endpoint`" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: httpcheck + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend-proxy + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend-proxy' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: ENVOY_PORT + value: "8080" + - name: ENVOY_ADDR + value: 0.0.0.0 + - name: ENVOY_ADMIN_PORT + value: "10000" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_UI_HOST + value: flagd + - name: FLAGD_UI_PORT + value: "4000" + - name: FRONTEND_HOST + value: frontend + - name: FRONTEND_PORT + value: "8080" + - name: GRAFANA_HOST + value: grafana + - name: GRAFANA_PORT + value: "80" + - name: IMAGE_PROVIDER_HOST + value: image-provider + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: JAEGER_HOST + value: jaeger + - name: JAEGER_UI_PORT + value: "16686" + - name: LOCUST_WEB_HOST + value: load-generator + - name: LOCUST_WEB_PORT + value: "8089" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + resources: + limits: + memory: 65Mi + securityContext: + runAsGroup: 101 + runAsNonRoot: true + runAsUser: 101 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: image-provider + template: + metadata: + labels: + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + annotations: + io.opentelemetry.discovery.metrics/config: | + endpoint: "http://`endpoint`/status" + collection_interval: "10s" + timeout: "20s" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: nginx + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: image-provider + image: 'ghcr.io/open-telemetry/demo:2.2.0-image-provider' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8081 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + resources: + limits: + memory: 50Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: kafka + template: + metadata: + labels: + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: kafka + image: 'ghcr.io/open-telemetry/demo:2.2.0-kafka' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 9092 + name: plaintext + - containerPort: 9093 + name: controller + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: KAFKA_HEAP_OPTS + value: -Xmx400M -Xms400M + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092,CONTROLLER://:9093 + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: CONTROLLER + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: 1@kafka:9093 + resources: + limits: + memory: 700Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: llm + template: + metadata: + labels: + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: llm + image: 'ghcr.io/open-telemetry/demo:2.2.0-llm' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + null + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: load-generator + template: + metadata: + labels: + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: load-generator + image: 'ghcr.io/open-telemetry/demo:2.2.0-load-generator' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8089 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: LOCUST_WEB_HOST + value: 0.0.0.0 + - name: LOCUST_WEB_PORT + value: "8089" + - name: LOCUST_USERS + value: "10" + - name: LOCUST_SPAWN_RATE + value: "1" + - name: LOCUST_HOST + value: http://frontend-proxy:8080 + - name: LOCUST_HEADLESS + value: "false" + - name: LOCUST_AUTOSTART + value: "true" + - name: LOCUST_BROWSER_TRAFFIC_ENABLED + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_OFREP_PORT + value: "8016" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 1500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: payment + template: + metadata: + labels: + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: payment + image: 'ghcr.io/open-telemetry/demo:2.2.0-payment' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PAYMENT_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 140Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: postgresql + template: + metadata: + labels: + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + annotations: + io.opentelemetry.discovery.metrics/config: | + username: root + password: otel + metrics: + postgresql.blks_hit: + enabled: true + postgresql.blks_read: + enabled: true + postgresql.tup_fetched: + enabled: true + postgresql.tup_returned: + enabled: true + postgresql.tup_inserted: + enabled: true + postgresql.tup_updated: + enabled: true + postgresql.tup_deleted: + enabled: true + postgresql.deadlocks: + enabled: true + tls: + insecure: true + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: postgresql + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: postgresql + image: 'postgres:17.6' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 5432 + name: service + env: + - name: POSTGRES_USER + value: root + - name: POSTGRES_PASSWORD + value: otel + - name: POSTGRES_DB + value: otel + resources: + limits: + memory: 100Mi + volumeMounts: + - name: postgresql-init + mountPath: /docker-entrypoint-initdb.d + volumes: + - name: postgresql-init + configMap: + name: postgresql-init +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-catalog + template: + metadata: + labels: + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-catalog + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-catalog' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PRODUCT_CATALOG_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: GOMEMLIMIT + value: 16MiB + - name: DB_CONNECTION_STRING + value: postgres://otelu:otelp@postgresql/otel?sslmode=disable + - name: OTEL_SEMCONV_STABILITY_OPT_IN + value: database + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-reviews + template: + metadata: + labels: + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-reviews + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-reviews' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 3551 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: OPENAI_API_KEY + value: dummy + - name: LLM_MODEL + value: astronomy-llm + - name: LLM_HOST + value: llm + - name: LLM_PORT + value: "8000" + - name: LLM_BASE_URL + value: http://$(LLM_HOST):$(LLM_PORT)/v1 + - name: PRODUCT_REVIEWS_PORT + value: "3551" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: DB_CONNECTION_STRING + value: host=postgresql user=otelu password=otelp dbname=otel + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: quote + template: + metadata: + labels: + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: quote + image: 'ghcr.io/open-telemetry/demo:2.2.0-quote' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: QUOTE_PORT + value: "8080" + - name: OTEL_PHP_AUTOLOAD_ENABLED + value: "true" + - name: OTEL_PHP_INTERNAL_METRICS_ENABLED + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 40Mi + securityContext: + runAsGroup: 33 + runAsNonRoot: true + runAsUser: 33 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: recommendation + template: + metadata: + labels: + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: recommendation + image: 'ghcr.io/open-telemetry/demo:2.2.0-recommendation' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: RECOMMENDATION_PORT + value: "8080" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: shipping + template: + metadata: + labels: + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: shipping + image: 'ghcr.io/open-telemetry/demo:2.2.0-shipping' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: SHIPPING_PORT + value: "8080" + - name: QUOTE_ADDR + value: http://quote:8080 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: valkey-cart + template: + metadata: + labels: + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + annotations: + io.opentelemetry.discovery.metrics/config: | + username: valkey + collection_interval: 10s + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: redis + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: valkey-cart + image: 'valkey/valkey:9.0.1-alpine3.23' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 6379 + name: valkey-cart + env: + [] + resources: + limits: + memory: 20Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 999 + volumeMounts: + volumes: diff --git a/chart/examples/bring-your-own-observability/rendered/flagd-config.yaml b/chart/examples/bring-your-own-observability/rendered/flagd-config.yaml new file mode 100644 index 0000000..9591d49 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/flagd-config.yaml @@ -0,0 +1,167 @@ +--- +# Source: opentelemetry-demo/templates/flagd-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagd-config + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + demo.flagd.json: | + { + "$schema": "https://flagd.dev/schema/v0/flags.json", + "flags": { + "llmInaccurateResponse": { + "defaultVariant": "off", + "description": "LLM returns an inaccurate product summary for product ID L9ECAV7KIM", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "llmRateLimitError": { + "defaultVariant": "off", + "description": "LLM intermittently returns a rate limit error", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "productCatalogFailure": { + "description": "Fail product catalog service on a specific product", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "recommendationCacheFailure": { + "description": "Fail recommendation service cache", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adManualGc": { + "description": "Triggers full manual garbage collections in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adHighCpu": { + "description": "Triggers high cpu load in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adFailure": { + "description": "Fail ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "kafkaQueueProblems": { + "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "cartFailure": { + "description": "Fail cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "paymentFailure": { + "description": "Fail payment service charge requests n%", + "state": "ENABLED", + "variants": { + "100%": 1, + "90%": 0.95, + "75%": 0.75, + "50%": 0.5, + "25%": 0.25, + "10%": 0.1, + "off": 0 + }, + "defaultVariant": "off" + }, + "paymentUnreachable": { + "description": "Payment service is unavailable", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "loadGeneratorFloodHomepage": { + "description": "Flood the frontend with a large amount of requests.", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "imageSlowLoad": { + "description": "slow loading images in the frontend", + "state": "ENABLED", + "variants": { + "10sec": 10000, + "5sec": 5000, + "off": 0 + }, + "defaultVariant": "off" + }, + "failedReadinessProbe": { + "description": "readiness probe failure for cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "emailMemoryLeak": { + "description": "Memory leak in the email service.", + "state": "ENABLED", + "variants": { + "off": 0, + "1x": 1, + "10x": 10, + "100x": 100, + "1000x": 1000, + "10000x": 10000 + }, + "defaultVariant": "off" + } + } + } diff --git a/chart/examples/bring-your-own-observability/rendered/opensearch/configmap.yaml b/chart/examples/bring-your-own-observability/rendered/opensearch/configmap.yaml new file mode 100644 index 0000000..44bff5a --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opensearch/configmap.yaml @@ -0,0 +1,65 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: opensearch-config + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +data: + opensearch.yml: | + cluster.name: opensearch-cluster + + # Bind to all interfaces because we don't know what IP address Docker will assign to us. + network.host: 0.0.0.0 + + # Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. + # Implicitly done if ".singleNode" is set to "true". + # discovery.type: single-node + + # Start OpenSearch Security Demo Configuration + # WARNING: revise all the lines below before you go into production + # plugins: + # security: + # ssl: + # transport: + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # enforce_hostname_verification: false + # http: + # enabled: true + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # allow_unsafe_democertificates: true + # allow_default_init_securityindex: true + # authcz: + # admin_dn: + # - CN=kirk,OU=client,O=client,L=test,C=de + # audit.type: internal_opensearch + # enable_snapshot_restore_privilege: true + # check_snapshot_restore_write_privileges: true + # restapi: + # roles_enabled: ["all_access", "security_rest_api_access"] + # system_indices: + # enabled: true + # indices: + # [ + # ".opendistro-alerting-config", + # ".opendistro-alerting-alert*", + # ".opendistro-anomaly-results*", + # ".opendistro-anomaly-detector*", + # ".opendistro-anomaly-checkpoints", + # ".opendistro-anomaly-detection-state", + # ".opendistro-reports-*", + # ".opendistro-notifications-*", + # ".opendistro-notebooks", + # ".opendistro-asynchronous-search-response*", + # ] + ######## End OpenSearch Security Demo Configuration ######## diff --git a/chart/examples/bring-your-own-observability/rendered/opensearch/poddisruptionbudget.yaml b/chart/examples/bring-your-own-observability/rendered/opensearch/poddisruptionbudget.yaml new file mode 100644 index 0000000..4916d26 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opensearch/poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/poddisruptionbudget.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: "opensearch-pdb" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example diff --git a/chart/examples/bring-your-own-observability/rendered/opensearch/service.yaml b/chart/examples/bring-your-own-observability/rendered/opensearch/service.yaml new file mode 100644 index 0000000..4ac5038 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opensearch/service.yaml @@ -0,0 +1,59 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + {} +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + protocol: TCP + port: 9200 + - name: transport + protocol: TCP + port: 9300 + - name: metrics + protocol: TCP + port: 9600 +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch-headless + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + clusterIP: None # This is needed for statefulset hostnames like opensearch-0 to resolve + # Create endpoints also if the related pod isn't ready + publishNotReadyAddresses: true + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + port: 9200 + - name: transport + port: 9300 + - name: metrics + port: 9600 diff --git a/chart/examples/bring-your-own-observability/rendered/opensearch/statefulset.yaml b/chart/examples/bring-your-own-observability/rendered/opensearch/statefulset.yaml new file mode 100644 index 0000000..e71f96e --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opensearch/statefulset.yaml @@ -0,0 +1,154 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + majorVersion: "3" +spec: + serviceName: opensearch-headless + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + replicas: 1 + podManagementPolicy: Parallel + updateStrategy: + type: RollingUpdate + template: + metadata: + name: "opensearch" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + configchecksum: 17d9fa0bb5acd5c7f6e4ff053d35a4bba83d971ccee521315964c59a0d83160 + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + automountServiceAccountToken: false + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - example + - key: app.kubernetes.io/name + operator: In + values: + - opensearch + terminationGracePeriodSeconds: 120 + volumes: + - name: config + configMap: + name: opensearch-config + - emptyDir: {} + name: config-emptydir + enableServiceLinks: true + initContainers: + - name: configfile + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + command: + - sh + - -c + - | + #!/usr/bin/env bash + cp -r /tmp/configfolder/* /tmp/config/ + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + resources: + {} + volumeMounts: + - mountPath: /tmp/config/ + name: config-emptydir + - name: config + mountPath: /tmp/configfolder/opensearch.yml + subPath: opensearch.yml + containers: + - name: "opensearch" + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + readinessProbe: + failureThreshold: 3 + periodSeconds: 5 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 5 + periodSeconds: 10 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 9200 + - name: transport + containerPort: 9300 + - name: metrics + containerPort: 9600 + resources: + limits: + memory: 1100Mi + requests: + cpu: 1000m + memory: 100Mi + env: + - name: node.name + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: discovery.seed_hosts + value: "opensearch-cluster-master-headless" + - name: cluster.name + value: "demo-cluster" + - name: network.host + value: "0.0.0.0" + - name: OPENSEARCH_JAVA_OPTS + value: "-Xms400m -Xmx400m" + - name: node.roles + value: "master,ingest,data,remote_cluster_client," + - name: discovery.type + value: "single-node" + - name: bootstrap.memory_lock + value: "true" + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + volumeMounts: + - name: config-emptydir + mountPath: /usr/share/opensearch/config/opensearch.yml + subPath: opensearch.yml diff --git a/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrole.yaml b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrole.yaml new file mode 100644 index 0000000..6fad98f --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrole.yaml @@ -0,0 +1,48 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +rules: + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get","list","watch","create","update","patch","delete"] + - apiGroups: [""] + resources: ["pods", "namespaces"] + verbs: ["get", "watch", "list"] + - apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events", "namespaces", "namespaces/status", "nodes", "nodes/spec", "pods", "pods/status", "replicationcontrollers", "replicationcontrollers/status", "resourcequotas", "services" ] + verbs: ["get", "list", "watch"] + - apiGroups: ["apps"] + resources: ["daemonsets", "deployments", "replicasets", "statefulsets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["daemonsets", "deployments", "replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["batch"] + resources: ["jobs", "cronjobs"] + verbs: ["get", "list", "watch"] + - apiGroups: ["autoscaling"] + resources: ["horizontalpodautoscalers"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["nodes/stats"] + verbs: ["get", "watch", "list"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch"] diff --git a/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrolebinding.yaml b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrolebinding.yaml new file mode 100644 index 0000000..886802c --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/clusterrolebinding.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector +subjects: +- kind: ServiceAccount + name: otel-collector + namespace: default diff --git a/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/configmap-agent.yaml b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/configmap-agent.yaml new file mode 100644 index 0000000..d86ceb6 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/configmap-agent.yaml @@ -0,0 +1,279 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/configmap-agent.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +data: + relay: | + connectors: + spanmetrics: {} + exporters: + debug: {} + opensearch: + http: + endpoint: http://opensearch:9200 + tls: + insecure: true + logs_index: otel-logs + logs_index_time_format: yyyy-MM-dd + otlp/jaeger: + endpoint: jaeger:4317 + sending_queue: + batch: null + tls: + insecure: true + otlp/my-own-observability-endpoint: + endpoint: my-observability-endpoint:4317 + tls: + insecure: true + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + sending_queue: + batch: null + tls: + insecure: true + extensions: + health_check: + endpoint: ${env:MY_POD_IP}:13133 + k8s_leader_elector/k8s_cluster: + auth_type: serviceAccount + lease_name: k8s.cluster.receiver.opentelemetry.io + lease_namespace: default + k8s_observer: + auth_type: serviceAccount + node: ${env:K8S_NODE_NAME} + processors: + batch: {} + k8sattributes: + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.uid + - k8s.node.name + - k8s.pod.start_time + - k8s.deployment.name + - k8s.replicaset.name + - k8s.replicaset.uid + - k8s.daemonset.name + - k8s.daemonset.uid + - k8s.job.name + - k8s.job.uid + - k8s.container.name + - k8s.cronjob.name + - k8s.statefulset.name + - k8s.statefulset.uid + - container.image.tag + - container.image.name + - k8s.cluster.uid + - service.namespace + - service.name + - service.version + - service.instance.id + otel_annotations: true + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: connection + memory_limiter: + check_interval: 5s + limit_percentage: 80 + spike_limit_percentage: 25 + resource: + attributes: + - action: insert + from_attribute: k8s.pod.uid + key: service.instance.id + resourcedetection: + detectors: + - env + - system + transform: + error_mode: ignore + trace_statements: + - conditions: + - span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" + and span.attributes["http.route"] == nil + context: span + statements: + - set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], + "\\/api\\/cart") + - set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], + "\\/api\\/checkout") + - set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], + "\\/api\\/products\\/.*") + - set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], + "\\/api\\/recommendations") + - set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], + "\\/api\\/data.*") + - context: span + statements: + - set_semconv_span_name("1.37.0", "unsanitized_span_name") + receivers: + hostmetrics: + collection_interval: 10s + root_path: /hostfs + scrapers: + cpu: null + disk: null + filesystem: + exclude_fs_types: + fs_types: + - autofs + - binfmt_misc + - bpf + - cgroup2 + - configfs + - debugfs + - devpts + - devtmpfs + - fusectl + - hugetlbfs + - iso9660 + - mqueue + - nsfs + - overlay + - proc + - procfs + - pstore + - rpc_pipefs + - securityfs + - selinuxfs + - squashfs + - sysfs + - tracefs + match_type: strict + exclude_mount_points: + match_type: regexp + mount_points: + - /dev/* + - /proc/* + - /sys/* + - /run/k3s/containerd/* + - /var/lib/docker/* + - /var/lib/kubelet/* + - /snap/* + load: null + memory: null + network: null + jaeger: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:14250 + thrift_compact: + endpoint: ${env:MY_POD_IP}:6831 + thrift_http: + endpoint: ${env:MY_POD_IP}:14268 + k8s_cluster: + collection_interval: 10s + k8s_leader_elector: k8s_leader_elector/k8s_cluster + kubeletstats: + auth_type: serviceAccount + collection_interval: 20s + endpoint: ${env:K8S_NODE_IP}:10250 + otlp: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:4317 + http: + cors: + allowed_origins: + - http://* + - https://* + endpoint: ${env:MY_POD_IP}:4318 + prometheus: + config: + scrape_configs: + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - ${env:MY_POD_IP}:8888 + receiver_creator/metrics: + discovery: + enabled: true + watch_observers: + - k8s_observer + zipkin: + endpoint: ${env:MY_POD_IP}:9411 + service: + extensions: + - health_check + - k8s_observer + - k8s_leader_elector/k8s_cluster + pipelines: + logs: + exporters: + - otlp/my-own-observability-endpoint + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + metrics: + exporters: + - otlp/my-own-observability-endpoint + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + - spanmetrics + - receiver_creator/metrics + - hostmetrics + - kubeletstats + - k8s_cluster + traces: + exporters: + - otlp/my-own-observability-endpoint + - debug + - spanmetrics + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - transform + - batch + receivers: + - otlp + - jaeger + - zipkin + telemetry: + metrics: + level: detailed + readers: + - periodic: + exporter: + otlp: + endpoint: http://otel-collector:4318 + insecure: true + protocol: http/protobuf + interval: 10000 + timeout: 5000 diff --git a/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/daemonset.yaml b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/daemonset.yaml new file mode 100644 index 0000000..dc4eae3 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/daemonset.yaml @@ -0,0 +1,122 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + updateStrategy: + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: 67ece42de3c1e0117130ccdeb021472bc66c0261cd90e563e56e3d94f7ace7b0 + + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + + spec: + + serviceAccountName: otel-collector + automountServiceAccountToken: true + securityContext: + {} + containers: + - name: opentelemetry-collector + args: + - --config=/conf/relay.yaml + securityContext: + {} + image: "otel/opentelemetry-collector-contrib:0.142.0" + imagePullPolicy: IfNotPresent + ports: + + - name: jaeger-compact + containerPort: 6831 + protocol: UDP + hostPort: 6831 + - name: jaeger-grpc + containerPort: 14250 + protocol: TCP + hostPort: 14250 + - name: jaeger-thrift + containerPort: 14268 + protocol: TCP + hostPort: 14268 + - name: metrics + containerPort: 8888 + protocol: TCP + - name: otlp + containerPort: 4317 + protocol: TCP + hostPort: 4317 + - name: otlp-http + containerPort: 4318 + protocol: TCP + hostPort: 4318 + - name: zipkin + containerPort: 9411 + protocol: TCP + hostPort: 9411 + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: K8S_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: GOMEMLIMIT + value: "160MiB" + livenessProbe: + httpGet: + path: / + port: 13133 + readinessProbe: + httpGet: + path: / + port: 13133 + resources: + limits: + memory: 200Mi + volumeMounts: + - mountPath: /conf + name: opentelemetry-collector-configmap + - name: hostfs + mountPath: /hostfs + readOnly: true + mountPropagation: HostToContainer + volumes: + - name: opentelemetry-collector-configmap + configMap: + name: otel-collector-agent + items: + - key: relay + path: relay.yaml + - name: hostfs + hostPath: + path: / + hostNetwork: false diff --git a/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/service.yaml b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/service.yaml new file mode 100644 index 0000000..d57f891 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/service.yaml @@ -0,0 +1,54 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector + component: agent-collector +spec: + type: ClusterIP + ports: + + - name: jaeger-compact + port: 6831 + targetPort: 6831 + protocol: UDP + - name: jaeger-grpc + port: 14250 + targetPort: 14250 + protocol: TCP + - name: jaeger-thrift + port: 14268 + targetPort: 14268 + protocol: TCP + - name: metrics + port: 8888 + targetPort: 8888 + protocol: TCP + - name: otlp + port: 4317 + targetPort: 4317 + protocol: TCP + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP + - name: zipkin + port: 9411 + targetPort: 9411 + protocol: TCP + selector: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + internalTrafficPolicy: Local diff --git a/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/serviceaccount.yaml b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/serviceaccount.yaml new file mode 100644 index 0000000..73ebb08 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/opentelemetry-collector/serviceaccount.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector diff --git a/chart/examples/bring-your-own-observability/rendered/posgresql-init-config.yaml b/chart/examples/bring-your-own-observability/rendered/posgresql-init-config.yaml new file mode 100644 index 0000000..4c75905 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/posgresql-init-config.yaml @@ -0,0 +1,173 @@ +--- +# Source: opentelemetry-demo/templates/posgresql-init-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-init + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + init.sql: | + -- Copyright The OpenTelemetry Authors + -- SPDX-License-Identifier: Apache-2.0 + + CREATE USER otelu WITH PASSWORD 'otelp'; + + -- Accounting Service: create a schema + CREATE SCHEMA accounting; + GRANT USAGE ON SCHEMA accounting TO otelu; + + -- Accounting Service: create tables + CREATE TABLE accounting."order" ( + order_id TEXT PRIMARY KEY + ); + + CREATE TABLE accounting.shipping ( + shipping_tracking_id TEXT PRIMARY KEY, + shipping_cost_currency_code TEXT NOT NULL, + shipping_cost_units BIGINT NOT NULL, + shipping_cost_nanos INT NOT NULL, + street_address TEXT, + city TEXT, + state TEXT, + country TEXT, + zip_code TEXT, + order_id TEXT NOT NULL, + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + CREATE TABLE accounting.orderitem ( + item_cost_currency_code TEXT NOT NULL, + item_cost_units BIGINT NOT NULL, + item_cost_nanos INT NOT NULL, + product_id TEXT NOT NULL, + quantity INT NOT NULL, + order_id TEXT NOT NULL, + PRIMARY KEY (order_id, product_id), + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + -- Accounting Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA accounting TO otelu; + + -- Product Review Service: create a schema + CREATE SCHEMA reviews; + GRANT USAGE ON SCHEMA reviews TO otelu; + + -- Product Review Service: create tables + CREATE TABLE reviews.productreviews ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + product_id VARCHAR(16) NOT NULL, + username VARCHAR(64) NOT NULL, + description VARCHAR(1024), + score NUMERIC(2,1) NOT NULL + ); + + -- Product Review Service: create index for product_id lookups + CREATE INDEX product_id_index ON reviews.productreviews (product_id); + + -- Product Review Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA reviews TO otelu; + + -- Product Review Service: add product review data + INSERT INTO reviews.productreviews (product_id, username, description, score) + VALUES + ('OLJCESPC7Z', 'stargazer_mike', 'Great entry-level telescope! Easy to set up and provides clear views of the moon and brighter planets. Highly recommend for new astronomers.', '4.5'), + ('OLJCESPC7Z', 'nightskylover', 'For the price, this Explorascope delivers excellent performance. I was able to see Jupiter''s moons clearly. A fantastic purchase for casual viewing.', '4.0'), + ('OLJCESPC7Z', 'beginner_astro', 'A bit tricky to get used to the manual controls, but once you do, it''s very rewarding. Saw the Orion Nebula for the first time! Good value.', '3.5'), + ('OLJCESPC7Z', 'celestial_explorer', 'Perfect for camping trips. It''s lightweight and portable, making it easy to take anywhere. The views are surprisingly good for its size.', '4.0'), + ('OLJCESPC7Z', 'telescope_fan', 'Not the most powerful scope, but it''s great for kids and beginners. My children love looking at the moon with it. A solid choice for family fun.', '3.0'), + + ('66VCHSJNUP', 'tech_astro', 'The StarSense app is revolutionary! It made finding celestial objects incredibly easy. This telescope is a game-changer for beginners.', '5.0'), + ('66VCHSJNUP', 'app_user', 'Amazing technology, the smartphone integration works flawlessly. I''ve never had so much fun exploring the night sky. Worth every penny.', '4.5'), + ('66VCHSJNUP', 'innovator_john', 'Setup was a breeze, and the tutorials in the app are very helpful. The views are crisp and clear. My only minor gripe is battery drain on the phone.', '4.0'), + ('66VCHSJNUP', 'clear_skies', 'Finally, a telescope that takes the guesswork out of stargazing. The real-time positioning is incredibly accurate. Highly recommended for anyone new to astronomy.', '5.0'), + ('66VCHSJNUP', 'gadget_geek', 'Fantastic product, the app truly guides you. It''s like having a personal astronomer with you. The optical quality is also very good.', '4.5'), + + ('1YMWWN1N4O', 'solar_viewer', 'Perfect for solar observations! The Solar Safe filter gives peace of mind. I used it for the last partial eclipse and it was fantastic.', '5.0'), + ('1YMWWN1N4O', 'eclipse_chaser', 'Compact and easy to carry, this telescope is ideal for eclipse events. The included backpack is a nice touch. Views of the sun are incredibly clear and safe.', '4.5'), + ('1YMWWN1N4O', 'travel_astro', 'Excellent travel scope for solar viewing. The magnification is much better than binoculars for the sun. A must-have for any solar enthusiast.', '4.0'), + ('1YMWWN1N4O', 'sun_gazer', 'Very impressed with the safety features and clarity. Sharing the sun with family has never been easier or safer. Great value for a dedicated solar scope.', '5.0'), + ('1YMWWN1N4O', 'safe_viewer', 'The ISO compliant filter is reassuring. It''s a well-designed product for safe solar observation. Highly recommend for educational purposes too.', '4.5'), + + ('L9ECAV7KIM', 'clean_optics', 'This kit is a lifesaver for all my optics. The brush and wipes work perfectly without leaving any residue. My lenses have never been cleaner.', '5.0'), + ('L9ECAV7KIM', 'photog_pro', 'Essential for any photographer or telescope owner. It safely removes dust and fingerprints. A high-quality cleaning solution.', '4.5'), + ('L9ECAV7KIM', 'daily_cleaner', 'I use this on my binoculars, camera lenses, and even my phone screen. It''s very effective and gentle. A versatile cleaning kit.', '4.0'), + ('L9ECAV7KIM', 'tech_maintenance', 'Great value for money. The different cleaning options cover all needs. Keeps my expensive equipment in pristine condition.', '5.0'), + ('L9ECAV7KIM', 'sharp_view', 'Works as advertised, my telescope views are much clearer after using this. The fluid and cloth are excellent. Definitely recommend.', '4.5'), + + ('2ZYFJ3GM2N', 'bird_watcher', 'Incredible clarity and brightness, perfect for bird watching. The ED glass really makes a difference. I can spot the subtlest markings.', '5.0'), + ('2ZYFJ3GM2N', 'nature_lover', 'These binoculars are fantastic for nature observation. The close focus is a huge advantage for viewing nearby wildlife. Very comfortable to hold.', '4.5'), + ('2ZYFJ3GM2N', 'hiker_guy', 'Lightweight and durable, these are my go-to binoculars for hiking. The wide field of view is excellent. Highly recommend for outdoor enthusiasts.', '4.0'), + ('2ZYFJ3GM2N', 'stadium_fan', 'Took these to a game and had an amazing view of the action. They perform great in various lighting conditions. A solid all-around binocular.', '4.0'), + ('2ZYFJ3GM2N', 'outdoor_adventurer', 'Excellent build quality and optical performance. They feel robust and provide sharp images. A great investment for any outdoor activity.', '4.5'), + + ('0PUK6V6EV0', 'astro_photog', 'This imager is a fantastic step up for planetary photography. The color quality is superb. Easy to use with my existing telescope setup.', '5.0'), + ('0PUK6V6EV0', 'planet_shooter', 'Finally capturing stunning images of Saturn and Jupiter! The NexImage 10 makes it so accessible. Great for beginners in astrophotography.', '4.5'), + ('0PUK6V6EV0', 'imager_pro', 'Excellent resolution and color rendition for its price point. It''s a perfect solution for those looking to start imaging planets. Highly satisfied.', '4.0'), + ('0PUK6V6EV0', 'space_artist', 'The detail I can capture with this imager is incredible. It integrates well with various software. A must-have for serious planetary observers.', '5.0'), + ('0PUK6V6EV0', 'digital_sky', 'A solid choice for getting into solar system imaging. The setup was straightforward. Produces beautiful, vibrant planetary images.', '4.5'), + + ('LS4PSXUNUM', 'night_walker', 'The red light is perfect for preserving night vision during astronomy sessions. The hand warmer is an unexpected bonus. Very practical device.', '5.0'), + ('LS4PSXUNUM', 'star_party_goer', 'This flashlight is indispensable for star parties. The red mode is gentle on the eyes, and the power bank feature is super handy. Love it!', '4.5'), + ('LS4PSXUNUM', 'camper_chris', 'Rugged and versatile, this flashlight is great for camping and night walks. The hand warmer function is a game-changer on cold nights. Highly recommend.', '4.5'), + ('LS4PSXUNUM', 'emergency_kit', 'A fantastic multi-tool for my emergency kit. The red light is useful, and the power bank means I can charge my phone. Great design.', '4.0'), + ('LS4PSXUNUM', 'astro_accessory', 'Every astronomer needs one of these. The red light is essential, and the hand warmer and power bank make it incredibly useful. A top-tier accessory.', '5.0'), + + ('9SIQT8TOJO', 'deep_sky_master', 'The RASA V2 is a dream come true for deep-sky imaging. The f/2.2 speed drastically cuts down exposure times. My best astrophotography investment yet.', '5.0'), + ('9SIQT8TOJO', 'pro_astro', 'Unbelievable performance for wide-field astrophotography. The short focal length makes guiding less critical. Produces stunning, detailed images.', '5.0'), + ('9SIQT8TOJO', 'imaging_guru', 'This OTA is a beast! The fast optics mean more data in less time. If you''re serious about deep-sky imaging, this is the one.', '4.5'), + ('9SIQT8TOJO', 'advanced_scope', 'Worth every penny for the quality and speed it offers. My images have never been sharper or more vibrant. A truly professional piece of equipment.', '5.0'), + ('9SIQT8TOJO', 'precision_optics', 'The engineering behind this RASA is exceptional. It''s incredibly efficient for capturing faint objects. A high-end choice for dedicated imagers.', '4.5'), + + ('6E92ZMYYFZ', 'solar_safety', 'Essential for safe solar viewing with my 8-inch telescope. The Velcro straps ensure it stays securely in place. Peace of mind during solar observations.', '5.0'), + ('6E92ZMYYFZ', 'telescope_upgrade', 'This EclipSmart filter is a perfect addition to my setup. The ISO compliance is crucial. Highly recommend for anyone looking to view the sun safely.', '4.5'), + ('6E92ZMYYFZ', 'safe_sun_gazer', 'Easy to attach and provides crystal clear, safe views of the sun. The build quality is excellent. A must-have accessory for solar enthusiasts.', '5.0'), + ('6E92ZMYYFZ', 'filter_fan', 'Works perfectly with my 8-inch scope. No more worries about accidental dislodgement. Great product for protecting your eyes and equipment.', '4.5'), + ('6E92ZMYYFZ', 'eclipse_ready', 'Bought this for the upcoming eclipse, and it fits perfectly. Tested it out, and the views are fantastic and safe. Very happy with this purchase.', '5.0'), + + ('HQTGWGPNH4', 'history_buff', 'A fascinating glimpse into historical astronomical thought. The content is incredibly insightful. A must-read for anyone interested in the history of science.', '5.0'), + ('HQTGWGPNH4', 'bookworm_astro', 'Beautifully presented historical document. It''s amazing to see how comets were understood centuries ago. A valuable addition to any astronomy library.', '4.5'), + ('HQTGWGPNH4', 'ancient_texts', 'Such a unique and intriguing read. The historical context is captivating. It offers a different perspective on celestial events.', '4.0'), + ('HQTGWGPNH4', 'celestial_history', 'I love historical astronomy, and this book delivers. It''s well-researched and provides a window into past beliefs. Highly recommended for scholars.', '5.0'), + ('HQTGWGPNH4', 'rare_find', 'A truly special book for enthusiasts of astronomical history. The details about ancient astrologers are very interesting. Great for a deeper understanding.', '4.5'); + + -- Product Catalog Service: create a schema + CREATE SCHEMA catalog; + GRANT USAGE ON SCHEMA catalog TO otelu; + + -- Product Catalog Service: create tables + CREATE TABLE catalog.products ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT, + picture TEXT, + price_currency_code TEXT NOT NULL, + price_units BIGINT NOT NULL, + price_nanos INT NOT NULL, + categories TEXT + ); + + -- Product Catalog Service: grant permission to schema + GRANT SELECT ON ALL TABLES IN SCHEMA catalog TO otelu; + + -- Product Catalog Service: add product data + INSERT INTO catalog.products (id, name, description, picture, price_currency_code, price_units, price_nanos, categories) + VALUES + ('OLJCESPC7Z', 'National Park Foundation Explorascope', 'The National Park Foundation''s (NPF) Explorascope 60AZ is a manual alt-azimuth, refractor telescope perfect for celestial viewing on the go. The NPF Explorascope 60 can view the planets, moon, star clusters and brighter deep sky objects like the Orion Nebula and Andromeda Galaxy.', 'NationalParkFoundationExplorascope.jpg', 'USD', 101, 960000000, 'telescopes'), + ('66VCHSJNUP', 'Starsense Explorer Refractor Telescope', 'The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app''s user-friendly interface and detailed tutorials. It''s like having your own personal tour guide of the night sky', 'StarsenseExplorer.jpg', 'USD', 349, 950000000, 'telescopes'), + ('1YMWWN1N4O', 'Eclipsmart Travel Refractor Telescope', 'Dedicated white-light solar scope for the observer on the go. The 50mm refracting solar scope uses Solar Safe, ISO compliant, full-aperture glass filter material to ensure the safest view of solar events. The kit comes complete with everything you need, including the dedicated travel solar scope, a Solar Safe finderscope, tripod, a high quality 20mm (18x) Kellner eyepiece and a nylon backpack to carry everything in. This Travel Solar Scope makes it easy to share the Sun as well as partial and total solar eclipses with the whole family and offers much higher magnifications than you would otherwise get using handheld solar viewers or binoculars.', 'EclipsmartTravelRefractorTelescope.jpg', 'USD', 129, 950000000, 'telescopes,travel'), + ('L9ECAV7KIM', 'Lens Cleaning Kit', 'Wipe away dust, dirt, fingerprints and other particles on your lenses to see clearly with the Lens Cleaning Kit. This cleaning kit works on all glass and optical surfaces, including telescopes, binoculars, spotting scopes, monoculars, microscopes, and even your camera lenses, computer screens, and mobile devices. The kit comes complete with a retractable lens brush to remove dust particles and dirt and two options to clean smudges and fingerprints off of your optics, pre-moistened lens wipes and a bottled lens cleaning fluid with soft cloth.', 'LensCleaningKit.jpg', 'USD', 21, 950000000, 'accessories'), + ('2ZYFJ3GM2N', 'Roof Binoculars', 'This versatile, all-around binocular is a great choice for the trail, the stadium, the arena, or just about anywhere you want a close-up view of the action without sacrificing brightness or detail. It''s an especially great companion for nature observation and bird watching, with ED glass that helps you spot the subtlest field markings and a close focus of just 6.5 feet.', 'RoofBinoculars.jpg', 'USD', 209, 950000000, 'binoculars'), + ('0PUK6V6EV0', 'Solar System Color Imager', 'You have your new telescope and have observed Saturn and Jupiter. Now you''re ready to take the next step and start imaging them. But where do you begin? The NexImage 10 Solar System Imager is the perfect solution.', 'SolarSystemColorImager.jpg', 'USD', 175, 0, 'accessories,telescopes'), + ('LS4PSXUNUM', 'Red Flashlight', 'This 3-in-1 device features a 3-mode red flashlight, a hand warmer, and a portable power bank for recharging your personal electronics on the go. Whether you use it to light the way at an astronomy star party, a night walk, or wildlife research, ThermoTorch 3 Astro Red''s rugged, IPX4-rated design will withstand your everyday activities.', 'RedFlashlight.jpg', 'USD', 57, 80000000, 'accessories,flashlights'), + ('9SIQT8TOJO', 'Optical Tube Assembly', 'Capturing impressive deep-sky astroimages is easier than ever with Rowe-Ackermann Schmidt Astrograph (RASA) V2, the perfect companion to today''s top DSLR or astronomical CCD cameras. This fast, wide-field f/2.2 system allows for shorter exposure times compared to traditional f/10 astroimaging, without sacrificing resolution. Because shorter sub-exposure times are possible, your equatorial mount won''t need to accurately track over extended periods. The short focal length also lessens equatorial tracking demands. In many cases, autoguiding will not be required.', 'OpticalTubeAssembly.jpg', 'USD', 3599, 0, 'accessories,telescopes,assembly'), + ('6E92ZMYYFZ', 'Solar Filter', 'Enhance your viewing experience with EclipSmart Solar Filter for 8" telescopes. With two Velcro straps and four self-adhesive Velcro pads for added safety, you can be assured that the solar filter cannot be accidentally knocked off and will provide Solar Safe, ISO compliant viewing.', 'SolarFilter.jpg', 'USD', 69, 950000000, 'accessories,telescopes'), + ('HQTGWGPNH4', 'The Comet Book', 'A 16th-century treatise on comets, created anonymously in Flanders (now northern France) and now held at the Universitätsbibliothek Kassel. Commonly known as The Comet Book (or Kometenbuch in German), its full title translates as "Comets and their General and Particular Meanings, According to Ptolomeé, Albumasar, Haly, Aliquind and other Astrologers". The image is from https://publicdomainreview.org/collection/the-comet-book, made available by the Universitätsbibliothek Kassel under a CC-BY SA 4.0 license (https://creativecommons.org/licenses/by-sa/4.0/)', 'TheCometBook.jpg', 'USD', 0, 990000000, 'books'); diff --git a/chart/examples/bring-your-own-observability/rendered/serviceaccount.yaml b/chart/examples/bring-your-own-observability/rendered/serviceaccount.yaml new file mode 100644 index 0000000..122e927 --- /dev/null +++ b/chart/examples/bring-your-own-observability/rendered/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: example + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm diff --git a/chart/examples/bring-your-own-observability/values.yaml b/chart/examples/bring-your-own-observability/values.yaml new file mode 100644 index 0000000..bd5f491 --- /dev/null +++ b/chart/examples/bring-your-own-observability/values.yaml @@ -0,0 +1,25 @@ + +opentelemetry-collector: + config: + exporters: + otlp/my-own-observability-endpoint: + endpoint: "my-observability-endpoint:4317" + tls: + insecure: true + service: + pipelines: + traces: + exporters: [otlp/my-own-observability-endpoint, debug, spanmetrics] + metrics: + exporters: [otlp/my-own-observability-endpoint, debug] + logs: + exporters: [otlp/my-own-observability-endpoint, debug] +jaeger: + enabled: false + +prometheus: + enabled: false + +grafana: + enabled: false + diff --git a/chart/examples/custom-environment-variables/rendered/component.yaml b/chart/examples/custom-environment-variables/rendered/component.yaml new file mode 100644 index 0000000..a095448 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/component.yaml @@ -0,0 +1,2318 @@ +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: ad +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: checkout +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: currency +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: email +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8013 + name: rpc + targetPort: 8013 + - port: 8016 + name: ofrep + targetPort: 8016 + - port: 4000 + name: tcp-service-0 + targetPort: 4000 + selector: + + opentelemetry.io/name: flagd +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend-proxy +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8081 + name: tcp-service + targetPort: 8081 + selector: + + opentelemetry.io/name: image-provider +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 9092 + name: plaintext + targetPort: 9092 + - port: 9093 + name: controller + targetPort: 9093 + selector: + + opentelemetry.io/name: kafka +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8000 + name: tcp-service + targetPort: 8000 + selector: + + opentelemetry.io/name: llm +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8089 + name: tcp-service + targetPort: 8089 + selector: + + opentelemetry.io/name: load-generator +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: payment +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 5432 + name: tcp-service + targetPort: 5432 + selector: + + opentelemetry.io/name: postgresql +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: product-catalog +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 3551 + name: tcp-service + targetPort: 3551 + selector: + + opentelemetry.io/name: product-reviews +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: quote +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: recommendation +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: shipping +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 6379 + name: valkey-cart + targetPort: 6379 + selector: + + opentelemetry.io/name: valkey-cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: accounting + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: accounting + template: + metadata: + labels: + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: accounting + image: 'ghcr.io/open-telemetry/demo:2.2.0-accounting' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: DB_CONNECTION_STRING + value: Host=postgresql;Username=otelu;Password=otelp;Database=otel + - name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED + value: "false" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 120Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: ad + template: + metadata: + labels: + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: ad + image: 'ghcr.io/open-telemetry/demo:2.2.0-ad' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: AD_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_LOGS_EXPORTER + value: otlp + - name: TEAM_NAME + value: helix + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 300Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: cart + template: + metadata: + labels: + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: cart + image: 'ghcr.io/open-telemetry/demo:2.2.0-cart' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CART_PORT + value: "8080" + - name: ASPNETCORE_URLS + value: http://*:$(CART_PORT) + - name: VALKEY_ADDR + value: valkey-cart:6379 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: TEAM_NAME + value: ring + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 160Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; + done; + image: busybox:latest + name: wait-for-valkey-cart + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: checkout + template: + metadata: + labels: + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: checkout + image: 'ghcr.io/open-telemetry/demo:2.2.0-checkout' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CHECKOUT_PORT + value: "8080" + - name: CART_ADDR + value: cart:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: EMAIL_ADDR + value: http://email:8080 + - name: PAYMENT_ADDR + value: payment:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 16MiB + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 20Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: currency + template: + metadata: + labels: + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: currency + image: 'ghcr.io/open-telemetry/demo:2.2.0-currency' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CURRENCY_PORT + value: "8080" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: '2.2.0' + - name: IPV6_ENABLED + value: "false" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: email + template: + metadata: + labels: + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: email + image: 'ghcr.io/open-telemetry/demo:2.2.0-email' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: EMAIL_PORT + value: "8080" + - name: APP_ENV + value: production + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: flagd + template: + metadata: + labels: + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: flagd + image: 'ghcr.io/open-feature/flagd:v0.12.9' + imagePullPolicy: IfNotPresent + command: + - /flagd-build + - start + - --port + - "8013" + - --ofrep-port + - "8016" + - --uri + - file:./etc/flagd/demo.flagd.json + ports: + + - containerPort: 8013 + name: rpc + - containerPort: 8016 + name: ofrep + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: FLAGD_OTEL_COLLECTOR_URI + value: $(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 60MiB + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 75Mi + volumeMounts: + - name: config-rw + mountPath: /etc/flagd + - name: flagd-ui + image: 'ghcr.io/open-telemetry/demo:2.2.0-flagd-ui' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 4000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_UI_PORT + value: "4000" + - name: SECRET_KEY_BASE + value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw + - name: PHX_HOST + value: localhost + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 250Mi + volumeMounts: + - mountPath: /app/data + name: config-rw + initContainers: + - command: + - sh + - -c + - cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json + image: busybox + name: init-config + volumeMounts: + - mountPath: /config-ro + name: config-ro + - mountPath: /config-rw + name: config-rw + volumes: + - name: config-rw + emptyDir: {} + - configMap: + name: flagd-config + name: config-ro +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fraud-detection + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: fraud-detection + template: + metadata: + labels: + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: fraud-detection + image: 'ghcr.io/open-telemetry/demo:2.2.0-fraud-detection' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES + value: "true" + - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED + value: "true" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 300Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend + template: + metadata: + labels: + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FRONTEND_PORT + value: "8080" + - name: PORT + value: $(FRONTEND_PORT) + - name: FRONTEND_ADDR + value: :8080 + - name: AD_ADDR + value: ad:8080 + - name: CART_ADDR + value: cart:8080 + - name: CHECKOUT_ADDR + value: checkout:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: PRODUCT_REVIEWS_ADDR + value: product-reviews:3551 + - name: RECOMMENDATION_ADDR + value: recommendation:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: ENV_PLATFORM + value: kubernetes + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: WEB_OTEL_SERVICE_NAME + value: frontend-web + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://localhost:8080/otlp-http/v1/traces + - name: TEAM_NAME + value: ring + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 250Mi + securityContext: + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend-proxy + template: + metadata: + labels: + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + annotations: + io.opentelemetry.discovery.metrics/config: | + targets: + - endpoint: "http://`endpoint`" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: httpcheck + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend-proxy + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend-proxy' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: ENVOY_PORT + value: "8080" + - name: ENVOY_ADDR + value: 0.0.0.0 + - name: ENVOY_ADMIN_PORT + value: "10000" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_UI_HOST + value: flagd + - name: FLAGD_UI_PORT + value: "4000" + - name: FRONTEND_HOST + value: frontend + - name: FRONTEND_PORT + value: "8080" + - name: GRAFANA_HOST + value: grafana + - name: GRAFANA_PORT + value: "80" + - name: IMAGE_PROVIDER_HOST + value: image-provider + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: JAEGER_HOST + value: jaeger + - name: JAEGER_UI_PORT + value: "16686" + - name: LOCUST_WEB_HOST + value: load-generator + - name: LOCUST_WEB_PORT + value: "8089" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 65Mi + securityContext: + runAsGroup: 101 + runAsNonRoot: true + runAsUser: 101 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: image-provider + template: + metadata: + labels: + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + annotations: + io.opentelemetry.discovery.metrics/config: | + endpoint: "http://`endpoint`/status" + collection_interval: "10s" + timeout: "20s" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: nginx + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: image-provider + image: 'ghcr.io/open-telemetry/demo:2.2.0-image-provider' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8081 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 50Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: kafka + template: + metadata: + labels: + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: kafka + image: 'ghcr.io/open-telemetry/demo:2.2.0-kafka' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 9092 + name: plaintext + - containerPort: 9093 + name: controller + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: KAFKA_HEAP_OPTS + value: -Xmx400M -Xms400M + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092,CONTROLLER://:9093 + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: CONTROLLER + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: 1@kafka:9093 + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 700Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: llm + template: + metadata: + labels: + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: llm + image: 'ghcr.io/open-telemetry/demo:2.2.0-llm' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + null + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: load-generator + template: + metadata: + labels: + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: load-generator + image: 'ghcr.io/open-telemetry/demo:2.2.0-load-generator' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8089 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: LOCUST_WEB_HOST + value: 0.0.0.0 + - name: LOCUST_WEB_PORT + value: "8089" + - name: LOCUST_USERS + value: "10" + - name: LOCUST_SPAWN_RATE + value: "1" + - name: LOCUST_HOST + value: http://frontend-proxy:8080 + - name: LOCUST_HEADLESS + value: "false" + - name: LOCUST_AUTOSTART + value: "true" + - name: LOCUST_BROWSER_TRAFFIC_ENABLED + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_OFREP_PORT + value: "8016" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: TEAM_NAME + value: ring + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 1500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: payment + template: + metadata: + labels: + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: payment + image: 'ghcr.io/open-telemetry/demo:2.2.0-payment' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PAYMENT_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 140Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: postgresql + template: + metadata: + labels: + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + annotations: + io.opentelemetry.discovery.metrics/config: | + username: root + password: otel + metrics: + postgresql.blks_hit: + enabled: true + postgresql.blks_read: + enabled: true + postgresql.tup_fetched: + enabled: true + postgresql.tup_returned: + enabled: true + postgresql.tup_inserted: + enabled: true + postgresql.tup_updated: + enabled: true + postgresql.tup_deleted: + enabled: true + postgresql.deadlocks: + enabled: true + tls: + insecure: true + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: postgresql + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: postgresql + image: 'postgres:17.6' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 5432 + name: service + env: + - name: POSTGRES_USER + value: root + - name: POSTGRES_PASSWORD + value: otel + - name: POSTGRES_DB + value: otel + resources: + limits: + memory: 100Mi + volumeMounts: + - name: postgresql-init + mountPath: /docker-entrypoint-initdb.d + volumes: + - name: postgresql-init + configMap: + name: postgresql-init +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-catalog + template: + metadata: + labels: + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-catalog + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-catalog' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PRODUCT_CATALOG_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: GOMEMLIMIT + value: 16MiB + - name: DB_CONNECTION_STRING + value: postgres://otelu:otelp@postgresql/otel?sslmode=disable + - name: OTEL_SEMCONV_STABILITY_OPT_IN + value: database + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: TEAM_NAME + value: helix + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-reviews + template: + metadata: + labels: + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-reviews + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-reviews' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 3551 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: OPENAI_API_KEY + value: dummy + - name: LLM_MODEL + value: astronomy-llm + - name: LLM_HOST + value: llm + - name: LLM_PORT + value: "8000" + - name: LLM_BASE_URL + value: http://$(LLM_HOST):$(LLM_PORT)/v1 + - name: PRODUCT_REVIEWS_PORT + value: "3551" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: DB_CONNECTION_STRING + value: host=postgresql user=otelu password=otelp dbname=otel + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: quote + template: + metadata: + labels: + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: quote + image: 'ghcr.io/open-telemetry/demo:2.2.0-quote' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: QUOTE_PORT + value: "8080" + - name: OTEL_PHP_AUTOLOAD_ENABLED + value: "true" + - name: OTEL_PHP_INTERNAL_METRICS_ENABLED + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: IPV6_ENABLED + value: "false" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 40Mi + securityContext: + runAsGroup: 33 + runAsNonRoot: true + runAsUser: 33 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: recommendation + template: + metadata: + labels: + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: recommendation + image: 'ghcr.io/open-telemetry/demo:2.2.0-recommendation' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: RECOMMENDATION_PORT + value: "8080" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: TEAM_NAME + value: helix + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: shipping + template: + metadata: + labels: + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: shipping + image: 'ghcr.io/open-telemetry/demo:2.2.0-shipping' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: SHIPPING_PORT + value: "8080" + - name: QUOTE_ADDR + value: http://quote:8080 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + - name: TEAM_NAME + value: orion + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: valkey-cart + template: + metadata: + labels: + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + annotations: + io.opentelemetry.discovery.metrics/config: | + username: valkey + collection_interval: 10s + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: redis + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: valkey-cart + image: 'valkey/valkey:9.0.1-alpine3.23' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 6379 + name: valkey-cart + env: + [] + resources: + limits: + memory: 20Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 999 + volumeMounts: + volumes: diff --git a/chart/examples/custom-environment-variables/rendered/flagd-config.yaml b/chart/examples/custom-environment-variables/rendered/flagd-config.yaml new file mode 100644 index 0000000..9591d49 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/flagd-config.yaml @@ -0,0 +1,167 @@ +--- +# Source: opentelemetry-demo/templates/flagd-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagd-config + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + demo.flagd.json: | + { + "$schema": "https://flagd.dev/schema/v0/flags.json", + "flags": { + "llmInaccurateResponse": { + "defaultVariant": "off", + "description": "LLM returns an inaccurate product summary for product ID L9ECAV7KIM", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "llmRateLimitError": { + "defaultVariant": "off", + "description": "LLM intermittently returns a rate limit error", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "productCatalogFailure": { + "description": "Fail product catalog service on a specific product", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "recommendationCacheFailure": { + "description": "Fail recommendation service cache", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adManualGc": { + "description": "Triggers full manual garbage collections in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adHighCpu": { + "description": "Triggers high cpu load in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adFailure": { + "description": "Fail ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "kafkaQueueProblems": { + "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "cartFailure": { + "description": "Fail cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "paymentFailure": { + "description": "Fail payment service charge requests n%", + "state": "ENABLED", + "variants": { + "100%": 1, + "90%": 0.95, + "75%": 0.75, + "50%": 0.5, + "25%": 0.25, + "10%": 0.1, + "off": 0 + }, + "defaultVariant": "off" + }, + "paymentUnreachable": { + "description": "Payment service is unavailable", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "loadGeneratorFloodHomepage": { + "description": "Flood the frontend with a large amount of requests.", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "imageSlowLoad": { + "description": "slow loading images in the frontend", + "state": "ENABLED", + "variants": { + "10sec": 10000, + "5sec": 5000, + "off": 0 + }, + "defaultVariant": "off" + }, + "failedReadinessProbe": { + "description": "readiness probe failure for cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "emailMemoryLeak": { + "description": "Memory leak in the email service.", + "state": "ENABLED", + "variants": { + "off": 0, + "1x": 1, + "10x": 10, + "100x": 100, + "1000x": 1000, + "10000x": 10000 + }, + "defaultVariant": "off" + } + } + } diff --git a/chart/examples/custom-environment-variables/rendered/grafana-config.yaml b/chart/examples/custom-environment-variables/rendered/grafana-config.yaml new file mode 100644 index 0000000..74047cc --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana-config.yaml @@ -0,0 +1,15609 @@ +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-alerting + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_alert: "1" +data: + + {} +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-nginx-metrics + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + NGINX-metrics.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of accepted client connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_accepted_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Accepted connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of handled connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 5, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_handled_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Connections handled", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of client requests", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_requests_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Total number of client requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The current number of nginx connections by state", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 19, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_current", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{state}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Number of connections by state", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "[Image-Provider] NGINX Metrics", + "uid": "6fb665e0-cb81-40a5-bd21-a9485c5477b4", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-apm-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + apm-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "APM dashboard for monitoring OpenTelemetry-based services. \n\nInstrument your applications using OpenTelemetry SDKs and send traces, metrics, and logs to Jaeger for traces, a Prometheus-compatible database for metrics, and OpenSearch for logs. This dashboard provides a centralized view of your application's health and performance. ", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 1, + "links": [], + "panels": [ + { + "description": "service.namespace=${service_namespace}, service.name=${service_name}, deployment.environment.name=${deployment_environment_name}", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 20, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "

\"OpenTelemetry Service ${service_namespace}/${service_name}

\n", + "mode": "html" + }, + "pluginVersion": "12.2.0", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Shows the timestamp of the latest metrics received in the past 24h.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#24292e", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 10, + "y": 0 + }, + "hideTimeOverride": true, + "id": 39, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^Time$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "timestamp(sum by (deployment_environment_name, service_namespace, service_name) (target_info{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}) or absent{})\n", + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "timeFrom": "now-24h", + "title": "Latest metrics received", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 15, + "panels": [], + "title": "Server RED Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration and https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 3 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP p95", + "range": true, + "refId": "HTTP P95", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP avg", + "range": true, + "refId": "HTTP AVG", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC p95", + "range": true, + "refId": "RPC P95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC avg", + "range": true, + "refId": "RPC AVG" + } + ], + "title": "Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP and RPC endpoints aggregation on the `http.server.request.duration` and `rpc.server.duration` metrics. \n\nErrors are identified by : \n* `http.response.status_code=~\"5..\"`\n* `rpc.grpc.status_code!=\"0\"`\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 100, + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 3 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "(\n (sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval])) * 100) \n / \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)\nor\n(\n 0\n * \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP 5xx errors", + "range": true, + "refId": "HTTP 5xx", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "((sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval])) * 100) / sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))\nor\n(0 * sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC errors", + "range": true, + "refId": "RPC Err" + } + ], + "title": "Error", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 10, + "y": 3 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP requests", + "range": true, + "refId": "HTTP RPS" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(sum(rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) * $__interval_ms / 1000", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC requests", + "range": true, + "refId": "RPC RPS" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 15, + "y": 3 + }, + "id": 40, + "options": { + "alertInstanceLabelFilter": "{service_name=\"$service_name\", service_namespace=\"$service_namespace\"}", + "alertName": "", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 20, + "showInactiveAlerts": false, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": false, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.2.0", + "title": "Alerts", + "type": "alertlist" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound HTTP operations of the service (aka HTTP endpoints) based on the `http.server.request.duration` metric.\n\nErrors are identified by `http.response.status_code=~\"5..\"`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + }, + { + "id": "custom.width", + "value": 219 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 21, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(http_server_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "HTTP Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound gRPC operations of the service (aka gRPC endpoints) based on the `rpc.server.request.duration` metric.\n\nErrors are identified by `rpc.grpc.status_code != 0` which make the panel specific to the gRPC protocol.\n\nhttps://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 27, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\nsum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "gRPC Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 28, + "panels": [], + "title": "Outbound Services and Databases", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP calls made by the service based on the `http.client.request.duration` metric.\n\nCalls broken done by remote `server.address` and by `http.request.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpclientrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 23, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound HTTP Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "DB calls made by the service based on the `db.client.operation.duration` metric.\n\nCalls broken down by `server.address` and `db.namespace`.\n\nSee https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No database call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 24, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n / \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n ) or (0 * \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, database) (\n label_join(\n rate(db_client_operation_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound Databases", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "DURATION": { + "timeField": "Time" + }, + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "database", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "database": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "database": "Database", + "database_operation": "Database Operation", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "gRPC calls made by the service based on the `rpc.client.request.duration` metric.\n\nSpecific to gRPC due to the usage of the `grpc.status.code` attribute to identify errors.\n\nCalls broken down by `server.address`, `rpc.service`, and `rpc.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#rpc-client\n\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 32, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound gRPC Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service Method" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 42, + "panels": [], + "title": "Infrastructure", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Host CPU" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Host Used Memory" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (host_name) (\n rate(system_cpu_time_seconds_total{service_name=\"\", state!=\"idle\"}[$__rate_interval])\n)\n* on(host_name) \ngroup by (host_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": " (\n (\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\", state=\"used\"}\n )\n /\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\"}\n )\n )\n * on(host_name) (\n group by (host_name) (\n target_info{service_name=\"${service_name}\"}\n )\n )\n )\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_pct" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_pct": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "host_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Host CPU", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_pct": "Host Used Memory", + "host_name": "Host", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pod CPU usage" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pod Memory Usage" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 43, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_pod_name) (\n rate(k8s_pod_cpu_time_seconds_total{}[$__rate_interval])\n)\n* on(k8s_pod_name) \ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nsum by (k8s_pod_name) (\n k8s_pod_memory_working_set_bytes{}\n)\n* on(k8s_pod_name)\ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_bytes" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "k8s_pod_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "service_instance_id": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Pod CPU usage", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_bytes": "Pod Memory Usage", + "Trend #memory_usage_pct": "Host Memory", + "k8s_pod_name": "Kubernetes Pod Name", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 25, + "panels": [], + "title": "Logs", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs of the service, filtered by `service.name`, `service.namespace`, and `deployment.environment.name`.\n\nTo explore the logs, open the menu clicking on the icon `⋮` of this panel and click on `Explore`.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No application logs", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "@timestamp" + }, + "properties": [ + { + "id": "custom.width", + "value": 226 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instrumentationScope.name" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 26, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" and resource.service.namespace=\"$service_namespace\" | fields @timestamp, severity.text, body, instrumentationScope.name\n", + "queryType": "PPL", + "refId": "B", + "timeField": "observedTimestamp" + } + ], + "title": "", + "transformations": [ + { + "id": "formatTime", + "options": { + "outputFormat": "YYYY-MM-DD HH:MM:ss.sss", + "timeField": "@timestamp", + "timezone": "browser", + "useTimezone": true + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "@timestamp": 0, + "body": 3, + "instrumentationScope.name": 2, + "severity.text": 1 + }, + "renameByName": { + "@timestamp": "Time", + "body": "Message", + "instrumentationScope.name": "Logger", + "severity.text": "Severity" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 29, + "panels": [], + "title": "Traces", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "description": "Traces containing a span emitted by the service", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No traces", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trace Service" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Span ID" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": false + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "deployment.environment.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.namespace" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 50 + }, + "id": 30, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "queryType": "search", + "refId": "A", + "service": "$service_name", + "tags": "service.namespace=\"$service_namespace\"" + } + ], + "title": "", + "type": "table" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [ + { + "allowCustomValue": false, + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "Jaeger", + "value": "webstore-traces" + }, + "description": "OpenTelemetry traces", + "label": "Traces", + "name": "jaeger_datasource", + "options": [], + "query": "jaeger", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "demo", + "value": "demo" + }, + "definition": "label_values(target_info,deployment_environment_name)", + "description": "Deployment environment (`production`, `staging`...).\nResource attribute `deployment.environment.name` via `target_info`.\nValue `<>` when the resource attribute `deployment.environment.name` is not set.", + "label": "Environment", + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info,deployment_environment_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "otel-demo", + "value": "otel-demo" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "description": "Service namespace.\nResource attribute `service.namespace` via `target_info`.\nValue `<>` when the resource attribute `service.namespace` is not set.", + "includeAll": false, + "label": "Namespace", + "name": "service_namespace", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "current": { + "text": "checkout", + "value": "checkout" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "description": "Service name.\nResource attribute `service.name` via `target_info`.", + "label": "Name", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "APM Dashboard (Jaeger, Prometheus, OpenSearch)", + "uid": "febljk0a32qyoa", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-demo-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + demo-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 2, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 21, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows RED metrics for the selected service, as generated by the spanmetrics connector in the OpenTelemetry Collector.\nIf the selected service emits logs, the logs will also be displayed.\nCustom metrics generated by some services are also displayed. \n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.5.2", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 14, + "panels": [], + "title": "Spanmetrics (RED metrics)", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 4 + }, + "id": 12, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_duration_milliseconds_count{service_name=\"${service}\"}[$__rate_interval]))", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 4 + }, + "id": 10, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service_name=\"${service}\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Error Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 4 + }, + "id": 2, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le, span_name))", + "legendFormat": "{{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Average Duration by Span Name", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 19, + "panels": [], + "title": "Application Log Records", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "left", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "count()" + }, + "properties": [ + { + "id": "custom.width", + "value": 90 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 0, + "y": 13 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "severity.text.keyword", + "id": "3", + "settings": { + "min_doc_count": "1", + "order": "desc", + "orderBy": "_count", + "size": "0" + }, + "type": "terms" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| stats count() by severity.text", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records by Severity", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Count": "", + "severity.text.keyword": "Severity" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto", + "wrapText": false + }, + "filterable": true, + "inspect": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "observedTimestamp" + }, + "properties": [] + }, + { + "matcher": { + "id": "byName", + "options": "body" + }, + "properties": [ + { + "id": "custom.width", + "value": 386 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 20, + "x": 4, + "y": 13 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "hide": false, + "metrics": [ + { + "id": "1", + "settings": { + "order": "desc", + "size": "100", + "useTimeRange": true + }, + "type": "raw_data" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| sort - observedTimestamp \n| head 100", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records (100 recent entries)", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "@timestamp": true + }, + "includeByName": {}, + "indexByName": { + "@timestamp": 1, + "attributes.data_stream.dataset": 4, + "attributes.data_stream.namespace": 5, + "attributes.data_stream.type": 6, + "attributes.productId": 7, + "attributes.quantity": 8, + "attributes.userId": 9, + "body": 3, + "instrumentationScope.name": 10, + "observedTimestamp": 0, + "resource.container.id": 11, + "resource.docker.cli.cobra.command_path": 12, + "resource.host.name": 13, + "resource.service.name": 14, + "resource.telemetry.sdk.language": 15, + "resource.telemetry.sdk.name": 16, + "resource.telemetry.sdk.version": 17, + "severity.number": 18, + "severity.text": 2, + "spanId": 19, + "traceId": 20 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 18, + "panels": [], + "title": "Application Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"system\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"user\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "B" + } + ], + "title": "Python services (CPU%)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "process_runtime_cpython_memory_bytes{type=\"rss\"}", + "legendFormat": "{{job}}", + "range": true, + "refId": "A" + } + ], + "title": "Python services (Memory)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(app_recommendations_counter_total{recommendation_type=\"catalog\"}[$__rate_interval])", + "interval": "2m", + "legendFormat": "recommendations", + "range": true, + "refId": "A" + } + ], + "title": "Recommendations Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 16, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(otel_trace_span_processor_spans{job=\"quote\"}[2m])*120", + "interval": "2m", + "legendFormat": "{{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Service batch span processor", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 23, + "panels": [], + "title": "Service Dependency", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 18, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 22, + "options": { + "edges": { + "mainStatUnit": "requests" + }, + "nodes": { + "arcs": [], + "mainStatUnit": "" + }, + "zoomMode": "cooperative" + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "queryType": "dependencyGraph", + "refId": "A" + } + ], + "title": "Service Dependency", + "type": "nodeGraph" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "frontend", + "value": "frontend" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "traces_span_metrics_duration_milliseconds_bucket", + "includeAll": false, + "label": "Service", + "name": "service", + "options": [], + "query": { + "query": "traces_span_metrics_duration_milliseconds_bucket", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "/.*service.name=\\\"([^\\\"]+)\\\".*/", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Demo Dashboard", + "uid": "W2gX2zHVk", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-exemplars-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + exemplars-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows the use of metric exemplars.\nExemplars can be used to look up a trace in Jaeger.\nOnly the most recent exemplars may still be available in Jaeger.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.6.1", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 4, + "panels": [], + "title": "GetCart Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "GetCart Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 5, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 GetCart", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart GetCart Latency with Exemplars", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 3, + "panels": [], + "title": "AddItem Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 6, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "AddItem Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 1, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 AddItem", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart AddItem Latency with Exemplars", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cart Service Exemplars", + "uid": "ce6sd46kfkglca", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-linux-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + linux-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "OpenTelemetry Collector hostmetrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 267, + "panels": [], + "title": "overview【 $host_name】", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_cpu_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", state!=\"idle\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Non available RAM memory\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$node_name\", host_name=~\"$host_name\", job=\"\", state=\"used\"}", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240, + "useBackend": false + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver#collecting-host-metrics-from-inside-a-container-linux-only", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 154, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "1 \n-\nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"}) \n/ \nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (5 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 155, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_5m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "sysload_5m", + "step": 240 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (15 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_15m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "sysload_15m", + "step": 240 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used Swap\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/pagingscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" })\n/\nsum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "system_cpu_logical_count{ k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" }", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 1 + }, + "id": 75, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_limit_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 1 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "FS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 3 + }, + "id": 15, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_uptime_seconds{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 266, + "panels": [], + "title": "Basic", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Wait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy IRQs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "super-light-yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"system\"}[$__rate_interval])) \n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "busy system", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{kk8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"user\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "busy user", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"wait\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Wait", + "range": true, + "refId": "busy wait", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\".*irq\"}[$__rate_interval])) \n/\nsum((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "range": true, + "refId": "busy irq", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state!~\".*irq\", state!=\"idle\", state!=\"user\", state!=\"wait\", state!=\"system\"}[$__rate_interval]))\n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Other", + "range": true, + "refId": "busy other", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum by(host_name) (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"idle\"}[$__rate_interval])) \n/ \non(host_name) group_left sum by (host_name)((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Idle", + "range": true, + "refId": "idle", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Available" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 6 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Available", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Free", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\"cached|buffered\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "Used", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Receive (-) / Transmit (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Rec.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 11, + "y": 6 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"receive\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Receive", + "range": true, + "refId": "receive", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"transmit\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Transmit", + "range": true, + "refId": "transmit", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Read (-) / Write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 17, + "y": 6 + }, + "id": 42, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"read\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Read", + "range": true, + "refId": "read", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"write\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Write", + "range": true, + "refId": "write", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 272, + "panels": [], + "title": "Details", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 14 + }, + "id": 270, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"transmit\"}[$__rate_interval]))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_bytes", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_errors" + } + ], + "title": "Network traffic", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "receive": { + "timeField": "Time" + }, + "receive_bytes": { + "timeField": "Time" + }, + "receive_dropped_packets": { + "timeField": "Time" + }, + "receive_errors": { + "timeField": "Time" + }, + "transmit": { + "timeField": "Time" + }, + "transmit_bytes": { + "timeField": "Time" + }, + "transmit_dropped_packets": { + "timeField": "Time" + }, + "transmit_errors": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "device", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #receive_bytes": 4, + "Trend #receive_dropped_packets": 5, + "Trend #receive_errors": 3, + "Trend #transmit_bytes": 1, + "Trend #transmit_dropped_packets": 2, + "Trend #transmit_errors": 6, + "device": 0 + }, + "renameByName": { + "Trend #receive": "Receive", + "Trend #receive_bytes": "Receive", + "Trend #receive_dropped_packets": "Receive dropped", + "Trend #receive_errors": "Transmit err", + "Trend #transmit": "Transmit", + "Trend #transmit_bytes": "Transmit", + "Trend #transmit_dropped_packets": "Transmit dropped", + "Trend #transmit_errors": "Receive err", + "device": "Interface" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used %" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "gauge", + "valueDisplayMode": "color" + } + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "min", + "value": 0 + }, + { + "id": "max", + "value": 1 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mount" + }, + "properties": [ + { + "id": "custom.width", + "value": 200 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 14 + }, + "id": 269, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "table", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "free", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "total" + } + ], + "title": "Disk usage", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "/oldroot": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "/var/lib": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #free": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #total": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "mountpoint": { + "aggregations": [], + "operation": "groupby" + } + } + } + }, + { + "id": "merge", + "options": {} + }, + { + "id": "calculateField", + "options": { + "alias": "used", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + }, + "operator": "-", + "right": { + "matcher": { + "id": "byName", + "options": "Value #free (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "Used %", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "used" + } + }, + "operator": "/", + "right": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Used %": "Used %", + "Value #free (lastNotNull)": "Free", + "Value #total (lastNotNull)": "Total", + "mountpoint": "Mount", + "used": "Used" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "Mount" + } + ] + } + } + ], + "type": "table" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "linux", + "opentelemetry" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "allowCustomValue": true, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes cluster. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes node. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s node", + "name": "node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "docker-desktop", + "value": "docker-desktop" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,host_name)", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 5, + "type": "query" + }, + { + "allowCustomValue": false, + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "hide": 2, + "label": "host count", + "name": "host_count", + "options": [], + "query": { + "qryType": 3, + "query": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "/{} (.*) .*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Linux", + "uid": "otel-demo-hostmetrics", + "version": 2 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-opentelemetry-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + opentelemetry-collector.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Provides information about the status of the OpenTelemetry Collector", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 12, + "links": [], + "liveNow": true, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 55, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + }, + { + "id": "custom.width", + "value": 84 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 17, + "x": 0, + "y": 1 + }, + "id": 57, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 17, + "y": 1 + }, + "id": 56, + "options": { + "alertInstanceLabelFilter": "deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"", + "alertName": "OpenTelemetryCollector", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 17, + "showInactiveAlerts": true, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": true, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.3.1", + "title": "Alerts", + "type": "alertlist" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 63, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Receivers", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 5 + }, + "id": 65, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 67, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 5 + }, + "id": 68, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 5 + }, + "id": 69, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 8 + }, + "id": 80, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Processors", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 8 + }, + "id": 88, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 8 + }, + "id": 89, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 8 + }, + "id": 90, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 8 + }, + "id": 91, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 8 + }, + "id": 92, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 8 + }, + "id": 93, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 11 + }, + "id": 87, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Exporters", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 11 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 11 + }, + "id": 82, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 11 + }, + "id": 76, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 11 + }, + "id": 77, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 11 + }, + "id": 79, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 53, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 54, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "CPU consumption rate of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 39 + }, + "id": 50, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "rate(otelcol_process_cpu_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval])", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "CPU Usage", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Resident memory consumed by the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 39 + }, + "id": 52, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_memory_rss_bytes{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Memory Usage (RSS)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Total uptime of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 3600 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 39 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Uptime", + "type": "stat" + } + ], + "title": "Collector", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 23, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 15 + }, + "id": 39, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Span Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 15 + }, + "id": 40, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 15 + }, + "id": 59, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 15 + }, + "id": 61, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 15 + }, + "id": 60, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 15 + }, + "id": 62, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by receiver and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "accepted_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "refused_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "failed_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "error_pct" + } + ], + "title": "Receivers", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "accepted_rate": { + "timeField": "Time" + }, + "error_pct": { + "timeField": "Time" + }, + "errors": { + "timeField": "Time" + }, + "failed_pct": { + "timeField": "Time" + }, + "failed_rate": { + "timeField": "Time" + }, + "refused_rate": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + }, + "spans_errors": { + "timeField": "Time" + }, + "spans_rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_receiver", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": { + "Trend #accepted_rate": 1, + "Trend #failed_pct": 4, + "Trend #failed_rate": 3, + "Trend #refused_rate": 2, + "signal_type_receiver": 0 + }, + "renameByName": { + "Trend #accepted_rate": "Accepted Rate", + "Trend #error_pct": "Error %", + "Trend #errors": "Error %", + "Trend #failed_pct": "Error %", + "Trend #failed_rate": "Failed Rate", + "Trend #refused_rate": "Refused Rate", + "Trend #rps": "Accepted Rate", + "Trend #spans_errors": "Error", + "Trend #spans_rps": "Rate", + "Value #A": "Spans Rate", + "Value #B": "Spans Failure %", + "Value #C": "Logs Rate", + "Value #D": "Logs Failure %", + "Value #E": "Metrics Rate", + "Value #F": "Metrics Failure %", + "receiver": "Receiver", + "signal_type_receiver": "Receiver" + } + } + } + ], + "type": "table" + } + ], + "title": "Receivers", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 48, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 95 + }, + "id": 81, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 95 + }, + "id": 75, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 95 + }, + "id": 83, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 95 + }, + "id": 84, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 95 + }, + "id": 85, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 95 + }, + "id": 86, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 1 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 49, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n (\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n -\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n )\n /\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "discarded_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "inbound_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "outbound_rate" + } + ], + "title": "Processors", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "discarded_pct": { + "timeField": "Time" + }, + "inbound_rate": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "otel_signal_processor", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #discarded_pct": 2, + "Trend #inbound_rate": 1, + "Trend #outbound_rate": 3, + "otel_signal_processor": 0 + }, + "renameByName": { + "Trend #discarded_pct": "Discarded %", + "Trend #inbound_rate": "Inbound Rate", + "Trend #outbound_rate": "Outbound Rate", + "otel_signal_processor": "Processor", + "otel_signal_receiver": "" + } + } + } + ], + "type": "table" + } + ], + "title": "Processors", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 47, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 96 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 96 + }, + "id": 44, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "spans_error" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 96 + }, + "id": 70, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 96 + }, + "id": 72, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 96 + }, + "id": 71, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 96 + }, + "id": 73, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by exporter and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 109 + }, + "id": 45, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rps" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n /\n otelcol_exporter_queue_capacity{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size_pct" + } + ], + "title": "Exporters", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "errors": { + "timeField": "Time" + }, + "queue_size": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_exporter", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #errors": "Errors %", + "Trend #queue_size": "Queue size", + "Trend #queue_size_pct": "Queue saturation %", + "Trend #rps": "Rate", + "signal_type_exporter": "Exporter" + } + } + } + ], + "type": "table" + } + ], + "title": "Exporters", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 46, + "panels": [ + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs from OpenTelemetry Collector filtered by dashboard variables", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 42, + "options": { + "dedupStrategy": "none", + "detailsMode": "sidebar", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showControls": false, + "showLabels": false, + "showLogAttributes": true, + "showTime": true, + "sortOrder": "Ascending", + "wrapLogMessage": false + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" | fields @timestamp, resource.service.name, resource.service.instance.id, resource.host.name, severity.text, body", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "OpenTelemetry Collector Logs", + "type": "logs" + } + ], + "title": "Logs", + "type": "row" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "opentelemetry", + "opentelemetry-collector" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "(?!grafanacloud-.*-alert-state-history|grafanacloud-.*-usage-insights).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "description": "Deployment environment (e.g. \"production\").\nResource attribute `deployment.environment.name` via `target_info`", + "includeAll": true, + "label": "Environment", + "multi": true, + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "description": "Resource attribute `k8s.cluster.name`", + "includeAll": true, + "label": "Kubernetes cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "`k8s.node.name`", + "includeAll": true, + "label": "K8s node", + "multi": true, + "name": "k8s_node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "description": "`host.name`", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "description": "`service.instance.id`", + "includeAll": true, + "label": "Instance", + "name": "service_instance_id", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "otelcol-contrib", + "value": "otelcol-contrib" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "description": "`service.name`", + "includeAll": true, + "label": "Service", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "browser", + "title": "OpenTelemetry Collector", + "uid": "otel-demo_otel-collector_dashboard", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-postgresql-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + postgresql-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Performance metrics for PostgreSQL instrumented with the OpenTelemetry Collector PostgreSQL receiver.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [ + { + "asDropdown": false, + "includeVars": true, + "keepTime": true, + "tags": [ + "postgres-integration" + ], + "title": "Integration dashboards", + "type": "dashboards" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 15, + "panels": [], + "title": "PostgreSQL Overview", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Queries per seconds. Queries being commits or rollbacks.\n", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 11, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_commits_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval])) + sum(irate(postgresql_rollbacks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "xact_commit" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 1800, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "QPS", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "See [pg_stat_database / `tup_fetched`](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 20, + "x": 4, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_fetched_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "fetched", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "fetched", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_returned_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "returned", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "returned", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_inserted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "inserted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "inserted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_updated_total{dpostgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "updated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "updated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_deleted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "deleted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deleted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Rows", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_allocated_total{host_name=~\"$host_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers allocated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "buffers_allocated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_writes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "", + "legendFormat": "buffers write {{source}}", + "range": true, + "refId": "buffers_write", + "useBackend": false + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_backend", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_backend", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_clean", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_clean", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_checkpoint_count_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "checkpoint {{type}}", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "checkpoint", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Buffers", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "deadlocks" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-red", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "deadlocks" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "conflicts", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_deadlocks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "deadlocks", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deadlocks", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "conflicts" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "deadlocks", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_conflicts_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "conflicts", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "conflicts-not-yet-implemented-in-otelcol", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "deadlocks" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Conflicts/Deadlocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "round(\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n +\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_read_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n 0.001\n)", + "format": "time_series", + "legendFormat": "{{postgresql_database_name}} - cache hit ratio", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Cache hit ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "postgresql_backends{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{postgresql_database_name}} - connections", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Number of active connections", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 41, + "tags": [ + "opentelemetry", + "postgresql" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count,k8s_cluster_name)", + "description": "When deploying PostgreSQL on Kubernetes, name of the Kubernetes cluster. \nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "", + "value": "" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "description": "When deploying on Kubernetes, name of the `StatefulSet` of the PostgreSQL deployment (e.g. `my-pg-cluster`).\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Statefulset", + "multi": true, + "name": "k8s_statefulset_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "description": "When deploying PostgreSQL on VMs, name on the host on which the database is deployed.\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "Host", + "multi": true, + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "includeAll": true, + "label": "Database", + "name": "db", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "PostgreSQL", + "uid": "xHhbQmdjA", + "version": 5 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-spanmetrics-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + spanmetrics-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Spanmetrics way of demo application view.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 26, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard uses RED metrics generated for all services by the spanmetrics connector configured in the OpenTelemetry Collector.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.4.0", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 24, + "panels": [], + "title": "Service Level - Throughput and Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,service_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - Service Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "super-light-blue", + "value": 1 + }, + { + "color": "#EAB839", + "value": 2 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 4, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum by (service_name) (rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean Rate over Range", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-reds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "red", + "value": 15 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 15, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (service_name))", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean ERROR Rate over Range", + "type": "bargauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 14, + "panels": [], + "title": "span_names Level - Throughput", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "bRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-BlYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "eRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-RdYlGr" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 663 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 667 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Service" + }, + "properties": [ + { + "id": "custom.width" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 22, + "interval": "5m", + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name)) ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name))", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Error Rate" + } + ], + "title": "Top 7 span_names and Errors (APM Table)", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "span_name" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true + }, + "indexByName": {}, + "renameByName": { + "Value #Error Rate": "Error Rate", + "Value #Rate": "Rate", + "service_name 1": "Rate in Service", + "service_name 2": "Error Rate in Service" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "bRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "eRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Error Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Error Rate": true, + "Rate": true, + "bRate": false + }, + "indexByName": { + "Error Rate": 4, + "Error Rate in Service": 6, + "Rate": 1, + "Rate in Service": 5, + "bRate": 2, + "eRate": 3, + "span_name": 0 + }, + "renameByName": { + "Rate in Service": "Service", + "bRate": "Rate", + "eRate": "Error Rate", + "span_name": "span_name Name" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Rate" + } + ] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 20, + "panels": [], + "title": "span_name Level - Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 25, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,span_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{span_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - span_name Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 10, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7, sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"${service}\", span_name=~\"$span_name\"}[5m]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"${service}\",span_name=~\"$span_name\"}[5m\n])))", + "instant": true, + "interval": "", + "legendFormat": "{{span_name}} [{{service_name}}]", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Highest Endpoint Latencies Mean Over Range ", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 16, + "interval": "5m", + "options": { + "legend": { + "calcs": [ + "mean", + "logmin", + "max", + "delta" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": true, + "expr": "topk(7,sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])))", + "instant": false, + "interval": "", + "legendFormat": "[{{service_name}}] {{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Top 7 Latencies Over Range ", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "includeAll": true, + "multi": true, + "name": "service", + "options": [], + "query": { + "query": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*service_name=\"(.*)\".*/", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "includeAll": true, + "multi": true, + "name": "span_name", + "options": [], + "query": { + "query": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*span_name=\"(.*)\".*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Spanmetrics Demo Dashboard", + "uid": "W2gX2zHVk48", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_datasource: "1" +data: + + default.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Prometheus + uid: webstore-metrics + type: prometheus + url: http://prometheus:9090 + editable: true + isDefault: true + jsonData: + # Align Prometheus data source time interval with the OTel SDKs' export interval (see OTEL_METRIC_EXPORT_INTERVAL) + timeInterval: "60s" + exemplarTraceIdDestinations: + - datasourceUid: webstore-traces + name: trace_id + + - url: http://localhost:8080/jaeger/ui/trace/$${__value.raw} + name: trace_id + urlDisplayLabel: View in Jaeger UI + jaeger.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Jaeger + uid: webstore-traces + type: jaeger + url: http://jaeger:16686/jaeger/ui + editable: true + isDefault: false + jsonData: + tracesToLogsV2: + datasourceUid: webstore-logs + spanStartTimeShift: "-20m" + spanEndTimeShift: "20m" + filterByTraceID: true + filterBySpanID: true + customQuery: true + query: traceId:"$${__trace.traceId}" AND spanId:"$${__span.spanId}" + opensearch.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + apiVersion: 1 + + datasources: + - name: OpenSearch + uid: webstore-logs + type: grafana-opensearch-datasource + url: http://opensearch:9200/ + access: proxy + editable: true + isDefault: false + jsonData: + database: otel-logs-* + flavor: opensearch + logLevelField: severity.text.keyword + logMessageField: body + pplEnabled: true + timeField: observedTimestamp + version: 3.4.0 diff --git a/chart/examples/custom-environment-variables/rendered/grafana/clusterrole.yaml b/chart/examples/custom-environment-variables/rendered/grafana/clusterrole.yaml new file mode 100644 index 0000000..ea5c00b --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/clusterrole.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrole.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-clusterrole +rules: + - apiGroups: [""] # "" indicates the core API group + resources: ["configmaps", "secrets"] + verbs: ["get", "watch", "list"] diff --git a/chart/examples/custom-environment-variables/rendered/grafana/clusterrolebinding.yaml b/chart/examples/custom-environment-variables/rendered/grafana/clusterrolebinding.yaml new file mode 100644 index 0000000..c53b4b6 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrolebinding.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: grafana-clusterrolebinding + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +subjects: + - kind: ServiceAccount + name: grafana + namespace: default +roleRef: + kind: ClusterRole + name: grafana-clusterrole + apiGroup: rbac.authorization.k8s.io diff --git a/chart/examples/custom-environment-variables/rendered/grafana/configmap-dashboard-provider.yaml b/chart/examples/custom-environment-variables/rendered/grafana/configmap-dashboard-provider.yaml new file mode 100644 index 0000000..64c09be --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/configmap-dashboard-provider.yaml @@ -0,0 +1,27 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap-dashboard-provider.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-config-dashboards + namespace: default +data: + provider.yaml: |- + apiVersion: 1 + providers: + - name: 'sidecarProvider' + orgId: 1 + folder: '' + folderUid: '' + type: file + disableDeletion: false + allowUiUpdates: false + updateIntervalSeconds: 30 + options: + foldersFromFilesStructure: false + path: /tmp/dashboards diff --git a/chart/examples/custom-environment-variables/rendered/grafana/configmap.yaml b/chart/examples/custom-environment-variables/rendered/grafana/configmap.yaml new file mode 100644 index 0000000..eacaa51 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/configmap.yaml @@ -0,0 +1,39 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +data: + + plugins: grafana-opensearch-datasource + grafana.ini: | + [analytics] + check_for_updates = true + [auth] + disable_login_form = true + [auth.anonymous] + enabled = true + org_name = Main Org. + org_role = Admin + [grafana_net] + url = https://grafana.net + [log] + mode = console + [paths] + data = /var/lib/grafana/ + logs = /var/log/grafana + plugins = /var/lib/grafana/plugins + provisioning = /etc/grafana/provisioning + [server] + domain = '' + root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana + serve_from_sub_path = true + [unified_storage] + index_path = /var/lib/grafana-search/bleve diff --git a/chart/examples/custom-environment-variables/rendered/grafana/deployment.yaml b/chart/examples/custom-environment-variables/rendered/grafana/deployment.yaml new file mode 100644 index 0000000..1432756 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/deployment.yaml @@ -0,0 +1,271 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + strategy: + type: RollingUpdate + template: + metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + annotations: + checksum/config: 4bc37edad15da2620fa7b48cb4d0af4ca30f6d344ac238d6aa702abb2d92c6ba + checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 + checksum/secret: bed677784356b2af7fb0d87455db21f077853059b594101a4f6532bfbd962a7f + kubectl.kubernetes.io/default-container: grafana + spec: + + serviceAccountName: grafana + automountServiceAccountToken: true + shareProcessNamespace: false + securityContext: + fsGroup: 472 + runAsGroup: 472 + runAsNonRoot: true + runAsUser: 472 + enableServiceLinks: true + containers: + - name: grafana-sc-alerts + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_alert" + - name: FOLDER + value: "/etc/grafana/provisioning/alerting" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/alerting/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: grafana-sc-dashboard + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_dashboard" + - name: FOLDER + value: "/tmp/dashboards" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/dashboards/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: grafana-sc-datasources + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_datasource" + - name: FOLDER + value: "/etc/grafana/provisioning/datasources" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/datasources/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + - name: grafana + image: "docker.io/grafana/grafana:12.3.1" + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: config + mountPath: "/etc/grafana/grafana.ini" + subPath: grafana.ini + - name: storage + mountPath: "/var/lib/grafana" + - name: search + mountPath: "/var/lib/grafana-search" + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: sc-dashboard-provider + mountPath: "/etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml" + subPath: provider.yaml + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + ports: + - name: grafana + containerPort: 3000 + protocol: TCP + - name: gossip-tcp + containerPort: 9094 + protocol: TCP + - name: gossip-udp + containerPort: 9094 + protocol: UDP + - name: profiling + containerPort: 6060 + protocol: TCP + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: GF_SECURITY_ADMIN_USER + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: GF_SECURITY_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: GF_INSTALL_PLUGINS + valueFrom: + configMapKeyRef: + name: grafana + key: plugins + - name: GF_PATHS_DATA + value: /var/lib/grafana/ + - name: GF_PATHS_LOGS + value: /var/log/grafana + - name: GF_PATHS_PLUGINS + value: /var/lib/grafana/plugins + - name: GF_PATHS_PROVISIONING + value: /etc/grafana/provisioning + - name: GF_UNIFIED_STORAGE_INDEX_PATH + value: /var/lib/grafana-search/bleve + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + divisor: "1" + resource: limits.memory + livenessProbe: + failureThreshold: 10 + httpGet: + path: /api/health + port: grafana + initialDelaySeconds: 60 + timeoutSeconds: 30 + readinessProbe: + httpGet: + path: /api/health + port: grafana + resources: + limits: + memory: 175Mi + volumes: + - name: config + configMap: + name: grafana + - name: storage + emptyDir: {} + - name: search + emptyDir: {} + - name: sc-alerts-volume + emptyDir: {} + - name: sc-dashboard-volume + emptyDir: {} + - name: sc-dashboard-provider + configMap: + name: grafana-config-dashboards + - name: sc-datasources-volume + emptyDir: {} diff --git a/chart/examples/custom-environment-variables/rendered/grafana/role.yaml b/chart/examples/custom-environment-variables/rendered/grafana/role.yaml new file mode 100644 index 0000000..c211542 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/role.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +rules: [] diff --git a/chart/examples/custom-environment-variables/rendered/grafana/rolebinding.yaml b/chart/examples/custom-environment-variables/rendered/grafana/rolebinding.yaml new file mode 100644 index 0000000..8951e99 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/rolebinding.yaml @@ -0,0 +1,20 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: grafana +subjects: +- kind: ServiceAccount + name: grafana + namespace: default diff --git a/chart/examples/custom-environment-variables/rendered/grafana/secret.yaml b/chart/examples/custom-environment-variables/rendered/grafana/secret.yaml new file mode 100644 index 0000000..48cb47d --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/secret.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + app.kubernetes.io/component: admin-secret +type: Opaque +data: + + admin-user: "YWRtaW4=" + admin-password: "YWRtaW4=" + ldap-toml: "" diff --git a/chart/examples/custom-environment-variables/rendered/grafana/service.yaml b/chart/examples/custom-environment-variables/rendered/grafana/service.yaml new file mode 100644 index 0000000..54fa194 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/service.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + type: ClusterIP + ports: + - name: service + port: 80 + protocol: TCP + targetPort: grafana + selector: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example diff --git a/chart/examples/custom-environment-variables/rendered/grafana/serviceaccount.yaml b/chart/examples/custom-environment-variables/rendered/grafana/serviceaccount.yaml new file mode 100644 index 0000000..721b1a6 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/grafana/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +automountServiceAccountToken: false +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana + namespace: default diff --git a/chart/examples/custom-environment-variables/rendered/jaeger/jaeger-deploy.yaml b/chart/examples/custom-environment-variables/rendered/jaeger/jaeger-deploy.yaml new file mode 100644 index 0000000..35c11b5 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/jaeger/jaeger-deploy.yaml @@ -0,0 +1,124 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one + prometheus.io/port: "8888" + prometheus.io/scrape: "true" +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + template: + metadata: + labels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + annotations: + prometheus.io/port: "8888" + prometheus.io/scrape: "true" + spec: + + containers: + - env: + - name: MEMORY_MAX_TRACES + value: "25000" + - name: PROMETHEUS_ADDR + value: prometheus:9090 + - name: OTEL_COLLECTOR_HOST + value: otel-collector + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + - name: JAEGER_HOST + value: 0.0.0.0 + - name: JAEGER_GRPC_PORT + value: "4317" + - name: SPAN_STORAGE_TYPE + value: memory + + - name: COLLECTOR_ZIPKIN_HOST_PORT + value: :9411 + - name: JAEGER_DISABLED + value: "false" + - name: COLLECTOR_OTLP_ENABLED + value: "true" + securityContext: + {} + image: jaegertracing/jaeger:2.14.1 + imagePullPolicy: IfNotPresent + name: jaeger + args: + - "--config" + - "/etc/jaeger/user-config.yaml" + ports: + - containerPort: 5775 + protocol: UDP + - containerPort: 6831 + protocol: UDP + - containerPort: 6832 + protocol: UDP + - containerPort: 5778 + protocol: TCP + - containerPort: 16686 + protocol: TCP + - containerPort: 16685 + protocol: TCP + - containerPort: 9411 + protocol: TCP + - containerPort: 4317 + protocol: TCP + - containerPort: 4318 + protocol: TCP + - containerPort: 13133 + protocol: TCP + - containerPort: 8888 + protocol: TCP + livenessProbe: + failureThreshold: 5 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 1 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + resources: + limits: + memory: 600Mi + volumeMounts: + - name: user-config + mountPath: /etc/jaeger + securityContext: + fsGroup: 10001 + runAsGroup: 10001 + runAsUser: 10001 + serviceAccountName: jaeger + volumes: + - name: user-config + configMap: + name: user-config diff --git a/chart/examples/custom-environment-variables/rendered/jaeger/jaeger-sa.yaml b/chart/examples/custom-environment-variables/rendered/jaeger/jaeger-sa.yaml new file mode 100644 index 0000000..b670c99 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/jaeger/jaeger-sa.yaml @@ -0,0 +1,14 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-sa.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +automountServiceAccountToken: true diff --git a/chart/examples/custom-environment-variables/rendered/jaeger/service.yaml b/chart/examples/custom-environment-variables/rendered/jaeger/service.yaml new file mode 100644 index 0000000..6174656 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/jaeger/service.yaml @@ -0,0 +1,67 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +spec: + type: ClusterIP + ports: + # Agent Ports + - name: zk-compact-trft + port: 5775 + protocol: UDP + targetPort: 5775 + - name: config-rest + port: 5778 + targetPort: 5778 + - name: jg-compact-trft + port: 6831 + protocol: UDP + targetPort: 6831 + - name: jg-binary-trft + port: 6832 + protocol: UDP + targetPort: 6832 + # Collector Ports + - name: http-zipkin + port: 9411 + targetPort: 9411 + appProtocol: http + - name: grpc-http + port: 14250 + targetPort: 14250 + appProtocol: grpc + - name: c-tchan-trft + port: 14267 + targetPort: 14267 + - name: http-c-binary-trft + port: 14268 + targetPort: 14268 + appProtocol: http + - name: otlp-grpc + port: 4317 + targetPort: 4317 + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + appProtocol: http + # Query Ports + - name: http-query + port: 16686 + targetPort: 16686 + - name: grpc-query + port: 16685 + targetPort: 16685 + selector: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one diff --git a/chart/examples/custom-environment-variables/rendered/jaeger/user-config.yaml b/chart/examples/custom-environment-variables/rendered/jaeger/user-config.yaml new file mode 100644 index 0000000..2f49362 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/jaeger/user-config.yaml @@ -0,0 +1,73 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/user-config.yaml +# Generates a config map from a file provided by user via `--set-file userconfig=` +apiVersion: v1 +kind: ConfigMap +metadata: + name: user-config + namespace: default + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm +data: + user-config.yaml: | + service: + extensions: [jaeger_storage, jaeger_query, healthcheckv2] + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [jaeger_storage_exporter] + telemetry: + resource: + service.name: jaeger + metrics: + level: detailed + readers: + - periodic: + interval: 10000 + timeout: 5000 + exporter: + otlp: + protocol: http/protobuf + endpoint: http://${env:OTEL_COLLECTOR_HOST}:${env:OTEL_COLLECTOR_PORT_HTTP} + insecure: true + logs: + level: info + extensions: + healthcheckv2: + use_v2: true + http: + endpoint: 0.0.0.0:13133 + jaeger_query: + storage: + traces: memory_backend + metrics: metrics_backend + base_path: /jaeger/ui + jaeger_storage: + backends: + memory_backend: + memory: + max_traces: ${env:MEMORY_MAX_TRACES} + metric_backends: + metrics_backend: + prometheus: + endpoint: "http://${env:PROMETHEUS_ADDR}" + normalize_calls: true + normalize_duration: true + + receivers: + otlp: + protocols: + grpc: + endpoint: ${env:JAEGER_HOST}:${env:JAEGER_GRPC_PORT} + + processors: + batch: + + exporters: + jaeger_storage_exporter: + trace_storage: memory_backend diff --git a/chart/examples/custom-environment-variables/rendered/opensearch/configmap.yaml b/chart/examples/custom-environment-variables/rendered/opensearch/configmap.yaml new file mode 100644 index 0000000..44bff5a --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opensearch/configmap.yaml @@ -0,0 +1,65 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: opensearch-config + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +data: + opensearch.yml: | + cluster.name: opensearch-cluster + + # Bind to all interfaces because we don't know what IP address Docker will assign to us. + network.host: 0.0.0.0 + + # Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. + # Implicitly done if ".singleNode" is set to "true". + # discovery.type: single-node + + # Start OpenSearch Security Demo Configuration + # WARNING: revise all the lines below before you go into production + # plugins: + # security: + # ssl: + # transport: + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # enforce_hostname_verification: false + # http: + # enabled: true + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # allow_unsafe_democertificates: true + # allow_default_init_securityindex: true + # authcz: + # admin_dn: + # - CN=kirk,OU=client,O=client,L=test,C=de + # audit.type: internal_opensearch + # enable_snapshot_restore_privilege: true + # check_snapshot_restore_write_privileges: true + # restapi: + # roles_enabled: ["all_access", "security_rest_api_access"] + # system_indices: + # enabled: true + # indices: + # [ + # ".opendistro-alerting-config", + # ".opendistro-alerting-alert*", + # ".opendistro-anomaly-results*", + # ".opendistro-anomaly-detector*", + # ".opendistro-anomaly-checkpoints", + # ".opendistro-anomaly-detection-state", + # ".opendistro-reports-*", + # ".opendistro-notifications-*", + # ".opendistro-notebooks", + # ".opendistro-asynchronous-search-response*", + # ] + ######## End OpenSearch Security Demo Configuration ######## diff --git a/chart/examples/custom-environment-variables/rendered/opensearch/poddisruptionbudget.yaml b/chart/examples/custom-environment-variables/rendered/opensearch/poddisruptionbudget.yaml new file mode 100644 index 0000000..4916d26 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opensearch/poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/poddisruptionbudget.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: "opensearch-pdb" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example diff --git a/chart/examples/custom-environment-variables/rendered/opensearch/service.yaml b/chart/examples/custom-environment-variables/rendered/opensearch/service.yaml new file mode 100644 index 0000000..4ac5038 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opensearch/service.yaml @@ -0,0 +1,59 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + {} +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + protocol: TCP + port: 9200 + - name: transport + protocol: TCP + port: 9300 + - name: metrics + protocol: TCP + port: 9600 +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch-headless + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + clusterIP: None # This is needed for statefulset hostnames like opensearch-0 to resolve + # Create endpoints also if the related pod isn't ready + publishNotReadyAddresses: true + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + port: 9200 + - name: transport + port: 9300 + - name: metrics + port: 9600 diff --git a/chart/examples/custom-environment-variables/rendered/opensearch/statefulset.yaml b/chart/examples/custom-environment-variables/rendered/opensearch/statefulset.yaml new file mode 100644 index 0000000..e71f96e --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opensearch/statefulset.yaml @@ -0,0 +1,154 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + majorVersion: "3" +spec: + serviceName: opensearch-headless + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + replicas: 1 + podManagementPolicy: Parallel + updateStrategy: + type: RollingUpdate + template: + metadata: + name: "opensearch" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + configchecksum: 17d9fa0bb5acd5c7f6e4ff053d35a4bba83d971ccee521315964c59a0d83160 + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + automountServiceAccountToken: false + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - example + - key: app.kubernetes.io/name + operator: In + values: + - opensearch + terminationGracePeriodSeconds: 120 + volumes: + - name: config + configMap: + name: opensearch-config + - emptyDir: {} + name: config-emptydir + enableServiceLinks: true + initContainers: + - name: configfile + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + command: + - sh + - -c + - | + #!/usr/bin/env bash + cp -r /tmp/configfolder/* /tmp/config/ + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + resources: + {} + volumeMounts: + - mountPath: /tmp/config/ + name: config-emptydir + - name: config + mountPath: /tmp/configfolder/opensearch.yml + subPath: opensearch.yml + containers: + - name: "opensearch" + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + readinessProbe: + failureThreshold: 3 + periodSeconds: 5 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 5 + periodSeconds: 10 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 9200 + - name: transport + containerPort: 9300 + - name: metrics + containerPort: 9600 + resources: + limits: + memory: 1100Mi + requests: + cpu: 1000m + memory: 100Mi + env: + - name: node.name + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: discovery.seed_hosts + value: "opensearch-cluster-master-headless" + - name: cluster.name + value: "demo-cluster" + - name: network.host + value: "0.0.0.0" + - name: OPENSEARCH_JAVA_OPTS + value: "-Xms400m -Xmx400m" + - name: node.roles + value: "master,ingest,data,remote_cluster_client," + - name: discovery.type + value: "single-node" + - name: bootstrap.memory_lock + value: "true" + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + volumeMounts: + - name: config-emptydir + mountPath: /usr/share/opensearch/config/opensearch.yml + subPath: opensearch.yml diff --git a/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrole.yaml b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrole.yaml new file mode 100644 index 0000000..6fad98f --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrole.yaml @@ -0,0 +1,48 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +rules: + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get","list","watch","create","update","patch","delete"] + - apiGroups: [""] + resources: ["pods", "namespaces"] + verbs: ["get", "watch", "list"] + - apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events", "namespaces", "namespaces/status", "nodes", "nodes/spec", "pods", "pods/status", "replicationcontrollers", "replicationcontrollers/status", "resourcequotas", "services" ] + verbs: ["get", "list", "watch"] + - apiGroups: ["apps"] + resources: ["daemonsets", "deployments", "replicasets", "statefulsets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["daemonsets", "deployments", "replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["batch"] + resources: ["jobs", "cronjobs"] + verbs: ["get", "list", "watch"] + - apiGroups: ["autoscaling"] + resources: ["horizontalpodautoscalers"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["nodes/stats"] + verbs: ["get", "watch", "list"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch"] diff --git a/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrolebinding.yaml b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrolebinding.yaml new file mode 100644 index 0000000..886802c --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/clusterrolebinding.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector +subjects: +- kind: ServiceAccount + name: otel-collector + namespace: default diff --git a/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/configmap-agent.yaml b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/configmap-agent.yaml new file mode 100644 index 0000000..6b47c77 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/configmap-agent.yaml @@ -0,0 +1,283 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/configmap-agent.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +data: + relay: | + connectors: + spanmetrics: {} + exporters: + debug: {} + opensearch: + http: + endpoint: http://opensearch:9200 + tls: + insecure: true + logs_index: otel-logs + logs_index_time_format: yyyy-MM-dd + otlp/jaeger: + endpoint: jaeger:4317 + sending_queue: + batch: null + tls: + insecure: true + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + sending_queue: + batch: null + tls: + insecure: true + extensions: + health_check: + endpoint: ${env:MY_POD_IP}:13133 + k8s_leader_elector/k8s_cluster: + auth_type: serviceAccount + lease_name: k8s.cluster.receiver.opentelemetry.io + lease_namespace: default + k8s_observer: + auth_type: serviceAccount + node: ${env:K8S_NODE_NAME} + processors: + attributes: + actions: + - action: insert + key: app.eng.team + value: ring + include: + match_type: strict + services: + - frontend-proxy + batch: {} + k8sattributes: + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.uid + - k8s.node.name + - k8s.pod.start_time + - k8s.deployment.name + - k8s.replicaset.name + - k8s.replicaset.uid + - k8s.daemonset.name + - k8s.daemonset.uid + - k8s.job.name + - k8s.job.uid + - k8s.container.name + - k8s.cronjob.name + - k8s.statefulset.name + - k8s.statefulset.uid + - container.image.tag + - container.image.name + - k8s.cluster.uid + - service.namespace + - service.name + - service.version + - service.instance.id + otel_annotations: true + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: connection + memory_limiter: + check_interval: 5s + limit_percentage: 80 + spike_limit_percentage: 25 + resource: + attributes: + - action: insert + from_attribute: k8s.pod.uid + key: service.instance.id + resourcedetection: + detectors: + - env + - system + transform: + error_mode: ignore + trace_statements: + - conditions: + - span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" + and span.attributes["http.route"] == nil + context: span + statements: + - set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], + "\\/api\\/cart") + - set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], + "\\/api\\/checkout") + - set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], + "\\/api\\/products\\/.*") + - set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], + "\\/api\\/recommendations") + - set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], + "\\/api\\/data.*") + - context: span + statements: + - set_semconv_span_name("1.37.0", "unsanitized_span_name") + receivers: + hostmetrics: + collection_interval: 10s + root_path: /hostfs + scrapers: + cpu: null + disk: null + filesystem: + exclude_fs_types: + fs_types: + - autofs + - binfmt_misc + - bpf + - cgroup2 + - configfs + - debugfs + - devpts + - devtmpfs + - fusectl + - hugetlbfs + - iso9660 + - mqueue + - nsfs + - overlay + - proc + - procfs + - pstore + - rpc_pipefs + - securityfs + - selinuxfs + - squashfs + - sysfs + - tracefs + match_type: strict + exclude_mount_points: + match_type: regexp + mount_points: + - /dev/* + - /proc/* + - /sys/* + - /run/k3s/containerd/* + - /var/lib/docker/* + - /var/lib/kubelet/* + - /snap/* + load: null + memory: null + network: null + jaeger: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:14250 + thrift_compact: + endpoint: ${env:MY_POD_IP}:6831 + thrift_http: + endpoint: ${env:MY_POD_IP}:14268 + k8s_cluster: + collection_interval: 10s + k8s_leader_elector: k8s_leader_elector/k8s_cluster + kubeletstats: + auth_type: serviceAccount + collection_interval: 20s + endpoint: ${env:K8S_NODE_IP}:10250 + otlp: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:4317 + http: + cors: + allowed_origins: + - http://* + - https://* + endpoint: ${env:MY_POD_IP}:4318 + prometheus: + config: + scrape_configs: + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - ${env:MY_POD_IP}:8888 + receiver_creator/metrics: + discovery: + enabled: true + watch_observers: + - k8s_observer + zipkin: + endpoint: ${env:MY_POD_IP}:9411 + service: + extensions: + - health_check + - k8s_observer + - k8s_leader_elector/k8s_cluster + pipelines: + logs: + exporters: + - opensearch + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + metrics: + exporters: + - otlphttp/prometheus + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + - spanmetrics + - receiver_creator/metrics + - hostmetrics + - kubeletstats + - k8s_cluster + traces: + exporters: + - otlp/jaeger + - debug + - spanmetrics + processors: + - k8sattributes + - memory_limiter + - attributes + - spanmetrics + - batch + receivers: + - otlp + - jaeger + - zipkin + telemetry: + metrics: + level: detailed + readers: + - periodic: + exporter: + otlp: + endpoint: http://otel-collector:4318 + insecure: true + protocol: http/protobuf + interval: 10000 + timeout: 5000 diff --git a/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/daemonset.yaml b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/daemonset.yaml new file mode 100644 index 0000000..d71c80b --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/daemonset.yaml @@ -0,0 +1,122 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + updateStrategy: + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: 84c67e88758a9d855cb1e31ff140d3c476c5388d66cfd1b6fecf481f17b49c52 + + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + + spec: + + serviceAccountName: otel-collector + automountServiceAccountToken: true + securityContext: + {} + containers: + - name: opentelemetry-collector + args: + - --config=/conf/relay.yaml + securityContext: + {} + image: "otel/opentelemetry-collector-contrib:0.142.0" + imagePullPolicy: IfNotPresent + ports: + + - name: jaeger-compact + containerPort: 6831 + protocol: UDP + hostPort: 6831 + - name: jaeger-grpc + containerPort: 14250 + protocol: TCP + hostPort: 14250 + - name: jaeger-thrift + containerPort: 14268 + protocol: TCP + hostPort: 14268 + - name: metrics + containerPort: 8888 + protocol: TCP + - name: otlp + containerPort: 4317 + protocol: TCP + hostPort: 4317 + - name: otlp-http + containerPort: 4318 + protocol: TCP + hostPort: 4318 + - name: zipkin + containerPort: 9411 + protocol: TCP + hostPort: 9411 + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: K8S_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: GOMEMLIMIT + value: "160MiB" + livenessProbe: + httpGet: + path: / + port: 13133 + readinessProbe: + httpGet: + path: / + port: 13133 + resources: + limits: + memory: 200Mi + volumeMounts: + - mountPath: /conf + name: opentelemetry-collector-configmap + - name: hostfs + mountPath: /hostfs + readOnly: true + mountPropagation: HostToContainer + volumes: + - name: opentelemetry-collector-configmap + configMap: + name: otel-collector-agent + items: + - key: relay + path: relay.yaml + - name: hostfs + hostPath: + path: / + hostNetwork: false diff --git a/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/service.yaml b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/service.yaml new file mode 100644 index 0000000..d57f891 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/service.yaml @@ -0,0 +1,54 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector + component: agent-collector +spec: + type: ClusterIP + ports: + + - name: jaeger-compact + port: 6831 + targetPort: 6831 + protocol: UDP + - name: jaeger-grpc + port: 14250 + targetPort: 14250 + protocol: TCP + - name: jaeger-thrift + port: 14268 + targetPort: 14268 + protocol: TCP + - name: metrics + port: 8888 + targetPort: 8888 + protocol: TCP + - name: otlp + port: 4317 + targetPort: 4317 + protocol: TCP + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP + - name: zipkin + port: 9411 + targetPort: 9411 + protocol: TCP + selector: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + internalTrafficPolicy: Local diff --git a/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/serviceaccount.yaml b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/serviceaccount.yaml new file mode 100644 index 0000000..73ebb08 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/opentelemetry-collector/serviceaccount.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector diff --git a/chart/examples/custom-environment-variables/rendered/posgresql-init-config.yaml b/chart/examples/custom-environment-variables/rendered/posgresql-init-config.yaml new file mode 100644 index 0000000..4c75905 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/posgresql-init-config.yaml @@ -0,0 +1,173 @@ +--- +# Source: opentelemetry-demo/templates/posgresql-init-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-init + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + init.sql: | + -- Copyright The OpenTelemetry Authors + -- SPDX-License-Identifier: Apache-2.0 + + CREATE USER otelu WITH PASSWORD 'otelp'; + + -- Accounting Service: create a schema + CREATE SCHEMA accounting; + GRANT USAGE ON SCHEMA accounting TO otelu; + + -- Accounting Service: create tables + CREATE TABLE accounting."order" ( + order_id TEXT PRIMARY KEY + ); + + CREATE TABLE accounting.shipping ( + shipping_tracking_id TEXT PRIMARY KEY, + shipping_cost_currency_code TEXT NOT NULL, + shipping_cost_units BIGINT NOT NULL, + shipping_cost_nanos INT NOT NULL, + street_address TEXT, + city TEXT, + state TEXT, + country TEXT, + zip_code TEXT, + order_id TEXT NOT NULL, + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + CREATE TABLE accounting.orderitem ( + item_cost_currency_code TEXT NOT NULL, + item_cost_units BIGINT NOT NULL, + item_cost_nanos INT NOT NULL, + product_id TEXT NOT NULL, + quantity INT NOT NULL, + order_id TEXT NOT NULL, + PRIMARY KEY (order_id, product_id), + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + -- Accounting Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA accounting TO otelu; + + -- Product Review Service: create a schema + CREATE SCHEMA reviews; + GRANT USAGE ON SCHEMA reviews TO otelu; + + -- Product Review Service: create tables + CREATE TABLE reviews.productreviews ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + product_id VARCHAR(16) NOT NULL, + username VARCHAR(64) NOT NULL, + description VARCHAR(1024), + score NUMERIC(2,1) NOT NULL + ); + + -- Product Review Service: create index for product_id lookups + CREATE INDEX product_id_index ON reviews.productreviews (product_id); + + -- Product Review Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA reviews TO otelu; + + -- Product Review Service: add product review data + INSERT INTO reviews.productreviews (product_id, username, description, score) + VALUES + ('OLJCESPC7Z', 'stargazer_mike', 'Great entry-level telescope! Easy to set up and provides clear views of the moon and brighter planets. Highly recommend for new astronomers.', '4.5'), + ('OLJCESPC7Z', 'nightskylover', 'For the price, this Explorascope delivers excellent performance. I was able to see Jupiter''s moons clearly. A fantastic purchase for casual viewing.', '4.0'), + ('OLJCESPC7Z', 'beginner_astro', 'A bit tricky to get used to the manual controls, but once you do, it''s very rewarding. Saw the Orion Nebula for the first time! Good value.', '3.5'), + ('OLJCESPC7Z', 'celestial_explorer', 'Perfect for camping trips. It''s lightweight and portable, making it easy to take anywhere. The views are surprisingly good for its size.', '4.0'), + ('OLJCESPC7Z', 'telescope_fan', 'Not the most powerful scope, but it''s great for kids and beginners. My children love looking at the moon with it. A solid choice for family fun.', '3.0'), + + ('66VCHSJNUP', 'tech_astro', 'The StarSense app is revolutionary! It made finding celestial objects incredibly easy. This telescope is a game-changer for beginners.', '5.0'), + ('66VCHSJNUP', 'app_user', 'Amazing technology, the smartphone integration works flawlessly. I''ve never had so much fun exploring the night sky. Worth every penny.', '4.5'), + ('66VCHSJNUP', 'innovator_john', 'Setup was a breeze, and the tutorials in the app are very helpful. The views are crisp and clear. My only minor gripe is battery drain on the phone.', '4.0'), + ('66VCHSJNUP', 'clear_skies', 'Finally, a telescope that takes the guesswork out of stargazing. The real-time positioning is incredibly accurate. Highly recommended for anyone new to astronomy.', '5.0'), + ('66VCHSJNUP', 'gadget_geek', 'Fantastic product, the app truly guides you. It''s like having a personal astronomer with you. The optical quality is also very good.', '4.5'), + + ('1YMWWN1N4O', 'solar_viewer', 'Perfect for solar observations! The Solar Safe filter gives peace of mind. I used it for the last partial eclipse and it was fantastic.', '5.0'), + ('1YMWWN1N4O', 'eclipse_chaser', 'Compact and easy to carry, this telescope is ideal for eclipse events. The included backpack is a nice touch. Views of the sun are incredibly clear and safe.', '4.5'), + ('1YMWWN1N4O', 'travel_astro', 'Excellent travel scope for solar viewing. The magnification is much better than binoculars for the sun. A must-have for any solar enthusiast.', '4.0'), + ('1YMWWN1N4O', 'sun_gazer', 'Very impressed with the safety features and clarity. Sharing the sun with family has never been easier or safer. Great value for a dedicated solar scope.', '5.0'), + ('1YMWWN1N4O', 'safe_viewer', 'The ISO compliant filter is reassuring. It''s a well-designed product for safe solar observation. Highly recommend for educational purposes too.', '4.5'), + + ('L9ECAV7KIM', 'clean_optics', 'This kit is a lifesaver for all my optics. The brush and wipes work perfectly without leaving any residue. My lenses have never been cleaner.', '5.0'), + ('L9ECAV7KIM', 'photog_pro', 'Essential for any photographer or telescope owner. It safely removes dust and fingerprints. A high-quality cleaning solution.', '4.5'), + ('L9ECAV7KIM', 'daily_cleaner', 'I use this on my binoculars, camera lenses, and even my phone screen. It''s very effective and gentle. A versatile cleaning kit.', '4.0'), + ('L9ECAV7KIM', 'tech_maintenance', 'Great value for money. The different cleaning options cover all needs. Keeps my expensive equipment in pristine condition.', '5.0'), + ('L9ECAV7KIM', 'sharp_view', 'Works as advertised, my telescope views are much clearer after using this. The fluid and cloth are excellent. Definitely recommend.', '4.5'), + + ('2ZYFJ3GM2N', 'bird_watcher', 'Incredible clarity and brightness, perfect for bird watching. The ED glass really makes a difference. I can spot the subtlest markings.', '5.0'), + ('2ZYFJ3GM2N', 'nature_lover', 'These binoculars are fantastic for nature observation. The close focus is a huge advantage for viewing nearby wildlife. Very comfortable to hold.', '4.5'), + ('2ZYFJ3GM2N', 'hiker_guy', 'Lightweight and durable, these are my go-to binoculars for hiking. The wide field of view is excellent. Highly recommend for outdoor enthusiasts.', '4.0'), + ('2ZYFJ3GM2N', 'stadium_fan', 'Took these to a game and had an amazing view of the action. They perform great in various lighting conditions. A solid all-around binocular.', '4.0'), + ('2ZYFJ3GM2N', 'outdoor_adventurer', 'Excellent build quality and optical performance. They feel robust and provide sharp images. A great investment for any outdoor activity.', '4.5'), + + ('0PUK6V6EV0', 'astro_photog', 'This imager is a fantastic step up for planetary photography. The color quality is superb. Easy to use with my existing telescope setup.', '5.0'), + ('0PUK6V6EV0', 'planet_shooter', 'Finally capturing stunning images of Saturn and Jupiter! The NexImage 10 makes it so accessible. Great for beginners in astrophotography.', '4.5'), + ('0PUK6V6EV0', 'imager_pro', 'Excellent resolution and color rendition for its price point. It''s a perfect solution for those looking to start imaging planets. Highly satisfied.', '4.0'), + ('0PUK6V6EV0', 'space_artist', 'The detail I can capture with this imager is incredible. It integrates well with various software. A must-have for serious planetary observers.', '5.0'), + ('0PUK6V6EV0', 'digital_sky', 'A solid choice for getting into solar system imaging. The setup was straightforward. Produces beautiful, vibrant planetary images.', '4.5'), + + ('LS4PSXUNUM', 'night_walker', 'The red light is perfect for preserving night vision during astronomy sessions. The hand warmer is an unexpected bonus. Very practical device.', '5.0'), + ('LS4PSXUNUM', 'star_party_goer', 'This flashlight is indispensable for star parties. The red mode is gentle on the eyes, and the power bank feature is super handy. Love it!', '4.5'), + ('LS4PSXUNUM', 'camper_chris', 'Rugged and versatile, this flashlight is great for camping and night walks. The hand warmer function is a game-changer on cold nights. Highly recommend.', '4.5'), + ('LS4PSXUNUM', 'emergency_kit', 'A fantastic multi-tool for my emergency kit. The red light is useful, and the power bank means I can charge my phone. Great design.', '4.0'), + ('LS4PSXUNUM', 'astro_accessory', 'Every astronomer needs one of these. The red light is essential, and the hand warmer and power bank make it incredibly useful. A top-tier accessory.', '5.0'), + + ('9SIQT8TOJO', 'deep_sky_master', 'The RASA V2 is a dream come true for deep-sky imaging. The f/2.2 speed drastically cuts down exposure times. My best astrophotography investment yet.', '5.0'), + ('9SIQT8TOJO', 'pro_astro', 'Unbelievable performance for wide-field astrophotography. The short focal length makes guiding less critical. Produces stunning, detailed images.', '5.0'), + ('9SIQT8TOJO', 'imaging_guru', 'This OTA is a beast! The fast optics mean more data in less time. If you''re serious about deep-sky imaging, this is the one.', '4.5'), + ('9SIQT8TOJO', 'advanced_scope', 'Worth every penny for the quality and speed it offers. My images have never been sharper or more vibrant. A truly professional piece of equipment.', '5.0'), + ('9SIQT8TOJO', 'precision_optics', 'The engineering behind this RASA is exceptional. It''s incredibly efficient for capturing faint objects. A high-end choice for dedicated imagers.', '4.5'), + + ('6E92ZMYYFZ', 'solar_safety', 'Essential for safe solar viewing with my 8-inch telescope. The Velcro straps ensure it stays securely in place. Peace of mind during solar observations.', '5.0'), + ('6E92ZMYYFZ', 'telescope_upgrade', 'This EclipSmart filter is a perfect addition to my setup. The ISO compliance is crucial. Highly recommend for anyone looking to view the sun safely.', '4.5'), + ('6E92ZMYYFZ', 'safe_sun_gazer', 'Easy to attach and provides crystal clear, safe views of the sun. The build quality is excellent. A must-have accessory for solar enthusiasts.', '5.0'), + ('6E92ZMYYFZ', 'filter_fan', 'Works perfectly with my 8-inch scope. No more worries about accidental dislodgement. Great product for protecting your eyes and equipment.', '4.5'), + ('6E92ZMYYFZ', 'eclipse_ready', 'Bought this for the upcoming eclipse, and it fits perfectly. Tested it out, and the views are fantastic and safe. Very happy with this purchase.', '5.0'), + + ('HQTGWGPNH4', 'history_buff', 'A fascinating glimpse into historical astronomical thought. The content is incredibly insightful. A must-read for anyone interested in the history of science.', '5.0'), + ('HQTGWGPNH4', 'bookworm_astro', 'Beautifully presented historical document. It''s amazing to see how comets were understood centuries ago. A valuable addition to any astronomy library.', '4.5'), + ('HQTGWGPNH4', 'ancient_texts', 'Such a unique and intriguing read. The historical context is captivating. It offers a different perspective on celestial events.', '4.0'), + ('HQTGWGPNH4', 'celestial_history', 'I love historical astronomy, and this book delivers. It''s well-researched and provides a window into past beliefs. Highly recommended for scholars.', '5.0'), + ('HQTGWGPNH4', 'rare_find', 'A truly special book for enthusiasts of astronomical history. The details about ancient astrologers are very interesting. Great for a deeper understanding.', '4.5'); + + -- Product Catalog Service: create a schema + CREATE SCHEMA catalog; + GRANT USAGE ON SCHEMA catalog TO otelu; + + -- Product Catalog Service: create tables + CREATE TABLE catalog.products ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT, + picture TEXT, + price_currency_code TEXT NOT NULL, + price_units BIGINT NOT NULL, + price_nanos INT NOT NULL, + categories TEXT + ); + + -- Product Catalog Service: grant permission to schema + GRANT SELECT ON ALL TABLES IN SCHEMA catalog TO otelu; + + -- Product Catalog Service: add product data + INSERT INTO catalog.products (id, name, description, picture, price_currency_code, price_units, price_nanos, categories) + VALUES + ('OLJCESPC7Z', 'National Park Foundation Explorascope', 'The National Park Foundation''s (NPF) Explorascope 60AZ is a manual alt-azimuth, refractor telescope perfect for celestial viewing on the go. The NPF Explorascope 60 can view the planets, moon, star clusters and brighter deep sky objects like the Orion Nebula and Andromeda Galaxy.', 'NationalParkFoundationExplorascope.jpg', 'USD', 101, 960000000, 'telescopes'), + ('66VCHSJNUP', 'Starsense Explorer Refractor Telescope', 'The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app''s user-friendly interface and detailed tutorials. It''s like having your own personal tour guide of the night sky', 'StarsenseExplorer.jpg', 'USD', 349, 950000000, 'telescopes'), + ('1YMWWN1N4O', 'Eclipsmart Travel Refractor Telescope', 'Dedicated white-light solar scope for the observer on the go. The 50mm refracting solar scope uses Solar Safe, ISO compliant, full-aperture glass filter material to ensure the safest view of solar events. The kit comes complete with everything you need, including the dedicated travel solar scope, a Solar Safe finderscope, tripod, a high quality 20mm (18x) Kellner eyepiece and a nylon backpack to carry everything in. This Travel Solar Scope makes it easy to share the Sun as well as partial and total solar eclipses with the whole family and offers much higher magnifications than you would otherwise get using handheld solar viewers or binoculars.', 'EclipsmartTravelRefractorTelescope.jpg', 'USD', 129, 950000000, 'telescopes,travel'), + ('L9ECAV7KIM', 'Lens Cleaning Kit', 'Wipe away dust, dirt, fingerprints and other particles on your lenses to see clearly with the Lens Cleaning Kit. This cleaning kit works on all glass and optical surfaces, including telescopes, binoculars, spotting scopes, monoculars, microscopes, and even your camera lenses, computer screens, and mobile devices. The kit comes complete with a retractable lens brush to remove dust particles and dirt and two options to clean smudges and fingerprints off of your optics, pre-moistened lens wipes and a bottled lens cleaning fluid with soft cloth.', 'LensCleaningKit.jpg', 'USD', 21, 950000000, 'accessories'), + ('2ZYFJ3GM2N', 'Roof Binoculars', 'This versatile, all-around binocular is a great choice for the trail, the stadium, the arena, or just about anywhere you want a close-up view of the action without sacrificing brightness or detail. It''s an especially great companion for nature observation and bird watching, with ED glass that helps you spot the subtlest field markings and a close focus of just 6.5 feet.', 'RoofBinoculars.jpg', 'USD', 209, 950000000, 'binoculars'), + ('0PUK6V6EV0', 'Solar System Color Imager', 'You have your new telescope and have observed Saturn and Jupiter. Now you''re ready to take the next step and start imaging them. But where do you begin? The NexImage 10 Solar System Imager is the perfect solution.', 'SolarSystemColorImager.jpg', 'USD', 175, 0, 'accessories,telescopes'), + ('LS4PSXUNUM', 'Red Flashlight', 'This 3-in-1 device features a 3-mode red flashlight, a hand warmer, and a portable power bank for recharging your personal electronics on the go. Whether you use it to light the way at an astronomy star party, a night walk, or wildlife research, ThermoTorch 3 Astro Red''s rugged, IPX4-rated design will withstand your everyday activities.', 'RedFlashlight.jpg', 'USD', 57, 80000000, 'accessories,flashlights'), + ('9SIQT8TOJO', 'Optical Tube Assembly', 'Capturing impressive deep-sky astroimages is easier than ever with Rowe-Ackermann Schmidt Astrograph (RASA) V2, the perfect companion to today''s top DSLR or astronomical CCD cameras. This fast, wide-field f/2.2 system allows for shorter exposure times compared to traditional f/10 astroimaging, without sacrificing resolution. Because shorter sub-exposure times are possible, your equatorial mount won''t need to accurately track over extended periods. The short focal length also lessens equatorial tracking demands. In many cases, autoguiding will not be required.', 'OpticalTubeAssembly.jpg', 'USD', 3599, 0, 'accessories,telescopes,assembly'), + ('6E92ZMYYFZ', 'Solar Filter', 'Enhance your viewing experience with EclipSmart Solar Filter for 8" telescopes. With two Velcro straps and four self-adhesive Velcro pads for added safety, you can be assured that the solar filter cannot be accidentally knocked off and will provide Solar Safe, ISO compliant viewing.', 'SolarFilter.jpg', 'USD', 69, 950000000, 'accessories,telescopes'), + ('HQTGWGPNH4', 'The Comet Book', 'A 16th-century treatise on comets, created anonymously in Flanders (now northern France) and now held at the Universitätsbibliothek Kassel. Commonly known as The Comet Book (or Kometenbuch in German), its full title translates as "Comets and their General and Particular Meanings, According to Ptolomeé, Albumasar, Haly, Aliquind and other Astrologers". The image is from https://publicdomainreview.org/collection/the-comet-book, made available by the Universitätsbibliothek Kassel under a CC-BY SA 4.0 license (https://creativecommons.org/licenses/by-sa/4.0/)', 'TheCometBook.jpg', 'USD', 0, 990000000, 'books'); diff --git a/chart/examples/custom-environment-variables/rendered/prometheus/clusterrole.yaml b/chart/examples/custom-environment-variables/rendered/prometheus/clusterrole.yaml new file mode 100644 index 0000000..b56cd11 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/prometheus/clusterrole.yaml @@ -0,0 +1,50 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +rules: + - apiGroups: + - "" + resources: + - nodes + - nodes/proxy + - nodes/metrics + - services + - endpoints + - pods + - ingresses + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - "networking.k8s.io" + resources: + - ingresses/status + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "discovery.k8s.io" + resources: + - endpointslices + verbs: + - get + - list + - watch + - nonResourceURLs: + - "/metrics" + verbs: + - get diff --git a/chart/examples/custom-environment-variables/rendered/prometheus/clusterrolebinding.yaml b/chart/examples/custom-environment-variables/rendered/prometheus/clusterrolebinding.yaml new file mode 100644 index 0000000..34a3b6f --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/prometheus/clusterrolebinding.yaml @@ -0,0 +1,21 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +subjects: + - kind: ServiceAccount + name: prometheus + namespace: default +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus diff --git a/chart/examples/custom-environment-variables/rendered/prometheus/cm.yaml b/chart/examples/custom-environment-variables/rendered/prometheus/cm.yaml new file mode 100644 index 0000000..d1816ba --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/prometheus/cm.yaml @@ -0,0 +1,361 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/cm.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +data: + allow-snippet-annotations: "false" + alerting_rules.yml: | + {} + alerts: | + {} + prometheus.yml: | + global: + evaluation_interval: 1m + scrape_interval: 1m + scrape_timeout: 10s + storage: + tsdb: + out_of_order_time_window: 30m + otlp: + keep_identifying_resource_attributes: true + promote_resource_attributes: + - service.instance.id + - service.name + - service.namespace + - service.version + - cloud.availability_zone + - cloud.region + - deployment.environment.name + - k8s.cluster.name + - k8s.container.name + - k8s.cronjob.name + - k8s.daemonset.name + - k8s.deployment.name + - k8s.job.name + - k8s.namespace.name + - k8s.node.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.statefulset.name + - container.name + - host.name + - postgresql.database.name + - postgresql.schema.name + - postgresql.table.name + - postgresql.index.name + scrape_configs: + - job_name: kubernetes-api-servers + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: default;kubernetes;https + source_labels: + - __meta_kubernetes_namespace + - __meta_kubernetes_service_name + - __meta_kubernetes_endpoint_port_name + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes-cadvisor + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-pods + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-pods-slow + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-service-endpoints + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-service-endpoints-slow + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-services + honor_labels: true + kubernetes_sd_configs: + - role: service + metrics_path: /probe + params: + module: + - http_2xx + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + - source_labels: + - __address__ + target_label: __param_target + - replacement: blackbox + target_label: __address__ + - source_labels: + - __param_target + target_label: instance + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - source_labels: + - __meta_kubernetes_service_name + target_label: service + - job_name: prometheus + static_configs: + - targets: + - localhost:9090 + - job_name: prometheus-pushgateway + honor_labels: true + kubernetes_sd_configs: + - role: service + relabel_configs: + - action: keep + regex: pushgateway + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + rule_files: + - /etc/config/recording_rules.yml + - /etc/config/alerting_rules.yml + - /etc/config/rules + - /etc/config/alerts + recording_rules.yml: | + {} + rules: | + {} diff --git a/chart/examples/custom-environment-variables/rendered/prometheus/deploy.yaml b/chart/examples/custom-environment-variables/rendered/prometheus/deploy.yaml new file mode 100644 index 0000000..80f382a --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/prometheus/deploy.yaml @@ -0,0 +1,95 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + strategy: + type: Recreate + rollingUpdate: null + selector: + matchLabels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + replicas: 1 + revisionHistoryLimit: 10 + template: + metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + spec: + enableServiceLinks: true + serviceAccountName: prometheus + containers: + + - name: prometheus-server + image: "quay.io/prometheus/prometheus:v3.9.0" + imagePullPolicy: "IfNotPresent" + args: + - --storage.tsdb.retention.time=7d + - --config.file=/etc/config/prometheus.yml + - --storage.tsdb.path=/data + - --web.console.libraries=/etc/prometheus/console_libraries + - --web.console.templates=/etc/prometheus/consoles + - --enable-feature=exemplar-storage + - --web.enable-otlp-receiver + ports: + - containerPort: 9090 + readinessProbe: + httpGet: + path: /-/ready + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 5 + timeoutSeconds: 4 + failureThreshold: 3 + successThreshold: 1 + livenessProbe: + httpGet: + path: /-/healthy + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 15 + timeoutSeconds: 10 + failureThreshold: 3 + successThreshold: 1 + resources: + limits: + memory: 400Mi + volumeMounts: + - name: config-volume + mountPath: /etc/config + - name: storage-volume + mountPath: /data + subPath: "" + dnsPolicy: ClusterFirst + securityContext: + fsGroup: 65534 + runAsGroup: 65534 + runAsNonRoot: true + runAsUser: 65534 + terminationGracePeriodSeconds: 300 + volumes: + - name: config-volume + configMap: + name: prometheus + - name: storage-volume + emptyDir: + {} diff --git a/chart/examples/custom-environment-variables/rendered/prometheus/service.yaml b/chart/examples/custom-environment-variables/rendered/prometheus/service.yaml new file mode 100644 index 0000000..f6bb01c --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/prometheus/service.yaml @@ -0,0 +1,26 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + ports: + - name: http + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + sessionAffinity: None + type: "ClusterIP" diff --git a/chart/examples/custom-environment-variables/rendered/prometheus/serviceaccount.yaml b/chart/examples/custom-environment-variables/rendered/prometheus/serviceaccount.yaml new file mode 100644 index 0000000..2281f27 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/prometheus/serviceaccount.yaml @@ -0,0 +1,16 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default + annotations: + {} diff --git a/chart/examples/custom-environment-variables/rendered/serviceaccount.yaml b/chart/examples/custom-environment-variables/rendered/serviceaccount.yaml new file mode 100644 index 0000000..122e927 --- /dev/null +++ b/chart/examples/custom-environment-variables/rendered/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: example + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm diff --git a/chart/examples/custom-environment-variables/values.yaml b/chart/examples/custom-environment-variables/values.yaml new file mode 100644 index 0000000..b36cf3e --- /dev/null +++ b/chart/examples/custom-environment-variables/values.yaml @@ -0,0 +1,97 @@ +default: + envOverrides: + - name: OTEL_RESOURCE_ATTRIBUTES + value: service.name=$(OTEL_SERVICE_NAME),service.instance.id=$(OTEL_K8S_POD_UID),service.namespace=opentelemetry-demo,k8s.namespace.name=$(OTEL_K8S_NAMESPACE),k8s.node.name=$(OTEL_K8S_NODE_NAME),k8s.pod.name=$(OTEL_K8S_POD_NAME),app.eng.team=$(TEAM_NAME) + +components: + accounting: + envOverrides: + - name: TEAM_NAME + value: orion + + ad: + envOverrides: + - name: TEAM_NAME + value: helix + + cart: + envOverrides: + - name: TEAM_NAME + value: ring + + checkout: + envOverrides: + - name: TEAM_NAME + value: orion + + currency: + envOverrides: + - name: TEAM_NAME + value: orion + + email: + envOverrides: + - name: TEAM_NAME + value: orion + + fraud-detection: + envOverrides: + - name: TEAM_NAME + value: orion + + frontend: + envOverrides: + - name: TEAM_NAME + value: ring + + load-generator: + envOverrides: + - name: TEAM_NAME + value: ring + + payment: + envOverrides: + - name: TEAM_NAME + value: orion + + product-catalog: + envOverrides: + - name: TEAM_NAME + value: helix + + quote: + envOverrides: + - name: TEAM_NAME + value: orion + + recommendation: + envOverrides: + - name: TEAM_NAME + value: helix + + shipping: + envOverrides: + - name: TEAM_NAME + value: orion + +opentelemetry-collector: + config: + processors: + attributes: + include: + match_type: strict + services: + - frontend-proxy + actions: + - key: "app.eng.team" + value: "ring" + action: insert + service: + pipelines: + traces: + processors: + - memory_limiter + - attributes + - spanmetrics + - batch + diff --git a/chart/examples/default/rendered/component.yaml b/chart/examples/default/rendered/component.yaml new file mode 100644 index 0000000..d183ee1 --- /dev/null +++ b/chart/examples/default/rendered/component.yaml @@ -0,0 +1,2248 @@ +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: ad +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: checkout +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: currency +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: email +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8013 + name: rpc + targetPort: 8013 + - port: 8016 + name: ofrep + targetPort: 8016 + - port: 4000 + name: tcp-service-0 + targetPort: 4000 + selector: + + opentelemetry.io/name: flagd +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend-proxy +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8081 + name: tcp-service + targetPort: 8081 + selector: + + opentelemetry.io/name: image-provider +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 9092 + name: plaintext + targetPort: 9092 + - port: 9093 + name: controller + targetPort: 9093 + selector: + + opentelemetry.io/name: kafka +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8000 + name: tcp-service + targetPort: 8000 + selector: + + opentelemetry.io/name: llm +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8089 + name: tcp-service + targetPort: 8089 + selector: + + opentelemetry.io/name: load-generator +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: payment +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 5432 + name: tcp-service + targetPort: 5432 + selector: + + opentelemetry.io/name: postgresql +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: product-catalog +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 3551 + name: tcp-service + targetPort: 3551 + selector: + + opentelemetry.io/name: product-reviews +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: quote +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: recommendation +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: shipping +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 6379 + name: valkey-cart + targetPort: 6379 + selector: + + opentelemetry.io/name: valkey-cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: accounting + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: accounting + template: + metadata: + labels: + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: accounting + image: 'ghcr.io/open-telemetry/demo:2.2.0-accounting' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: DB_CONNECTION_STRING + value: Host=postgresql;Username=otelu;Password=otelp;Database=otel + - name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED + value: "false" + resources: + limits: + memory: 120Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: ad + template: + metadata: + labels: + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: ad + image: 'ghcr.io/open-telemetry/demo:2.2.0-ad' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: AD_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_LOGS_EXPORTER + value: otlp + resources: + limits: + memory: 300Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: cart + template: + metadata: + labels: + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: cart + image: 'ghcr.io/open-telemetry/demo:2.2.0-cart' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CART_PORT + value: "8080" + - name: ASPNETCORE_URLS + value: http://*:$(CART_PORT) + - name: VALKEY_ADDR + value: valkey-cart:6379 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 160Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; + done; + image: busybox:latest + name: wait-for-valkey-cart + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: checkout + template: + metadata: + labels: + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: checkout + image: 'ghcr.io/open-telemetry/demo:2.2.0-checkout' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CHECKOUT_PORT + value: "8080" + - name: CART_ADDR + value: cart:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: EMAIL_ADDR + value: http://email:8080 + - name: PAYMENT_ADDR + value: payment:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 16MiB + resources: + limits: + memory: 20Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: currency + template: + metadata: + labels: + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: currency + image: 'ghcr.io/open-telemetry/demo:2.2.0-currency' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CURRENCY_PORT + value: "8080" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: '2.2.0' + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: email + template: + metadata: + labels: + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: email + image: 'ghcr.io/open-telemetry/demo:2.2.0-email' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: EMAIL_PORT + value: "8080" + - name: APP_ENV + value: production + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: flagd + template: + metadata: + labels: + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: flagd + image: 'ghcr.io/open-feature/flagd:v0.12.9' + imagePullPolicy: IfNotPresent + command: + - /flagd-build + - start + - --port + - "8013" + - --ofrep-port + - "8016" + - --uri + - file:./etc/flagd/demo.flagd.json + ports: + + - containerPort: 8013 + name: rpc + - containerPort: 8016 + name: ofrep + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: FLAGD_OTEL_COLLECTOR_URI + value: $(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 60MiB + resources: + limits: + memory: 75Mi + volumeMounts: + - name: config-rw + mountPath: /etc/flagd + - name: flagd-ui + image: 'ghcr.io/open-telemetry/demo:2.2.0-flagd-ui' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 4000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_UI_PORT + value: "4000" + - name: SECRET_KEY_BASE + value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw + - name: PHX_HOST + value: localhost + resources: + limits: + memory: 250Mi + volumeMounts: + - mountPath: /app/data + name: config-rw + initContainers: + - command: + - sh + - -c + - cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json + image: busybox + name: init-config + volumeMounts: + - mountPath: /config-ro + name: config-ro + - mountPath: /config-rw + name: config-rw + volumes: + - name: config-rw + emptyDir: {} + - configMap: + name: flagd-config + name: config-ro +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fraud-detection + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: fraud-detection + template: + metadata: + labels: + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: fraud-detection + image: 'ghcr.io/open-telemetry/demo:2.2.0-fraud-detection' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES + value: "true" + - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED + value: "true" + resources: + limits: + memory: 300Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend + template: + metadata: + labels: + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FRONTEND_PORT + value: "8080" + - name: PORT + value: $(FRONTEND_PORT) + - name: FRONTEND_ADDR + value: :8080 + - name: AD_ADDR + value: ad:8080 + - name: CART_ADDR + value: cart:8080 + - name: CHECKOUT_ADDR + value: checkout:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: PRODUCT_REVIEWS_ADDR + value: product-reviews:3551 + - name: RECOMMENDATION_ADDR + value: recommendation:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: ENV_PLATFORM + value: kubernetes + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: WEB_OTEL_SERVICE_NAME + value: frontend-web + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://localhost:8080/otlp-http/v1/traces + resources: + limits: + memory: 250Mi + securityContext: + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend-proxy + template: + metadata: + labels: + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + annotations: + io.opentelemetry.discovery.metrics/config: | + targets: + - endpoint: "http://`endpoint`" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: httpcheck + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend-proxy + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend-proxy' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: ENVOY_PORT + value: "8080" + - name: ENVOY_ADDR + value: 0.0.0.0 + - name: ENVOY_ADMIN_PORT + value: "10000" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_UI_HOST + value: flagd + - name: FLAGD_UI_PORT + value: "4000" + - name: FRONTEND_HOST + value: frontend + - name: FRONTEND_PORT + value: "8080" + - name: GRAFANA_HOST + value: grafana + - name: GRAFANA_PORT + value: "80" + - name: IMAGE_PROVIDER_HOST + value: image-provider + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: JAEGER_HOST + value: jaeger + - name: JAEGER_UI_PORT + value: "16686" + - name: LOCUST_WEB_HOST + value: load-generator + - name: LOCUST_WEB_PORT + value: "8089" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + resources: + limits: + memory: 65Mi + securityContext: + runAsGroup: 101 + runAsNonRoot: true + runAsUser: 101 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: image-provider + template: + metadata: + labels: + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + annotations: + io.opentelemetry.discovery.metrics/config: | + endpoint: "http://`endpoint`/status" + collection_interval: "10s" + timeout: "20s" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: nginx + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: image-provider + image: 'ghcr.io/open-telemetry/demo:2.2.0-image-provider' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8081 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + resources: + limits: + memory: 50Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: kafka + template: + metadata: + labels: + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: kafka + image: 'ghcr.io/open-telemetry/demo:2.2.0-kafka' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 9092 + name: plaintext + - containerPort: 9093 + name: controller + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: KAFKA_HEAP_OPTS + value: -Xmx400M -Xms400M + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092,CONTROLLER://:9093 + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: CONTROLLER + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: 1@kafka:9093 + resources: + limits: + memory: 700Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: llm + template: + metadata: + labels: + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: llm + image: 'ghcr.io/open-telemetry/demo:2.2.0-llm' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + null + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: load-generator + template: + metadata: + labels: + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: load-generator + image: 'ghcr.io/open-telemetry/demo:2.2.0-load-generator' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8089 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: LOCUST_WEB_HOST + value: 0.0.0.0 + - name: LOCUST_WEB_PORT + value: "8089" + - name: LOCUST_USERS + value: "10" + - name: LOCUST_SPAWN_RATE + value: "1" + - name: LOCUST_HOST + value: http://frontend-proxy:8080 + - name: LOCUST_HEADLESS + value: "false" + - name: LOCUST_AUTOSTART + value: "true" + - name: LOCUST_BROWSER_TRAFFIC_ENABLED + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_OFREP_PORT + value: "8016" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 1500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: payment + template: + metadata: + labels: + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: payment + image: 'ghcr.io/open-telemetry/demo:2.2.0-payment' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PAYMENT_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 140Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: postgresql + template: + metadata: + labels: + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + annotations: + io.opentelemetry.discovery.metrics/config: | + username: root + password: otel + metrics: + postgresql.blks_hit: + enabled: true + postgresql.blks_read: + enabled: true + postgresql.tup_fetched: + enabled: true + postgresql.tup_returned: + enabled: true + postgresql.tup_inserted: + enabled: true + postgresql.tup_updated: + enabled: true + postgresql.tup_deleted: + enabled: true + postgresql.deadlocks: + enabled: true + tls: + insecure: true + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: postgresql + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: postgresql + image: 'postgres:17.6' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 5432 + name: service + env: + - name: POSTGRES_USER + value: root + - name: POSTGRES_PASSWORD + value: otel + - name: POSTGRES_DB + value: otel + resources: + limits: + memory: 100Mi + volumeMounts: + - name: postgresql-init + mountPath: /docker-entrypoint-initdb.d + volumes: + - name: postgresql-init + configMap: + name: postgresql-init +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-catalog + template: + metadata: + labels: + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-catalog + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-catalog' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PRODUCT_CATALOG_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: GOMEMLIMIT + value: 16MiB + - name: DB_CONNECTION_STRING + value: postgres://otelu:otelp@postgresql/otel?sslmode=disable + - name: OTEL_SEMCONV_STABILITY_OPT_IN + value: database + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-reviews + template: + metadata: + labels: + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-reviews + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-reviews' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 3551 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: OPENAI_API_KEY + value: dummy + - name: LLM_MODEL + value: astronomy-llm + - name: LLM_HOST + value: llm + - name: LLM_PORT + value: "8000" + - name: LLM_BASE_URL + value: http://$(LLM_HOST):$(LLM_PORT)/v1 + - name: PRODUCT_REVIEWS_PORT + value: "3551" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: DB_CONNECTION_STRING + value: host=postgresql user=otelu password=otelp dbname=otel + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: quote + template: + metadata: + labels: + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: quote + image: 'ghcr.io/open-telemetry/demo:2.2.0-quote' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: QUOTE_PORT + value: "8080" + - name: OTEL_PHP_AUTOLOAD_ENABLED + value: "true" + - name: OTEL_PHP_INTERNAL_METRICS_ENABLED + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 40Mi + securityContext: + runAsGroup: 33 + runAsNonRoot: true + runAsUser: 33 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: recommendation + template: + metadata: + labels: + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: recommendation + image: 'ghcr.io/open-telemetry/demo:2.2.0-recommendation' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: RECOMMENDATION_PORT + value: "8080" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: shipping + template: + metadata: + labels: + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: shipping + image: 'ghcr.io/open-telemetry/demo:2.2.0-shipping' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: SHIPPING_PORT + value: "8080" + - name: QUOTE_ADDR + value: http://quote:8080 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: valkey-cart + template: + metadata: + labels: + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + annotations: + io.opentelemetry.discovery.metrics/config: | + username: valkey + collection_interval: 10s + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: redis + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: valkey-cart + image: 'valkey/valkey:9.0.1-alpine3.23' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 6379 + name: valkey-cart + env: + [] + resources: + limits: + memory: 20Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 999 + volumeMounts: + volumes: diff --git a/chart/examples/default/rendered/flagd-config.yaml b/chart/examples/default/rendered/flagd-config.yaml new file mode 100644 index 0000000..9591d49 --- /dev/null +++ b/chart/examples/default/rendered/flagd-config.yaml @@ -0,0 +1,167 @@ +--- +# Source: opentelemetry-demo/templates/flagd-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagd-config + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + demo.flagd.json: | + { + "$schema": "https://flagd.dev/schema/v0/flags.json", + "flags": { + "llmInaccurateResponse": { + "defaultVariant": "off", + "description": "LLM returns an inaccurate product summary for product ID L9ECAV7KIM", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "llmRateLimitError": { + "defaultVariant": "off", + "description": "LLM intermittently returns a rate limit error", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "productCatalogFailure": { + "description": "Fail product catalog service on a specific product", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "recommendationCacheFailure": { + "description": "Fail recommendation service cache", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adManualGc": { + "description": "Triggers full manual garbage collections in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adHighCpu": { + "description": "Triggers high cpu load in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adFailure": { + "description": "Fail ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "kafkaQueueProblems": { + "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "cartFailure": { + "description": "Fail cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "paymentFailure": { + "description": "Fail payment service charge requests n%", + "state": "ENABLED", + "variants": { + "100%": 1, + "90%": 0.95, + "75%": 0.75, + "50%": 0.5, + "25%": 0.25, + "10%": 0.1, + "off": 0 + }, + "defaultVariant": "off" + }, + "paymentUnreachable": { + "description": "Payment service is unavailable", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "loadGeneratorFloodHomepage": { + "description": "Flood the frontend with a large amount of requests.", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "imageSlowLoad": { + "description": "slow loading images in the frontend", + "state": "ENABLED", + "variants": { + "10sec": 10000, + "5sec": 5000, + "off": 0 + }, + "defaultVariant": "off" + }, + "failedReadinessProbe": { + "description": "readiness probe failure for cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "emailMemoryLeak": { + "description": "Memory leak in the email service.", + "state": "ENABLED", + "variants": { + "off": 0, + "1x": 1, + "10x": 10, + "100x": 100, + "1000x": 1000, + "10000x": 10000 + }, + "defaultVariant": "off" + } + } + } diff --git a/chart/examples/default/rendered/grafana-config.yaml b/chart/examples/default/rendered/grafana-config.yaml new file mode 100644 index 0000000..74047cc --- /dev/null +++ b/chart/examples/default/rendered/grafana-config.yaml @@ -0,0 +1,15609 @@ +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-alerting + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_alert: "1" +data: + + {} +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-nginx-metrics + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + NGINX-metrics.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of accepted client connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_accepted_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Accepted connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of handled connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 5, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_handled_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Connections handled", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of client requests", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_requests_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Total number of client requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The current number of nginx connections by state", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 19, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_current", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{state}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Number of connections by state", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "[Image-Provider] NGINX Metrics", + "uid": "6fb665e0-cb81-40a5-bd21-a9485c5477b4", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-apm-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + apm-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "APM dashboard for monitoring OpenTelemetry-based services. \n\nInstrument your applications using OpenTelemetry SDKs and send traces, metrics, and logs to Jaeger for traces, a Prometheus-compatible database for metrics, and OpenSearch for logs. This dashboard provides a centralized view of your application's health and performance. ", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 1, + "links": [], + "panels": [ + { + "description": "service.namespace=${service_namespace}, service.name=${service_name}, deployment.environment.name=${deployment_environment_name}", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 20, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "

\"OpenTelemetry Service ${service_namespace}/${service_name}

\n", + "mode": "html" + }, + "pluginVersion": "12.2.0", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Shows the timestamp of the latest metrics received in the past 24h.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#24292e", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 10, + "y": 0 + }, + "hideTimeOverride": true, + "id": 39, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^Time$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "timestamp(sum by (deployment_environment_name, service_namespace, service_name) (target_info{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}) or absent{})\n", + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "timeFrom": "now-24h", + "title": "Latest metrics received", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 15, + "panels": [], + "title": "Server RED Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration and https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 3 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP p95", + "range": true, + "refId": "HTTP P95", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP avg", + "range": true, + "refId": "HTTP AVG", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC p95", + "range": true, + "refId": "RPC P95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC avg", + "range": true, + "refId": "RPC AVG" + } + ], + "title": "Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP and RPC endpoints aggregation on the `http.server.request.duration` and `rpc.server.duration` metrics. \n\nErrors are identified by : \n* `http.response.status_code=~\"5..\"`\n* `rpc.grpc.status_code!=\"0\"`\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 100, + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 3 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "(\n (sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval])) * 100) \n / \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)\nor\n(\n 0\n * \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP 5xx errors", + "range": true, + "refId": "HTTP 5xx", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "((sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval])) * 100) / sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))\nor\n(0 * sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC errors", + "range": true, + "refId": "RPC Err" + } + ], + "title": "Error", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 10, + "y": 3 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP requests", + "range": true, + "refId": "HTTP RPS" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(sum(rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) * $__interval_ms / 1000", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC requests", + "range": true, + "refId": "RPC RPS" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 15, + "y": 3 + }, + "id": 40, + "options": { + "alertInstanceLabelFilter": "{service_name=\"$service_name\", service_namespace=\"$service_namespace\"}", + "alertName": "", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 20, + "showInactiveAlerts": false, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": false, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.2.0", + "title": "Alerts", + "type": "alertlist" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound HTTP operations of the service (aka HTTP endpoints) based on the `http.server.request.duration` metric.\n\nErrors are identified by `http.response.status_code=~\"5..\"`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + }, + { + "id": "custom.width", + "value": 219 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 21, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(http_server_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "HTTP Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound gRPC operations of the service (aka gRPC endpoints) based on the `rpc.server.request.duration` metric.\n\nErrors are identified by `rpc.grpc.status_code != 0` which make the panel specific to the gRPC protocol.\n\nhttps://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 27, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\nsum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "gRPC Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 28, + "panels": [], + "title": "Outbound Services and Databases", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP calls made by the service based on the `http.client.request.duration` metric.\n\nCalls broken done by remote `server.address` and by `http.request.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpclientrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 23, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound HTTP Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "DB calls made by the service based on the `db.client.operation.duration` metric.\n\nCalls broken down by `server.address` and `db.namespace`.\n\nSee https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No database call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 24, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n / \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n ) or (0 * \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, database) (\n label_join(\n rate(db_client_operation_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound Databases", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "DURATION": { + "timeField": "Time" + }, + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "database", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "database": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "database": "Database", + "database_operation": "Database Operation", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "gRPC calls made by the service based on the `rpc.client.request.duration` metric.\n\nSpecific to gRPC due to the usage of the `grpc.status.code` attribute to identify errors.\n\nCalls broken down by `server.address`, `rpc.service`, and `rpc.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#rpc-client\n\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 32, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound gRPC Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service Method" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 42, + "panels": [], + "title": "Infrastructure", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Host CPU" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Host Used Memory" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (host_name) (\n rate(system_cpu_time_seconds_total{service_name=\"\", state!=\"idle\"}[$__rate_interval])\n)\n* on(host_name) \ngroup by (host_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": " (\n (\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\", state=\"used\"}\n )\n /\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\"}\n )\n )\n * on(host_name) (\n group by (host_name) (\n target_info{service_name=\"${service_name}\"}\n )\n )\n )\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_pct" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_pct": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "host_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Host CPU", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_pct": "Host Used Memory", + "host_name": "Host", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pod CPU usage" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pod Memory Usage" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 43, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_pod_name) (\n rate(k8s_pod_cpu_time_seconds_total{}[$__rate_interval])\n)\n* on(k8s_pod_name) \ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nsum by (k8s_pod_name) (\n k8s_pod_memory_working_set_bytes{}\n)\n* on(k8s_pod_name)\ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_bytes" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "k8s_pod_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "service_instance_id": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Pod CPU usage", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_bytes": "Pod Memory Usage", + "Trend #memory_usage_pct": "Host Memory", + "k8s_pod_name": "Kubernetes Pod Name", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 25, + "panels": [], + "title": "Logs", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs of the service, filtered by `service.name`, `service.namespace`, and `deployment.environment.name`.\n\nTo explore the logs, open the menu clicking on the icon `⋮` of this panel and click on `Explore`.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No application logs", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "@timestamp" + }, + "properties": [ + { + "id": "custom.width", + "value": 226 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instrumentationScope.name" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 26, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" and resource.service.namespace=\"$service_namespace\" | fields @timestamp, severity.text, body, instrumentationScope.name\n", + "queryType": "PPL", + "refId": "B", + "timeField": "observedTimestamp" + } + ], + "title": "", + "transformations": [ + { + "id": "formatTime", + "options": { + "outputFormat": "YYYY-MM-DD HH:MM:ss.sss", + "timeField": "@timestamp", + "timezone": "browser", + "useTimezone": true + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "@timestamp": 0, + "body": 3, + "instrumentationScope.name": 2, + "severity.text": 1 + }, + "renameByName": { + "@timestamp": "Time", + "body": "Message", + "instrumentationScope.name": "Logger", + "severity.text": "Severity" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 29, + "panels": [], + "title": "Traces", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "description": "Traces containing a span emitted by the service", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No traces", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trace Service" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Span ID" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": false + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "deployment.environment.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.namespace" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 50 + }, + "id": 30, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "queryType": "search", + "refId": "A", + "service": "$service_name", + "tags": "service.namespace=\"$service_namespace\"" + } + ], + "title": "", + "type": "table" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [ + { + "allowCustomValue": false, + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "Jaeger", + "value": "webstore-traces" + }, + "description": "OpenTelemetry traces", + "label": "Traces", + "name": "jaeger_datasource", + "options": [], + "query": "jaeger", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "demo", + "value": "demo" + }, + "definition": "label_values(target_info,deployment_environment_name)", + "description": "Deployment environment (`production`, `staging`...).\nResource attribute `deployment.environment.name` via `target_info`.\nValue `<>` when the resource attribute `deployment.environment.name` is not set.", + "label": "Environment", + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info,deployment_environment_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "otel-demo", + "value": "otel-demo" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "description": "Service namespace.\nResource attribute `service.namespace` via `target_info`.\nValue `<>` when the resource attribute `service.namespace` is not set.", + "includeAll": false, + "label": "Namespace", + "name": "service_namespace", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "current": { + "text": "checkout", + "value": "checkout" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "description": "Service name.\nResource attribute `service.name` via `target_info`.", + "label": "Name", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "APM Dashboard (Jaeger, Prometheus, OpenSearch)", + "uid": "febljk0a32qyoa", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-demo-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + demo-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 2, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 21, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows RED metrics for the selected service, as generated by the spanmetrics connector in the OpenTelemetry Collector.\nIf the selected service emits logs, the logs will also be displayed.\nCustom metrics generated by some services are also displayed. \n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.5.2", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 14, + "panels": [], + "title": "Spanmetrics (RED metrics)", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 4 + }, + "id": 12, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_duration_milliseconds_count{service_name=\"${service}\"}[$__rate_interval]))", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 4 + }, + "id": 10, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service_name=\"${service}\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Error Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 4 + }, + "id": 2, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le, span_name))", + "legendFormat": "{{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Average Duration by Span Name", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 19, + "panels": [], + "title": "Application Log Records", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "left", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "count()" + }, + "properties": [ + { + "id": "custom.width", + "value": 90 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 0, + "y": 13 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "severity.text.keyword", + "id": "3", + "settings": { + "min_doc_count": "1", + "order": "desc", + "orderBy": "_count", + "size": "0" + }, + "type": "terms" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| stats count() by severity.text", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records by Severity", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Count": "", + "severity.text.keyword": "Severity" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto", + "wrapText": false + }, + "filterable": true, + "inspect": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "observedTimestamp" + }, + "properties": [] + }, + { + "matcher": { + "id": "byName", + "options": "body" + }, + "properties": [ + { + "id": "custom.width", + "value": 386 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 20, + "x": 4, + "y": 13 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "hide": false, + "metrics": [ + { + "id": "1", + "settings": { + "order": "desc", + "size": "100", + "useTimeRange": true + }, + "type": "raw_data" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| sort - observedTimestamp \n| head 100", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records (100 recent entries)", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "@timestamp": true + }, + "includeByName": {}, + "indexByName": { + "@timestamp": 1, + "attributes.data_stream.dataset": 4, + "attributes.data_stream.namespace": 5, + "attributes.data_stream.type": 6, + "attributes.productId": 7, + "attributes.quantity": 8, + "attributes.userId": 9, + "body": 3, + "instrumentationScope.name": 10, + "observedTimestamp": 0, + "resource.container.id": 11, + "resource.docker.cli.cobra.command_path": 12, + "resource.host.name": 13, + "resource.service.name": 14, + "resource.telemetry.sdk.language": 15, + "resource.telemetry.sdk.name": 16, + "resource.telemetry.sdk.version": 17, + "severity.number": 18, + "severity.text": 2, + "spanId": 19, + "traceId": 20 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 18, + "panels": [], + "title": "Application Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"system\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"user\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "B" + } + ], + "title": "Python services (CPU%)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "process_runtime_cpython_memory_bytes{type=\"rss\"}", + "legendFormat": "{{job}}", + "range": true, + "refId": "A" + } + ], + "title": "Python services (Memory)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(app_recommendations_counter_total{recommendation_type=\"catalog\"}[$__rate_interval])", + "interval": "2m", + "legendFormat": "recommendations", + "range": true, + "refId": "A" + } + ], + "title": "Recommendations Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 16, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(otel_trace_span_processor_spans{job=\"quote\"}[2m])*120", + "interval": "2m", + "legendFormat": "{{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Service batch span processor", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 23, + "panels": [], + "title": "Service Dependency", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 18, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 22, + "options": { + "edges": { + "mainStatUnit": "requests" + }, + "nodes": { + "arcs": [], + "mainStatUnit": "" + }, + "zoomMode": "cooperative" + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "queryType": "dependencyGraph", + "refId": "A" + } + ], + "title": "Service Dependency", + "type": "nodeGraph" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "frontend", + "value": "frontend" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "traces_span_metrics_duration_milliseconds_bucket", + "includeAll": false, + "label": "Service", + "name": "service", + "options": [], + "query": { + "query": "traces_span_metrics_duration_milliseconds_bucket", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "/.*service.name=\\\"([^\\\"]+)\\\".*/", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Demo Dashboard", + "uid": "W2gX2zHVk", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-exemplars-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + exemplars-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows the use of metric exemplars.\nExemplars can be used to look up a trace in Jaeger.\nOnly the most recent exemplars may still be available in Jaeger.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.6.1", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 4, + "panels": [], + "title": "GetCart Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "GetCart Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 5, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 GetCart", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart GetCart Latency with Exemplars", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 3, + "panels": [], + "title": "AddItem Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 6, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "AddItem Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 1, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 AddItem", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart AddItem Latency with Exemplars", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cart Service Exemplars", + "uid": "ce6sd46kfkglca", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-linux-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + linux-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "OpenTelemetry Collector hostmetrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 267, + "panels": [], + "title": "overview【 $host_name】", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_cpu_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", state!=\"idle\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Non available RAM memory\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$node_name\", host_name=~\"$host_name\", job=\"\", state=\"used\"}", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240, + "useBackend": false + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver#collecting-host-metrics-from-inside-a-container-linux-only", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 154, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "1 \n-\nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"}) \n/ \nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (5 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 155, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_5m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "sysload_5m", + "step": 240 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (15 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_15m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "sysload_15m", + "step": 240 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used Swap\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/pagingscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" })\n/\nsum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "system_cpu_logical_count{ k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" }", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 1 + }, + "id": 75, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_limit_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 1 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "FS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 3 + }, + "id": 15, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_uptime_seconds{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 266, + "panels": [], + "title": "Basic", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Wait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy IRQs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "super-light-yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"system\"}[$__rate_interval])) \n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "busy system", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{kk8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"user\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "busy user", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"wait\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Wait", + "range": true, + "refId": "busy wait", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\".*irq\"}[$__rate_interval])) \n/\nsum((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "range": true, + "refId": "busy irq", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state!~\".*irq\", state!=\"idle\", state!=\"user\", state!=\"wait\", state!=\"system\"}[$__rate_interval]))\n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Other", + "range": true, + "refId": "busy other", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum by(host_name) (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"idle\"}[$__rate_interval])) \n/ \non(host_name) group_left sum by (host_name)((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Idle", + "range": true, + "refId": "idle", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Available" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 6 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Available", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Free", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\"cached|buffered\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "Used", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Receive (-) / Transmit (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Rec.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 11, + "y": 6 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"receive\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Receive", + "range": true, + "refId": "receive", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"transmit\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Transmit", + "range": true, + "refId": "transmit", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Read (-) / Write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 17, + "y": 6 + }, + "id": 42, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"read\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Read", + "range": true, + "refId": "read", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"write\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Write", + "range": true, + "refId": "write", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 272, + "panels": [], + "title": "Details", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 14 + }, + "id": 270, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"transmit\"}[$__rate_interval]))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_bytes", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_errors" + } + ], + "title": "Network traffic", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "receive": { + "timeField": "Time" + }, + "receive_bytes": { + "timeField": "Time" + }, + "receive_dropped_packets": { + "timeField": "Time" + }, + "receive_errors": { + "timeField": "Time" + }, + "transmit": { + "timeField": "Time" + }, + "transmit_bytes": { + "timeField": "Time" + }, + "transmit_dropped_packets": { + "timeField": "Time" + }, + "transmit_errors": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "device", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #receive_bytes": 4, + "Trend #receive_dropped_packets": 5, + "Trend #receive_errors": 3, + "Trend #transmit_bytes": 1, + "Trend #transmit_dropped_packets": 2, + "Trend #transmit_errors": 6, + "device": 0 + }, + "renameByName": { + "Trend #receive": "Receive", + "Trend #receive_bytes": "Receive", + "Trend #receive_dropped_packets": "Receive dropped", + "Trend #receive_errors": "Transmit err", + "Trend #transmit": "Transmit", + "Trend #transmit_bytes": "Transmit", + "Trend #transmit_dropped_packets": "Transmit dropped", + "Trend #transmit_errors": "Receive err", + "device": "Interface" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used %" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "gauge", + "valueDisplayMode": "color" + } + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "min", + "value": 0 + }, + { + "id": "max", + "value": 1 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mount" + }, + "properties": [ + { + "id": "custom.width", + "value": 200 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 14 + }, + "id": 269, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "table", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "free", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "total" + } + ], + "title": "Disk usage", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "/oldroot": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "/var/lib": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #free": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #total": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "mountpoint": { + "aggregations": [], + "operation": "groupby" + } + } + } + }, + { + "id": "merge", + "options": {} + }, + { + "id": "calculateField", + "options": { + "alias": "used", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + }, + "operator": "-", + "right": { + "matcher": { + "id": "byName", + "options": "Value #free (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "Used %", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "used" + } + }, + "operator": "/", + "right": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Used %": "Used %", + "Value #free (lastNotNull)": "Free", + "Value #total (lastNotNull)": "Total", + "mountpoint": "Mount", + "used": "Used" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "Mount" + } + ] + } + } + ], + "type": "table" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "linux", + "opentelemetry" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "allowCustomValue": true, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes cluster. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes node. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s node", + "name": "node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "docker-desktop", + "value": "docker-desktop" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,host_name)", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 5, + "type": "query" + }, + { + "allowCustomValue": false, + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "hide": 2, + "label": "host count", + "name": "host_count", + "options": [], + "query": { + "qryType": 3, + "query": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "/{} (.*) .*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Linux", + "uid": "otel-demo-hostmetrics", + "version": 2 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-opentelemetry-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + opentelemetry-collector.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Provides information about the status of the OpenTelemetry Collector", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 12, + "links": [], + "liveNow": true, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 55, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + }, + { + "id": "custom.width", + "value": 84 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 17, + "x": 0, + "y": 1 + }, + "id": 57, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 17, + "y": 1 + }, + "id": 56, + "options": { + "alertInstanceLabelFilter": "deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"", + "alertName": "OpenTelemetryCollector", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 17, + "showInactiveAlerts": true, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": true, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.3.1", + "title": "Alerts", + "type": "alertlist" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 63, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Receivers", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 5 + }, + "id": 65, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 67, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 5 + }, + "id": 68, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 5 + }, + "id": 69, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 8 + }, + "id": 80, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Processors", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 8 + }, + "id": 88, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 8 + }, + "id": 89, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 8 + }, + "id": 90, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 8 + }, + "id": 91, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 8 + }, + "id": 92, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 8 + }, + "id": 93, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 11 + }, + "id": 87, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Exporters", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 11 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 11 + }, + "id": 82, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 11 + }, + "id": 76, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 11 + }, + "id": 77, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 11 + }, + "id": 79, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 53, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 54, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "CPU consumption rate of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 39 + }, + "id": 50, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "rate(otelcol_process_cpu_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval])", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "CPU Usage", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Resident memory consumed by the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 39 + }, + "id": 52, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_memory_rss_bytes{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Memory Usage (RSS)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Total uptime of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 3600 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 39 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Uptime", + "type": "stat" + } + ], + "title": "Collector", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 23, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 15 + }, + "id": 39, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Span Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 15 + }, + "id": 40, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 15 + }, + "id": 59, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 15 + }, + "id": 61, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 15 + }, + "id": 60, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 15 + }, + "id": 62, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by receiver and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "accepted_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "refused_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "failed_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "error_pct" + } + ], + "title": "Receivers", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "accepted_rate": { + "timeField": "Time" + }, + "error_pct": { + "timeField": "Time" + }, + "errors": { + "timeField": "Time" + }, + "failed_pct": { + "timeField": "Time" + }, + "failed_rate": { + "timeField": "Time" + }, + "refused_rate": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + }, + "spans_errors": { + "timeField": "Time" + }, + "spans_rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_receiver", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": { + "Trend #accepted_rate": 1, + "Trend #failed_pct": 4, + "Trend #failed_rate": 3, + "Trend #refused_rate": 2, + "signal_type_receiver": 0 + }, + "renameByName": { + "Trend #accepted_rate": "Accepted Rate", + "Trend #error_pct": "Error %", + "Trend #errors": "Error %", + "Trend #failed_pct": "Error %", + "Trend #failed_rate": "Failed Rate", + "Trend #refused_rate": "Refused Rate", + "Trend #rps": "Accepted Rate", + "Trend #spans_errors": "Error", + "Trend #spans_rps": "Rate", + "Value #A": "Spans Rate", + "Value #B": "Spans Failure %", + "Value #C": "Logs Rate", + "Value #D": "Logs Failure %", + "Value #E": "Metrics Rate", + "Value #F": "Metrics Failure %", + "receiver": "Receiver", + "signal_type_receiver": "Receiver" + } + } + } + ], + "type": "table" + } + ], + "title": "Receivers", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 48, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 95 + }, + "id": 81, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 95 + }, + "id": 75, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 95 + }, + "id": 83, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 95 + }, + "id": 84, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 95 + }, + "id": 85, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 95 + }, + "id": 86, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 1 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 49, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n (\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n -\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n )\n /\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "discarded_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "inbound_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "outbound_rate" + } + ], + "title": "Processors", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "discarded_pct": { + "timeField": "Time" + }, + "inbound_rate": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "otel_signal_processor", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #discarded_pct": 2, + "Trend #inbound_rate": 1, + "Trend #outbound_rate": 3, + "otel_signal_processor": 0 + }, + "renameByName": { + "Trend #discarded_pct": "Discarded %", + "Trend #inbound_rate": "Inbound Rate", + "Trend #outbound_rate": "Outbound Rate", + "otel_signal_processor": "Processor", + "otel_signal_receiver": "" + } + } + } + ], + "type": "table" + } + ], + "title": "Processors", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 47, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 96 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 96 + }, + "id": 44, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "spans_error" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 96 + }, + "id": 70, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 96 + }, + "id": 72, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 96 + }, + "id": 71, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 96 + }, + "id": 73, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by exporter and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 109 + }, + "id": 45, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rps" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n /\n otelcol_exporter_queue_capacity{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size_pct" + } + ], + "title": "Exporters", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "errors": { + "timeField": "Time" + }, + "queue_size": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_exporter", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #errors": "Errors %", + "Trend #queue_size": "Queue size", + "Trend #queue_size_pct": "Queue saturation %", + "Trend #rps": "Rate", + "signal_type_exporter": "Exporter" + } + } + } + ], + "type": "table" + } + ], + "title": "Exporters", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 46, + "panels": [ + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs from OpenTelemetry Collector filtered by dashboard variables", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 42, + "options": { + "dedupStrategy": "none", + "detailsMode": "sidebar", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showControls": false, + "showLabels": false, + "showLogAttributes": true, + "showTime": true, + "sortOrder": "Ascending", + "wrapLogMessage": false + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" | fields @timestamp, resource.service.name, resource.service.instance.id, resource.host.name, severity.text, body", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "OpenTelemetry Collector Logs", + "type": "logs" + } + ], + "title": "Logs", + "type": "row" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "opentelemetry", + "opentelemetry-collector" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "(?!grafanacloud-.*-alert-state-history|grafanacloud-.*-usage-insights).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "description": "Deployment environment (e.g. \"production\").\nResource attribute `deployment.environment.name` via `target_info`", + "includeAll": true, + "label": "Environment", + "multi": true, + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "description": "Resource attribute `k8s.cluster.name`", + "includeAll": true, + "label": "Kubernetes cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "`k8s.node.name`", + "includeAll": true, + "label": "K8s node", + "multi": true, + "name": "k8s_node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "description": "`host.name`", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "description": "`service.instance.id`", + "includeAll": true, + "label": "Instance", + "name": "service_instance_id", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "otelcol-contrib", + "value": "otelcol-contrib" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "description": "`service.name`", + "includeAll": true, + "label": "Service", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "browser", + "title": "OpenTelemetry Collector", + "uid": "otel-demo_otel-collector_dashboard", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-postgresql-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + postgresql-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Performance metrics for PostgreSQL instrumented with the OpenTelemetry Collector PostgreSQL receiver.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [ + { + "asDropdown": false, + "includeVars": true, + "keepTime": true, + "tags": [ + "postgres-integration" + ], + "title": "Integration dashboards", + "type": "dashboards" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 15, + "panels": [], + "title": "PostgreSQL Overview", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Queries per seconds. Queries being commits or rollbacks.\n", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 11, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_commits_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval])) + sum(irate(postgresql_rollbacks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "xact_commit" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 1800, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "QPS", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "See [pg_stat_database / `tup_fetched`](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 20, + "x": 4, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_fetched_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "fetched", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "fetched", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_returned_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "returned", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "returned", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_inserted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "inserted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "inserted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_updated_total{dpostgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "updated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "updated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_deleted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "deleted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deleted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Rows", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_allocated_total{host_name=~\"$host_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers allocated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "buffers_allocated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_writes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "", + "legendFormat": "buffers write {{source}}", + "range": true, + "refId": "buffers_write", + "useBackend": false + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_backend", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_backend", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_clean", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_clean", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_checkpoint_count_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "checkpoint {{type}}", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "checkpoint", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Buffers", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "deadlocks" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-red", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "deadlocks" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "conflicts", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_deadlocks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "deadlocks", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deadlocks", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "conflicts" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "deadlocks", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_conflicts_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "conflicts", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "conflicts-not-yet-implemented-in-otelcol", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "deadlocks" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Conflicts/Deadlocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "round(\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n +\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_read_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n 0.001\n)", + "format": "time_series", + "legendFormat": "{{postgresql_database_name}} - cache hit ratio", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Cache hit ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "postgresql_backends{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{postgresql_database_name}} - connections", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Number of active connections", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 41, + "tags": [ + "opentelemetry", + "postgresql" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count,k8s_cluster_name)", + "description": "When deploying PostgreSQL on Kubernetes, name of the Kubernetes cluster. \nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "", + "value": "" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "description": "When deploying on Kubernetes, name of the `StatefulSet` of the PostgreSQL deployment (e.g. `my-pg-cluster`).\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Statefulset", + "multi": true, + "name": "k8s_statefulset_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "description": "When deploying PostgreSQL on VMs, name on the host on which the database is deployed.\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "Host", + "multi": true, + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "includeAll": true, + "label": "Database", + "name": "db", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "PostgreSQL", + "uid": "xHhbQmdjA", + "version": 5 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-spanmetrics-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + spanmetrics-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Spanmetrics way of demo application view.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 26, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard uses RED metrics generated for all services by the spanmetrics connector configured in the OpenTelemetry Collector.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.4.0", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 24, + "panels": [], + "title": "Service Level - Throughput and Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,service_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - Service Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "super-light-blue", + "value": 1 + }, + { + "color": "#EAB839", + "value": 2 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 4, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum by (service_name) (rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean Rate over Range", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-reds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "red", + "value": 15 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 15, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (service_name))", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean ERROR Rate over Range", + "type": "bargauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 14, + "panels": [], + "title": "span_names Level - Throughput", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "bRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-BlYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "eRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-RdYlGr" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 663 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 667 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Service" + }, + "properties": [ + { + "id": "custom.width" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 22, + "interval": "5m", + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name)) ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name))", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Error Rate" + } + ], + "title": "Top 7 span_names and Errors (APM Table)", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "span_name" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true + }, + "indexByName": {}, + "renameByName": { + "Value #Error Rate": "Error Rate", + "Value #Rate": "Rate", + "service_name 1": "Rate in Service", + "service_name 2": "Error Rate in Service" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "bRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "eRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Error Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Error Rate": true, + "Rate": true, + "bRate": false + }, + "indexByName": { + "Error Rate": 4, + "Error Rate in Service": 6, + "Rate": 1, + "Rate in Service": 5, + "bRate": 2, + "eRate": 3, + "span_name": 0 + }, + "renameByName": { + "Rate in Service": "Service", + "bRate": "Rate", + "eRate": "Error Rate", + "span_name": "span_name Name" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Rate" + } + ] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 20, + "panels": [], + "title": "span_name Level - Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 25, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,span_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{span_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - span_name Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 10, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7, sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"${service}\", span_name=~\"$span_name\"}[5m]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"${service}\",span_name=~\"$span_name\"}[5m\n])))", + "instant": true, + "interval": "", + "legendFormat": "{{span_name}} [{{service_name}}]", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Highest Endpoint Latencies Mean Over Range ", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 16, + "interval": "5m", + "options": { + "legend": { + "calcs": [ + "mean", + "logmin", + "max", + "delta" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": true, + "expr": "topk(7,sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])))", + "instant": false, + "interval": "", + "legendFormat": "[{{service_name}}] {{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Top 7 Latencies Over Range ", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "includeAll": true, + "multi": true, + "name": "service", + "options": [], + "query": { + "query": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*service_name=\"(.*)\".*/", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "includeAll": true, + "multi": true, + "name": "span_name", + "options": [], + "query": { + "query": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*span_name=\"(.*)\".*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Spanmetrics Demo Dashboard", + "uid": "W2gX2zHVk48", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_datasource: "1" +data: + + default.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Prometheus + uid: webstore-metrics + type: prometheus + url: http://prometheus:9090 + editable: true + isDefault: true + jsonData: + # Align Prometheus data source time interval with the OTel SDKs' export interval (see OTEL_METRIC_EXPORT_INTERVAL) + timeInterval: "60s" + exemplarTraceIdDestinations: + - datasourceUid: webstore-traces + name: trace_id + + - url: http://localhost:8080/jaeger/ui/trace/$${__value.raw} + name: trace_id + urlDisplayLabel: View in Jaeger UI + jaeger.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Jaeger + uid: webstore-traces + type: jaeger + url: http://jaeger:16686/jaeger/ui + editable: true + isDefault: false + jsonData: + tracesToLogsV2: + datasourceUid: webstore-logs + spanStartTimeShift: "-20m" + spanEndTimeShift: "20m" + filterByTraceID: true + filterBySpanID: true + customQuery: true + query: traceId:"$${__trace.traceId}" AND spanId:"$${__span.spanId}" + opensearch.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + apiVersion: 1 + + datasources: + - name: OpenSearch + uid: webstore-logs + type: grafana-opensearch-datasource + url: http://opensearch:9200/ + access: proxy + editable: true + isDefault: false + jsonData: + database: otel-logs-* + flavor: opensearch + logLevelField: severity.text.keyword + logMessageField: body + pplEnabled: true + timeField: observedTimestamp + version: 3.4.0 diff --git a/chart/examples/default/rendered/grafana/clusterrole.yaml b/chart/examples/default/rendered/grafana/clusterrole.yaml new file mode 100644 index 0000000..ea5c00b --- /dev/null +++ b/chart/examples/default/rendered/grafana/clusterrole.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrole.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-clusterrole +rules: + - apiGroups: [""] # "" indicates the core API group + resources: ["configmaps", "secrets"] + verbs: ["get", "watch", "list"] diff --git a/chart/examples/default/rendered/grafana/clusterrolebinding.yaml b/chart/examples/default/rendered/grafana/clusterrolebinding.yaml new file mode 100644 index 0000000..c53b4b6 --- /dev/null +++ b/chart/examples/default/rendered/grafana/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrolebinding.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: grafana-clusterrolebinding + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +subjects: + - kind: ServiceAccount + name: grafana + namespace: default +roleRef: + kind: ClusterRole + name: grafana-clusterrole + apiGroup: rbac.authorization.k8s.io diff --git a/chart/examples/default/rendered/grafana/configmap-dashboard-provider.yaml b/chart/examples/default/rendered/grafana/configmap-dashboard-provider.yaml new file mode 100644 index 0000000..64c09be --- /dev/null +++ b/chart/examples/default/rendered/grafana/configmap-dashboard-provider.yaml @@ -0,0 +1,27 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap-dashboard-provider.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-config-dashboards + namespace: default +data: + provider.yaml: |- + apiVersion: 1 + providers: + - name: 'sidecarProvider' + orgId: 1 + folder: '' + folderUid: '' + type: file + disableDeletion: false + allowUiUpdates: false + updateIntervalSeconds: 30 + options: + foldersFromFilesStructure: false + path: /tmp/dashboards diff --git a/chart/examples/default/rendered/grafana/configmap.yaml b/chart/examples/default/rendered/grafana/configmap.yaml new file mode 100644 index 0000000..eacaa51 --- /dev/null +++ b/chart/examples/default/rendered/grafana/configmap.yaml @@ -0,0 +1,39 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +data: + + plugins: grafana-opensearch-datasource + grafana.ini: | + [analytics] + check_for_updates = true + [auth] + disable_login_form = true + [auth.anonymous] + enabled = true + org_name = Main Org. + org_role = Admin + [grafana_net] + url = https://grafana.net + [log] + mode = console + [paths] + data = /var/lib/grafana/ + logs = /var/log/grafana + plugins = /var/lib/grafana/plugins + provisioning = /etc/grafana/provisioning + [server] + domain = '' + root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana + serve_from_sub_path = true + [unified_storage] + index_path = /var/lib/grafana-search/bleve diff --git a/chart/examples/default/rendered/grafana/deployment.yaml b/chart/examples/default/rendered/grafana/deployment.yaml new file mode 100644 index 0000000..1432756 --- /dev/null +++ b/chart/examples/default/rendered/grafana/deployment.yaml @@ -0,0 +1,271 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + strategy: + type: RollingUpdate + template: + metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + annotations: + checksum/config: 4bc37edad15da2620fa7b48cb4d0af4ca30f6d344ac238d6aa702abb2d92c6ba + checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 + checksum/secret: bed677784356b2af7fb0d87455db21f077853059b594101a4f6532bfbd962a7f + kubectl.kubernetes.io/default-container: grafana + spec: + + serviceAccountName: grafana + automountServiceAccountToken: true + shareProcessNamespace: false + securityContext: + fsGroup: 472 + runAsGroup: 472 + runAsNonRoot: true + runAsUser: 472 + enableServiceLinks: true + containers: + - name: grafana-sc-alerts + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_alert" + - name: FOLDER + value: "/etc/grafana/provisioning/alerting" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/alerting/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: grafana-sc-dashboard + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_dashboard" + - name: FOLDER + value: "/tmp/dashboards" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/dashboards/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: grafana-sc-datasources + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_datasource" + - name: FOLDER + value: "/etc/grafana/provisioning/datasources" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/datasources/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + - name: grafana + image: "docker.io/grafana/grafana:12.3.1" + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: config + mountPath: "/etc/grafana/grafana.ini" + subPath: grafana.ini + - name: storage + mountPath: "/var/lib/grafana" + - name: search + mountPath: "/var/lib/grafana-search" + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: sc-dashboard-provider + mountPath: "/etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml" + subPath: provider.yaml + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + ports: + - name: grafana + containerPort: 3000 + protocol: TCP + - name: gossip-tcp + containerPort: 9094 + protocol: TCP + - name: gossip-udp + containerPort: 9094 + protocol: UDP + - name: profiling + containerPort: 6060 + protocol: TCP + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: GF_SECURITY_ADMIN_USER + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: GF_SECURITY_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: GF_INSTALL_PLUGINS + valueFrom: + configMapKeyRef: + name: grafana + key: plugins + - name: GF_PATHS_DATA + value: /var/lib/grafana/ + - name: GF_PATHS_LOGS + value: /var/log/grafana + - name: GF_PATHS_PLUGINS + value: /var/lib/grafana/plugins + - name: GF_PATHS_PROVISIONING + value: /etc/grafana/provisioning + - name: GF_UNIFIED_STORAGE_INDEX_PATH + value: /var/lib/grafana-search/bleve + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + divisor: "1" + resource: limits.memory + livenessProbe: + failureThreshold: 10 + httpGet: + path: /api/health + port: grafana + initialDelaySeconds: 60 + timeoutSeconds: 30 + readinessProbe: + httpGet: + path: /api/health + port: grafana + resources: + limits: + memory: 175Mi + volumes: + - name: config + configMap: + name: grafana + - name: storage + emptyDir: {} + - name: search + emptyDir: {} + - name: sc-alerts-volume + emptyDir: {} + - name: sc-dashboard-volume + emptyDir: {} + - name: sc-dashboard-provider + configMap: + name: grafana-config-dashboards + - name: sc-datasources-volume + emptyDir: {} diff --git a/chart/examples/default/rendered/grafana/role.yaml b/chart/examples/default/rendered/grafana/role.yaml new file mode 100644 index 0000000..c211542 --- /dev/null +++ b/chart/examples/default/rendered/grafana/role.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +rules: [] diff --git a/chart/examples/default/rendered/grafana/rolebinding.yaml b/chart/examples/default/rendered/grafana/rolebinding.yaml new file mode 100644 index 0000000..8951e99 --- /dev/null +++ b/chart/examples/default/rendered/grafana/rolebinding.yaml @@ -0,0 +1,20 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: grafana +subjects: +- kind: ServiceAccount + name: grafana + namespace: default diff --git a/chart/examples/default/rendered/grafana/secret.yaml b/chart/examples/default/rendered/grafana/secret.yaml new file mode 100644 index 0000000..48cb47d --- /dev/null +++ b/chart/examples/default/rendered/grafana/secret.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + app.kubernetes.io/component: admin-secret +type: Opaque +data: + + admin-user: "YWRtaW4=" + admin-password: "YWRtaW4=" + ldap-toml: "" diff --git a/chart/examples/default/rendered/grafana/service.yaml b/chart/examples/default/rendered/grafana/service.yaml new file mode 100644 index 0000000..54fa194 --- /dev/null +++ b/chart/examples/default/rendered/grafana/service.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + type: ClusterIP + ports: + - name: service + port: 80 + protocol: TCP + targetPort: grafana + selector: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example diff --git a/chart/examples/default/rendered/grafana/serviceaccount.yaml b/chart/examples/default/rendered/grafana/serviceaccount.yaml new file mode 100644 index 0000000..721b1a6 --- /dev/null +++ b/chart/examples/default/rendered/grafana/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +automountServiceAccountToken: false +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana + namespace: default diff --git a/chart/examples/default/rendered/jaeger/jaeger-deploy.yaml b/chart/examples/default/rendered/jaeger/jaeger-deploy.yaml new file mode 100644 index 0000000..35c11b5 --- /dev/null +++ b/chart/examples/default/rendered/jaeger/jaeger-deploy.yaml @@ -0,0 +1,124 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one + prometheus.io/port: "8888" + prometheus.io/scrape: "true" +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + template: + metadata: + labels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + annotations: + prometheus.io/port: "8888" + prometheus.io/scrape: "true" + spec: + + containers: + - env: + - name: MEMORY_MAX_TRACES + value: "25000" + - name: PROMETHEUS_ADDR + value: prometheus:9090 + - name: OTEL_COLLECTOR_HOST + value: otel-collector + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + - name: JAEGER_HOST + value: 0.0.0.0 + - name: JAEGER_GRPC_PORT + value: "4317" + - name: SPAN_STORAGE_TYPE + value: memory + + - name: COLLECTOR_ZIPKIN_HOST_PORT + value: :9411 + - name: JAEGER_DISABLED + value: "false" + - name: COLLECTOR_OTLP_ENABLED + value: "true" + securityContext: + {} + image: jaegertracing/jaeger:2.14.1 + imagePullPolicy: IfNotPresent + name: jaeger + args: + - "--config" + - "/etc/jaeger/user-config.yaml" + ports: + - containerPort: 5775 + protocol: UDP + - containerPort: 6831 + protocol: UDP + - containerPort: 6832 + protocol: UDP + - containerPort: 5778 + protocol: TCP + - containerPort: 16686 + protocol: TCP + - containerPort: 16685 + protocol: TCP + - containerPort: 9411 + protocol: TCP + - containerPort: 4317 + protocol: TCP + - containerPort: 4318 + protocol: TCP + - containerPort: 13133 + protocol: TCP + - containerPort: 8888 + protocol: TCP + livenessProbe: + failureThreshold: 5 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 1 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + resources: + limits: + memory: 600Mi + volumeMounts: + - name: user-config + mountPath: /etc/jaeger + securityContext: + fsGroup: 10001 + runAsGroup: 10001 + runAsUser: 10001 + serviceAccountName: jaeger + volumes: + - name: user-config + configMap: + name: user-config diff --git a/chart/examples/default/rendered/jaeger/jaeger-sa.yaml b/chart/examples/default/rendered/jaeger/jaeger-sa.yaml new file mode 100644 index 0000000..b670c99 --- /dev/null +++ b/chart/examples/default/rendered/jaeger/jaeger-sa.yaml @@ -0,0 +1,14 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-sa.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +automountServiceAccountToken: true diff --git a/chart/examples/default/rendered/jaeger/service.yaml b/chart/examples/default/rendered/jaeger/service.yaml new file mode 100644 index 0000000..6174656 --- /dev/null +++ b/chart/examples/default/rendered/jaeger/service.yaml @@ -0,0 +1,67 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +spec: + type: ClusterIP + ports: + # Agent Ports + - name: zk-compact-trft + port: 5775 + protocol: UDP + targetPort: 5775 + - name: config-rest + port: 5778 + targetPort: 5778 + - name: jg-compact-trft + port: 6831 + protocol: UDP + targetPort: 6831 + - name: jg-binary-trft + port: 6832 + protocol: UDP + targetPort: 6832 + # Collector Ports + - name: http-zipkin + port: 9411 + targetPort: 9411 + appProtocol: http + - name: grpc-http + port: 14250 + targetPort: 14250 + appProtocol: grpc + - name: c-tchan-trft + port: 14267 + targetPort: 14267 + - name: http-c-binary-trft + port: 14268 + targetPort: 14268 + appProtocol: http + - name: otlp-grpc + port: 4317 + targetPort: 4317 + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + appProtocol: http + # Query Ports + - name: http-query + port: 16686 + targetPort: 16686 + - name: grpc-query + port: 16685 + targetPort: 16685 + selector: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one diff --git a/chart/examples/default/rendered/jaeger/user-config.yaml b/chart/examples/default/rendered/jaeger/user-config.yaml new file mode 100644 index 0000000..2f49362 --- /dev/null +++ b/chart/examples/default/rendered/jaeger/user-config.yaml @@ -0,0 +1,73 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/user-config.yaml +# Generates a config map from a file provided by user via `--set-file userconfig=` +apiVersion: v1 +kind: ConfigMap +metadata: + name: user-config + namespace: default + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm +data: + user-config.yaml: | + service: + extensions: [jaeger_storage, jaeger_query, healthcheckv2] + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [jaeger_storage_exporter] + telemetry: + resource: + service.name: jaeger + metrics: + level: detailed + readers: + - periodic: + interval: 10000 + timeout: 5000 + exporter: + otlp: + protocol: http/protobuf + endpoint: http://${env:OTEL_COLLECTOR_HOST}:${env:OTEL_COLLECTOR_PORT_HTTP} + insecure: true + logs: + level: info + extensions: + healthcheckv2: + use_v2: true + http: + endpoint: 0.0.0.0:13133 + jaeger_query: + storage: + traces: memory_backend + metrics: metrics_backend + base_path: /jaeger/ui + jaeger_storage: + backends: + memory_backend: + memory: + max_traces: ${env:MEMORY_MAX_TRACES} + metric_backends: + metrics_backend: + prometheus: + endpoint: "http://${env:PROMETHEUS_ADDR}" + normalize_calls: true + normalize_duration: true + + receivers: + otlp: + protocols: + grpc: + endpoint: ${env:JAEGER_HOST}:${env:JAEGER_GRPC_PORT} + + processors: + batch: + + exporters: + jaeger_storage_exporter: + trace_storage: memory_backend diff --git a/chart/examples/default/rendered/opensearch/configmap.yaml b/chart/examples/default/rendered/opensearch/configmap.yaml new file mode 100644 index 0000000..44bff5a --- /dev/null +++ b/chart/examples/default/rendered/opensearch/configmap.yaml @@ -0,0 +1,65 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: opensearch-config + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +data: + opensearch.yml: | + cluster.name: opensearch-cluster + + # Bind to all interfaces because we don't know what IP address Docker will assign to us. + network.host: 0.0.0.0 + + # Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. + # Implicitly done if ".singleNode" is set to "true". + # discovery.type: single-node + + # Start OpenSearch Security Demo Configuration + # WARNING: revise all the lines below before you go into production + # plugins: + # security: + # ssl: + # transport: + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # enforce_hostname_verification: false + # http: + # enabled: true + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # allow_unsafe_democertificates: true + # allow_default_init_securityindex: true + # authcz: + # admin_dn: + # - CN=kirk,OU=client,O=client,L=test,C=de + # audit.type: internal_opensearch + # enable_snapshot_restore_privilege: true + # check_snapshot_restore_write_privileges: true + # restapi: + # roles_enabled: ["all_access", "security_rest_api_access"] + # system_indices: + # enabled: true + # indices: + # [ + # ".opendistro-alerting-config", + # ".opendistro-alerting-alert*", + # ".opendistro-anomaly-results*", + # ".opendistro-anomaly-detector*", + # ".opendistro-anomaly-checkpoints", + # ".opendistro-anomaly-detection-state", + # ".opendistro-reports-*", + # ".opendistro-notifications-*", + # ".opendistro-notebooks", + # ".opendistro-asynchronous-search-response*", + # ] + ######## End OpenSearch Security Demo Configuration ######## diff --git a/chart/examples/default/rendered/opensearch/poddisruptionbudget.yaml b/chart/examples/default/rendered/opensearch/poddisruptionbudget.yaml new file mode 100644 index 0000000..4916d26 --- /dev/null +++ b/chart/examples/default/rendered/opensearch/poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/poddisruptionbudget.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: "opensearch-pdb" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example diff --git a/chart/examples/default/rendered/opensearch/service.yaml b/chart/examples/default/rendered/opensearch/service.yaml new file mode 100644 index 0000000..4ac5038 --- /dev/null +++ b/chart/examples/default/rendered/opensearch/service.yaml @@ -0,0 +1,59 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + {} +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + protocol: TCP + port: 9200 + - name: transport + protocol: TCP + port: 9300 + - name: metrics + protocol: TCP + port: 9600 +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch-headless + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + clusterIP: None # This is needed for statefulset hostnames like opensearch-0 to resolve + # Create endpoints also if the related pod isn't ready + publishNotReadyAddresses: true + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + port: 9200 + - name: transport + port: 9300 + - name: metrics + port: 9600 diff --git a/chart/examples/default/rendered/opensearch/statefulset.yaml b/chart/examples/default/rendered/opensearch/statefulset.yaml new file mode 100644 index 0000000..e71f96e --- /dev/null +++ b/chart/examples/default/rendered/opensearch/statefulset.yaml @@ -0,0 +1,154 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + majorVersion: "3" +spec: + serviceName: opensearch-headless + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + replicas: 1 + podManagementPolicy: Parallel + updateStrategy: + type: RollingUpdate + template: + metadata: + name: "opensearch" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + configchecksum: 17d9fa0bb5acd5c7f6e4ff053d35a4bba83d971ccee521315964c59a0d83160 + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + automountServiceAccountToken: false + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - example + - key: app.kubernetes.io/name + operator: In + values: + - opensearch + terminationGracePeriodSeconds: 120 + volumes: + - name: config + configMap: + name: opensearch-config + - emptyDir: {} + name: config-emptydir + enableServiceLinks: true + initContainers: + - name: configfile + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + command: + - sh + - -c + - | + #!/usr/bin/env bash + cp -r /tmp/configfolder/* /tmp/config/ + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + resources: + {} + volumeMounts: + - mountPath: /tmp/config/ + name: config-emptydir + - name: config + mountPath: /tmp/configfolder/opensearch.yml + subPath: opensearch.yml + containers: + - name: "opensearch" + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + readinessProbe: + failureThreshold: 3 + periodSeconds: 5 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 5 + periodSeconds: 10 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 9200 + - name: transport + containerPort: 9300 + - name: metrics + containerPort: 9600 + resources: + limits: + memory: 1100Mi + requests: + cpu: 1000m + memory: 100Mi + env: + - name: node.name + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: discovery.seed_hosts + value: "opensearch-cluster-master-headless" + - name: cluster.name + value: "demo-cluster" + - name: network.host + value: "0.0.0.0" + - name: OPENSEARCH_JAVA_OPTS + value: "-Xms400m -Xmx400m" + - name: node.roles + value: "master,ingest,data,remote_cluster_client," + - name: discovery.type + value: "single-node" + - name: bootstrap.memory_lock + value: "true" + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + volumeMounts: + - name: config-emptydir + mountPath: /usr/share/opensearch/config/opensearch.yml + subPath: opensearch.yml diff --git a/chart/examples/default/rendered/opentelemetry-collector/clusterrole.yaml b/chart/examples/default/rendered/opentelemetry-collector/clusterrole.yaml new file mode 100644 index 0000000..6fad98f --- /dev/null +++ b/chart/examples/default/rendered/opentelemetry-collector/clusterrole.yaml @@ -0,0 +1,48 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +rules: + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get","list","watch","create","update","patch","delete"] + - apiGroups: [""] + resources: ["pods", "namespaces"] + verbs: ["get", "watch", "list"] + - apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events", "namespaces", "namespaces/status", "nodes", "nodes/spec", "pods", "pods/status", "replicationcontrollers", "replicationcontrollers/status", "resourcequotas", "services" ] + verbs: ["get", "list", "watch"] + - apiGroups: ["apps"] + resources: ["daemonsets", "deployments", "replicasets", "statefulsets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["daemonsets", "deployments", "replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["batch"] + resources: ["jobs", "cronjobs"] + verbs: ["get", "list", "watch"] + - apiGroups: ["autoscaling"] + resources: ["horizontalpodautoscalers"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["nodes/stats"] + verbs: ["get", "watch", "list"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch"] diff --git a/chart/examples/default/rendered/opentelemetry-collector/clusterrolebinding.yaml b/chart/examples/default/rendered/opentelemetry-collector/clusterrolebinding.yaml new file mode 100644 index 0000000..886802c --- /dev/null +++ b/chart/examples/default/rendered/opentelemetry-collector/clusterrolebinding.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector +subjects: +- kind: ServiceAccount + name: otel-collector + namespace: default diff --git a/chart/examples/default/rendered/opentelemetry-collector/configmap-agent.yaml b/chart/examples/default/rendered/opentelemetry-collector/configmap-agent.yaml new file mode 100644 index 0000000..f0f1ffa --- /dev/null +++ b/chart/examples/default/rendered/opentelemetry-collector/configmap-agent.yaml @@ -0,0 +1,275 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/configmap-agent.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +data: + relay: | + connectors: + spanmetrics: {} + exporters: + debug: {} + opensearch: + http: + endpoint: http://opensearch:9200 + tls: + insecure: true + logs_index: otel-logs + logs_index_time_format: yyyy-MM-dd + otlp/jaeger: + endpoint: jaeger:4317 + sending_queue: + batch: null + tls: + insecure: true + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + sending_queue: + batch: null + tls: + insecure: true + extensions: + health_check: + endpoint: ${env:MY_POD_IP}:13133 + k8s_leader_elector/k8s_cluster: + auth_type: serviceAccount + lease_name: k8s.cluster.receiver.opentelemetry.io + lease_namespace: default + k8s_observer: + auth_type: serviceAccount + node: ${env:K8S_NODE_NAME} + processors: + batch: {} + k8sattributes: + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.uid + - k8s.node.name + - k8s.pod.start_time + - k8s.deployment.name + - k8s.replicaset.name + - k8s.replicaset.uid + - k8s.daemonset.name + - k8s.daemonset.uid + - k8s.job.name + - k8s.job.uid + - k8s.container.name + - k8s.cronjob.name + - k8s.statefulset.name + - k8s.statefulset.uid + - container.image.tag + - container.image.name + - k8s.cluster.uid + - service.namespace + - service.name + - service.version + - service.instance.id + otel_annotations: true + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: connection + memory_limiter: + check_interval: 5s + limit_percentage: 80 + spike_limit_percentage: 25 + resource: + attributes: + - action: insert + from_attribute: k8s.pod.uid + key: service.instance.id + resourcedetection: + detectors: + - env + - system + transform: + error_mode: ignore + trace_statements: + - conditions: + - span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" + and span.attributes["http.route"] == nil + context: span + statements: + - set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], + "\\/api\\/cart") + - set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], + "\\/api\\/checkout") + - set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], + "\\/api\\/products\\/.*") + - set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], + "\\/api\\/recommendations") + - set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], + "\\/api\\/data.*") + - context: span + statements: + - set_semconv_span_name("1.37.0", "unsanitized_span_name") + receivers: + hostmetrics: + collection_interval: 10s + root_path: /hostfs + scrapers: + cpu: null + disk: null + filesystem: + exclude_fs_types: + fs_types: + - autofs + - binfmt_misc + - bpf + - cgroup2 + - configfs + - debugfs + - devpts + - devtmpfs + - fusectl + - hugetlbfs + - iso9660 + - mqueue + - nsfs + - overlay + - proc + - procfs + - pstore + - rpc_pipefs + - securityfs + - selinuxfs + - squashfs + - sysfs + - tracefs + match_type: strict + exclude_mount_points: + match_type: regexp + mount_points: + - /dev/* + - /proc/* + - /sys/* + - /run/k3s/containerd/* + - /var/lib/docker/* + - /var/lib/kubelet/* + - /snap/* + load: null + memory: null + network: null + jaeger: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:14250 + thrift_compact: + endpoint: ${env:MY_POD_IP}:6831 + thrift_http: + endpoint: ${env:MY_POD_IP}:14268 + k8s_cluster: + collection_interval: 10s + k8s_leader_elector: k8s_leader_elector/k8s_cluster + kubeletstats: + auth_type: serviceAccount + collection_interval: 20s + endpoint: ${env:K8S_NODE_IP}:10250 + otlp: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:4317 + http: + cors: + allowed_origins: + - http://* + - https://* + endpoint: ${env:MY_POD_IP}:4318 + prometheus: + config: + scrape_configs: + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - ${env:MY_POD_IP}:8888 + receiver_creator/metrics: + discovery: + enabled: true + watch_observers: + - k8s_observer + zipkin: + endpoint: ${env:MY_POD_IP}:9411 + service: + extensions: + - health_check + - k8s_observer + - k8s_leader_elector/k8s_cluster + pipelines: + logs: + exporters: + - opensearch + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + metrics: + exporters: + - otlphttp/prometheus + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + - spanmetrics + - receiver_creator/metrics + - hostmetrics + - kubeletstats + - k8s_cluster + traces: + exporters: + - otlp/jaeger + - debug + - spanmetrics + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - transform + - batch + receivers: + - otlp + - jaeger + - zipkin + telemetry: + metrics: + level: detailed + readers: + - periodic: + exporter: + otlp: + endpoint: http://otel-collector:4318 + insecure: true + protocol: http/protobuf + interval: 10000 + timeout: 5000 diff --git a/chart/examples/default/rendered/opentelemetry-collector/daemonset.yaml b/chart/examples/default/rendered/opentelemetry-collector/daemonset.yaml new file mode 100644 index 0000000..689294e --- /dev/null +++ b/chart/examples/default/rendered/opentelemetry-collector/daemonset.yaml @@ -0,0 +1,122 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + updateStrategy: + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: 1fdac890ba8aee9d05a37e748f9dcb8f5571ddf715332cc2ba32a7cfdbc9893f + + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + + spec: + + serviceAccountName: otel-collector + automountServiceAccountToken: true + securityContext: + {} + containers: + - name: opentelemetry-collector + args: + - --config=/conf/relay.yaml + securityContext: + {} + image: "otel/opentelemetry-collector-contrib:0.142.0" + imagePullPolicy: IfNotPresent + ports: + + - name: jaeger-compact + containerPort: 6831 + protocol: UDP + hostPort: 6831 + - name: jaeger-grpc + containerPort: 14250 + protocol: TCP + hostPort: 14250 + - name: jaeger-thrift + containerPort: 14268 + protocol: TCP + hostPort: 14268 + - name: metrics + containerPort: 8888 + protocol: TCP + - name: otlp + containerPort: 4317 + protocol: TCP + hostPort: 4317 + - name: otlp-http + containerPort: 4318 + protocol: TCP + hostPort: 4318 + - name: zipkin + containerPort: 9411 + protocol: TCP + hostPort: 9411 + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: K8S_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: GOMEMLIMIT + value: "160MiB" + livenessProbe: + httpGet: + path: / + port: 13133 + readinessProbe: + httpGet: + path: / + port: 13133 + resources: + limits: + memory: 200Mi + volumeMounts: + - mountPath: /conf + name: opentelemetry-collector-configmap + - name: hostfs + mountPath: /hostfs + readOnly: true + mountPropagation: HostToContainer + volumes: + - name: opentelemetry-collector-configmap + configMap: + name: otel-collector-agent + items: + - key: relay + path: relay.yaml + - name: hostfs + hostPath: + path: / + hostNetwork: false diff --git a/chart/examples/default/rendered/opentelemetry-collector/service.yaml b/chart/examples/default/rendered/opentelemetry-collector/service.yaml new file mode 100644 index 0000000..d57f891 --- /dev/null +++ b/chart/examples/default/rendered/opentelemetry-collector/service.yaml @@ -0,0 +1,54 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector + component: agent-collector +spec: + type: ClusterIP + ports: + + - name: jaeger-compact + port: 6831 + targetPort: 6831 + protocol: UDP + - name: jaeger-grpc + port: 14250 + targetPort: 14250 + protocol: TCP + - name: jaeger-thrift + port: 14268 + targetPort: 14268 + protocol: TCP + - name: metrics + port: 8888 + targetPort: 8888 + protocol: TCP + - name: otlp + port: 4317 + targetPort: 4317 + protocol: TCP + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP + - name: zipkin + port: 9411 + targetPort: 9411 + protocol: TCP + selector: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + internalTrafficPolicy: Local diff --git a/chart/examples/default/rendered/opentelemetry-collector/serviceaccount.yaml b/chart/examples/default/rendered/opentelemetry-collector/serviceaccount.yaml new file mode 100644 index 0000000..73ebb08 --- /dev/null +++ b/chart/examples/default/rendered/opentelemetry-collector/serviceaccount.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector diff --git a/chart/examples/default/rendered/posgresql-init-config.yaml b/chart/examples/default/rendered/posgresql-init-config.yaml new file mode 100644 index 0000000..4c75905 --- /dev/null +++ b/chart/examples/default/rendered/posgresql-init-config.yaml @@ -0,0 +1,173 @@ +--- +# Source: opentelemetry-demo/templates/posgresql-init-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-init + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + init.sql: | + -- Copyright The OpenTelemetry Authors + -- SPDX-License-Identifier: Apache-2.0 + + CREATE USER otelu WITH PASSWORD 'otelp'; + + -- Accounting Service: create a schema + CREATE SCHEMA accounting; + GRANT USAGE ON SCHEMA accounting TO otelu; + + -- Accounting Service: create tables + CREATE TABLE accounting."order" ( + order_id TEXT PRIMARY KEY + ); + + CREATE TABLE accounting.shipping ( + shipping_tracking_id TEXT PRIMARY KEY, + shipping_cost_currency_code TEXT NOT NULL, + shipping_cost_units BIGINT NOT NULL, + shipping_cost_nanos INT NOT NULL, + street_address TEXT, + city TEXT, + state TEXT, + country TEXT, + zip_code TEXT, + order_id TEXT NOT NULL, + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + CREATE TABLE accounting.orderitem ( + item_cost_currency_code TEXT NOT NULL, + item_cost_units BIGINT NOT NULL, + item_cost_nanos INT NOT NULL, + product_id TEXT NOT NULL, + quantity INT NOT NULL, + order_id TEXT NOT NULL, + PRIMARY KEY (order_id, product_id), + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + -- Accounting Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA accounting TO otelu; + + -- Product Review Service: create a schema + CREATE SCHEMA reviews; + GRANT USAGE ON SCHEMA reviews TO otelu; + + -- Product Review Service: create tables + CREATE TABLE reviews.productreviews ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + product_id VARCHAR(16) NOT NULL, + username VARCHAR(64) NOT NULL, + description VARCHAR(1024), + score NUMERIC(2,1) NOT NULL + ); + + -- Product Review Service: create index for product_id lookups + CREATE INDEX product_id_index ON reviews.productreviews (product_id); + + -- Product Review Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA reviews TO otelu; + + -- Product Review Service: add product review data + INSERT INTO reviews.productreviews (product_id, username, description, score) + VALUES + ('OLJCESPC7Z', 'stargazer_mike', 'Great entry-level telescope! Easy to set up and provides clear views of the moon and brighter planets. Highly recommend for new astronomers.', '4.5'), + ('OLJCESPC7Z', 'nightskylover', 'For the price, this Explorascope delivers excellent performance. I was able to see Jupiter''s moons clearly. A fantastic purchase for casual viewing.', '4.0'), + ('OLJCESPC7Z', 'beginner_astro', 'A bit tricky to get used to the manual controls, but once you do, it''s very rewarding. Saw the Orion Nebula for the first time! Good value.', '3.5'), + ('OLJCESPC7Z', 'celestial_explorer', 'Perfect for camping trips. It''s lightweight and portable, making it easy to take anywhere. The views are surprisingly good for its size.', '4.0'), + ('OLJCESPC7Z', 'telescope_fan', 'Not the most powerful scope, but it''s great for kids and beginners. My children love looking at the moon with it. A solid choice for family fun.', '3.0'), + + ('66VCHSJNUP', 'tech_astro', 'The StarSense app is revolutionary! It made finding celestial objects incredibly easy. This telescope is a game-changer for beginners.', '5.0'), + ('66VCHSJNUP', 'app_user', 'Amazing technology, the smartphone integration works flawlessly. I''ve never had so much fun exploring the night sky. Worth every penny.', '4.5'), + ('66VCHSJNUP', 'innovator_john', 'Setup was a breeze, and the tutorials in the app are very helpful. The views are crisp and clear. My only minor gripe is battery drain on the phone.', '4.0'), + ('66VCHSJNUP', 'clear_skies', 'Finally, a telescope that takes the guesswork out of stargazing. The real-time positioning is incredibly accurate. Highly recommended for anyone new to astronomy.', '5.0'), + ('66VCHSJNUP', 'gadget_geek', 'Fantastic product, the app truly guides you. It''s like having a personal astronomer with you. The optical quality is also very good.', '4.5'), + + ('1YMWWN1N4O', 'solar_viewer', 'Perfect for solar observations! The Solar Safe filter gives peace of mind. I used it for the last partial eclipse and it was fantastic.', '5.0'), + ('1YMWWN1N4O', 'eclipse_chaser', 'Compact and easy to carry, this telescope is ideal for eclipse events. The included backpack is a nice touch. Views of the sun are incredibly clear and safe.', '4.5'), + ('1YMWWN1N4O', 'travel_astro', 'Excellent travel scope for solar viewing. The magnification is much better than binoculars for the sun. A must-have for any solar enthusiast.', '4.0'), + ('1YMWWN1N4O', 'sun_gazer', 'Very impressed with the safety features and clarity. Sharing the sun with family has never been easier or safer. Great value for a dedicated solar scope.', '5.0'), + ('1YMWWN1N4O', 'safe_viewer', 'The ISO compliant filter is reassuring. It''s a well-designed product for safe solar observation. Highly recommend for educational purposes too.', '4.5'), + + ('L9ECAV7KIM', 'clean_optics', 'This kit is a lifesaver for all my optics. The brush and wipes work perfectly without leaving any residue. My lenses have never been cleaner.', '5.0'), + ('L9ECAV7KIM', 'photog_pro', 'Essential for any photographer or telescope owner. It safely removes dust and fingerprints. A high-quality cleaning solution.', '4.5'), + ('L9ECAV7KIM', 'daily_cleaner', 'I use this on my binoculars, camera lenses, and even my phone screen. It''s very effective and gentle. A versatile cleaning kit.', '4.0'), + ('L9ECAV7KIM', 'tech_maintenance', 'Great value for money. The different cleaning options cover all needs. Keeps my expensive equipment in pristine condition.', '5.0'), + ('L9ECAV7KIM', 'sharp_view', 'Works as advertised, my telescope views are much clearer after using this. The fluid and cloth are excellent. Definitely recommend.', '4.5'), + + ('2ZYFJ3GM2N', 'bird_watcher', 'Incredible clarity and brightness, perfect for bird watching. The ED glass really makes a difference. I can spot the subtlest markings.', '5.0'), + ('2ZYFJ3GM2N', 'nature_lover', 'These binoculars are fantastic for nature observation. The close focus is a huge advantage for viewing nearby wildlife. Very comfortable to hold.', '4.5'), + ('2ZYFJ3GM2N', 'hiker_guy', 'Lightweight and durable, these are my go-to binoculars for hiking. The wide field of view is excellent. Highly recommend for outdoor enthusiasts.', '4.0'), + ('2ZYFJ3GM2N', 'stadium_fan', 'Took these to a game and had an amazing view of the action. They perform great in various lighting conditions. A solid all-around binocular.', '4.0'), + ('2ZYFJ3GM2N', 'outdoor_adventurer', 'Excellent build quality and optical performance. They feel robust and provide sharp images. A great investment for any outdoor activity.', '4.5'), + + ('0PUK6V6EV0', 'astro_photog', 'This imager is a fantastic step up for planetary photography. The color quality is superb. Easy to use with my existing telescope setup.', '5.0'), + ('0PUK6V6EV0', 'planet_shooter', 'Finally capturing stunning images of Saturn and Jupiter! The NexImage 10 makes it so accessible. Great for beginners in astrophotography.', '4.5'), + ('0PUK6V6EV0', 'imager_pro', 'Excellent resolution and color rendition for its price point. It''s a perfect solution for those looking to start imaging planets. Highly satisfied.', '4.0'), + ('0PUK6V6EV0', 'space_artist', 'The detail I can capture with this imager is incredible. It integrates well with various software. A must-have for serious planetary observers.', '5.0'), + ('0PUK6V6EV0', 'digital_sky', 'A solid choice for getting into solar system imaging. The setup was straightforward. Produces beautiful, vibrant planetary images.', '4.5'), + + ('LS4PSXUNUM', 'night_walker', 'The red light is perfect for preserving night vision during astronomy sessions. The hand warmer is an unexpected bonus. Very practical device.', '5.0'), + ('LS4PSXUNUM', 'star_party_goer', 'This flashlight is indispensable for star parties. The red mode is gentle on the eyes, and the power bank feature is super handy. Love it!', '4.5'), + ('LS4PSXUNUM', 'camper_chris', 'Rugged and versatile, this flashlight is great for camping and night walks. The hand warmer function is a game-changer on cold nights. Highly recommend.', '4.5'), + ('LS4PSXUNUM', 'emergency_kit', 'A fantastic multi-tool for my emergency kit. The red light is useful, and the power bank means I can charge my phone. Great design.', '4.0'), + ('LS4PSXUNUM', 'astro_accessory', 'Every astronomer needs one of these. The red light is essential, and the hand warmer and power bank make it incredibly useful. A top-tier accessory.', '5.0'), + + ('9SIQT8TOJO', 'deep_sky_master', 'The RASA V2 is a dream come true for deep-sky imaging. The f/2.2 speed drastically cuts down exposure times. My best astrophotography investment yet.', '5.0'), + ('9SIQT8TOJO', 'pro_astro', 'Unbelievable performance for wide-field astrophotography. The short focal length makes guiding less critical. Produces stunning, detailed images.', '5.0'), + ('9SIQT8TOJO', 'imaging_guru', 'This OTA is a beast! The fast optics mean more data in less time. If you''re serious about deep-sky imaging, this is the one.', '4.5'), + ('9SIQT8TOJO', 'advanced_scope', 'Worth every penny for the quality and speed it offers. My images have never been sharper or more vibrant. A truly professional piece of equipment.', '5.0'), + ('9SIQT8TOJO', 'precision_optics', 'The engineering behind this RASA is exceptional. It''s incredibly efficient for capturing faint objects. A high-end choice for dedicated imagers.', '4.5'), + + ('6E92ZMYYFZ', 'solar_safety', 'Essential for safe solar viewing with my 8-inch telescope. The Velcro straps ensure it stays securely in place. Peace of mind during solar observations.', '5.0'), + ('6E92ZMYYFZ', 'telescope_upgrade', 'This EclipSmart filter is a perfect addition to my setup. The ISO compliance is crucial. Highly recommend for anyone looking to view the sun safely.', '4.5'), + ('6E92ZMYYFZ', 'safe_sun_gazer', 'Easy to attach and provides crystal clear, safe views of the sun. The build quality is excellent. A must-have accessory for solar enthusiasts.', '5.0'), + ('6E92ZMYYFZ', 'filter_fan', 'Works perfectly with my 8-inch scope. No more worries about accidental dislodgement. Great product for protecting your eyes and equipment.', '4.5'), + ('6E92ZMYYFZ', 'eclipse_ready', 'Bought this for the upcoming eclipse, and it fits perfectly. Tested it out, and the views are fantastic and safe. Very happy with this purchase.', '5.0'), + + ('HQTGWGPNH4', 'history_buff', 'A fascinating glimpse into historical astronomical thought. The content is incredibly insightful. A must-read for anyone interested in the history of science.', '5.0'), + ('HQTGWGPNH4', 'bookworm_astro', 'Beautifully presented historical document. It''s amazing to see how comets were understood centuries ago. A valuable addition to any astronomy library.', '4.5'), + ('HQTGWGPNH4', 'ancient_texts', 'Such a unique and intriguing read. The historical context is captivating. It offers a different perspective on celestial events.', '4.0'), + ('HQTGWGPNH4', 'celestial_history', 'I love historical astronomy, and this book delivers. It''s well-researched and provides a window into past beliefs. Highly recommended for scholars.', '5.0'), + ('HQTGWGPNH4', 'rare_find', 'A truly special book for enthusiasts of astronomical history. The details about ancient astrologers are very interesting. Great for a deeper understanding.', '4.5'); + + -- Product Catalog Service: create a schema + CREATE SCHEMA catalog; + GRANT USAGE ON SCHEMA catalog TO otelu; + + -- Product Catalog Service: create tables + CREATE TABLE catalog.products ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT, + picture TEXT, + price_currency_code TEXT NOT NULL, + price_units BIGINT NOT NULL, + price_nanos INT NOT NULL, + categories TEXT + ); + + -- Product Catalog Service: grant permission to schema + GRANT SELECT ON ALL TABLES IN SCHEMA catalog TO otelu; + + -- Product Catalog Service: add product data + INSERT INTO catalog.products (id, name, description, picture, price_currency_code, price_units, price_nanos, categories) + VALUES + ('OLJCESPC7Z', 'National Park Foundation Explorascope', 'The National Park Foundation''s (NPF) Explorascope 60AZ is a manual alt-azimuth, refractor telescope perfect for celestial viewing on the go. The NPF Explorascope 60 can view the planets, moon, star clusters and brighter deep sky objects like the Orion Nebula and Andromeda Galaxy.', 'NationalParkFoundationExplorascope.jpg', 'USD', 101, 960000000, 'telescopes'), + ('66VCHSJNUP', 'Starsense Explorer Refractor Telescope', 'The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app''s user-friendly interface and detailed tutorials. It''s like having your own personal tour guide of the night sky', 'StarsenseExplorer.jpg', 'USD', 349, 950000000, 'telescopes'), + ('1YMWWN1N4O', 'Eclipsmart Travel Refractor Telescope', 'Dedicated white-light solar scope for the observer on the go. The 50mm refracting solar scope uses Solar Safe, ISO compliant, full-aperture glass filter material to ensure the safest view of solar events. The kit comes complete with everything you need, including the dedicated travel solar scope, a Solar Safe finderscope, tripod, a high quality 20mm (18x) Kellner eyepiece and a nylon backpack to carry everything in. This Travel Solar Scope makes it easy to share the Sun as well as partial and total solar eclipses with the whole family and offers much higher magnifications than you would otherwise get using handheld solar viewers or binoculars.', 'EclipsmartTravelRefractorTelescope.jpg', 'USD', 129, 950000000, 'telescopes,travel'), + ('L9ECAV7KIM', 'Lens Cleaning Kit', 'Wipe away dust, dirt, fingerprints and other particles on your lenses to see clearly with the Lens Cleaning Kit. This cleaning kit works on all glass and optical surfaces, including telescopes, binoculars, spotting scopes, monoculars, microscopes, and even your camera lenses, computer screens, and mobile devices. The kit comes complete with a retractable lens brush to remove dust particles and dirt and two options to clean smudges and fingerprints off of your optics, pre-moistened lens wipes and a bottled lens cleaning fluid with soft cloth.', 'LensCleaningKit.jpg', 'USD', 21, 950000000, 'accessories'), + ('2ZYFJ3GM2N', 'Roof Binoculars', 'This versatile, all-around binocular is a great choice for the trail, the stadium, the arena, or just about anywhere you want a close-up view of the action without sacrificing brightness or detail. It''s an especially great companion for nature observation and bird watching, with ED glass that helps you spot the subtlest field markings and a close focus of just 6.5 feet.', 'RoofBinoculars.jpg', 'USD', 209, 950000000, 'binoculars'), + ('0PUK6V6EV0', 'Solar System Color Imager', 'You have your new telescope and have observed Saturn and Jupiter. Now you''re ready to take the next step and start imaging them. But where do you begin? The NexImage 10 Solar System Imager is the perfect solution.', 'SolarSystemColorImager.jpg', 'USD', 175, 0, 'accessories,telescopes'), + ('LS4PSXUNUM', 'Red Flashlight', 'This 3-in-1 device features a 3-mode red flashlight, a hand warmer, and a portable power bank for recharging your personal electronics on the go. Whether you use it to light the way at an astronomy star party, a night walk, or wildlife research, ThermoTorch 3 Astro Red''s rugged, IPX4-rated design will withstand your everyday activities.', 'RedFlashlight.jpg', 'USD', 57, 80000000, 'accessories,flashlights'), + ('9SIQT8TOJO', 'Optical Tube Assembly', 'Capturing impressive deep-sky astroimages is easier than ever with Rowe-Ackermann Schmidt Astrograph (RASA) V2, the perfect companion to today''s top DSLR or astronomical CCD cameras. This fast, wide-field f/2.2 system allows for shorter exposure times compared to traditional f/10 astroimaging, without sacrificing resolution. Because shorter sub-exposure times are possible, your equatorial mount won''t need to accurately track over extended periods. The short focal length also lessens equatorial tracking demands. In many cases, autoguiding will not be required.', 'OpticalTubeAssembly.jpg', 'USD', 3599, 0, 'accessories,telescopes,assembly'), + ('6E92ZMYYFZ', 'Solar Filter', 'Enhance your viewing experience with EclipSmart Solar Filter for 8" telescopes. With two Velcro straps and four self-adhesive Velcro pads for added safety, you can be assured that the solar filter cannot be accidentally knocked off and will provide Solar Safe, ISO compliant viewing.', 'SolarFilter.jpg', 'USD', 69, 950000000, 'accessories,telescopes'), + ('HQTGWGPNH4', 'The Comet Book', 'A 16th-century treatise on comets, created anonymously in Flanders (now northern France) and now held at the Universitätsbibliothek Kassel. Commonly known as The Comet Book (or Kometenbuch in German), its full title translates as "Comets and their General and Particular Meanings, According to Ptolomeé, Albumasar, Haly, Aliquind and other Astrologers". The image is from https://publicdomainreview.org/collection/the-comet-book, made available by the Universitätsbibliothek Kassel under a CC-BY SA 4.0 license (https://creativecommons.org/licenses/by-sa/4.0/)', 'TheCometBook.jpg', 'USD', 0, 990000000, 'books'); diff --git a/chart/examples/default/rendered/prometheus/clusterrole.yaml b/chart/examples/default/rendered/prometheus/clusterrole.yaml new file mode 100644 index 0000000..b56cd11 --- /dev/null +++ b/chart/examples/default/rendered/prometheus/clusterrole.yaml @@ -0,0 +1,50 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +rules: + - apiGroups: + - "" + resources: + - nodes + - nodes/proxy + - nodes/metrics + - services + - endpoints + - pods + - ingresses + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - "networking.k8s.io" + resources: + - ingresses/status + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "discovery.k8s.io" + resources: + - endpointslices + verbs: + - get + - list + - watch + - nonResourceURLs: + - "/metrics" + verbs: + - get diff --git a/chart/examples/default/rendered/prometheus/clusterrolebinding.yaml b/chart/examples/default/rendered/prometheus/clusterrolebinding.yaml new file mode 100644 index 0000000..34a3b6f --- /dev/null +++ b/chart/examples/default/rendered/prometheus/clusterrolebinding.yaml @@ -0,0 +1,21 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +subjects: + - kind: ServiceAccount + name: prometheus + namespace: default +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus diff --git a/chart/examples/default/rendered/prometheus/cm.yaml b/chart/examples/default/rendered/prometheus/cm.yaml new file mode 100644 index 0000000..d1816ba --- /dev/null +++ b/chart/examples/default/rendered/prometheus/cm.yaml @@ -0,0 +1,361 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/cm.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +data: + allow-snippet-annotations: "false" + alerting_rules.yml: | + {} + alerts: | + {} + prometheus.yml: | + global: + evaluation_interval: 1m + scrape_interval: 1m + scrape_timeout: 10s + storage: + tsdb: + out_of_order_time_window: 30m + otlp: + keep_identifying_resource_attributes: true + promote_resource_attributes: + - service.instance.id + - service.name + - service.namespace + - service.version + - cloud.availability_zone + - cloud.region + - deployment.environment.name + - k8s.cluster.name + - k8s.container.name + - k8s.cronjob.name + - k8s.daemonset.name + - k8s.deployment.name + - k8s.job.name + - k8s.namespace.name + - k8s.node.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.statefulset.name + - container.name + - host.name + - postgresql.database.name + - postgresql.schema.name + - postgresql.table.name + - postgresql.index.name + scrape_configs: + - job_name: kubernetes-api-servers + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: default;kubernetes;https + source_labels: + - __meta_kubernetes_namespace + - __meta_kubernetes_service_name + - __meta_kubernetes_endpoint_port_name + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes-cadvisor + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-pods + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-pods-slow + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-service-endpoints + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-service-endpoints-slow + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-services + honor_labels: true + kubernetes_sd_configs: + - role: service + metrics_path: /probe + params: + module: + - http_2xx + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + - source_labels: + - __address__ + target_label: __param_target + - replacement: blackbox + target_label: __address__ + - source_labels: + - __param_target + target_label: instance + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - source_labels: + - __meta_kubernetes_service_name + target_label: service + - job_name: prometheus + static_configs: + - targets: + - localhost:9090 + - job_name: prometheus-pushgateway + honor_labels: true + kubernetes_sd_configs: + - role: service + relabel_configs: + - action: keep + regex: pushgateway + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + rule_files: + - /etc/config/recording_rules.yml + - /etc/config/alerting_rules.yml + - /etc/config/rules + - /etc/config/alerts + recording_rules.yml: | + {} + rules: | + {} diff --git a/chart/examples/default/rendered/prometheus/deploy.yaml b/chart/examples/default/rendered/prometheus/deploy.yaml new file mode 100644 index 0000000..80f382a --- /dev/null +++ b/chart/examples/default/rendered/prometheus/deploy.yaml @@ -0,0 +1,95 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + strategy: + type: Recreate + rollingUpdate: null + selector: + matchLabels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + replicas: 1 + revisionHistoryLimit: 10 + template: + metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + spec: + enableServiceLinks: true + serviceAccountName: prometheus + containers: + + - name: prometheus-server + image: "quay.io/prometheus/prometheus:v3.9.0" + imagePullPolicy: "IfNotPresent" + args: + - --storage.tsdb.retention.time=7d + - --config.file=/etc/config/prometheus.yml + - --storage.tsdb.path=/data + - --web.console.libraries=/etc/prometheus/console_libraries + - --web.console.templates=/etc/prometheus/consoles + - --enable-feature=exemplar-storage + - --web.enable-otlp-receiver + ports: + - containerPort: 9090 + readinessProbe: + httpGet: + path: /-/ready + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 5 + timeoutSeconds: 4 + failureThreshold: 3 + successThreshold: 1 + livenessProbe: + httpGet: + path: /-/healthy + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 15 + timeoutSeconds: 10 + failureThreshold: 3 + successThreshold: 1 + resources: + limits: + memory: 400Mi + volumeMounts: + - name: config-volume + mountPath: /etc/config + - name: storage-volume + mountPath: /data + subPath: "" + dnsPolicy: ClusterFirst + securityContext: + fsGroup: 65534 + runAsGroup: 65534 + runAsNonRoot: true + runAsUser: 65534 + terminationGracePeriodSeconds: 300 + volumes: + - name: config-volume + configMap: + name: prometheus + - name: storage-volume + emptyDir: + {} diff --git a/chart/examples/default/rendered/prometheus/service.yaml b/chart/examples/default/rendered/prometheus/service.yaml new file mode 100644 index 0000000..f6bb01c --- /dev/null +++ b/chart/examples/default/rendered/prometheus/service.yaml @@ -0,0 +1,26 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + ports: + - name: http + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + sessionAffinity: None + type: "ClusterIP" diff --git a/chart/examples/default/rendered/prometheus/serviceaccount.yaml b/chart/examples/default/rendered/prometheus/serviceaccount.yaml new file mode 100644 index 0000000..2281f27 --- /dev/null +++ b/chart/examples/default/rendered/prometheus/serviceaccount.yaml @@ -0,0 +1,16 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default + annotations: + {} diff --git a/chart/examples/default/rendered/serviceaccount.yaml b/chart/examples/default/rendered/serviceaccount.yaml new file mode 100644 index 0000000..122e927 --- /dev/null +++ b/chart/examples/default/rendered/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: example + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm diff --git a/chart/examples/default/values.yaml b/chart/examples/default/values.yaml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/chart/examples/default/values.yaml @@ -0,0 +1 @@ + diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/component.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/component.yaml new file mode 100644 index 0000000..d183ee1 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/component.yaml @@ -0,0 +1,2248 @@ +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: ad +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: checkout +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: currency +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: email +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8013 + name: rpc + targetPort: 8013 + - port: 8016 + name: ofrep + targetPort: 8016 + - port: 4000 + name: tcp-service-0 + targetPort: 4000 + selector: + + opentelemetry.io/name: flagd +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend-proxy +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8081 + name: tcp-service + targetPort: 8081 + selector: + + opentelemetry.io/name: image-provider +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 9092 + name: plaintext + targetPort: 9092 + - port: 9093 + name: controller + targetPort: 9093 + selector: + + opentelemetry.io/name: kafka +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8000 + name: tcp-service + targetPort: 8000 + selector: + + opentelemetry.io/name: llm +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8089 + name: tcp-service + targetPort: 8089 + selector: + + opentelemetry.io/name: load-generator +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: payment +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 5432 + name: tcp-service + targetPort: 5432 + selector: + + opentelemetry.io/name: postgresql +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: product-catalog +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 3551 + name: tcp-service + targetPort: 3551 + selector: + + opentelemetry.io/name: product-reviews +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: quote +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: recommendation +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: shipping +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 6379 + name: valkey-cart + targetPort: 6379 + selector: + + opentelemetry.io/name: valkey-cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: accounting + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: accounting + template: + metadata: + labels: + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: accounting + image: 'ghcr.io/open-telemetry/demo:2.2.0-accounting' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: DB_CONNECTION_STRING + value: Host=postgresql;Username=otelu;Password=otelp;Database=otel + - name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED + value: "false" + resources: + limits: + memory: 120Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: ad + template: + metadata: + labels: + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: ad + image: 'ghcr.io/open-telemetry/demo:2.2.0-ad' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: AD_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_LOGS_EXPORTER + value: otlp + resources: + limits: + memory: 300Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: cart + template: + metadata: + labels: + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: cart + image: 'ghcr.io/open-telemetry/demo:2.2.0-cart' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CART_PORT + value: "8080" + - name: ASPNETCORE_URLS + value: http://*:$(CART_PORT) + - name: VALKEY_ADDR + value: valkey-cart:6379 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 160Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; + done; + image: busybox:latest + name: wait-for-valkey-cart + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: checkout + template: + metadata: + labels: + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: checkout + image: 'ghcr.io/open-telemetry/demo:2.2.0-checkout' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CHECKOUT_PORT + value: "8080" + - name: CART_ADDR + value: cart:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: EMAIL_ADDR + value: http://email:8080 + - name: PAYMENT_ADDR + value: payment:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 16MiB + resources: + limits: + memory: 20Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: currency + template: + metadata: + labels: + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: currency + image: 'ghcr.io/open-telemetry/demo:2.2.0-currency' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CURRENCY_PORT + value: "8080" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: '2.2.0' + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: email + template: + metadata: + labels: + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: email + image: 'ghcr.io/open-telemetry/demo:2.2.0-email' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: EMAIL_PORT + value: "8080" + - name: APP_ENV + value: production + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: flagd + template: + metadata: + labels: + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: flagd + image: 'ghcr.io/open-feature/flagd:v0.12.9' + imagePullPolicy: IfNotPresent + command: + - /flagd-build + - start + - --port + - "8013" + - --ofrep-port + - "8016" + - --uri + - file:./etc/flagd/demo.flagd.json + ports: + + - containerPort: 8013 + name: rpc + - containerPort: 8016 + name: ofrep + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: FLAGD_OTEL_COLLECTOR_URI + value: $(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 60MiB + resources: + limits: + memory: 75Mi + volumeMounts: + - name: config-rw + mountPath: /etc/flagd + - name: flagd-ui + image: 'ghcr.io/open-telemetry/demo:2.2.0-flagd-ui' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 4000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_UI_PORT + value: "4000" + - name: SECRET_KEY_BASE + value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw + - name: PHX_HOST + value: localhost + resources: + limits: + memory: 250Mi + volumeMounts: + - mountPath: /app/data + name: config-rw + initContainers: + - command: + - sh + - -c + - cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json + image: busybox + name: init-config + volumeMounts: + - mountPath: /config-ro + name: config-ro + - mountPath: /config-rw + name: config-rw + volumes: + - name: config-rw + emptyDir: {} + - configMap: + name: flagd-config + name: config-ro +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fraud-detection + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: fraud-detection + template: + metadata: + labels: + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: fraud-detection + image: 'ghcr.io/open-telemetry/demo:2.2.0-fraud-detection' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES + value: "true" + - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED + value: "true" + resources: + limits: + memory: 300Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend + template: + metadata: + labels: + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FRONTEND_PORT + value: "8080" + - name: PORT + value: $(FRONTEND_PORT) + - name: FRONTEND_ADDR + value: :8080 + - name: AD_ADDR + value: ad:8080 + - name: CART_ADDR + value: cart:8080 + - name: CHECKOUT_ADDR + value: checkout:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: PRODUCT_REVIEWS_ADDR + value: product-reviews:3551 + - name: RECOMMENDATION_ADDR + value: recommendation:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: ENV_PLATFORM + value: kubernetes + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: WEB_OTEL_SERVICE_NAME + value: frontend-web + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://localhost:8080/otlp-http/v1/traces + resources: + limits: + memory: 250Mi + securityContext: + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend-proxy + template: + metadata: + labels: + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + annotations: + io.opentelemetry.discovery.metrics/config: | + targets: + - endpoint: "http://`endpoint`" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: httpcheck + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend-proxy + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend-proxy' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: ENVOY_PORT + value: "8080" + - name: ENVOY_ADDR + value: 0.0.0.0 + - name: ENVOY_ADMIN_PORT + value: "10000" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_UI_HOST + value: flagd + - name: FLAGD_UI_PORT + value: "4000" + - name: FRONTEND_HOST + value: frontend + - name: FRONTEND_PORT + value: "8080" + - name: GRAFANA_HOST + value: grafana + - name: GRAFANA_PORT + value: "80" + - name: IMAGE_PROVIDER_HOST + value: image-provider + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: JAEGER_HOST + value: jaeger + - name: JAEGER_UI_PORT + value: "16686" + - name: LOCUST_WEB_HOST + value: load-generator + - name: LOCUST_WEB_PORT + value: "8089" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + resources: + limits: + memory: 65Mi + securityContext: + runAsGroup: 101 + runAsNonRoot: true + runAsUser: 101 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: image-provider + template: + metadata: + labels: + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + annotations: + io.opentelemetry.discovery.metrics/config: | + endpoint: "http://`endpoint`/status" + collection_interval: "10s" + timeout: "20s" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: nginx + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: image-provider + image: 'ghcr.io/open-telemetry/demo:2.2.0-image-provider' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8081 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + resources: + limits: + memory: 50Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: kafka + template: + metadata: + labels: + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: kafka + image: 'ghcr.io/open-telemetry/demo:2.2.0-kafka' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 9092 + name: plaintext + - containerPort: 9093 + name: controller + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: KAFKA_HEAP_OPTS + value: -Xmx400M -Xms400M + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092,CONTROLLER://:9093 + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: CONTROLLER + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: 1@kafka:9093 + resources: + limits: + memory: 700Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: llm + template: + metadata: + labels: + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: llm + image: 'ghcr.io/open-telemetry/demo:2.2.0-llm' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + null + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: load-generator + template: + metadata: + labels: + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: load-generator + image: 'ghcr.io/open-telemetry/demo:2.2.0-load-generator' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8089 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: LOCUST_WEB_HOST + value: 0.0.0.0 + - name: LOCUST_WEB_PORT + value: "8089" + - name: LOCUST_USERS + value: "10" + - name: LOCUST_SPAWN_RATE + value: "1" + - name: LOCUST_HOST + value: http://frontend-proxy:8080 + - name: LOCUST_HEADLESS + value: "false" + - name: LOCUST_AUTOSTART + value: "true" + - name: LOCUST_BROWSER_TRAFFIC_ENABLED + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_OFREP_PORT + value: "8016" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 1500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: payment + template: + metadata: + labels: + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: payment + image: 'ghcr.io/open-telemetry/demo:2.2.0-payment' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PAYMENT_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 140Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: postgresql + template: + metadata: + labels: + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + annotations: + io.opentelemetry.discovery.metrics/config: | + username: root + password: otel + metrics: + postgresql.blks_hit: + enabled: true + postgresql.blks_read: + enabled: true + postgresql.tup_fetched: + enabled: true + postgresql.tup_returned: + enabled: true + postgresql.tup_inserted: + enabled: true + postgresql.tup_updated: + enabled: true + postgresql.tup_deleted: + enabled: true + postgresql.deadlocks: + enabled: true + tls: + insecure: true + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: postgresql + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: postgresql + image: 'postgres:17.6' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 5432 + name: service + env: + - name: POSTGRES_USER + value: root + - name: POSTGRES_PASSWORD + value: otel + - name: POSTGRES_DB + value: otel + resources: + limits: + memory: 100Mi + volumeMounts: + - name: postgresql-init + mountPath: /docker-entrypoint-initdb.d + volumes: + - name: postgresql-init + configMap: + name: postgresql-init +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-catalog + template: + metadata: + labels: + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-catalog + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-catalog' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PRODUCT_CATALOG_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: GOMEMLIMIT + value: 16MiB + - name: DB_CONNECTION_STRING + value: postgres://otelu:otelp@postgresql/otel?sslmode=disable + - name: OTEL_SEMCONV_STABILITY_OPT_IN + value: database + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-reviews + template: + metadata: + labels: + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-reviews + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-reviews' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 3551 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: OPENAI_API_KEY + value: dummy + - name: LLM_MODEL + value: astronomy-llm + - name: LLM_HOST + value: llm + - name: LLM_PORT + value: "8000" + - name: LLM_BASE_URL + value: http://$(LLM_HOST):$(LLM_PORT)/v1 + - name: PRODUCT_REVIEWS_PORT + value: "3551" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: DB_CONNECTION_STRING + value: host=postgresql user=otelu password=otelp dbname=otel + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: quote + template: + metadata: + labels: + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: quote + image: 'ghcr.io/open-telemetry/demo:2.2.0-quote' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: QUOTE_PORT + value: "8080" + - name: OTEL_PHP_AUTOLOAD_ENABLED + value: "true" + - name: OTEL_PHP_INTERNAL_METRICS_ENABLED + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 40Mi + securityContext: + runAsGroup: 33 + runAsNonRoot: true + runAsUser: 33 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: recommendation + template: + metadata: + labels: + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: recommendation + image: 'ghcr.io/open-telemetry/demo:2.2.0-recommendation' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: RECOMMENDATION_PORT + value: "8080" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: shipping + template: + metadata: + labels: + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: shipping + image: 'ghcr.io/open-telemetry/demo:2.2.0-shipping' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: SHIPPING_PORT + value: "8080" + - name: QUOTE_ADDR + value: http://quote:8080 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: valkey-cart + template: + metadata: + labels: + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + annotations: + io.opentelemetry.discovery.metrics/config: | + username: valkey + collection_interval: 10s + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: redis + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: valkey-cart + image: 'valkey/valkey:9.0.1-alpine3.23' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 6379 + name: valkey-cart + env: + [] + resources: + limits: + memory: 20Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 999 + volumeMounts: + volumes: diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/flagd-config.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/flagd-config.yaml new file mode 100644 index 0000000..9591d49 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/flagd-config.yaml @@ -0,0 +1,167 @@ +--- +# Source: opentelemetry-demo/templates/flagd-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagd-config + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + demo.flagd.json: | + { + "$schema": "https://flagd.dev/schema/v0/flags.json", + "flags": { + "llmInaccurateResponse": { + "defaultVariant": "off", + "description": "LLM returns an inaccurate product summary for product ID L9ECAV7KIM", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "llmRateLimitError": { + "defaultVariant": "off", + "description": "LLM intermittently returns a rate limit error", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "productCatalogFailure": { + "description": "Fail product catalog service on a specific product", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "recommendationCacheFailure": { + "description": "Fail recommendation service cache", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adManualGc": { + "description": "Triggers full manual garbage collections in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adHighCpu": { + "description": "Triggers high cpu load in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adFailure": { + "description": "Fail ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "kafkaQueueProblems": { + "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "cartFailure": { + "description": "Fail cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "paymentFailure": { + "description": "Fail payment service charge requests n%", + "state": "ENABLED", + "variants": { + "100%": 1, + "90%": 0.95, + "75%": 0.75, + "50%": 0.5, + "25%": 0.25, + "10%": 0.1, + "off": 0 + }, + "defaultVariant": "off" + }, + "paymentUnreachable": { + "description": "Payment service is unavailable", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "loadGeneratorFloodHomepage": { + "description": "Flood the frontend with a large amount of requests.", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "imageSlowLoad": { + "description": "slow loading images in the frontend", + "state": "ENABLED", + "variants": { + "10sec": 10000, + "5sec": 5000, + "off": 0 + }, + "defaultVariant": "off" + }, + "failedReadinessProbe": { + "description": "readiness probe failure for cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "emailMemoryLeak": { + "description": "Memory leak in the email service.", + "state": "ENABLED", + "variants": { + "off": 0, + "1x": 1, + "10x": 10, + "100x": 100, + "1000x": 1000, + "10000x": 10000 + }, + "defaultVariant": "off" + } + } + } diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana-config.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana-config.yaml new file mode 100644 index 0000000..74047cc --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana-config.yaml @@ -0,0 +1,15609 @@ +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-alerting + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_alert: "1" +data: + + {} +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-nginx-metrics + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + NGINX-metrics.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of accepted client connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_accepted_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Accepted connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of handled connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 5, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_handled_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Connections handled", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of client requests", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_requests_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Total number of client requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The current number of nginx connections by state", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 19, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_current", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{state}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Number of connections by state", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "[Image-Provider] NGINX Metrics", + "uid": "6fb665e0-cb81-40a5-bd21-a9485c5477b4", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-apm-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + apm-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "APM dashboard for monitoring OpenTelemetry-based services. \n\nInstrument your applications using OpenTelemetry SDKs and send traces, metrics, and logs to Jaeger for traces, a Prometheus-compatible database for metrics, and OpenSearch for logs. This dashboard provides a centralized view of your application's health and performance. ", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 1, + "links": [], + "panels": [ + { + "description": "service.namespace=${service_namespace}, service.name=${service_name}, deployment.environment.name=${deployment_environment_name}", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 20, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "

\"OpenTelemetry Service ${service_namespace}/${service_name}

\n", + "mode": "html" + }, + "pluginVersion": "12.2.0", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Shows the timestamp of the latest metrics received in the past 24h.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#24292e", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 10, + "y": 0 + }, + "hideTimeOverride": true, + "id": 39, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^Time$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "timestamp(sum by (deployment_environment_name, service_namespace, service_name) (target_info{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}) or absent{})\n", + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "timeFrom": "now-24h", + "title": "Latest metrics received", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 15, + "panels": [], + "title": "Server RED Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration and https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 3 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP p95", + "range": true, + "refId": "HTTP P95", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP avg", + "range": true, + "refId": "HTTP AVG", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC p95", + "range": true, + "refId": "RPC P95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC avg", + "range": true, + "refId": "RPC AVG" + } + ], + "title": "Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP and RPC endpoints aggregation on the `http.server.request.duration` and `rpc.server.duration` metrics. \n\nErrors are identified by : \n* `http.response.status_code=~\"5..\"`\n* `rpc.grpc.status_code!=\"0\"`\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 100, + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 3 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "(\n (sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval])) * 100) \n / \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)\nor\n(\n 0\n * \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP 5xx errors", + "range": true, + "refId": "HTTP 5xx", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "((sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval])) * 100) / sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))\nor\n(0 * sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC errors", + "range": true, + "refId": "RPC Err" + } + ], + "title": "Error", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 10, + "y": 3 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP requests", + "range": true, + "refId": "HTTP RPS" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(sum(rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) * $__interval_ms / 1000", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC requests", + "range": true, + "refId": "RPC RPS" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 15, + "y": 3 + }, + "id": 40, + "options": { + "alertInstanceLabelFilter": "{service_name=\"$service_name\", service_namespace=\"$service_namespace\"}", + "alertName": "", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 20, + "showInactiveAlerts": false, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": false, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.2.0", + "title": "Alerts", + "type": "alertlist" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound HTTP operations of the service (aka HTTP endpoints) based on the `http.server.request.duration` metric.\n\nErrors are identified by `http.response.status_code=~\"5..\"`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + }, + { + "id": "custom.width", + "value": 219 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 21, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(http_server_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "HTTP Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound gRPC operations of the service (aka gRPC endpoints) based on the `rpc.server.request.duration` metric.\n\nErrors are identified by `rpc.grpc.status_code != 0` which make the panel specific to the gRPC protocol.\n\nhttps://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 27, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\nsum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "gRPC Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 28, + "panels": [], + "title": "Outbound Services and Databases", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP calls made by the service based on the `http.client.request.duration` metric.\n\nCalls broken done by remote `server.address` and by `http.request.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpclientrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 23, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound HTTP Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "DB calls made by the service based on the `db.client.operation.duration` metric.\n\nCalls broken down by `server.address` and `db.namespace`.\n\nSee https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No database call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 24, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n / \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n ) or (0 * \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, database) (\n label_join(\n rate(db_client_operation_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound Databases", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "DURATION": { + "timeField": "Time" + }, + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "database", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "database": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "database": "Database", + "database_operation": "Database Operation", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "gRPC calls made by the service based on the `rpc.client.request.duration` metric.\n\nSpecific to gRPC due to the usage of the `grpc.status.code` attribute to identify errors.\n\nCalls broken down by `server.address`, `rpc.service`, and `rpc.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#rpc-client\n\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 32, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound gRPC Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service Method" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 42, + "panels": [], + "title": "Infrastructure", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Host CPU" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Host Used Memory" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (host_name) (\n rate(system_cpu_time_seconds_total{service_name=\"\", state!=\"idle\"}[$__rate_interval])\n)\n* on(host_name) \ngroup by (host_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": " (\n (\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\", state=\"used\"}\n )\n /\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\"}\n )\n )\n * on(host_name) (\n group by (host_name) (\n target_info{service_name=\"${service_name}\"}\n )\n )\n )\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_pct" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_pct": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "host_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Host CPU", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_pct": "Host Used Memory", + "host_name": "Host", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pod CPU usage" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pod Memory Usage" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 43, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_pod_name) (\n rate(k8s_pod_cpu_time_seconds_total{}[$__rate_interval])\n)\n* on(k8s_pod_name) \ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nsum by (k8s_pod_name) (\n k8s_pod_memory_working_set_bytes{}\n)\n* on(k8s_pod_name)\ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_bytes" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "k8s_pod_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "service_instance_id": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Pod CPU usage", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_bytes": "Pod Memory Usage", + "Trend #memory_usage_pct": "Host Memory", + "k8s_pod_name": "Kubernetes Pod Name", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 25, + "panels": [], + "title": "Logs", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs of the service, filtered by `service.name`, `service.namespace`, and `deployment.environment.name`.\n\nTo explore the logs, open the menu clicking on the icon `⋮` of this panel and click on `Explore`.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No application logs", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "@timestamp" + }, + "properties": [ + { + "id": "custom.width", + "value": 226 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instrumentationScope.name" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 26, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" and resource.service.namespace=\"$service_namespace\" | fields @timestamp, severity.text, body, instrumentationScope.name\n", + "queryType": "PPL", + "refId": "B", + "timeField": "observedTimestamp" + } + ], + "title": "", + "transformations": [ + { + "id": "formatTime", + "options": { + "outputFormat": "YYYY-MM-DD HH:MM:ss.sss", + "timeField": "@timestamp", + "timezone": "browser", + "useTimezone": true + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "@timestamp": 0, + "body": 3, + "instrumentationScope.name": 2, + "severity.text": 1 + }, + "renameByName": { + "@timestamp": "Time", + "body": "Message", + "instrumentationScope.name": "Logger", + "severity.text": "Severity" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 29, + "panels": [], + "title": "Traces", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "description": "Traces containing a span emitted by the service", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No traces", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trace Service" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Span ID" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": false + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "deployment.environment.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.namespace" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 50 + }, + "id": 30, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "queryType": "search", + "refId": "A", + "service": "$service_name", + "tags": "service.namespace=\"$service_namespace\"" + } + ], + "title": "", + "type": "table" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [ + { + "allowCustomValue": false, + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "Jaeger", + "value": "webstore-traces" + }, + "description": "OpenTelemetry traces", + "label": "Traces", + "name": "jaeger_datasource", + "options": [], + "query": "jaeger", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "demo", + "value": "demo" + }, + "definition": "label_values(target_info,deployment_environment_name)", + "description": "Deployment environment (`production`, `staging`...).\nResource attribute `deployment.environment.name` via `target_info`.\nValue `<>` when the resource attribute `deployment.environment.name` is not set.", + "label": "Environment", + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info,deployment_environment_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "otel-demo", + "value": "otel-demo" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "description": "Service namespace.\nResource attribute `service.namespace` via `target_info`.\nValue `<>` when the resource attribute `service.namespace` is not set.", + "includeAll": false, + "label": "Namespace", + "name": "service_namespace", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "current": { + "text": "checkout", + "value": "checkout" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "description": "Service name.\nResource attribute `service.name` via `target_info`.", + "label": "Name", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "APM Dashboard (Jaeger, Prometheus, OpenSearch)", + "uid": "febljk0a32qyoa", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-demo-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + demo-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 2, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 21, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows RED metrics for the selected service, as generated by the spanmetrics connector in the OpenTelemetry Collector.\nIf the selected service emits logs, the logs will also be displayed.\nCustom metrics generated by some services are also displayed. \n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.5.2", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 14, + "panels": [], + "title": "Spanmetrics (RED metrics)", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 4 + }, + "id": 12, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_duration_milliseconds_count{service_name=\"${service}\"}[$__rate_interval]))", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 4 + }, + "id": 10, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service_name=\"${service}\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Error Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 4 + }, + "id": 2, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le, span_name))", + "legendFormat": "{{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Average Duration by Span Name", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 19, + "panels": [], + "title": "Application Log Records", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "left", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "count()" + }, + "properties": [ + { + "id": "custom.width", + "value": 90 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 0, + "y": 13 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "severity.text.keyword", + "id": "3", + "settings": { + "min_doc_count": "1", + "order": "desc", + "orderBy": "_count", + "size": "0" + }, + "type": "terms" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| stats count() by severity.text", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records by Severity", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Count": "", + "severity.text.keyword": "Severity" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto", + "wrapText": false + }, + "filterable": true, + "inspect": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "observedTimestamp" + }, + "properties": [] + }, + { + "matcher": { + "id": "byName", + "options": "body" + }, + "properties": [ + { + "id": "custom.width", + "value": 386 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 20, + "x": 4, + "y": 13 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "hide": false, + "metrics": [ + { + "id": "1", + "settings": { + "order": "desc", + "size": "100", + "useTimeRange": true + }, + "type": "raw_data" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| sort - observedTimestamp \n| head 100", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records (100 recent entries)", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "@timestamp": true + }, + "includeByName": {}, + "indexByName": { + "@timestamp": 1, + "attributes.data_stream.dataset": 4, + "attributes.data_stream.namespace": 5, + "attributes.data_stream.type": 6, + "attributes.productId": 7, + "attributes.quantity": 8, + "attributes.userId": 9, + "body": 3, + "instrumentationScope.name": 10, + "observedTimestamp": 0, + "resource.container.id": 11, + "resource.docker.cli.cobra.command_path": 12, + "resource.host.name": 13, + "resource.service.name": 14, + "resource.telemetry.sdk.language": 15, + "resource.telemetry.sdk.name": 16, + "resource.telemetry.sdk.version": 17, + "severity.number": 18, + "severity.text": 2, + "spanId": 19, + "traceId": 20 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 18, + "panels": [], + "title": "Application Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"system\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"user\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "B" + } + ], + "title": "Python services (CPU%)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "process_runtime_cpython_memory_bytes{type=\"rss\"}", + "legendFormat": "{{job}}", + "range": true, + "refId": "A" + } + ], + "title": "Python services (Memory)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(app_recommendations_counter_total{recommendation_type=\"catalog\"}[$__rate_interval])", + "interval": "2m", + "legendFormat": "recommendations", + "range": true, + "refId": "A" + } + ], + "title": "Recommendations Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 16, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(otel_trace_span_processor_spans{job=\"quote\"}[2m])*120", + "interval": "2m", + "legendFormat": "{{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Service batch span processor", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 23, + "panels": [], + "title": "Service Dependency", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 18, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 22, + "options": { + "edges": { + "mainStatUnit": "requests" + }, + "nodes": { + "arcs": [], + "mainStatUnit": "" + }, + "zoomMode": "cooperative" + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "queryType": "dependencyGraph", + "refId": "A" + } + ], + "title": "Service Dependency", + "type": "nodeGraph" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "frontend", + "value": "frontend" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "traces_span_metrics_duration_milliseconds_bucket", + "includeAll": false, + "label": "Service", + "name": "service", + "options": [], + "query": { + "query": "traces_span_metrics_duration_milliseconds_bucket", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "/.*service.name=\\\"([^\\\"]+)\\\".*/", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Demo Dashboard", + "uid": "W2gX2zHVk", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-exemplars-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + exemplars-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows the use of metric exemplars.\nExemplars can be used to look up a trace in Jaeger.\nOnly the most recent exemplars may still be available in Jaeger.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.6.1", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 4, + "panels": [], + "title": "GetCart Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "GetCart Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 5, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 GetCart", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart GetCart Latency with Exemplars", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 3, + "panels": [], + "title": "AddItem Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 6, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "AddItem Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 1, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 AddItem", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart AddItem Latency with Exemplars", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cart Service Exemplars", + "uid": "ce6sd46kfkglca", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-linux-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + linux-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "OpenTelemetry Collector hostmetrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 267, + "panels": [], + "title": "overview【 $host_name】", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_cpu_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", state!=\"idle\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Non available RAM memory\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$node_name\", host_name=~\"$host_name\", job=\"\", state=\"used\"}", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240, + "useBackend": false + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver#collecting-host-metrics-from-inside-a-container-linux-only", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 154, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "1 \n-\nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"}) \n/ \nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (5 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 155, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_5m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "sysload_5m", + "step": 240 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (15 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_15m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "sysload_15m", + "step": 240 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used Swap\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/pagingscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" })\n/\nsum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "system_cpu_logical_count{ k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" }", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 1 + }, + "id": 75, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_limit_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 1 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "FS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 3 + }, + "id": 15, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_uptime_seconds{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 266, + "panels": [], + "title": "Basic", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Wait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy IRQs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "super-light-yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"system\"}[$__rate_interval])) \n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "busy system", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{kk8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"user\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "busy user", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"wait\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Wait", + "range": true, + "refId": "busy wait", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\".*irq\"}[$__rate_interval])) \n/\nsum((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "range": true, + "refId": "busy irq", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state!~\".*irq\", state!=\"idle\", state!=\"user\", state!=\"wait\", state!=\"system\"}[$__rate_interval]))\n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Other", + "range": true, + "refId": "busy other", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum by(host_name) (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"idle\"}[$__rate_interval])) \n/ \non(host_name) group_left sum by (host_name)((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Idle", + "range": true, + "refId": "idle", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Available" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 6 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Available", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Free", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\"cached|buffered\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "Used", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Receive (-) / Transmit (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Rec.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 11, + "y": 6 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"receive\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Receive", + "range": true, + "refId": "receive", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"transmit\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Transmit", + "range": true, + "refId": "transmit", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Read (-) / Write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 17, + "y": 6 + }, + "id": 42, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"read\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Read", + "range": true, + "refId": "read", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"write\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Write", + "range": true, + "refId": "write", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 272, + "panels": [], + "title": "Details", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 14 + }, + "id": 270, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"transmit\"}[$__rate_interval]))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_bytes", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_errors" + } + ], + "title": "Network traffic", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "receive": { + "timeField": "Time" + }, + "receive_bytes": { + "timeField": "Time" + }, + "receive_dropped_packets": { + "timeField": "Time" + }, + "receive_errors": { + "timeField": "Time" + }, + "transmit": { + "timeField": "Time" + }, + "transmit_bytes": { + "timeField": "Time" + }, + "transmit_dropped_packets": { + "timeField": "Time" + }, + "transmit_errors": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "device", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #receive_bytes": 4, + "Trend #receive_dropped_packets": 5, + "Trend #receive_errors": 3, + "Trend #transmit_bytes": 1, + "Trend #transmit_dropped_packets": 2, + "Trend #transmit_errors": 6, + "device": 0 + }, + "renameByName": { + "Trend #receive": "Receive", + "Trend #receive_bytes": "Receive", + "Trend #receive_dropped_packets": "Receive dropped", + "Trend #receive_errors": "Transmit err", + "Trend #transmit": "Transmit", + "Trend #transmit_bytes": "Transmit", + "Trend #transmit_dropped_packets": "Transmit dropped", + "Trend #transmit_errors": "Receive err", + "device": "Interface" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used %" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "gauge", + "valueDisplayMode": "color" + } + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "min", + "value": 0 + }, + { + "id": "max", + "value": 1 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mount" + }, + "properties": [ + { + "id": "custom.width", + "value": 200 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 14 + }, + "id": 269, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "table", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "free", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "total" + } + ], + "title": "Disk usage", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "/oldroot": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "/var/lib": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #free": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #total": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "mountpoint": { + "aggregations": [], + "operation": "groupby" + } + } + } + }, + { + "id": "merge", + "options": {} + }, + { + "id": "calculateField", + "options": { + "alias": "used", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + }, + "operator": "-", + "right": { + "matcher": { + "id": "byName", + "options": "Value #free (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "Used %", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "used" + } + }, + "operator": "/", + "right": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Used %": "Used %", + "Value #free (lastNotNull)": "Free", + "Value #total (lastNotNull)": "Total", + "mountpoint": "Mount", + "used": "Used" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "Mount" + } + ] + } + } + ], + "type": "table" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "linux", + "opentelemetry" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "allowCustomValue": true, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes cluster. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes node. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s node", + "name": "node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "docker-desktop", + "value": "docker-desktop" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,host_name)", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 5, + "type": "query" + }, + { + "allowCustomValue": false, + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "hide": 2, + "label": "host count", + "name": "host_count", + "options": [], + "query": { + "qryType": 3, + "query": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "/{} (.*) .*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Linux", + "uid": "otel-demo-hostmetrics", + "version": 2 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-opentelemetry-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + opentelemetry-collector.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Provides information about the status of the OpenTelemetry Collector", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 12, + "links": [], + "liveNow": true, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 55, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + }, + { + "id": "custom.width", + "value": 84 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 17, + "x": 0, + "y": 1 + }, + "id": 57, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 17, + "y": 1 + }, + "id": 56, + "options": { + "alertInstanceLabelFilter": "deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"", + "alertName": "OpenTelemetryCollector", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 17, + "showInactiveAlerts": true, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": true, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.3.1", + "title": "Alerts", + "type": "alertlist" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 63, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Receivers", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 5 + }, + "id": 65, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 67, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 5 + }, + "id": 68, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 5 + }, + "id": 69, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 8 + }, + "id": 80, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Processors", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 8 + }, + "id": 88, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 8 + }, + "id": 89, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 8 + }, + "id": 90, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 8 + }, + "id": 91, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 8 + }, + "id": 92, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 8 + }, + "id": 93, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 11 + }, + "id": 87, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Exporters", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 11 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 11 + }, + "id": 82, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 11 + }, + "id": 76, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 11 + }, + "id": 77, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 11 + }, + "id": 79, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 53, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 54, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "CPU consumption rate of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 39 + }, + "id": 50, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "rate(otelcol_process_cpu_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval])", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "CPU Usage", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Resident memory consumed by the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 39 + }, + "id": 52, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_memory_rss_bytes{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Memory Usage (RSS)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Total uptime of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 3600 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 39 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Uptime", + "type": "stat" + } + ], + "title": "Collector", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 23, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 15 + }, + "id": 39, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Span Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 15 + }, + "id": 40, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 15 + }, + "id": 59, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 15 + }, + "id": 61, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 15 + }, + "id": 60, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 15 + }, + "id": 62, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by receiver and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "accepted_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "refused_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "failed_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "error_pct" + } + ], + "title": "Receivers", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "accepted_rate": { + "timeField": "Time" + }, + "error_pct": { + "timeField": "Time" + }, + "errors": { + "timeField": "Time" + }, + "failed_pct": { + "timeField": "Time" + }, + "failed_rate": { + "timeField": "Time" + }, + "refused_rate": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + }, + "spans_errors": { + "timeField": "Time" + }, + "spans_rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_receiver", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": { + "Trend #accepted_rate": 1, + "Trend #failed_pct": 4, + "Trend #failed_rate": 3, + "Trend #refused_rate": 2, + "signal_type_receiver": 0 + }, + "renameByName": { + "Trend #accepted_rate": "Accepted Rate", + "Trend #error_pct": "Error %", + "Trend #errors": "Error %", + "Trend #failed_pct": "Error %", + "Trend #failed_rate": "Failed Rate", + "Trend #refused_rate": "Refused Rate", + "Trend #rps": "Accepted Rate", + "Trend #spans_errors": "Error", + "Trend #spans_rps": "Rate", + "Value #A": "Spans Rate", + "Value #B": "Spans Failure %", + "Value #C": "Logs Rate", + "Value #D": "Logs Failure %", + "Value #E": "Metrics Rate", + "Value #F": "Metrics Failure %", + "receiver": "Receiver", + "signal_type_receiver": "Receiver" + } + } + } + ], + "type": "table" + } + ], + "title": "Receivers", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 48, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 95 + }, + "id": 81, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 95 + }, + "id": 75, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 95 + }, + "id": 83, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 95 + }, + "id": 84, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 95 + }, + "id": 85, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 95 + }, + "id": 86, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 1 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 49, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n (\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n -\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n )\n /\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "discarded_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "inbound_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "outbound_rate" + } + ], + "title": "Processors", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "discarded_pct": { + "timeField": "Time" + }, + "inbound_rate": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "otel_signal_processor", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #discarded_pct": 2, + "Trend #inbound_rate": 1, + "Trend #outbound_rate": 3, + "otel_signal_processor": 0 + }, + "renameByName": { + "Trend #discarded_pct": "Discarded %", + "Trend #inbound_rate": "Inbound Rate", + "Trend #outbound_rate": "Outbound Rate", + "otel_signal_processor": "Processor", + "otel_signal_receiver": "" + } + } + } + ], + "type": "table" + } + ], + "title": "Processors", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 47, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 96 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 96 + }, + "id": 44, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "spans_error" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 96 + }, + "id": 70, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 96 + }, + "id": 72, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 96 + }, + "id": 71, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 96 + }, + "id": 73, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by exporter and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 109 + }, + "id": 45, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rps" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n /\n otelcol_exporter_queue_capacity{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size_pct" + } + ], + "title": "Exporters", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "errors": { + "timeField": "Time" + }, + "queue_size": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_exporter", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #errors": "Errors %", + "Trend #queue_size": "Queue size", + "Trend #queue_size_pct": "Queue saturation %", + "Trend #rps": "Rate", + "signal_type_exporter": "Exporter" + } + } + } + ], + "type": "table" + } + ], + "title": "Exporters", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 46, + "panels": [ + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs from OpenTelemetry Collector filtered by dashboard variables", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 42, + "options": { + "dedupStrategy": "none", + "detailsMode": "sidebar", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showControls": false, + "showLabels": false, + "showLogAttributes": true, + "showTime": true, + "sortOrder": "Ascending", + "wrapLogMessage": false + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" | fields @timestamp, resource.service.name, resource.service.instance.id, resource.host.name, severity.text, body", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "OpenTelemetry Collector Logs", + "type": "logs" + } + ], + "title": "Logs", + "type": "row" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "opentelemetry", + "opentelemetry-collector" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "(?!grafanacloud-.*-alert-state-history|grafanacloud-.*-usage-insights).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "description": "Deployment environment (e.g. \"production\").\nResource attribute `deployment.environment.name` via `target_info`", + "includeAll": true, + "label": "Environment", + "multi": true, + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "description": "Resource attribute `k8s.cluster.name`", + "includeAll": true, + "label": "Kubernetes cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "`k8s.node.name`", + "includeAll": true, + "label": "K8s node", + "multi": true, + "name": "k8s_node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "description": "`host.name`", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "description": "`service.instance.id`", + "includeAll": true, + "label": "Instance", + "name": "service_instance_id", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "otelcol-contrib", + "value": "otelcol-contrib" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "description": "`service.name`", + "includeAll": true, + "label": "Service", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "browser", + "title": "OpenTelemetry Collector", + "uid": "otel-demo_otel-collector_dashboard", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-postgresql-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + postgresql-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Performance metrics for PostgreSQL instrumented with the OpenTelemetry Collector PostgreSQL receiver.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [ + { + "asDropdown": false, + "includeVars": true, + "keepTime": true, + "tags": [ + "postgres-integration" + ], + "title": "Integration dashboards", + "type": "dashboards" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 15, + "panels": [], + "title": "PostgreSQL Overview", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Queries per seconds. Queries being commits or rollbacks.\n", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 11, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_commits_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval])) + sum(irate(postgresql_rollbacks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "xact_commit" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 1800, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "QPS", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "See [pg_stat_database / `tup_fetched`](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 20, + "x": 4, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_fetched_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "fetched", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "fetched", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_returned_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "returned", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "returned", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_inserted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "inserted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "inserted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_updated_total{dpostgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "updated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "updated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_deleted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "deleted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deleted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Rows", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_allocated_total{host_name=~\"$host_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers allocated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "buffers_allocated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_writes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "", + "legendFormat": "buffers write {{source}}", + "range": true, + "refId": "buffers_write", + "useBackend": false + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_backend", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_backend", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_clean", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_clean", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_checkpoint_count_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "checkpoint {{type}}", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "checkpoint", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Buffers", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "deadlocks" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-red", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "deadlocks" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "conflicts", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_deadlocks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "deadlocks", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deadlocks", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "conflicts" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "deadlocks", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_conflicts_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "conflicts", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "conflicts-not-yet-implemented-in-otelcol", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "deadlocks" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Conflicts/Deadlocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "round(\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n +\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_read_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n 0.001\n)", + "format": "time_series", + "legendFormat": "{{postgresql_database_name}} - cache hit ratio", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Cache hit ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "postgresql_backends{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{postgresql_database_name}} - connections", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Number of active connections", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 41, + "tags": [ + "opentelemetry", + "postgresql" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count,k8s_cluster_name)", + "description": "When deploying PostgreSQL on Kubernetes, name of the Kubernetes cluster. \nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "", + "value": "" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "description": "When deploying on Kubernetes, name of the `StatefulSet` of the PostgreSQL deployment (e.g. `my-pg-cluster`).\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Statefulset", + "multi": true, + "name": "k8s_statefulset_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "description": "When deploying PostgreSQL on VMs, name on the host on which the database is deployed.\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "Host", + "multi": true, + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "includeAll": true, + "label": "Database", + "name": "db", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "PostgreSQL", + "uid": "xHhbQmdjA", + "version": 5 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-spanmetrics-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + spanmetrics-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Spanmetrics way of demo application view.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 26, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard uses RED metrics generated for all services by the spanmetrics connector configured in the OpenTelemetry Collector.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.4.0", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 24, + "panels": [], + "title": "Service Level - Throughput and Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,service_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - Service Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "super-light-blue", + "value": 1 + }, + { + "color": "#EAB839", + "value": 2 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 4, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum by (service_name) (rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean Rate over Range", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-reds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "red", + "value": 15 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 15, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (service_name))", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean ERROR Rate over Range", + "type": "bargauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 14, + "panels": [], + "title": "span_names Level - Throughput", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "bRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-BlYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "eRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-RdYlGr" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 663 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 667 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Service" + }, + "properties": [ + { + "id": "custom.width" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 22, + "interval": "5m", + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name)) ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name))", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Error Rate" + } + ], + "title": "Top 7 span_names and Errors (APM Table)", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "span_name" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true + }, + "indexByName": {}, + "renameByName": { + "Value #Error Rate": "Error Rate", + "Value #Rate": "Rate", + "service_name 1": "Rate in Service", + "service_name 2": "Error Rate in Service" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "bRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "eRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Error Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Error Rate": true, + "Rate": true, + "bRate": false + }, + "indexByName": { + "Error Rate": 4, + "Error Rate in Service": 6, + "Rate": 1, + "Rate in Service": 5, + "bRate": 2, + "eRate": 3, + "span_name": 0 + }, + "renameByName": { + "Rate in Service": "Service", + "bRate": "Rate", + "eRate": "Error Rate", + "span_name": "span_name Name" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Rate" + } + ] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 20, + "panels": [], + "title": "span_name Level - Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 25, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,span_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{span_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - span_name Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 10, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7, sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"${service}\", span_name=~\"$span_name\"}[5m]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"${service}\",span_name=~\"$span_name\"}[5m\n])))", + "instant": true, + "interval": "", + "legendFormat": "{{span_name}} [{{service_name}}]", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Highest Endpoint Latencies Mean Over Range ", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 16, + "interval": "5m", + "options": { + "legend": { + "calcs": [ + "mean", + "logmin", + "max", + "delta" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": true, + "expr": "topk(7,sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])))", + "instant": false, + "interval": "", + "legendFormat": "[{{service_name}}] {{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Top 7 Latencies Over Range ", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "includeAll": true, + "multi": true, + "name": "service", + "options": [], + "query": { + "query": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*service_name=\"(.*)\".*/", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "includeAll": true, + "multi": true, + "name": "span_name", + "options": [], + "query": { + "query": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*span_name=\"(.*)\".*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Spanmetrics Demo Dashboard", + "uid": "W2gX2zHVk48", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_datasource: "1" +data: + + default.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Prometheus + uid: webstore-metrics + type: prometheus + url: http://prometheus:9090 + editable: true + isDefault: true + jsonData: + # Align Prometheus data source time interval with the OTel SDKs' export interval (see OTEL_METRIC_EXPORT_INTERVAL) + timeInterval: "60s" + exemplarTraceIdDestinations: + - datasourceUid: webstore-traces + name: trace_id + + - url: http://localhost:8080/jaeger/ui/trace/$${__value.raw} + name: trace_id + urlDisplayLabel: View in Jaeger UI + jaeger.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Jaeger + uid: webstore-traces + type: jaeger + url: http://jaeger:16686/jaeger/ui + editable: true + isDefault: false + jsonData: + tracesToLogsV2: + datasourceUid: webstore-logs + spanStartTimeShift: "-20m" + spanEndTimeShift: "20m" + filterByTraceID: true + filterBySpanID: true + customQuery: true + query: traceId:"$${__trace.traceId}" AND spanId:"$${__span.spanId}" + opensearch.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + apiVersion: 1 + + datasources: + - name: OpenSearch + uid: webstore-logs + type: grafana-opensearch-datasource + url: http://opensearch:9200/ + access: proxy + editable: true + isDefault: false + jsonData: + database: otel-logs-* + flavor: opensearch + logLevelField: severity.text.keyword + logMessageField: body + pplEnabled: true + timeField: observedTimestamp + version: 3.4.0 diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrole.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrole.yaml new file mode 100644 index 0000000..ea5c00b --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrole.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrole.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-clusterrole +rules: + - apiGroups: [""] # "" indicates the core API group + resources: ["configmaps", "secrets"] + verbs: ["get", "watch", "list"] diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrolebinding.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrolebinding.yaml new file mode 100644 index 0000000..c53b4b6 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrolebinding.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: grafana-clusterrolebinding + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +subjects: + - kind: ServiceAccount + name: grafana + namespace: default +roleRef: + kind: ClusterRole + name: grafana-clusterrole + apiGroup: rbac.authorization.k8s.io diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap-dashboard-provider.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap-dashboard-provider.yaml new file mode 100644 index 0000000..64c09be --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap-dashboard-provider.yaml @@ -0,0 +1,27 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap-dashboard-provider.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-config-dashboards + namespace: default +data: + provider.yaml: |- + apiVersion: 1 + providers: + - name: 'sidecarProvider' + orgId: 1 + folder: '' + folderUid: '' + type: file + disableDeletion: false + allowUiUpdates: false + updateIntervalSeconds: 30 + options: + foldersFromFilesStructure: false + path: /tmp/dashboards diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap.yaml new file mode 100644 index 0000000..eacaa51 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/configmap.yaml @@ -0,0 +1,39 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +data: + + plugins: grafana-opensearch-datasource + grafana.ini: | + [analytics] + check_for_updates = true + [auth] + disable_login_form = true + [auth.anonymous] + enabled = true + org_name = Main Org. + org_role = Admin + [grafana_net] + url = https://grafana.net + [log] + mode = console + [paths] + data = /var/lib/grafana/ + logs = /var/log/grafana + plugins = /var/lib/grafana/plugins + provisioning = /etc/grafana/provisioning + [server] + domain = '' + root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana + serve_from_sub_path = true + [unified_storage] + index_path = /var/lib/grafana-search/bleve diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/deployment.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/deployment.yaml new file mode 100644 index 0000000..1432756 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/deployment.yaml @@ -0,0 +1,271 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + strategy: + type: RollingUpdate + template: + metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + annotations: + checksum/config: 4bc37edad15da2620fa7b48cb4d0af4ca30f6d344ac238d6aa702abb2d92c6ba + checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 + checksum/secret: bed677784356b2af7fb0d87455db21f077853059b594101a4f6532bfbd962a7f + kubectl.kubernetes.io/default-container: grafana + spec: + + serviceAccountName: grafana + automountServiceAccountToken: true + shareProcessNamespace: false + securityContext: + fsGroup: 472 + runAsGroup: 472 + runAsNonRoot: true + runAsUser: 472 + enableServiceLinks: true + containers: + - name: grafana-sc-alerts + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_alert" + - name: FOLDER + value: "/etc/grafana/provisioning/alerting" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/alerting/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: grafana-sc-dashboard + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_dashboard" + - name: FOLDER + value: "/tmp/dashboards" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/dashboards/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: grafana-sc-datasources + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_datasource" + - name: FOLDER + value: "/etc/grafana/provisioning/datasources" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/datasources/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + - name: grafana + image: "docker.io/grafana/grafana:12.3.1" + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: config + mountPath: "/etc/grafana/grafana.ini" + subPath: grafana.ini + - name: storage + mountPath: "/var/lib/grafana" + - name: search + mountPath: "/var/lib/grafana-search" + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: sc-dashboard-provider + mountPath: "/etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml" + subPath: provider.yaml + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + ports: + - name: grafana + containerPort: 3000 + protocol: TCP + - name: gossip-tcp + containerPort: 9094 + protocol: TCP + - name: gossip-udp + containerPort: 9094 + protocol: UDP + - name: profiling + containerPort: 6060 + protocol: TCP + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: GF_SECURITY_ADMIN_USER + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: GF_SECURITY_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: GF_INSTALL_PLUGINS + valueFrom: + configMapKeyRef: + name: grafana + key: plugins + - name: GF_PATHS_DATA + value: /var/lib/grafana/ + - name: GF_PATHS_LOGS + value: /var/log/grafana + - name: GF_PATHS_PLUGINS + value: /var/lib/grafana/plugins + - name: GF_PATHS_PROVISIONING + value: /etc/grafana/provisioning + - name: GF_UNIFIED_STORAGE_INDEX_PATH + value: /var/lib/grafana-search/bleve + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + divisor: "1" + resource: limits.memory + livenessProbe: + failureThreshold: 10 + httpGet: + path: /api/health + port: grafana + initialDelaySeconds: 60 + timeoutSeconds: 30 + readinessProbe: + httpGet: + path: /api/health + port: grafana + resources: + limits: + memory: 175Mi + volumes: + - name: config + configMap: + name: grafana + - name: storage + emptyDir: {} + - name: search + emptyDir: {} + - name: sc-alerts-volume + emptyDir: {} + - name: sc-dashboard-volume + emptyDir: {} + - name: sc-dashboard-provider + configMap: + name: grafana-config-dashboards + - name: sc-datasources-volume + emptyDir: {} diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/role.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/role.yaml new file mode 100644 index 0000000..c211542 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/role.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +rules: [] diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/rolebinding.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/rolebinding.yaml new file mode 100644 index 0000000..8951e99 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/rolebinding.yaml @@ -0,0 +1,20 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: grafana +subjects: +- kind: ServiceAccount + name: grafana + namespace: default diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/secret.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/secret.yaml new file mode 100644 index 0000000..48cb47d --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/secret.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + app.kubernetes.io/component: admin-secret +type: Opaque +data: + + admin-user: "YWRtaW4=" + admin-password: "YWRtaW4=" + ldap-toml: "" diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/service.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/service.yaml new file mode 100644 index 0000000..54fa194 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/service.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + type: ClusterIP + ports: + - name: service + port: 80 + protocol: TCP + targetPort: grafana + selector: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/serviceaccount.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/serviceaccount.yaml new file mode 100644 index 0000000..721b1a6 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/grafana/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +automountServiceAccountToken: false +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana + namespace: default diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-deploy.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-deploy.yaml new file mode 100644 index 0000000..35c11b5 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-deploy.yaml @@ -0,0 +1,124 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one + prometheus.io/port: "8888" + prometheus.io/scrape: "true" +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + template: + metadata: + labels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + annotations: + prometheus.io/port: "8888" + prometheus.io/scrape: "true" + spec: + + containers: + - env: + - name: MEMORY_MAX_TRACES + value: "25000" + - name: PROMETHEUS_ADDR + value: prometheus:9090 + - name: OTEL_COLLECTOR_HOST + value: otel-collector + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + - name: JAEGER_HOST + value: 0.0.0.0 + - name: JAEGER_GRPC_PORT + value: "4317" + - name: SPAN_STORAGE_TYPE + value: memory + + - name: COLLECTOR_ZIPKIN_HOST_PORT + value: :9411 + - name: JAEGER_DISABLED + value: "false" + - name: COLLECTOR_OTLP_ENABLED + value: "true" + securityContext: + {} + image: jaegertracing/jaeger:2.14.1 + imagePullPolicy: IfNotPresent + name: jaeger + args: + - "--config" + - "/etc/jaeger/user-config.yaml" + ports: + - containerPort: 5775 + protocol: UDP + - containerPort: 6831 + protocol: UDP + - containerPort: 6832 + protocol: UDP + - containerPort: 5778 + protocol: TCP + - containerPort: 16686 + protocol: TCP + - containerPort: 16685 + protocol: TCP + - containerPort: 9411 + protocol: TCP + - containerPort: 4317 + protocol: TCP + - containerPort: 4318 + protocol: TCP + - containerPort: 13133 + protocol: TCP + - containerPort: 8888 + protocol: TCP + livenessProbe: + failureThreshold: 5 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 1 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + resources: + limits: + memory: 600Mi + volumeMounts: + - name: user-config + mountPath: /etc/jaeger + securityContext: + fsGroup: 10001 + runAsGroup: 10001 + runAsUser: 10001 + serviceAccountName: jaeger + volumes: + - name: user-config + configMap: + name: user-config diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-sa.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-sa.yaml new file mode 100644 index 0000000..b670c99 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/jaeger-sa.yaml @@ -0,0 +1,14 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-sa.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +automountServiceAccountToken: true diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/service.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/service.yaml new file mode 100644 index 0000000..6174656 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/service.yaml @@ -0,0 +1,67 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +spec: + type: ClusterIP + ports: + # Agent Ports + - name: zk-compact-trft + port: 5775 + protocol: UDP + targetPort: 5775 + - name: config-rest + port: 5778 + targetPort: 5778 + - name: jg-compact-trft + port: 6831 + protocol: UDP + targetPort: 6831 + - name: jg-binary-trft + port: 6832 + protocol: UDP + targetPort: 6832 + # Collector Ports + - name: http-zipkin + port: 9411 + targetPort: 9411 + appProtocol: http + - name: grpc-http + port: 14250 + targetPort: 14250 + appProtocol: grpc + - name: c-tchan-trft + port: 14267 + targetPort: 14267 + - name: http-c-binary-trft + port: 14268 + targetPort: 14268 + appProtocol: http + - name: otlp-grpc + port: 4317 + targetPort: 4317 + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + appProtocol: http + # Query Ports + - name: http-query + port: 16686 + targetPort: 16686 + - name: grpc-query + port: 16685 + targetPort: 16685 + selector: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/user-config.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/user-config.yaml new file mode 100644 index 0000000..2f49362 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/jaeger/user-config.yaml @@ -0,0 +1,73 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/user-config.yaml +# Generates a config map from a file provided by user via `--set-file userconfig=` +apiVersion: v1 +kind: ConfigMap +metadata: + name: user-config + namespace: default + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm +data: + user-config.yaml: | + service: + extensions: [jaeger_storage, jaeger_query, healthcheckv2] + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [jaeger_storage_exporter] + telemetry: + resource: + service.name: jaeger + metrics: + level: detailed + readers: + - periodic: + interval: 10000 + timeout: 5000 + exporter: + otlp: + protocol: http/protobuf + endpoint: http://${env:OTEL_COLLECTOR_HOST}:${env:OTEL_COLLECTOR_PORT_HTTP} + insecure: true + logs: + level: info + extensions: + healthcheckv2: + use_v2: true + http: + endpoint: 0.0.0.0:13133 + jaeger_query: + storage: + traces: memory_backend + metrics: metrics_backend + base_path: /jaeger/ui + jaeger_storage: + backends: + memory_backend: + memory: + max_traces: ${env:MEMORY_MAX_TRACES} + metric_backends: + metrics_backend: + prometheus: + endpoint: "http://${env:PROMETHEUS_ADDR}" + normalize_calls: true + normalize_duration: true + + receivers: + otlp: + protocols: + grpc: + endpoint: ${env:JAEGER_HOST}:${env:JAEGER_GRPC_PORT} + + processors: + batch: + + exporters: + jaeger_storage_exporter: + trace_storage: memory_backend diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/configmap.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/configmap.yaml new file mode 100644 index 0000000..44bff5a --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/configmap.yaml @@ -0,0 +1,65 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: opensearch-config + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +data: + opensearch.yml: | + cluster.name: opensearch-cluster + + # Bind to all interfaces because we don't know what IP address Docker will assign to us. + network.host: 0.0.0.0 + + # Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. + # Implicitly done if ".singleNode" is set to "true". + # discovery.type: single-node + + # Start OpenSearch Security Demo Configuration + # WARNING: revise all the lines below before you go into production + # plugins: + # security: + # ssl: + # transport: + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # enforce_hostname_verification: false + # http: + # enabled: true + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # allow_unsafe_democertificates: true + # allow_default_init_securityindex: true + # authcz: + # admin_dn: + # - CN=kirk,OU=client,O=client,L=test,C=de + # audit.type: internal_opensearch + # enable_snapshot_restore_privilege: true + # check_snapshot_restore_write_privileges: true + # restapi: + # roles_enabled: ["all_access", "security_rest_api_access"] + # system_indices: + # enabled: true + # indices: + # [ + # ".opendistro-alerting-config", + # ".opendistro-alerting-alert*", + # ".opendistro-anomaly-results*", + # ".opendistro-anomaly-detector*", + # ".opendistro-anomaly-checkpoints", + # ".opendistro-anomaly-detection-state", + # ".opendistro-reports-*", + # ".opendistro-notifications-*", + # ".opendistro-notebooks", + # ".opendistro-asynchronous-search-response*", + # ] + ######## End OpenSearch Security Demo Configuration ######## diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/poddisruptionbudget.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/poddisruptionbudget.yaml new file mode 100644 index 0000000..4916d26 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/poddisruptionbudget.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: "opensearch-pdb" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/service.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/service.yaml new file mode 100644 index 0000000..4ac5038 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/service.yaml @@ -0,0 +1,59 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + {} +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + protocol: TCP + port: 9200 + - name: transport + protocol: TCP + port: 9300 + - name: metrics + protocol: TCP + port: 9600 +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch-headless + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + clusterIP: None # This is needed for statefulset hostnames like opensearch-0 to resolve + # Create endpoints also if the related pod isn't ready + publishNotReadyAddresses: true + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + port: 9200 + - name: transport + port: 9300 + - name: metrics + port: 9600 diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/statefulset.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/statefulset.yaml new file mode 100644 index 0000000..e71f96e --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opensearch/statefulset.yaml @@ -0,0 +1,154 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + majorVersion: "3" +spec: + serviceName: opensearch-headless + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + replicas: 1 + podManagementPolicy: Parallel + updateStrategy: + type: RollingUpdate + template: + metadata: + name: "opensearch" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + configchecksum: 17d9fa0bb5acd5c7f6e4ff053d35a4bba83d971ccee521315964c59a0d83160 + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + automountServiceAccountToken: false + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - example + - key: app.kubernetes.io/name + operator: In + values: + - opensearch + terminationGracePeriodSeconds: 120 + volumes: + - name: config + configMap: + name: opensearch-config + - emptyDir: {} + name: config-emptydir + enableServiceLinks: true + initContainers: + - name: configfile + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + command: + - sh + - -c + - | + #!/usr/bin/env bash + cp -r /tmp/configfolder/* /tmp/config/ + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + resources: + {} + volumeMounts: + - mountPath: /tmp/config/ + name: config-emptydir + - name: config + mountPath: /tmp/configfolder/opensearch.yml + subPath: opensearch.yml + containers: + - name: "opensearch" + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + readinessProbe: + failureThreshold: 3 + periodSeconds: 5 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 5 + periodSeconds: 10 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 9200 + - name: transport + containerPort: 9300 + - name: metrics + containerPort: 9600 + resources: + limits: + memory: 1100Mi + requests: + cpu: 1000m + memory: 100Mi + env: + - name: node.name + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: discovery.seed_hosts + value: "opensearch-cluster-master-headless" + - name: cluster.name + value: "demo-cluster" + - name: network.host + value: "0.0.0.0" + - name: OPENSEARCH_JAVA_OPTS + value: "-Xms400m -Xmx400m" + - name: node.roles + value: "master,ingest,data,remote_cluster_client," + - name: discovery.type + value: "single-node" + - name: bootstrap.memory_lock + value: "true" + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + volumeMounts: + - name: config-emptydir + mountPath: /usr/share/opensearch/config/opensearch.yml + subPath: opensearch.yml diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrole.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrole.yaml new file mode 100644 index 0000000..b599681 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrole.yaml @@ -0,0 +1,27 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +rules: + - apiGroups: [""] + resources: ["pods", "namespaces"] + verbs: ["get", "watch", "list"] + - apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch"] diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrolebinding.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrolebinding.yaml new file mode 100644 index 0000000..886802c --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/clusterrolebinding.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector +subjects: +- kind: ServiceAccount + name: otel-collector + namespace: default diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/configmap-agent.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/configmap-agent.yaml new file mode 100644 index 0000000..0cfde54 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/configmap-agent.yaml @@ -0,0 +1,214 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/configmap-agent.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +data: + relay: | + connectors: + spanmetrics: {} + exporters: + debug: {} + opensearch: + http: + endpoint: http://opensearch:9200 + tls: + insecure: true + logs_index: otel-logs + logs_index_time_format: yyyy-MM-dd + otlp/jaeger: + endpoint: jaeger:4317 + sending_queue: + batch: null + tls: + insecure: true + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + sending_queue: + batch: null + tls: + insecure: true + extensions: + health_check: + endpoint: ${env:MY_POD_IP}:13133 + k8s_observer: + auth_type: serviceAccount + node: ${env:K8S_NODE_NAME} + processors: + batch: {} + k8sattributes: + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.uid + - k8s.node.name + - k8s.pod.start_time + - k8s.deployment.name + - k8s.replicaset.name + - k8s.replicaset.uid + - k8s.daemonset.name + - k8s.daemonset.uid + - k8s.job.name + - k8s.job.uid + - k8s.container.name + - k8s.cronjob.name + - k8s.statefulset.name + - k8s.statefulset.uid + - container.image.tag + - container.image.name + - k8s.cluster.uid + - service.namespace + - service.name + - service.version + - service.instance.id + otel_annotations: true + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: connection + memory_limiter: + check_interval: 5s + limit_percentage: 80 + spike_limit_percentage: 25 + resource: + attributes: + - action: insert + from_attribute: k8s.pod.uid + key: service.instance.id + resourcedetection: + detectors: + - env + - system + transform: + error_mode: ignore + trace_statements: + - conditions: + - span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" + and span.attributes["http.route"] == nil + context: span + statements: + - set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], + "\\/api\\/cart") + - set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], + "\\/api\\/checkout") + - set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], + "\\/api\\/products\\/.*") + - set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], + "\\/api\\/recommendations") + - set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], + "\\/api\\/data.*") + - context: span + statements: + - set_semconv_span_name("1.37.0", "unsanitized_span_name") + receivers: + jaeger: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:14250 + thrift_compact: + endpoint: ${env:MY_POD_IP}:6831 + thrift_http: + endpoint: ${env:MY_POD_IP}:14268 + otlp: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:4317 + http: + cors: + allowed_origins: + - http://* + - https://* + endpoint: ${env:MY_POD_IP}:4318 + prometheus: + config: + scrape_configs: + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - ${env:MY_POD_IP}:8888 + receiver_creator/metrics: + discovery: + enabled: true + watch_observers: + - k8s_observer + zipkin: + endpoint: ${env:MY_POD_IP}:9411 + service: + extensions: + - health_check + - k8s_observer + pipelines: + logs: + exporters: + - opensearch + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + metrics: + exporters: + - otlphttp/prometheus + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + - spanmetrics + - receiver_creator/metrics + traces: + exporters: + - otlp/jaeger + - debug + - spanmetrics + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - transform + - batch + receivers: + - otlp + - jaeger + - zipkin + telemetry: + metrics: + level: detailed + readers: + - periodic: + exporter: + otlp: + endpoint: http://otel-collector:4318 + insecure: true + protocol: http/protobuf + interval: 10000 + timeout: 5000 diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/daemonset.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/daemonset.yaml new file mode 100644 index 0000000..d802694 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/daemonset.yaml @@ -0,0 +1,115 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + updateStrategy: + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: 49343b5969a1b3c7ae1808634c3424c0757c38de8fed17576b380e82cdc55bdd + + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + + spec: + + serviceAccountName: otel-collector + automountServiceAccountToken: true + securityContext: + {} + containers: + - name: opentelemetry-collector + args: + - --config=/conf/relay.yaml + securityContext: + {} + image: "otel/opentelemetry-collector-contrib:0.142.0" + imagePullPolicy: IfNotPresent + ports: + + - name: jaeger-compact + containerPort: 6831 + protocol: UDP + hostPort: 6831 + - name: jaeger-grpc + containerPort: 14250 + protocol: TCP + hostPort: 14250 + - name: jaeger-thrift + containerPort: 14268 + protocol: TCP + hostPort: 14268 + - name: metrics + containerPort: 8888 + protocol: TCP + - name: otlp + containerPort: 4317 + protocol: TCP + hostPort: 4317 + - name: otlp-http + containerPort: 4318 + protocol: TCP + hostPort: 4318 + - name: zipkin + containerPort: 9411 + protocol: TCP + hostPort: 9411 + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: K8S_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: GOMEMLIMIT + value: "160MiB" + livenessProbe: + httpGet: + path: / + port: 13133 + readinessProbe: + httpGet: + path: / + port: 13133 + resources: + limits: + memory: 200Mi + volumeMounts: + - mountPath: /conf + name: opentelemetry-collector-configmap + volumes: + - name: opentelemetry-collector-configmap + configMap: + name: otel-collector-agent + items: + - key: relay + path: relay.yaml + hostNetwork: false diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/service.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/service.yaml new file mode 100644 index 0000000..d57f891 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/service.yaml @@ -0,0 +1,54 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector + component: agent-collector +spec: + type: ClusterIP + ports: + + - name: jaeger-compact + port: 6831 + targetPort: 6831 + protocol: UDP + - name: jaeger-grpc + port: 14250 + targetPort: 14250 + protocol: TCP + - name: jaeger-thrift + port: 14268 + targetPort: 14268 + protocol: TCP + - name: metrics + port: 8888 + targetPort: 8888 + protocol: TCP + - name: otlp + port: 4317 + targetPort: 4317 + protocol: TCP + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP + - name: zipkin + port: 9411 + targetPort: 9411 + protocol: TCP + selector: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + internalTrafficPolicy: Local diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/serviceaccount.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/serviceaccount.yaml new file mode 100644 index 0000000..73ebb08 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/opentelemetry-collector/serviceaccount.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/posgresql-init-config.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/posgresql-init-config.yaml new file mode 100644 index 0000000..4c75905 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/posgresql-init-config.yaml @@ -0,0 +1,173 @@ +--- +# Source: opentelemetry-demo/templates/posgresql-init-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-init + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + init.sql: | + -- Copyright The OpenTelemetry Authors + -- SPDX-License-Identifier: Apache-2.0 + + CREATE USER otelu WITH PASSWORD 'otelp'; + + -- Accounting Service: create a schema + CREATE SCHEMA accounting; + GRANT USAGE ON SCHEMA accounting TO otelu; + + -- Accounting Service: create tables + CREATE TABLE accounting."order" ( + order_id TEXT PRIMARY KEY + ); + + CREATE TABLE accounting.shipping ( + shipping_tracking_id TEXT PRIMARY KEY, + shipping_cost_currency_code TEXT NOT NULL, + shipping_cost_units BIGINT NOT NULL, + shipping_cost_nanos INT NOT NULL, + street_address TEXT, + city TEXT, + state TEXT, + country TEXT, + zip_code TEXT, + order_id TEXT NOT NULL, + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + CREATE TABLE accounting.orderitem ( + item_cost_currency_code TEXT NOT NULL, + item_cost_units BIGINT NOT NULL, + item_cost_nanos INT NOT NULL, + product_id TEXT NOT NULL, + quantity INT NOT NULL, + order_id TEXT NOT NULL, + PRIMARY KEY (order_id, product_id), + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + -- Accounting Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA accounting TO otelu; + + -- Product Review Service: create a schema + CREATE SCHEMA reviews; + GRANT USAGE ON SCHEMA reviews TO otelu; + + -- Product Review Service: create tables + CREATE TABLE reviews.productreviews ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + product_id VARCHAR(16) NOT NULL, + username VARCHAR(64) NOT NULL, + description VARCHAR(1024), + score NUMERIC(2,1) NOT NULL + ); + + -- Product Review Service: create index for product_id lookups + CREATE INDEX product_id_index ON reviews.productreviews (product_id); + + -- Product Review Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA reviews TO otelu; + + -- Product Review Service: add product review data + INSERT INTO reviews.productreviews (product_id, username, description, score) + VALUES + ('OLJCESPC7Z', 'stargazer_mike', 'Great entry-level telescope! Easy to set up and provides clear views of the moon and brighter planets. Highly recommend for new astronomers.', '4.5'), + ('OLJCESPC7Z', 'nightskylover', 'For the price, this Explorascope delivers excellent performance. I was able to see Jupiter''s moons clearly. A fantastic purchase for casual viewing.', '4.0'), + ('OLJCESPC7Z', 'beginner_astro', 'A bit tricky to get used to the manual controls, but once you do, it''s very rewarding. Saw the Orion Nebula for the first time! Good value.', '3.5'), + ('OLJCESPC7Z', 'celestial_explorer', 'Perfect for camping trips. It''s lightweight and portable, making it easy to take anywhere. The views are surprisingly good for its size.', '4.0'), + ('OLJCESPC7Z', 'telescope_fan', 'Not the most powerful scope, but it''s great for kids and beginners. My children love looking at the moon with it. A solid choice for family fun.', '3.0'), + + ('66VCHSJNUP', 'tech_astro', 'The StarSense app is revolutionary! It made finding celestial objects incredibly easy. This telescope is a game-changer for beginners.', '5.0'), + ('66VCHSJNUP', 'app_user', 'Amazing technology, the smartphone integration works flawlessly. I''ve never had so much fun exploring the night sky. Worth every penny.', '4.5'), + ('66VCHSJNUP', 'innovator_john', 'Setup was a breeze, and the tutorials in the app are very helpful. The views are crisp and clear. My only minor gripe is battery drain on the phone.', '4.0'), + ('66VCHSJNUP', 'clear_skies', 'Finally, a telescope that takes the guesswork out of stargazing. The real-time positioning is incredibly accurate. Highly recommended for anyone new to astronomy.', '5.0'), + ('66VCHSJNUP', 'gadget_geek', 'Fantastic product, the app truly guides you. It''s like having a personal astronomer with you. The optical quality is also very good.', '4.5'), + + ('1YMWWN1N4O', 'solar_viewer', 'Perfect for solar observations! The Solar Safe filter gives peace of mind. I used it for the last partial eclipse and it was fantastic.', '5.0'), + ('1YMWWN1N4O', 'eclipse_chaser', 'Compact and easy to carry, this telescope is ideal for eclipse events. The included backpack is a nice touch. Views of the sun are incredibly clear and safe.', '4.5'), + ('1YMWWN1N4O', 'travel_astro', 'Excellent travel scope for solar viewing. The magnification is much better than binoculars for the sun. A must-have for any solar enthusiast.', '4.0'), + ('1YMWWN1N4O', 'sun_gazer', 'Very impressed with the safety features and clarity. Sharing the sun with family has never been easier or safer. Great value for a dedicated solar scope.', '5.0'), + ('1YMWWN1N4O', 'safe_viewer', 'The ISO compliant filter is reassuring. It''s a well-designed product for safe solar observation. Highly recommend for educational purposes too.', '4.5'), + + ('L9ECAV7KIM', 'clean_optics', 'This kit is a lifesaver for all my optics. The brush and wipes work perfectly without leaving any residue. My lenses have never been cleaner.', '5.0'), + ('L9ECAV7KIM', 'photog_pro', 'Essential for any photographer or telescope owner. It safely removes dust and fingerprints. A high-quality cleaning solution.', '4.5'), + ('L9ECAV7KIM', 'daily_cleaner', 'I use this on my binoculars, camera lenses, and even my phone screen. It''s very effective and gentle. A versatile cleaning kit.', '4.0'), + ('L9ECAV7KIM', 'tech_maintenance', 'Great value for money. The different cleaning options cover all needs. Keeps my expensive equipment in pristine condition.', '5.0'), + ('L9ECAV7KIM', 'sharp_view', 'Works as advertised, my telescope views are much clearer after using this. The fluid and cloth are excellent. Definitely recommend.', '4.5'), + + ('2ZYFJ3GM2N', 'bird_watcher', 'Incredible clarity and brightness, perfect for bird watching. The ED glass really makes a difference. I can spot the subtlest markings.', '5.0'), + ('2ZYFJ3GM2N', 'nature_lover', 'These binoculars are fantastic for nature observation. The close focus is a huge advantage for viewing nearby wildlife. Very comfortable to hold.', '4.5'), + ('2ZYFJ3GM2N', 'hiker_guy', 'Lightweight and durable, these are my go-to binoculars for hiking. The wide field of view is excellent. Highly recommend for outdoor enthusiasts.', '4.0'), + ('2ZYFJ3GM2N', 'stadium_fan', 'Took these to a game and had an amazing view of the action. They perform great in various lighting conditions. A solid all-around binocular.', '4.0'), + ('2ZYFJ3GM2N', 'outdoor_adventurer', 'Excellent build quality and optical performance. They feel robust and provide sharp images. A great investment for any outdoor activity.', '4.5'), + + ('0PUK6V6EV0', 'astro_photog', 'This imager is a fantastic step up for planetary photography. The color quality is superb. Easy to use with my existing telescope setup.', '5.0'), + ('0PUK6V6EV0', 'planet_shooter', 'Finally capturing stunning images of Saturn and Jupiter! The NexImage 10 makes it so accessible. Great for beginners in astrophotography.', '4.5'), + ('0PUK6V6EV0', 'imager_pro', 'Excellent resolution and color rendition for its price point. It''s a perfect solution for those looking to start imaging planets. Highly satisfied.', '4.0'), + ('0PUK6V6EV0', 'space_artist', 'The detail I can capture with this imager is incredible. It integrates well with various software. A must-have for serious planetary observers.', '5.0'), + ('0PUK6V6EV0', 'digital_sky', 'A solid choice for getting into solar system imaging. The setup was straightforward. Produces beautiful, vibrant planetary images.', '4.5'), + + ('LS4PSXUNUM', 'night_walker', 'The red light is perfect for preserving night vision during astronomy sessions. The hand warmer is an unexpected bonus. Very practical device.', '5.0'), + ('LS4PSXUNUM', 'star_party_goer', 'This flashlight is indispensable for star parties. The red mode is gentle on the eyes, and the power bank feature is super handy. Love it!', '4.5'), + ('LS4PSXUNUM', 'camper_chris', 'Rugged and versatile, this flashlight is great for camping and night walks. The hand warmer function is a game-changer on cold nights. Highly recommend.', '4.5'), + ('LS4PSXUNUM', 'emergency_kit', 'A fantastic multi-tool for my emergency kit. The red light is useful, and the power bank means I can charge my phone. Great design.', '4.0'), + ('LS4PSXUNUM', 'astro_accessory', 'Every astronomer needs one of these. The red light is essential, and the hand warmer and power bank make it incredibly useful. A top-tier accessory.', '5.0'), + + ('9SIQT8TOJO', 'deep_sky_master', 'The RASA V2 is a dream come true for deep-sky imaging. The f/2.2 speed drastically cuts down exposure times. My best astrophotography investment yet.', '5.0'), + ('9SIQT8TOJO', 'pro_astro', 'Unbelievable performance for wide-field astrophotography. The short focal length makes guiding less critical. Produces stunning, detailed images.', '5.0'), + ('9SIQT8TOJO', 'imaging_guru', 'This OTA is a beast! The fast optics mean more data in less time. If you''re serious about deep-sky imaging, this is the one.', '4.5'), + ('9SIQT8TOJO', 'advanced_scope', 'Worth every penny for the quality and speed it offers. My images have never been sharper or more vibrant. A truly professional piece of equipment.', '5.0'), + ('9SIQT8TOJO', 'precision_optics', 'The engineering behind this RASA is exceptional. It''s incredibly efficient for capturing faint objects. A high-end choice for dedicated imagers.', '4.5'), + + ('6E92ZMYYFZ', 'solar_safety', 'Essential for safe solar viewing with my 8-inch telescope. The Velcro straps ensure it stays securely in place. Peace of mind during solar observations.', '5.0'), + ('6E92ZMYYFZ', 'telescope_upgrade', 'This EclipSmart filter is a perfect addition to my setup. The ISO compliance is crucial. Highly recommend for anyone looking to view the sun safely.', '4.5'), + ('6E92ZMYYFZ', 'safe_sun_gazer', 'Easy to attach and provides crystal clear, safe views of the sun. The build quality is excellent. A must-have accessory for solar enthusiasts.', '5.0'), + ('6E92ZMYYFZ', 'filter_fan', 'Works perfectly with my 8-inch scope. No more worries about accidental dislodgement. Great product for protecting your eyes and equipment.', '4.5'), + ('6E92ZMYYFZ', 'eclipse_ready', 'Bought this for the upcoming eclipse, and it fits perfectly. Tested it out, and the views are fantastic and safe. Very happy with this purchase.', '5.0'), + + ('HQTGWGPNH4', 'history_buff', 'A fascinating glimpse into historical astronomical thought. The content is incredibly insightful. A must-read for anyone interested in the history of science.', '5.0'), + ('HQTGWGPNH4', 'bookworm_astro', 'Beautifully presented historical document. It''s amazing to see how comets were understood centuries ago. A valuable addition to any astronomy library.', '4.5'), + ('HQTGWGPNH4', 'ancient_texts', 'Such a unique and intriguing read. The historical context is captivating. It offers a different perspective on celestial events.', '4.0'), + ('HQTGWGPNH4', 'celestial_history', 'I love historical astronomy, and this book delivers. It''s well-researched and provides a window into past beliefs. Highly recommended for scholars.', '5.0'), + ('HQTGWGPNH4', 'rare_find', 'A truly special book for enthusiasts of astronomical history. The details about ancient astrologers are very interesting. Great for a deeper understanding.', '4.5'); + + -- Product Catalog Service: create a schema + CREATE SCHEMA catalog; + GRANT USAGE ON SCHEMA catalog TO otelu; + + -- Product Catalog Service: create tables + CREATE TABLE catalog.products ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT, + picture TEXT, + price_currency_code TEXT NOT NULL, + price_units BIGINT NOT NULL, + price_nanos INT NOT NULL, + categories TEXT + ); + + -- Product Catalog Service: grant permission to schema + GRANT SELECT ON ALL TABLES IN SCHEMA catalog TO otelu; + + -- Product Catalog Service: add product data + INSERT INTO catalog.products (id, name, description, picture, price_currency_code, price_units, price_nanos, categories) + VALUES + ('OLJCESPC7Z', 'National Park Foundation Explorascope', 'The National Park Foundation''s (NPF) Explorascope 60AZ is a manual alt-azimuth, refractor telescope perfect for celestial viewing on the go. The NPF Explorascope 60 can view the planets, moon, star clusters and brighter deep sky objects like the Orion Nebula and Andromeda Galaxy.', 'NationalParkFoundationExplorascope.jpg', 'USD', 101, 960000000, 'telescopes'), + ('66VCHSJNUP', 'Starsense Explorer Refractor Telescope', 'The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app''s user-friendly interface and detailed tutorials. It''s like having your own personal tour guide of the night sky', 'StarsenseExplorer.jpg', 'USD', 349, 950000000, 'telescopes'), + ('1YMWWN1N4O', 'Eclipsmart Travel Refractor Telescope', 'Dedicated white-light solar scope for the observer on the go. The 50mm refracting solar scope uses Solar Safe, ISO compliant, full-aperture glass filter material to ensure the safest view of solar events. The kit comes complete with everything you need, including the dedicated travel solar scope, a Solar Safe finderscope, tripod, a high quality 20mm (18x) Kellner eyepiece and a nylon backpack to carry everything in. This Travel Solar Scope makes it easy to share the Sun as well as partial and total solar eclipses with the whole family and offers much higher magnifications than you would otherwise get using handheld solar viewers or binoculars.', 'EclipsmartTravelRefractorTelescope.jpg', 'USD', 129, 950000000, 'telescopes,travel'), + ('L9ECAV7KIM', 'Lens Cleaning Kit', 'Wipe away dust, dirt, fingerprints and other particles on your lenses to see clearly with the Lens Cleaning Kit. This cleaning kit works on all glass and optical surfaces, including telescopes, binoculars, spotting scopes, monoculars, microscopes, and even your camera lenses, computer screens, and mobile devices. The kit comes complete with a retractable lens brush to remove dust particles and dirt and two options to clean smudges and fingerprints off of your optics, pre-moistened lens wipes and a bottled lens cleaning fluid with soft cloth.', 'LensCleaningKit.jpg', 'USD', 21, 950000000, 'accessories'), + ('2ZYFJ3GM2N', 'Roof Binoculars', 'This versatile, all-around binocular is a great choice for the trail, the stadium, the arena, or just about anywhere you want a close-up view of the action without sacrificing brightness or detail. It''s an especially great companion for nature observation and bird watching, with ED glass that helps you spot the subtlest field markings and a close focus of just 6.5 feet.', 'RoofBinoculars.jpg', 'USD', 209, 950000000, 'binoculars'), + ('0PUK6V6EV0', 'Solar System Color Imager', 'You have your new telescope and have observed Saturn and Jupiter. Now you''re ready to take the next step and start imaging them. But where do you begin? The NexImage 10 Solar System Imager is the perfect solution.', 'SolarSystemColorImager.jpg', 'USD', 175, 0, 'accessories,telescopes'), + ('LS4PSXUNUM', 'Red Flashlight', 'This 3-in-1 device features a 3-mode red flashlight, a hand warmer, and a portable power bank for recharging your personal electronics on the go. Whether you use it to light the way at an astronomy star party, a night walk, or wildlife research, ThermoTorch 3 Astro Red''s rugged, IPX4-rated design will withstand your everyday activities.', 'RedFlashlight.jpg', 'USD', 57, 80000000, 'accessories,flashlights'), + ('9SIQT8TOJO', 'Optical Tube Assembly', 'Capturing impressive deep-sky astroimages is easier than ever with Rowe-Ackermann Schmidt Astrograph (RASA) V2, the perfect companion to today''s top DSLR or astronomical CCD cameras. This fast, wide-field f/2.2 system allows for shorter exposure times compared to traditional f/10 astroimaging, without sacrificing resolution. Because shorter sub-exposure times are possible, your equatorial mount won''t need to accurately track over extended periods. The short focal length also lessens equatorial tracking demands. In many cases, autoguiding will not be required.', 'OpticalTubeAssembly.jpg', 'USD', 3599, 0, 'accessories,telescopes,assembly'), + ('6E92ZMYYFZ', 'Solar Filter', 'Enhance your viewing experience with EclipSmart Solar Filter for 8" telescopes. With two Velcro straps and four self-adhesive Velcro pads for added safety, you can be assured that the solar filter cannot be accidentally knocked off and will provide Solar Safe, ISO compliant viewing.', 'SolarFilter.jpg', 'USD', 69, 950000000, 'accessories,telescopes'), + ('HQTGWGPNH4', 'The Comet Book', 'A 16th-century treatise on comets, created anonymously in Flanders (now northern France) and now held at the Universitätsbibliothek Kassel. Commonly known as The Comet Book (or Kometenbuch in German), its full title translates as "Comets and their General and Particular Meanings, According to Ptolomeé, Albumasar, Haly, Aliquind and other Astrologers". The image is from https://publicdomainreview.org/collection/the-comet-book, made available by the Universitätsbibliothek Kassel under a CC-BY SA 4.0 license (https://creativecommons.org/licenses/by-sa/4.0/)', 'TheCometBook.jpg', 'USD', 0, 990000000, 'books'); diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrole.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrole.yaml new file mode 100644 index 0000000..b56cd11 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrole.yaml @@ -0,0 +1,50 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +rules: + - apiGroups: + - "" + resources: + - nodes + - nodes/proxy + - nodes/metrics + - services + - endpoints + - pods + - ingresses + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - "networking.k8s.io" + resources: + - ingresses/status + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "discovery.k8s.io" + resources: + - endpointslices + verbs: + - get + - list + - watch + - nonResourceURLs: + - "/metrics" + verbs: + - get diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrolebinding.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrolebinding.yaml new file mode 100644 index 0000000..34a3b6f --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/clusterrolebinding.yaml @@ -0,0 +1,21 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +subjects: + - kind: ServiceAccount + name: prometheus + namespace: default +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/cm.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/cm.yaml new file mode 100644 index 0000000..d1816ba --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/cm.yaml @@ -0,0 +1,361 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/cm.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +data: + allow-snippet-annotations: "false" + alerting_rules.yml: | + {} + alerts: | + {} + prometheus.yml: | + global: + evaluation_interval: 1m + scrape_interval: 1m + scrape_timeout: 10s + storage: + tsdb: + out_of_order_time_window: 30m + otlp: + keep_identifying_resource_attributes: true + promote_resource_attributes: + - service.instance.id + - service.name + - service.namespace + - service.version + - cloud.availability_zone + - cloud.region + - deployment.environment.name + - k8s.cluster.name + - k8s.container.name + - k8s.cronjob.name + - k8s.daemonset.name + - k8s.deployment.name + - k8s.job.name + - k8s.namespace.name + - k8s.node.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.statefulset.name + - container.name + - host.name + - postgresql.database.name + - postgresql.schema.name + - postgresql.table.name + - postgresql.index.name + scrape_configs: + - job_name: kubernetes-api-servers + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: default;kubernetes;https + source_labels: + - __meta_kubernetes_namespace + - __meta_kubernetes_service_name + - __meta_kubernetes_endpoint_port_name + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes-cadvisor + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-pods + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-pods-slow + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-service-endpoints + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-service-endpoints-slow + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-services + honor_labels: true + kubernetes_sd_configs: + - role: service + metrics_path: /probe + params: + module: + - http_2xx + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + - source_labels: + - __address__ + target_label: __param_target + - replacement: blackbox + target_label: __address__ + - source_labels: + - __param_target + target_label: instance + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - source_labels: + - __meta_kubernetes_service_name + target_label: service + - job_name: prometheus + static_configs: + - targets: + - localhost:9090 + - job_name: prometheus-pushgateway + honor_labels: true + kubernetes_sd_configs: + - role: service + relabel_configs: + - action: keep + regex: pushgateway + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + rule_files: + - /etc/config/recording_rules.yml + - /etc/config/alerting_rules.yml + - /etc/config/rules + - /etc/config/alerts + recording_rules.yml: | + {} + rules: | + {} diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/deploy.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/deploy.yaml new file mode 100644 index 0000000..80f382a --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/deploy.yaml @@ -0,0 +1,95 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + strategy: + type: Recreate + rollingUpdate: null + selector: + matchLabels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + replicas: 1 + revisionHistoryLimit: 10 + template: + metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + spec: + enableServiceLinks: true + serviceAccountName: prometheus + containers: + + - name: prometheus-server + image: "quay.io/prometheus/prometheus:v3.9.0" + imagePullPolicy: "IfNotPresent" + args: + - --storage.tsdb.retention.time=7d + - --config.file=/etc/config/prometheus.yml + - --storage.tsdb.path=/data + - --web.console.libraries=/etc/prometheus/console_libraries + - --web.console.templates=/etc/prometheus/consoles + - --enable-feature=exemplar-storage + - --web.enable-otlp-receiver + ports: + - containerPort: 9090 + readinessProbe: + httpGet: + path: /-/ready + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 5 + timeoutSeconds: 4 + failureThreshold: 3 + successThreshold: 1 + livenessProbe: + httpGet: + path: /-/healthy + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 15 + timeoutSeconds: 10 + failureThreshold: 3 + successThreshold: 1 + resources: + limits: + memory: 400Mi + volumeMounts: + - name: config-volume + mountPath: /etc/config + - name: storage-volume + mountPath: /data + subPath: "" + dnsPolicy: ClusterFirst + securityContext: + fsGroup: 65534 + runAsGroup: 65534 + runAsNonRoot: true + runAsUser: 65534 + terminationGracePeriodSeconds: 300 + volumes: + - name: config-volume + configMap: + name: prometheus + - name: storage-volume + emptyDir: + {} diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/service.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/service.yaml new file mode 100644 index 0000000..f6bb01c --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/service.yaml @@ -0,0 +1,26 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + ports: + - name: http + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + sessionAffinity: None + type: "ClusterIP" diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/serviceaccount.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/serviceaccount.yaml new file mode 100644 index 0000000..2281f27 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/prometheus/serviceaccount.yaml @@ -0,0 +1,16 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default + annotations: + {} diff --git a/chart/examples/disable-kubernetes-infra-monitoring/rendered/serviceaccount.yaml b/chart/examples/disable-kubernetes-infra-monitoring/rendered/serviceaccount.yaml new file mode 100644 index 0000000..122e927 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/rendered/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: example + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm diff --git a/chart/examples/disable-kubernetes-infra-monitoring/values.yaml b/chart/examples/disable-kubernetes-infra-monitoring/values.yaml new file mode 100644 index 0000000..a3693c7 --- /dev/null +++ b/chart/examples/disable-kubernetes-infra-monitoring/values.yaml @@ -0,0 +1,11 @@ +opentelemetry-collector: + presets: + logsCollection: + enabled: false + storeCheckpoints: false + hostMetrics: + enabled: false + kubeletMetrics: + enabled: false + clusterMetrics: + enabled: false diff --git a/chart/examples/public-hosted-ingress/rendered/component.yaml b/chart/examples/public-hosted-ingress/rendered/component.yaml new file mode 100644 index 0000000..d6ad323 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/component.yaml @@ -0,0 +1,2276 @@ +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: ad +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: checkout +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: currency +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: email +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8013 + name: rpc + targetPort: 8013 + - port: 8016 + name: ofrep + targetPort: 8016 + - port: 4000 + name: tcp-service-0 + targetPort: 4000 + selector: + + opentelemetry.io/name: flagd +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: frontend-proxy +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8081 + name: tcp-service + targetPort: 8081 + selector: + + opentelemetry.io/name: image-provider +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 9092 + name: plaintext + targetPort: 9092 + - port: 9093 + name: controller + targetPort: 9093 + selector: + + opentelemetry.io/name: kafka +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8000 + name: tcp-service + targetPort: 8000 + selector: + + opentelemetry.io/name: llm +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8089 + name: tcp-service + targetPort: 8089 + selector: + + opentelemetry.io/name: load-generator +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: payment +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 5432 + name: tcp-service + targetPort: 5432 + selector: + + opentelemetry.io/name: postgresql +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: product-catalog +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 3551 + name: tcp-service + targetPort: 3551 + selector: + + opentelemetry.io/name: product-reviews +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: quote +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: recommendation +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 8080 + name: tcp-service + targetPort: 8080 + selector: + + opentelemetry.io/name: shipping +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: v1 +kind: Service +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + type: ClusterIP + ports: + - port: 6379 + name: valkey-cart + targetPort: 6379 + selector: + + opentelemetry.io/name: valkey-cart +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: accounting + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: accounting + template: + metadata: + labels: + + opentelemetry.io/name: accounting + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: accounting + app.kubernetes.io/name: accounting + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: accounting + image: 'ghcr.io/open-telemetry/demo:2.2.0-accounting' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: DB_CONNECTION_STRING + value: Host=postgresql;Username=otelu;Password=otelp;Database=otel + - name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED + value: "false" + resources: + limits: + memory: 120Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: ad + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: ad + template: + metadata: + labels: + + opentelemetry.io/name: ad + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: ad + app.kubernetes.io/name: ad + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: ad + image: 'ghcr.io/open-telemetry/demo:2.2.0-ad' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: AD_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_LOGS_EXPORTER + value: otlp + resources: + limits: + memory: 300Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: cart + template: + metadata: + labels: + + opentelemetry.io/name: cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: cart + app.kubernetes.io/name: cart + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: cart + image: 'ghcr.io/open-telemetry/demo:2.2.0-cart' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CART_PORT + value: "8080" + - name: ASPNETCORE_URLS + value: http://*:$(CART_PORT) + - name: VALKEY_ADDR + value: valkey-cart:6379 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 160Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; + done; + image: busybox:latest + name: wait-for-valkey-cart + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: checkout + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: checkout + template: + metadata: + labels: + + opentelemetry.io/name: checkout + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: checkout + app.kubernetes.io/name: checkout + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: checkout + image: 'ghcr.io/open-telemetry/demo:2.2.0-checkout' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CHECKOUT_PORT + value: "8080" + - name: CART_ADDR + value: cart:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: EMAIL_ADDR + value: http://email:8080 + - name: PAYMENT_ADDR + value: payment:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 16MiB + resources: + limits: + memory: 20Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: currency + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: currency + template: + metadata: + labels: + + opentelemetry.io/name: currency + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: currency + app.kubernetes.io/name: currency + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: currency + image: 'ghcr.io/open-telemetry/demo:2.2.0-currency' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: CURRENCY_PORT + value: "8080" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: '2.2.0' + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: email + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: email + template: + metadata: + labels: + + opentelemetry.io/name: email + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: email + app.kubernetes.io/name: email + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: email + image: 'ghcr.io/open-telemetry/demo:2.2.0-email' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: EMAIL_PORT + value: "8080" + - name: APP_ENV + value: production + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: flagd + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: flagd + template: + metadata: + labels: + + opentelemetry.io/name: flagd + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: flagd + app.kubernetes.io/name: flagd + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: flagd + image: 'ghcr.io/open-feature/flagd:v0.12.9' + imagePullPolicy: IfNotPresent + command: + - /flagd-build + - start + - --port + - "8013" + - --ofrep-port + - "8016" + - --uri + - file:./etc/flagd/demo.flagd.json + ports: + + - containerPort: 8013 + name: rpc + - containerPort: 8016 + name: ofrep + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: FLAGD_OTEL_COLLECTOR_URI + value: $(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 60MiB + resources: + limits: + memory: 75Mi + volumeMounts: + - name: config-rw + mountPath: /etc/flagd + - name: flagd-ui + image: 'ghcr.io/open-telemetry/demo:2.2.0-flagd-ui' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 4000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_UI_PORT + value: "4000" + - name: SECRET_KEY_BASE + value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw + - name: PHX_HOST + value: localhost + resources: + limits: + memory: 250Mi + volumeMounts: + - mountPath: /app/data + name: config-rw + initContainers: + - command: + - sh + - -c + - cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json + image: busybox + name: init-config + volumeMounts: + - mountPath: /config-ro + name: config-ro + - mountPath: /config-rw + name: config-rw + volumes: + - name: config-rw + emptyDir: {} + - configMap: + name: flagd-config + name: config-ro +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: fraud-detection + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: fraud-detection + template: + metadata: + labels: + + opentelemetry.io/name: fraud-detection + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: fraud-detection + app.kubernetes.io/name: fraud-detection + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: fraud-detection + image: 'ghcr.io/open-telemetry/demo:2.2.0-fraud-detection' + imagePullPolicy: IfNotPresent + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES + value: "true" + - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED + value: "true" + resources: + limits: + memory: 300Mi + volumeMounts: + initContainers: + - command: + - sh + - -c + - until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done; + image: busybox:latest + name: wait-for-kafka + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend + template: + metadata: + labels: + + opentelemetry.io/name: frontend + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend + app.kubernetes.io/name: frontend + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FRONTEND_PORT + value: "8080" + - name: PORT + value: $(FRONTEND_PORT) + - name: FRONTEND_ADDR + value: :8080 + - name: AD_ADDR + value: ad:8080 + - name: CART_ADDR + value: cart:8080 + - name: CHECKOUT_ADDR + value: checkout:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: PRODUCT_REVIEWS_ADDR + value: product-reviews:3551 + - name: RECOMMENDATION_ADDR + value: recommendation:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: ENV_PLATFORM + value: kubernetes + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: WEB_OTEL_SERVICE_NAME + value: frontend-web + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: https://otel-demo-collector.example.com/v1/traces + resources: + limits: + memory: 250Mi + securityContext: + runAsGroup: 1001 + runAsNonRoot: true + runAsUser: 1001 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: frontend-proxy + template: + metadata: + labels: + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + annotations: + io.opentelemetry.discovery.metrics/config: | + targets: + - endpoint: "http://`endpoint`" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: httpcheck + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: frontend-proxy + image: 'ghcr.io/open-telemetry/demo:2.2.0-frontend-proxy' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: ENVOY_PORT + value: "8080" + - name: ENVOY_ADDR + value: 0.0.0.0 + - name: ENVOY_ADMIN_PORT + value: "10000" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_UI_HOST + value: flagd + - name: FLAGD_UI_PORT + value: "4000" + - name: FRONTEND_HOST + value: frontend + - name: FRONTEND_PORT + value: "8080" + - name: GRAFANA_HOST + value: grafana + - name: GRAFANA_PORT + value: "80" + - name: IMAGE_PROVIDER_HOST + value: image-provider + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: JAEGER_HOST + value: jaeger + - name: JAEGER_UI_PORT + value: "16686" + - name: LOCUST_WEB_HOST + value: load-generator + - name: LOCUST_WEB_PORT + value: "8089" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + resources: + limits: + memory: 65Mi + securityContext: + runAsGroup: 101 + runAsNonRoot: true + runAsUser: 101 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: image-provider + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: image-provider + template: + metadata: + labels: + + opentelemetry.io/name: image-provider + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: image-provider + app.kubernetes.io/name: image-provider + annotations: + io.opentelemetry.discovery.metrics/config: | + endpoint: "http://`endpoint`/status" + collection_interval: "10s" + timeout: "20s" + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: nginx + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: image-provider + image: 'ghcr.io/open-telemetry/demo:2.2.0-image-provider' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8081 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + resources: + limits: + memory: 50Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: kafka + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: kafka + template: + metadata: + labels: + + opentelemetry.io/name: kafka + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: kafka + app.kubernetes.io/name: kafka + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: kafka + image: 'ghcr.io/open-telemetry/demo:2.2.0-kafka' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 9092 + name: plaintext + - containerPort: 9093 + name: controller + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: KAFKA_HEAP_OPTS + value: -Xmx400M -Xms400M + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092,CONTROLLER://:9093 + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: CONTROLLER + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: 1@kafka:9093 + resources: + limits: + memory: 700Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: llm + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: llm + template: + metadata: + labels: + + opentelemetry.io/name: llm + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: llm + app.kubernetes.io/name: llm + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: llm + image: 'ghcr.io/open-telemetry/demo:2.2.0-llm' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8000 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + null + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: load-generator + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: load-generator + template: + metadata: + labels: + + opentelemetry.io/name: load-generator + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: load-generator + app.kubernetes.io/name: load-generator + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: load-generator + image: 'ghcr.io/open-telemetry/demo:2.2.0-load-generator' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8089 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: LOCUST_WEB_HOST + value: 0.0.0.0 + - name: LOCUST_WEB_PORT + value: "8089" + - name: LOCUST_USERS + value: "10" + - name: LOCUST_SPAWN_RATE + value: "1" + - name: LOCUST_HOST + value: http://frontend-proxy:8080 + - name: LOCUST_HEADLESS + value: "false" + - name: LOCUST_AUTOSTART + value: "true" + - name: LOCUST_BROWSER_TRAFFIC_ENABLED + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_OFREP_PORT + value: "8016" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 1500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: payment + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: payment + template: + metadata: + labels: + + opentelemetry.io/name: payment + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: payment + app.kubernetes.io/name: payment + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: payment + image: 'ghcr.io/open-telemetry/demo:2.2.0-payment' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PAYMENT_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 140Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: postgresql + template: + metadata: + labels: + + opentelemetry.io/name: postgresql + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: postgresql + app.kubernetes.io/name: postgresql + annotations: + io.opentelemetry.discovery.metrics/config: | + username: root + password: otel + metrics: + postgresql.blks_hit: + enabled: true + postgresql.blks_read: + enabled: true + postgresql.tup_fetched: + enabled: true + postgresql.tup_returned: + enabled: true + postgresql.tup_inserted: + enabled: true + postgresql.tup_updated: + enabled: true + postgresql.tup_deleted: + enabled: true + postgresql.deadlocks: + enabled: true + tls: + insecure: true + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: postgresql + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: postgresql + image: 'postgres:17.6' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 5432 + name: service + env: + - name: POSTGRES_USER + value: root + - name: POSTGRES_PASSWORD + value: otel + - name: POSTGRES_DB + value: otel + resources: + limits: + memory: 100Mi + volumeMounts: + - name: postgresql-init + mountPath: /docker-entrypoint-initdb.d + volumes: + - name: postgresql-init + configMap: + name: postgresql-init +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-catalog + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-catalog + template: + metadata: + labels: + + opentelemetry.io/name: product-catalog + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-catalog + app.kubernetes.io/name: product-catalog + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-catalog + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-catalog' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: PRODUCT_CATALOG_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: GOMEMLIMIT + value: 16MiB + - name: DB_CONNECTION_STRING + value: postgres://otelu:otelp@postgresql/otel?sslmode=disable + - name: OTEL_SEMCONV_STABILITY_OPT_IN + value: database + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: product-reviews + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: product-reviews + template: + metadata: + labels: + + opentelemetry.io/name: product-reviews + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: product-reviews + app.kubernetes.io/name: product-reviews + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: product-reviews + image: 'ghcr.io/open-telemetry/demo:2.2.0-product-reviews' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 3551 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: OPENAI_API_KEY + value: dummy + - name: LLM_MODEL + value: astronomy-llm + - name: LLM_HOST + value: llm + - name: LLM_PORT + value: "8000" + - name: LLM_BASE_URL + value: http://$(LLM_HOST):$(LLM_PORT)/v1 + - name: PRODUCT_REVIEWS_PORT + value: "3551" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: DB_CONNECTION_STRING + value: host=postgresql user=otelu password=otelp dbname=otel + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 100Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: quote + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: quote + template: + metadata: + labels: + + opentelemetry.io/name: quote + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: quote + app.kubernetes.io/name: quote + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: quote + image: 'ghcr.io/open-telemetry/demo:2.2.0-quote' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: QUOTE_PORT + value: "8080" + - name: OTEL_PHP_AUTOLOAD_ENABLED + value: "true" + - name: OTEL_PHP_INTERNAL_METRICS_ENABLED + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 40Mi + securityContext: + runAsGroup: 33 + runAsNonRoot: true + runAsUser: 33 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: recommendation + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: recommendation + template: + metadata: + labels: + + opentelemetry.io/name: recommendation + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: recommendation + app.kubernetes.io/name: recommendation + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: recommendation + image: 'ghcr.io/open-telemetry/demo:2.2.0-recommendation' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: RECOMMENDATION_PORT + value: "8080" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 500Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shipping + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: shipping + template: + metadata: + labels: + + opentelemetry.io/name: shipping + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: shipping + app.kubernetes.io/name: shipping + annotations: + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: shipping + image: 'ghcr.io/open-telemetry/demo:2.2.0-shipping' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 8080 + name: service + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.labels['app.kubernetes.io/component'] + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + - name: SHIPPING_PORT + value: "8080" + - name: QUOTE_ADDR + value: http://quote:8080 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: valkey-cart + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + + opentelemetry.io/name: valkey-cart + template: + metadata: + labels: + + opentelemetry.io/name: valkey-cart + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: valkey-cart + app.kubernetes.io/name: valkey-cart + annotations: + io.opentelemetry.discovery.metrics/config: | + username: valkey + collection_interval: 10s + io.opentelemetry.discovery.metrics/enabled: "true" + io.opentelemetry.discovery.metrics/scraper: redis + resource.opentelemetry.io/service.namespace: otel-demo + spec: + serviceAccountName: example + containers: + - name: valkey-cart + image: 'valkey/valkey:9.0.1-alpine3.23' + imagePullPolicy: IfNotPresent + ports: + + - containerPort: 6379 + name: valkey-cart + env: + [] + resources: + limits: + memory: 20Mi + securityContext: + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 999 + volumeMounts: + volumes: +--- +# Source: opentelemetry-demo/templates/component.yaml +apiVersion: "networking.k8s.io/v1" +kind: Ingress +metadata: + name: frontend-proxy + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + opentelemetry.io/name: frontend-proxy + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/component: frontend-proxy + app.kubernetes.io/name: frontend-proxy + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +spec: + rules: + - host: "otel-demo.example.com" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: frontend-proxy + port: + number: 8080 diff --git a/chart/examples/public-hosted-ingress/rendered/flagd-config.yaml b/chart/examples/public-hosted-ingress/rendered/flagd-config.yaml new file mode 100644 index 0000000..9591d49 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/flagd-config.yaml @@ -0,0 +1,167 @@ +--- +# Source: opentelemetry-demo/templates/flagd-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagd-config + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + demo.flagd.json: | + { + "$schema": "https://flagd.dev/schema/v0/flags.json", + "flags": { + "llmInaccurateResponse": { + "defaultVariant": "off", + "description": "LLM returns an inaccurate product summary for product ID L9ECAV7KIM", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "llmRateLimitError": { + "defaultVariant": "off", + "description": "LLM intermittently returns a rate limit error", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "productCatalogFailure": { + "description": "Fail product catalog service on a specific product", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "recommendationCacheFailure": { + "description": "Fail recommendation service cache", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adManualGc": { + "description": "Triggers full manual garbage collections in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adHighCpu": { + "description": "Triggers high cpu load in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adFailure": { + "description": "Fail ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "kafkaQueueProblems": { + "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "cartFailure": { + "description": "Fail cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "paymentFailure": { + "description": "Fail payment service charge requests n%", + "state": "ENABLED", + "variants": { + "100%": 1, + "90%": 0.95, + "75%": 0.75, + "50%": 0.5, + "25%": 0.25, + "10%": 0.1, + "off": 0 + }, + "defaultVariant": "off" + }, + "paymentUnreachable": { + "description": "Payment service is unavailable", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "loadGeneratorFloodHomepage": { + "description": "Flood the frontend with a large amount of requests.", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "imageSlowLoad": { + "description": "slow loading images in the frontend", + "state": "ENABLED", + "variants": { + "10sec": 10000, + "5sec": 5000, + "off": 0 + }, + "defaultVariant": "off" + }, + "failedReadinessProbe": { + "description": "readiness probe failure for cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "emailMemoryLeak": { + "description": "Memory leak in the email service.", + "state": "ENABLED", + "variants": { + "off": 0, + "1x": 1, + "10x": 10, + "100x": 100, + "1000x": 1000, + "10000x": 10000 + }, + "defaultVariant": "off" + } + } + } diff --git a/chart/examples/public-hosted-ingress/rendered/grafana-config.yaml b/chart/examples/public-hosted-ingress/rendered/grafana-config.yaml new file mode 100644 index 0000000..74047cc --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana-config.yaml @@ -0,0 +1,15609 @@ +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-alerting + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_alert: "1" +data: + + {} +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-nginx-metrics + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + NGINX-metrics.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of accepted client connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_accepted_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Accepted connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of handled connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 5, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_handled_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Connections handled", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of client requests", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_requests_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Total number of client requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The current number of nginx connections by state", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 19, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_current", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{state}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Number of connections by state", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "[Image-Provider] NGINX Metrics", + "uid": "6fb665e0-cb81-40a5-bd21-a9485c5477b4", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-apm-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + apm-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "APM dashboard for monitoring OpenTelemetry-based services. \n\nInstrument your applications using OpenTelemetry SDKs and send traces, metrics, and logs to Jaeger for traces, a Prometheus-compatible database for metrics, and OpenSearch for logs. This dashboard provides a centralized view of your application's health and performance. ", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 1, + "links": [], + "panels": [ + { + "description": "service.namespace=${service_namespace}, service.name=${service_name}, deployment.environment.name=${deployment_environment_name}", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 20, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "

\"OpenTelemetry Service ${service_namespace}/${service_name}

\n", + "mode": "html" + }, + "pluginVersion": "12.2.0", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Shows the timestamp of the latest metrics received in the past 24h.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#24292e", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 10, + "y": 0 + }, + "hideTimeOverride": true, + "id": 39, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^Time$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "timestamp(sum by (deployment_environment_name, service_namespace, service_name) (target_info{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}) or absent{})\n", + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "timeFrom": "now-24h", + "title": "Latest metrics received", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 15, + "panels": [], + "title": "Server RED Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration and https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 3 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP p95", + "range": true, + "refId": "HTTP P95", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP avg", + "range": true, + "refId": "HTTP AVG", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC p95", + "range": true, + "refId": "RPC P95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC avg", + "range": true, + "refId": "RPC AVG" + } + ], + "title": "Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP and RPC endpoints aggregation on the `http.server.request.duration` and `rpc.server.duration` metrics. \n\nErrors are identified by : \n* `http.response.status_code=~\"5..\"`\n* `rpc.grpc.status_code!=\"0\"`\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 100, + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 3 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "(\n (sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval])) * 100) \n / \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)\nor\n(\n 0\n * \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP 5xx errors", + "range": true, + "refId": "HTTP 5xx", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "((sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval])) * 100) / sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))\nor\n(0 * sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC errors", + "range": true, + "refId": "RPC Err" + } + ], + "title": "Error", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 10, + "y": 3 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP requests", + "range": true, + "refId": "HTTP RPS" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(sum(rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) * $__interval_ms / 1000", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC requests", + "range": true, + "refId": "RPC RPS" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 15, + "y": 3 + }, + "id": 40, + "options": { + "alertInstanceLabelFilter": "{service_name=\"$service_name\", service_namespace=\"$service_namespace\"}", + "alertName": "", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 20, + "showInactiveAlerts": false, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": false, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.2.0", + "title": "Alerts", + "type": "alertlist" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound HTTP operations of the service (aka HTTP endpoints) based on the `http.server.request.duration` metric.\n\nErrors are identified by `http.response.status_code=~\"5..\"`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + }, + { + "id": "custom.width", + "value": 219 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 21, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(http_server_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "HTTP Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound gRPC operations of the service (aka gRPC endpoints) based on the `rpc.server.request.duration` metric.\n\nErrors are identified by `rpc.grpc.status_code != 0` which make the panel specific to the gRPC protocol.\n\nhttps://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 27, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\nsum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "gRPC Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 28, + "panels": [], + "title": "Outbound Services and Databases", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP calls made by the service based on the `http.client.request.duration` metric.\n\nCalls broken done by remote `server.address` and by `http.request.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpclientrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 23, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound HTTP Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "DB calls made by the service based on the `db.client.operation.duration` metric.\n\nCalls broken down by `server.address` and `db.namespace`.\n\nSee https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No database call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 24, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n / \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n ) or (0 * \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, database) (\n label_join(\n rate(db_client_operation_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound Databases", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "DURATION": { + "timeField": "Time" + }, + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "database", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "database": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "database": "Database", + "database_operation": "Database Operation", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "gRPC calls made by the service based on the `rpc.client.request.duration` metric.\n\nSpecific to gRPC due to the usage of the `grpc.status.code` attribute to identify errors.\n\nCalls broken down by `server.address`, `rpc.service`, and `rpc.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#rpc-client\n\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 32, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound gRPC Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service Method" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 42, + "panels": [], + "title": "Infrastructure", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Host CPU" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Host Used Memory" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (host_name) (\n rate(system_cpu_time_seconds_total{service_name=\"\", state!=\"idle\"}[$__rate_interval])\n)\n* on(host_name) \ngroup by (host_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": " (\n (\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\", state=\"used\"}\n )\n /\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\"}\n )\n )\n * on(host_name) (\n group by (host_name) (\n target_info{service_name=\"${service_name}\"}\n )\n )\n )\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_pct" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_pct": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "host_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Host CPU", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_pct": "Host Used Memory", + "host_name": "Host", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pod CPU usage" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pod Memory Usage" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 43, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_pod_name) (\n rate(k8s_pod_cpu_time_seconds_total{}[$__rate_interval])\n)\n* on(k8s_pod_name) \ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nsum by (k8s_pod_name) (\n k8s_pod_memory_working_set_bytes{}\n)\n* on(k8s_pod_name)\ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_bytes" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "k8s_pod_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "service_instance_id": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Pod CPU usage", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_bytes": "Pod Memory Usage", + "Trend #memory_usage_pct": "Host Memory", + "k8s_pod_name": "Kubernetes Pod Name", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 25, + "panels": [], + "title": "Logs", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs of the service, filtered by `service.name`, `service.namespace`, and `deployment.environment.name`.\n\nTo explore the logs, open the menu clicking on the icon `⋮` of this panel and click on `Explore`.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No application logs", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "@timestamp" + }, + "properties": [ + { + "id": "custom.width", + "value": 226 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instrumentationScope.name" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 26, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" and resource.service.namespace=\"$service_namespace\" | fields @timestamp, severity.text, body, instrumentationScope.name\n", + "queryType": "PPL", + "refId": "B", + "timeField": "observedTimestamp" + } + ], + "title": "", + "transformations": [ + { + "id": "formatTime", + "options": { + "outputFormat": "YYYY-MM-DD HH:MM:ss.sss", + "timeField": "@timestamp", + "timezone": "browser", + "useTimezone": true + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "@timestamp": 0, + "body": 3, + "instrumentationScope.name": 2, + "severity.text": 1 + }, + "renameByName": { + "@timestamp": "Time", + "body": "Message", + "instrumentationScope.name": "Logger", + "severity.text": "Severity" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 29, + "panels": [], + "title": "Traces", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "description": "Traces containing a span emitted by the service", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No traces", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trace Service" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Span ID" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": false + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "deployment.environment.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.namespace" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 50 + }, + "id": 30, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "queryType": "search", + "refId": "A", + "service": "$service_name", + "tags": "service.namespace=\"$service_namespace\"" + } + ], + "title": "", + "type": "table" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [ + { + "allowCustomValue": false, + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "Jaeger", + "value": "webstore-traces" + }, + "description": "OpenTelemetry traces", + "label": "Traces", + "name": "jaeger_datasource", + "options": [], + "query": "jaeger", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "demo", + "value": "demo" + }, + "definition": "label_values(target_info,deployment_environment_name)", + "description": "Deployment environment (`production`, `staging`...).\nResource attribute `deployment.environment.name` via `target_info`.\nValue `<>` when the resource attribute `deployment.environment.name` is not set.", + "label": "Environment", + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info,deployment_environment_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "otel-demo", + "value": "otel-demo" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "description": "Service namespace.\nResource attribute `service.namespace` via `target_info`.\nValue `<>` when the resource attribute `service.namespace` is not set.", + "includeAll": false, + "label": "Namespace", + "name": "service_namespace", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "current": { + "text": "checkout", + "value": "checkout" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "description": "Service name.\nResource attribute `service.name` via `target_info`.", + "label": "Name", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "APM Dashboard (Jaeger, Prometheus, OpenSearch)", + "uid": "febljk0a32qyoa", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-demo-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + demo-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 2, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 21, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows RED metrics for the selected service, as generated by the spanmetrics connector in the OpenTelemetry Collector.\nIf the selected service emits logs, the logs will also be displayed.\nCustom metrics generated by some services are also displayed. \n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.5.2", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 14, + "panels": [], + "title": "Spanmetrics (RED metrics)", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 4 + }, + "id": 12, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_duration_milliseconds_count{service_name=\"${service}\"}[$__rate_interval]))", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 4 + }, + "id": 10, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service_name=\"${service}\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Error Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 4 + }, + "id": 2, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le, span_name))", + "legendFormat": "{{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Average Duration by Span Name", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 19, + "panels": [], + "title": "Application Log Records", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "left", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "count()" + }, + "properties": [ + { + "id": "custom.width", + "value": 90 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 0, + "y": 13 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "severity.text.keyword", + "id": "3", + "settings": { + "min_doc_count": "1", + "order": "desc", + "orderBy": "_count", + "size": "0" + }, + "type": "terms" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| stats count() by severity.text", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records by Severity", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Count": "", + "severity.text.keyword": "Severity" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto", + "wrapText": false + }, + "filterable": true, + "inspect": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "observedTimestamp" + }, + "properties": [] + }, + { + "matcher": { + "id": "byName", + "options": "body" + }, + "properties": [ + { + "id": "custom.width", + "value": 386 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 20, + "x": 4, + "y": 13 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "hide": false, + "metrics": [ + { + "id": "1", + "settings": { + "order": "desc", + "size": "100", + "useTimeRange": true + }, + "type": "raw_data" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| sort - observedTimestamp \n| head 100", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records (100 recent entries)", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "@timestamp": true + }, + "includeByName": {}, + "indexByName": { + "@timestamp": 1, + "attributes.data_stream.dataset": 4, + "attributes.data_stream.namespace": 5, + "attributes.data_stream.type": 6, + "attributes.productId": 7, + "attributes.quantity": 8, + "attributes.userId": 9, + "body": 3, + "instrumentationScope.name": 10, + "observedTimestamp": 0, + "resource.container.id": 11, + "resource.docker.cli.cobra.command_path": 12, + "resource.host.name": 13, + "resource.service.name": 14, + "resource.telemetry.sdk.language": 15, + "resource.telemetry.sdk.name": 16, + "resource.telemetry.sdk.version": 17, + "severity.number": 18, + "severity.text": 2, + "spanId": 19, + "traceId": 20 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 18, + "panels": [], + "title": "Application Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"system\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"user\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "B" + } + ], + "title": "Python services (CPU%)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "process_runtime_cpython_memory_bytes{type=\"rss\"}", + "legendFormat": "{{job}}", + "range": true, + "refId": "A" + } + ], + "title": "Python services (Memory)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(app_recommendations_counter_total{recommendation_type=\"catalog\"}[$__rate_interval])", + "interval": "2m", + "legendFormat": "recommendations", + "range": true, + "refId": "A" + } + ], + "title": "Recommendations Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 16, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(otel_trace_span_processor_spans{job=\"quote\"}[2m])*120", + "interval": "2m", + "legendFormat": "{{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Service batch span processor", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 23, + "panels": [], + "title": "Service Dependency", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 18, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 22, + "options": { + "edges": { + "mainStatUnit": "requests" + }, + "nodes": { + "arcs": [], + "mainStatUnit": "" + }, + "zoomMode": "cooperative" + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "queryType": "dependencyGraph", + "refId": "A" + } + ], + "title": "Service Dependency", + "type": "nodeGraph" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "frontend", + "value": "frontend" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "traces_span_metrics_duration_milliseconds_bucket", + "includeAll": false, + "label": "Service", + "name": "service", + "options": [], + "query": { + "query": "traces_span_metrics_duration_milliseconds_bucket", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "/.*service.name=\\\"([^\\\"]+)\\\".*/", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Demo Dashboard", + "uid": "W2gX2zHVk", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-exemplars-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + exemplars-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows the use of metric exemplars.\nExemplars can be used to look up a trace in Jaeger.\nOnly the most recent exemplars may still be available in Jaeger.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.6.1", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 4, + "panels": [], + "title": "GetCart Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "GetCart Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 5, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 GetCart", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart GetCart Latency with Exemplars", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 3, + "panels": [], + "title": "AddItem Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 6, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "AddItem Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 1, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 AddItem", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart AddItem Latency with Exemplars", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cart Service Exemplars", + "uid": "ce6sd46kfkglca", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-linux-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + linux-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "OpenTelemetry Collector hostmetrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 267, + "panels": [], + "title": "overview【 $host_name】", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_cpu_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", state!=\"idle\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Non available RAM memory\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$node_name\", host_name=~\"$host_name\", job=\"\", state=\"used\"}", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240, + "useBackend": false + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver#collecting-host-metrics-from-inside-a-container-linux-only", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 154, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "1 \n-\nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"}) \n/ \nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (5 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 155, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_5m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "sysload_5m", + "step": 240 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (15 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_15m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "sysload_15m", + "step": 240 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used Swap\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/pagingscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" })\n/\nsum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "system_cpu_logical_count{ k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" }", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 1 + }, + "id": 75, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_limit_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 1 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "FS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 3 + }, + "id": 15, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_uptime_seconds{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 266, + "panels": [], + "title": "Basic", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Wait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy IRQs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "super-light-yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"system\"}[$__rate_interval])) \n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "busy system", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{kk8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"user\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "busy user", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"wait\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Wait", + "range": true, + "refId": "busy wait", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\".*irq\"}[$__rate_interval])) \n/\nsum((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "range": true, + "refId": "busy irq", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state!~\".*irq\", state!=\"idle\", state!=\"user\", state!=\"wait\", state!=\"system\"}[$__rate_interval]))\n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Other", + "range": true, + "refId": "busy other", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum by(host_name) (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"idle\"}[$__rate_interval])) \n/ \non(host_name) group_left sum by (host_name)((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Idle", + "range": true, + "refId": "idle", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Available" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 6 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Available", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Free", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\"cached|buffered\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "Used", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Receive (-) / Transmit (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Rec.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 11, + "y": 6 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"receive\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Receive", + "range": true, + "refId": "receive", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"transmit\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Transmit", + "range": true, + "refId": "transmit", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Read (-) / Write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 17, + "y": 6 + }, + "id": 42, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"read\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Read", + "range": true, + "refId": "read", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"write\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Write", + "range": true, + "refId": "write", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 272, + "panels": [], + "title": "Details", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 14 + }, + "id": 270, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"transmit\"}[$__rate_interval]))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_bytes", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_errors" + } + ], + "title": "Network traffic", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "receive": { + "timeField": "Time" + }, + "receive_bytes": { + "timeField": "Time" + }, + "receive_dropped_packets": { + "timeField": "Time" + }, + "receive_errors": { + "timeField": "Time" + }, + "transmit": { + "timeField": "Time" + }, + "transmit_bytes": { + "timeField": "Time" + }, + "transmit_dropped_packets": { + "timeField": "Time" + }, + "transmit_errors": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "device", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #receive_bytes": 4, + "Trend #receive_dropped_packets": 5, + "Trend #receive_errors": 3, + "Trend #transmit_bytes": 1, + "Trend #transmit_dropped_packets": 2, + "Trend #transmit_errors": 6, + "device": 0 + }, + "renameByName": { + "Trend #receive": "Receive", + "Trend #receive_bytes": "Receive", + "Trend #receive_dropped_packets": "Receive dropped", + "Trend #receive_errors": "Transmit err", + "Trend #transmit": "Transmit", + "Trend #transmit_bytes": "Transmit", + "Trend #transmit_dropped_packets": "Transmit dropped", + "Trend #transmit_errors": "Receive err", + "device": "Interface" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used %" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "gauge", + "valueDisplayMode": "color" + } + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "min", + "value": 0 + }, + { + "id": "max", + "value": 1 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mount" + }, + "properties": [ + { + "id": "custom.width", + "value": 200 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 14 + }, + "id": 269, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "table", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "free", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "total" + } + ], + "title": "Disk usage", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "/oldroot": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "/var/lib": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #free": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #total": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "mountpoint": { + "aggregations": [], + "operation": "groupby" + } + } + } + }, + { + "id": "merge", + "options": {} + }, + { + "id": "calculateField", + "options": { + "alias": "used", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + }, + "operator": "-", + "right": { + "matcher": { + "id": "byName", + "options": "Value #free (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "Used %", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "used" + } + }, + "operator": "/", + "right": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Used %": "Used %", + "Value #free (lastNotNull)": "Free", + "Value #total (lastNotNull)": "Total", + "mountpoint": "Mount", + "used": "Used" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "Mount" + } + ] + } + } + ], + "type": "table" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "linux", + "opentelemetry" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "allowCustomValue": true, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes cluster. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes node. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s node", + "name": "node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "docker-desktop", + "value": "docker-desktop" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,host_name)", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 5, + "type": "query" + }, + { + "allowCustomValue": false, + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "hide": 2, + "label": "host count", + "name": "host_count", + "options": [], + "query": { + "qryType": 3, + "query": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "/{} (.*) .*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Linux", + "uid": "otel-demo-hostmetrics", + "version": 2 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-opentelemetry-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + opentelemetry-collector.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Provides information about the status of the OpenTelemetry Collector", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 12, + "links": [], + "liveNow": true, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 55, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + }, + { + "id": "custom.width", + "value": 84 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 17, + "x": 0, + "y": 1 + }, + "id": 57, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 17, + "y": 1 + }, + "id": 56, + "options": { + "alertInstanceLabelFilter": "deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"", + "alertName": "OpenTelemetryCollector", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 17, + "showInactiveAlerts": true, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": true, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.3.1", + "title": "Alerts", + "type": "alertlist" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 63, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Receivers", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 5 + }, + "id": 65, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 67, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 5 + }, + "id": 68, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 5 + }, + "id": 69, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 8 + }, + "id": 80, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Processors", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 8 + }, + "id": 88, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 8 + }, + "id": 89, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 8 + }, + "id": 90, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 8 + }, + "id": 91, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 8 + }, + "id": 92, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 8 + }, + "id": 93, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 11 + }, + "id": 87, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Exporters", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 11 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 11 + }, + "id": 82, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 11 + }, + "id": 76, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 11 + }, + "id": 77, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 11 + }, + "id": 79, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 53, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 54, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "CPU consumption rate of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 39 + }, + "id": 50, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "rate(otelcol_process_cpu_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval])", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "CPU Usage", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Resident memory consumed by the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 39 + }, + "id": 52, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_memory_rss_bytes{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Memory Usage (RSS)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Total uptime of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 3600 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 39 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Uptime", + "type": "stat" + } + ], + "title": "Collector", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 23, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 15 + }, + "id": 39, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Span Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 15 + }, + "id": 40, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 15 + }, + "id": 59, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 15 + }, + "id": 61, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 15 + }, + "id": 60, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 15 + }, + "id": 62, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by receiver and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "accepted_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "refused_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "failed_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "error_pct" + } + ], + "title": "Receivers", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "accepted_rate": { + "timeField": "Time" + }, + "error_pct": { + "timeField": "Time" + }, + "errors": { + "timeField": "Time" + }, + "failed_pct": { + "timeField": "Time" + }, + "failed_rate": { + "timeField": "Time" + }, + "refused_rate": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + }, + "spans_errors": { + "timeField": "Time" + }, + "spans_rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_receiver", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": { + "Trend #accepted_rate": 1, + "Trend #failed_pct": 4, + "Trend #failed_rate": 3, + "Trend #refused_rate": 2, + "signal_type_receiver": 0 + }, + "renameByName": { + "Trend #accepted_rate": "Accepted Rate", + "Trend #error_pct": "Error %", + "Trend #errors": "Error %", + "Trend #failed_pct": "Error %", + "Trend #failed_rate": "Failed Rate", + "Trend #refused_rate": "Refused Rate", + "Trend #rps": "Accepted Rate", + "Trend #spans_errors": "Error", + "Trend #spans_rps": "Rate", + "Value #A": "Spans Rate", + "Value #B": "Spans Failure %", + "Value #C": "Logs Rate", + "Value #D": "Logs Failure %", + "Value #E": "Metrics Rate", + "Value #F": "Metrics Failure %", + "receiver": "Receiver", + "signal_type_receiver": "Receiver" + } + } + } + ], + "type": "table" + } + ], + "title": "Receivers", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 48, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 95 + }, + "id": 81, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 95 + }, + "id": 75, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 95 + }, + "id": 83, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 95 + }, + "id": 84, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 95 + }, + "id": 85, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 95 + }, + "id": 86, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 1 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 49, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n (\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n -\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n )\n /\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "discarded_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "inbound_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "outbound_rate" + } + ], + "title": "Processors", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "discarded_pct": { + "timeField": "Time" + }, + "inbound_rate": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "otel_signal_processor", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #discarded_pct": 2, + "Trend #inbound_rate": 1, + "Trend #outbound_rate": 3, + "otel_signal_processor": 0 + }, + "renameByName": { + "Trend #discarded_pct": "Discarded %", + "Trend #inbound_rate": "Inbound Rate", + "Trend #outbound_rate": "Outbound Rate", + "otel_signal_processor": "Processor", + "otel_signal_receiver": "" + } + } + } + ], + "type": "table" + } + ], + "title": "Processors", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 47, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 96 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 96 + }, + "id": 44, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "spans_error" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 96 + }, + "id": 70, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 96 + }, + "id": 72, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 96 + }, + "id": 71, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 96 + }, + "id": 73, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by exporter and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 109 + }, + "id": 45, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rps" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n /\n otelcol_exporter_queue_capacity{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size_pct" + } + ], + "title": "Exporters", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "errors": { + "timeField": "Time" + }, + "queue_size": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_exporter", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #errors": "Errors %", + "Trend #queue_size": "Queue size", + "Trend #queue_size_pct": "Queue saturation %", + "Trend #rps": "Rate", + "signal_type_exporter": "Exporter" + } + } + } + ], + "type": "table" + } + ], + "title": "Exporters", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 46, + "panels": [ + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs from OpenTelemetry Collector filtered by dashboard variables", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 42, + "options": { + "dedupStrategy": "none", + "detailsMode": "sidebar", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showControls": false, + "showLabels": false, + "showLogAttributes": true, + "showTime": true, + "sortOrder": "Ascending", + "wrapLogMessage": false + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" | fields @timestamp, resource.service.name, resource.service.instance.id, resource.host.name, severity.text, body", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "OpenTelemetry Collector Logs", + "type": "logs" + } + ], + "title": "Logs", + "type": "row" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "opentelemetry", + "opentelemetry-collector" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "(?!grafanacloud-.*-alert-state-history|grafanacloud-.*-usage-insights).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "description": "Deployment environment (e.g. \"production\").\nResource attribute `deployment.environment.name` via `target_info`", + "includeAll": true, + "label": "Environment", + "multi": true, + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "description": "Resource attribute `k8s.cluster.name`", + "includeAll": true, + "label": "Kubernetes cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "`k8s.node.name`", + "includeAll": true, + "label": "K8s node", + "multi": true, + "name": "k8s_node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "description": "`host.name`", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "description": "`service.instance.id`", + "includeAll": true, + "label": "Instance", + "name": "service_instance_id", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "otelcol-contrib", + "value": "otelcol-contrib" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "description": "`service.name`", + "includeAll": true, + "label": "Service", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "browser", + "title": "OpenTelemetry Collector", + "uid": "otel-demo_otel-collector_dashboard", + "version": 1 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-postgresql-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + postgresql-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Performance metrics for PostgreSQL instrumented with the OpenTelemetry Collector PostgreSQL receiver.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [ + { + "asDropdown": false, + "includeVars": true, + "keepTime": true, + "tags": [ + "postgres-integration" + ], + "title": "Integration dashboards", + "type": "dashboards" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 15, + "panels": [], + "title": "PostgreSQL Overview", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Queries per seconds. Queries being commits or rollbacks.\n", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 11, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_commits_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval])) + sum(irate(postgresql_rollbacks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "xact_commit" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 1800, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "QPS", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "See [pg_stat_database / `tup_fetched`](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 20, + "x": 4, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_fetched_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "fetched", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "fetched", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_returned_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "returned", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "returned", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_inserted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "inserted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "inserted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_updated_total{dpostgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "updated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "updated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_deleted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "deleted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deleted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Rows", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_allocated_total{host_name=~\"$host_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers allocated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "buffers_allocated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_writes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "", + "legendFormat": "buffers write {{source}}", + "range": true, + "refId": "buffers_write", + "useBackend": false + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_backend", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_backend", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_clean", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_clean", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_checkpoint_count_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "checkpoint {{type}}", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "checkpoint", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Buffers", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "deadlocks" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-red", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "deadlocks" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "conflicts", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_deadlocks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "deadlocks", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deadlocks", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "conflicts" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "deadlocks", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_conflicts_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "conflicts", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "conflicts-not-yet-implemented-in-otelcol", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "deadlocks" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Conflicts/Deadlocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "round(\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n +\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_read_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n 0.001\n)", + "format": "time_series", + "legendFormat": "{{postgresql_database_name}} - cache hit ratio", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Cache hit ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "postgresql_backends{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{postgresql_database_name}} - connections", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Number of active connections", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 41, + "tags": [ + "opentelemetry", + "postgresql" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count,k8s_cluster_name)", + "description": "When deploying PostgreSQL on Kubernetes, name of the Kubernetes cluster. \nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "", + "value": "" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "description": "When deploying on Kubernetes, name of the `StatefulSet` of the PostgreSQL deployment (e.g. `my-pg-cluster`).\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Statefulset", + "multi": true, + "name": "k8s_statefulset_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "description": "When deploying PostgreSQL on VMs, name on the host on which the database is deployed.\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "Host", + "multi": true, + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "includeAll": true, + "label": "Database", + "name": "db", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "PostgreSQL", + "uid": "xHhbQmdjA", + "version": 5 + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-spanmetrics-dashboard + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_dashboard: "1" +data: + spanmetrics-dashboard.json: |- + { + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Spanmetrics way of demo application view.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 26, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard uses RED metrics generated for all services by the spanmetrics connector configured in the OpenTelemetry Collector.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.4.0", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 24, + "panels": [], + "title": "Service Level - Throughput and Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,service_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - Service Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "super-light-blue", + "value": 1 + }, + { + "color": "#EAB839", + "value": 2 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 4, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum by (service_name) (rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean Rate over Range", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-reds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "red", + "value": 15 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 15, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (service_name))", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean ERROR Rate over Range", + "type": "bargauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 14, + "panels": [], + "title": "span_names Level - Throughput", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "bRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-BlYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "eRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-RdYlGr" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 663 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 667 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Service" + }, + "properties": [ + { + "id": "custom.width" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 22, + "interval": "5m", + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name)) ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name))", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Error Rate" + } + ], + "title": "Top 7 span_names and Errors (APM Table)", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "span_name" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true + }, + "indexByName": {}, + "renameByName": { + "Value #Error Rate": "Error Rate", + "Value #Rate": "Rate", + "service_name 1": "Rate in Service", + "service_name 2": "Error Rate in Service" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "bRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "eRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Error Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Error Rate": true, + "Rate": true, + "bRate": false + }, + "indexByName": { + "Error Rate": 4, + "Error Rate in Service": 6, + "Rate": 1, + "Rate in Service": 5, + "bRate": 2, + "eRate": 3, + "span_name": 0 + }, + "renameByName": { + "Rate in Service": "Service", + "bRate": "Rate", + "eRate": "Error Rate", + "span_name": "span_name Name" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Rate" + } + ] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 20, + "panels": [], + "title": "span_name Level - Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 25, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,span_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{span_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - span_name Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 10, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7, sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"${service}\", span_name=~\"$span_name\"}[5m]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"${service}\",span_name=~\"$span_name\"}[5m\n])))", + "instant": true, + "interval": "", + "legendFormat": "{{span_name}} [{{service_name}}]", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Highest Endpoint Latencies Mean Over Range ", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 16, + "interval": "5m", + "options": { + "legend": { + "calcs": [ + "mean", + "logmin", + "max", + "delta" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": true, + "expr": "topk(7,sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])))", + "instant": false, + "interval": "", + "legendFormat": "[{{service_name}}] {{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Top 7 Latencies Over Range ", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "includeAll": true, + "multi": true, + "name": "service", + "options": [], + "query": { + "query": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*service_name=\"(.*)\".*/", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "includeAll": true, + "multi": true, + "name": "span_name", + "options": [], + "query": { + "query": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*span_name=\"(.*)\".*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Spanmetrics Demo Dashboard", + "uid": "W2gX2zHVk48", + "version": 2, + "weekStart": "" + } +--- +# Source: opentelemetry-demo/templates/grafana-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm + grafana_datasource: "1" +data: + + default.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Prometheus + uid: webstore-metrics + type: prometheus + url: http://prometheus:9090 + editable: true + isDefault: true + jsonData: + # Align Prometheus data source time interval with the OTel SDKs' export interval (see OTEL_METRIC_EXPORT_INTERVAL) + timeInterval: "60s" + exemplarTraceIdDestinations: + - datasourceUid: webstore-traces + name: trace_id + + - url: http://localhost:8080/jaeger/ui/trace/$${__value.raw} + name: trace_id + urlDisplayLabel: View in Jaeger UI + jaeger.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + + apiVersion: 1 + + datasources: + - name: Jaeger + uid: webstore-traces + type: jaeger + url: http://jaeger:16686/jaeger/ui + editable: true + isDefault: false + jsonData: + tracesToLogsV2: + datasourceUid: webstore-logs + spanStartTimeShift: "-20m" + spanEndTimeShift: "20m" + filterByTraceID: true + filterBySpanID: true + customQuery: true + query: traceId:"$${__trace.traceId}" AND spanId:"$${__span.spanId}" + opensearch.yaml: | + # Copyright The OpenTelemetry Authors + # SPDX-License-Identifier: Apache-2.0 + + apiVersion: 1 + + datasources: + - name: OpenSearch + uid: webstore-logs + type: grafana-opensearch-datasource + url: http://opensearch:9200/ + access: proxy + editable: true + isDefault: false + jsonData: + database: otel-logs-* + flavor: opensearch + logLevelField: severity.text.keyword + logMessageField: body + pplEnabled: true + timeField: observedTimestamp + version: 3.4.0 diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/clusterrole.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/clusterrole.yaml new file mode 100644 index 0000000..ea5c00b --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/clusterrole.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrole.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-clusterrole +rules: + - apiGroups: [""] # "" indicates the core API group + resources: ["configmaps", "secrets"] + verbs: ["get", "watch", "list"] diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/clusterrolebinding.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/clusterrolebinding.yaml new file mode 100644 index 0000000..c53b4b6 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/clusterrolebinding.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: grafana-clusterrolebinding + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +subjects: + - kind: ServiceAccount + name: grafana + namespace: default +roleRef: + kind: ClusterRole + name: grafana-clusterrole + apiGroup: rbac.authorization.k8s.io diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/configmap-dashboard-provider.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/configmap-dashboard-provider.yaml new file mode 100644 index 0000000..64c09be --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/configmap-dashboard-provider.yaml @@ -0,0 +1,27 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap-dashboard-provider.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana-config-dashboards + namespace: default +data: + provider.yaml: |- + apiVersion: 1 + providers: + - name: 'sidecarProvider' + orgId: 1 + folder: '' + folderUid: '' + type: file + disableDeletion: false + allowUiUpdates: false + updateIntervalSeconds: 30 + options: + foldersFromFilesStructure: false + path: /tmp/dashboards diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/configmap.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/configmap.yaml new file mode 100644 index 0000000..eacaa51 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/configmap.yaml @@ -0,0 +1,39 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +data: + + plugins: grafana-opensearch-datasource + grafana.ini: | + [analytics] + check_for_updates = true + [auth] + disable_login_form = true + [auth.anonymous] + enabled = true + org_name = Main Org. + org_role = Admin + [grafana_net] + url = https://grafana.net + [log] + mode = console + [paths] + data = /var/lib/grafana/ + logs = /var/log/grafana + plugins = /var/lib/grafana/plugins + provisioning = /etc/grafana/provisioning + [server] + domain = '' + root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana + serve_from_sub_path = true + [unified_storage] + index_path = /var/lib/grafana-search/bleve diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/deployment.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/deployment.yaml new file mode 100644 index 0000000..1432756 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/deployment.yaml @@ -0,0 +1,271 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/deployment.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + strategy: + type: RollingUpdate + template: + metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + annotations: + checksum/config: 4bc37edad15da2620fa7b48cb4d0af4ca30f6d344ac238d6aa702abb2d92c6ba + checksum/sc-dashboard-provider-config: e70bf6a851099d385178a76de9757bb0bef8299da6d8443602590e44f05fdf24 + checksum/secret: bed677784356b2af7fb0d87455db21f077853059b594101a4f6532bfbd962a7f + kubectl.kubernetes.io/default-container: grafana + spec: + + serviceAccountName: grafana + automountServiceAccountToken: true + shareProcessNamespace: false + securityContext: + fsGroup: 472 + runAsGroup: 472 + runAsNonRoot: true + runAsUser: 472 + enableServiceLinks: true + containers: + - name: grafana-sc-alerts + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_alert" + - name: FOLDER + value: "/etc/grafana/provisioning/alerting" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/alerting/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: grafana-sc-dashboard + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_dashboard" + - name: FOLDER + value: "/tmp/dashboards" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/dashboards/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: grafana-sc-datasources + image: "quay.io/kiwigrid/k8s-sidecar:2.2.1" + imagePullPolicy: IfNotPresent + env: + - name: METHOD + value: WATCH + - name: LABEL + value: "grafana_datasource" + - name: FOLDER + value: "/etc/grafana/provisioning/datasources" + - name: RESOURCE + value: "both" + - name: REQ_USERNAME + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: REQ_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: REQ_URL + value: http://localhost:3000/api/admin/provisioning/datasources/reload + - name: REQ_METHOD + value: POST + resources: + limits: + cpu: 100m + memory: 100Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + - name: grafana + image: "docker.io/grafana/grafana:12.3.1" + imagePullPolicy: IfNotPresent + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + volumeMounts: + - name: config + mountPath: "/etc/grafana/grafana.ini" + subPath: grafana.ini + - name: storage + mountPath: "/var/lib/grafana" + - name: search + mountPath: "/var/lib/grafana-search" + - name: sc-alerts-volume + mountPath: "/etc/grafana/provisioning/alerting" + - name: sc-dashboard-volume + mountPath: "/tmp/dashboards" + - name: sc-dashboard-provider + mountPath: "/etc/grafana/provisioning/dashboards/sc-dashboardproviders.yaml" + subPath: provider.yaml + - name: sc-datasources-volume + mountPath: "/etc/grafana/provisioning/datasources" + ports: + - name: grafana + containerPort: 3000 + protocol: TCP + - name: gossip-tcp + containerPort: 9094 + protocol: TCP + - name: gossip-udp + containerPort: 9094 + protocol: UDP + - name: profiling + containerPort: 6060 + protocol: TCP + env: + - name: POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: GF_SECURITY_ADMIN_USER + valueFrom: + secretKeyRef: + name: grafana + key: admin-user + - name: GF_SECURITY_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: grafana + key: admin-password + - name: GF_INSTALL_PLUGINS + valueFrom: + configMapKeyRef: + name: grafana + key: plugins + - name: GF_PATHS_DATA + value: /var/lib/grafana/ + - name: GF_PATHS_LOGS + value: /var/log/grafana + - name: GF_PATHS_PLUGINS + value: /var/lib/grafana/plugins + - name: GF_PATHS_PROVISIONING + value: /etc/grafana/provisioning + - name: GF_UNIFIED_STORAGE_INDEX_PATH + value: /var/lib/grafana-search/bleve + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + divisor: "1" + resource: limits.memory + livenessProbe: + failureThreshold: 10 + httpGet: + path: /api/health + port: grafana + initialDelaySeconds: 60 + timeoutSeconds: 30 + readinessProbe: + httpGet: + path: /api/health + port: grafana + resources: + limits: + memory: 175Mi + volumes: + - name: config + configMap: + name: grafana + - name: storage + emptyDir: {} + - name: search + emptyDir: {} + - name: sc-alerts-volume + emptyDir: {} + - name: sc-dashboard-volume + emptyDir: {} + - name: sc-dashboard-provider + configMap: + name: grafana-config-dashboards + - name: sc-datasources-volume + emptyDir: {} diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/role.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/role.yaml new file mode 100644 index 0000000..c211542 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/role.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/role.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +rules: [] diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/rolebinding.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/rolebinding.yaml new file mode 100644 index 0000000..8951e99 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/rolebinding.yaml @@ -0,0 +1,20 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/rolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: grafana +subjects: +- kind: ServiceAccount + name: grafana + namespace: default diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/secret.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/secret.yaml new file mode 100644 index 0000000..48cb47d --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/secret.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/secret.yaml +apiVersion: v1 +kind: Secret +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + app.kubernetes.io/component: admin-secret +type: Opaque +data: + + admin-user: "YWRtaW4=" + admin-password: "YWRtaW4=" + ldap-toml: "" diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/service.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/service.yaml new file mode 100644 index 0000000..54fa194 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/service.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: grafana + namespace: default + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" +spec: + type: ClusterIP + ports: + - name: service + port: 80 + protocol: TCP + targetPort: grafana + selector: + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example diff --git a/chart/examples/public-hosted-ingress/rendered/grafana/serviceaccount.yaml b/chart/examples/public-hosted-ingress/rendered/grafana/serviceaccount.yaml new file mode 100644 index 0000000..721b1a6 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/grafana/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/charts/grafana/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +automountServiceAccountToken: false +metadata: + labels: + helm.sh/chart: grafana-10.5.8 + app.kubernetes.io/name: grafana + app.kubernetes.io/instance: example + app.kubernetes.io/version: "12.3.1" + name: grafana + namespace: default diff --git a/chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-deploy.yaml b/chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-deploy.yaml new file mode 100644 index 0000000..35c11b5 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-deploy.yaml @@ -0,0 +1,124 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one + prometheus.io/port: "8888" + prometheus.io/scrape: "true" +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + template: + metadata: + labels: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one + annotations: + prometheus.io/port: "8888" + prometheus.io/scrape: "true" + spec: + + containers: + - env: + - name: MEMORY_MAX_TRACES + value: "25000" + - name: PROMETHEUS_ADDR + value: prometheus:9090 + - name: OTEL_COLLECTOR_HOST + value: otel-collector + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + - name: JAEGER_HOST + value: 0.0.0.0 + - name: JAEGER_GRPC_PORT + value: "4317" + - name: SPAN_STORAGE_TYPE + value: memory + + - name: COLLECTOR_ZIPKIN_HOST_PORT + value: :9411 + - name: JAEGER_DISABLED + value: "false" + - name: COLLECTOR_OTLP_ENABLED + value: "true" + securityContext: + {} + image: jaegertracing/jaeger:2.14.1 + imagePullPolicy: IfNotPresent + name: jaeger + args: + - "--config" + - "/etc/jaeger/user-config.yaml" + ports: + - containerPort: 5775 + protocol: UDP + - containerPort: 6831 + protocol: UDP + - containerPort: 6832 + protocol: UDP + - containerPort: 5778 + protocol: TCP + - containerPort: 16686 + protocol: TCP + - containerPort: 16685 + protocol: TCP + - containerPort: 9411 + protocol: TCP + - containerPort: 4317 + protocol: TCP + - containerPort: 4318 + protocol: TCP + - containerPort: 13133 + protocol: TCP + - containerPort: 8888 + protocol: TCP + livenessProbe: + failureThreshold: 5 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 15 + successThreshold: 1 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + httpGet: + path: /status + port: 13133 + scheme: HTTP + initialDelaySeconds: 1 + periodSeconds: 10 + successThreshold: 1 + timeoutSeconds: 1 + resources: + limits: + memory: 600Mi + volumeMounts: + - name: user-config + mountPath: /etc/jaeger + securityContext: + fsGroup: 10001 + runAsGroup: 10001 + runAsUser: 10001 + serviceAccountName: jaeger + volumes: + - name: user-config + configMap: + name: user-config diff --git a/chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-sa.yaml b/chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-sa.yaml new file mode 100644 index 0000000..b670c99 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/jaeger/jaeger-sa.yaml @@ -0,0 +1,14 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/jaeger-sa.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +automountServiceAccountToken: true diff --git a/chart/examples/public-hosted-ingress/rendered/jaeger/service.yaml b/chart/examples/public-hosted-ingress/rendered/jaeger/service.yaml new file mode 100644 index 0000000..6174656 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/jaeger/service.yaml @@ -0,0 +1,67 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: jaeger + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: all-in-one +spec: + type: ClusterIP + ports: + # Agent Ports + - name: zk-compact-trft + port: 5775 + protocol: UDP + targetPort: 5775 + - name: config-rest + port: 5778 + targetPort: 5778 + - name: jg-compact-trft + port: 6831 + protocol: UDP + targetPort: 6831 + - name: jg-binary-trft + port: 6832 + protocol: UDP + targetPort: 6832 + # Collector Ports + - name: http-zipkin + port: 9411 + targetPort: 9411 + appProtocol: http + - name: grpc-http + port: 14250 + targetPort: 14250 + appProtocol: grpc + - name: c-tchan-trft + port: 14267 + targetPort: 14267 + - name: http-c-binary-trft + port: 14268 + targetPort: 14268 + appProtocol: http + - name: otlp-grpc + port: 4317 + targetPort: 4317 + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + appProtocol: http + # Query Ports + - name: http-query + port: 16686 + targetPort: 16686 + - name: grpc-query + port: 16685 + targetPort: 16685 + selector: + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/component: all-in-one diff --git a/chart/examples/public-hosted-ingress/rendered/jaeger/user-config.yaml b/chart/examples/public-hosted-ingress/rendered/jaeger/user-config.yaml new file mode 100644 index 0000000..2f49362 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/jaeger/user-config.yaml @@ -0,0 +1,73 @@ +--- +# Source: opentelemetry-demo/charts/jaeger/templates/user-config.yaml +# Generates a config map from a file provided by user via `--set-file userconfig=` +apiVersion: v1 +kind: ConfigMap +metadata: + name: user-config + namespace: default + labels: + helm.sh/chart: jaeger-4.3.0 + app.kubernetes.io/name: jaeger + app.kubernetes.io/instance: example + app.kubernetes.io/version: "2.14.1" + app.kubernetes.io/managed-by: Helm +data: + user-config.yaml: | + service: + extensions: [jaeger_storage, jaeger_query, healthcheckv2] + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [jaeger_storage_exporter] + telemetry: + resource: + service.name: jaeger + metrics: + level: detailed + readers: + - periodic: + interval: 10000 + timeout: 5000 + exporter: + otlp: + protocol: http/protobuf + endpoint: http://${env:OTEL_COLLECTOR_HOST}:${env:OTEL_COLLECTOR_PORT_HTTP} + insecure: true + logs: + level: info + extensions: + healthcheckv2: + use_v2: true + http: + endpoint: 0.0.0.0:13133 + jaeger_query: + storage: + traces: memory_backend + metrics: metrics_backend + base_path: /jaeger/ui + jaeger_storage: + backends: + memory_backend: + memory: + max_traces: ${env:MEMORY_MAX_TRACES} + metric_backends: + metrics_backend: + prometheus: + endpoint: "http://${env:PROMETHEUS_ADDR}" + normalize_calls: true + normalize_duration: true + + receivers: + otlp: + protocols: + grpc: + endpoint: ${env:JAEGER_HOST}:${env:JAEGER_GRPC_PORT} + + processors: + batch: + + exporters: + jaeger_storage_exporter: + trace_storage: memory_backend diff --git a/chart/examples/public-hosted-ingress/rendered/opensearch/configmap.yaml b/chart/examples/public-hosted-ingress/rendered/opensearch/configmap.yaml new file mode 100644 index 0000000..44bff5a --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opensearch/configmap.yaml @@ -0,0 +1,65 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/configmap.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: opensearch-config + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +data: + opensearch.yml: | + cluster.name: opensearch-cluster + + # Bind to all interfaces because we don't know what IP address Docker will assign to us. + network.host: 0.0.0.0 + + # Setting network.host to a non-loopback address enables the annoying bootstrap checks. "Single-node" mode disables them again. + # Implicitly done if ".singleNode" is set to "true". + # discovery.type: single-node + + # Start OpenSearch Security Demo Configuration + # WARNING: revise all the lines below before you go into production + # plugins: + # security: + # ssl: + # transport: + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # enforce_hostname_verification: false + # http: + # enabled: true + # pemcert_filepath: esnode.pem + # pemkey_filepath: esnode-key.pem + # pemtrustedcas_filepath: root-ca.pem + # allow_unsafe_democertificates: true + # allow_default_init_securityindex: true + # authcz: + # admin_dn: + # - CN=kirk,OU=client,O=client,L=test,C=de + # audit.type: internal_opensearch + # enable_snapshot_restore_privilege: true + # check_snapshot_restore_write_privileges: true + # restapi: + # roles_enabled: ["all_access", "security_rest_api_access"] + # system_indices: + # enabled: true + # indices: + # [ + # ".opendistro-alerting-config", + # ".opendistro-alerting-alert*", + # ".opendistro-anomaly-results*", + # ".opendistro-anomaly-detector*", + # ".opendistro-anomaly-checkpoints", + # ".opendistro-anomaly-detection-state", + # ".opendistro-reports-*", + # ".opendistro-notifications-*", + # ".opendistro-notebooks", + # ".opendistro-asynchronous-search-response*", + # ] + ######## End OpenSearch Security Demo Configuration ######## diff --git a/chart/examples/public-hosted-ingress/rendered/opensearch/poddisruptionbudget.yaml b/chart/examples/public-hosted-ingress/rendered/opensearch/poddisruptionbudget.yaml new file mode 100644 index 0000000..4916d26 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opensearch/poddisruptionbudget.yaml @@ -0,0 +1,19 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/poddisruptionbudget.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: "opensearch-pdb" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch +spec: + maxUnavailable: 1 + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example diff --git a/chart/examples/public-hosted-ingress/rendered/opensearch/service.yaml b/chart/examples/public-hosted-ingress/rendered/opensearch/service.yaml new file mode 100644 index 0000000..4ac5038 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opensearch/service.yaml @@ -0,0 +1,59 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + {} +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + protocol: TCP + port: 9200 + - name: transport + protocol: TCP + port: 9300 + - name: metrics + protocol: TCP + port: 9600 +--- +# Source: opentelemetry-demo/charts/opensearch/templates/service.yaml +kind: Service +apiVersion: v1 +metadata: + name: opensearch-headless + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" +spec: + clusterIP: None # This is needed for statefulset hostnames like opensearch-0 to resolve + # Create endpoints also if the related pod isn't ready + publishNotReadyAddresses: true + selector: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + ports: + - name: http + port: 9200 + - name: transport + port: 9300 + - name: metrics + port: 9600 diff --git a/chart/examples/public-hosted-ingress/rendered/opensearch/statefulset.yaml b/chart/examples/public-hosted-ingress/rendered/opensearch/statefulset.yaml new file mode 100644 index 0000000..e71f96e --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opensearch/statefulset.yaml @@ -0,0 +1,154 @@ +--- +# Source: opentelemetry-demo/charts/opensearch/templates/statefulset.yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: opensearch + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + majorVersion: "3" +spec: + serviceName: opensearch-headless + selector: + matchLabels: + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + replicas: 1 + podManagementPolicy: Parallel + updateStrategy: + type: RollingUpdate + template: + metadata: + name: "opensearch" + labels: + helm.sh/chart: opensearch-3.4.0 + app.kubernetes.io/name: opensearch + app.kubernetes.io/instance: example + app.kubernetes.io/version: "3.4.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: opensearch + annotations: + configchecksum: 17d9fa0bb5acd5c7f6e4ff053d35a4bba83d971ccee521315964c59a0d83160 + spec: + securityContext: + fsGroup: 1000 + runAsUser: 1000 + automountServiceAccountToken: false + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 1 + podAffinityTerm: + topologyKey: kubernetes.io/hostname + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - example + - key: app.kubernetes.io/name + operator: In + values: + - opensearch + terminationGracePeriodSeconds: 120 + volumes: + - name: config + configMap: + name: opensearch-config + - emptyDir: {} + name: config-emptydir + enableServiceLinks: true + initContainers: + - name: configfile + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + command: + - sh + - -c + - | + #!/usr/bin/env bash + cp -r /tmp/configfolder/* /tmp/config/ + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + resources: + {} + volumeMounts: + - mountPath: /tmp/config/ + name: config-emptydir + - name: config + mountPath: /tmp/configfolder/opensearch.yml + subPath: opensearch.yml + containers: + - name: "opensearch" + securityContext: + capabilities: + drop: + - ALL + runAsNonRoot: true + runAsUser: 1000 + + image: "opensearchproject/opensearch:3.4.0" + imagePullPolicy: "IfNotPresent" + readinessProbe: + failureThreshold: 3 + periodSeconds: 5 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 5 + periodSeconds: 10 + tcpSocket: + port: 9200 + timeoutSeconds: 3 + ports: + - name: http + containerPort: 9200 + - name: transport + containerPort: 9300 + - name: metrics + containerPort: 9600 + resources: + limits: + memory: 1100Mi + requests: + cpu: 1000m + memory: 100Mi + env: + - name: node.name + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: discovery.seed_hosts + value: "opensearch-cluster-master-headless" + - name: cluster.name + value: "demo-cluster" + - name: network.host + value: "0.0.0.0" + - name: OPENSEARCH_JAVA_OPTS + value: "-Xms400m -Xmx400m" + - name: node.roles + value: "master,ingest,data,remote_cluster_client," + - name: discovery.type + value: "single-node" + - name: bootstrap.memory_lock + value: "true" + - name: DISABLE_INSTALL_DEMO_CONFIG + value: "true" + - name: DISABLE_SECURITY_PLUGIN + value: "true" + volumeMounts: + - name: config-emptydir + mountPath: /usr/share/opensearch/config/opensearch.yml + subPath: opensearch.yml diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrole.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrole.yaml new file mode 100644 index 0000000..6fad98f --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrole.yaml @@ -0,0 +1,48 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +rules: + - apiGroups: ["coordination.k8s.io"] + resources: ["leases"] + verbs: ["get","list","watch","create","update","patch","delete"] + - apiGroups: [""] + resources: ["pods", "namespaces"] + verbs: ["get", "watch", "list"] + - apiGroups: ["apps"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["events", "namespaces", "namespaces/status", "nodes", "nodes/spec", "pods", "pods/status", "replicationcontrollers", "replicationcontrollers/status", "resourcequotas", "services" ] + verbs: ["get", "list", "watch"] + - apiGroups: ["apps"] + resources: ["daemonsets", "deployments", "replicasets", "statefulsets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["extensions"] + resources: ["daemonsets", "deployments", "replicasets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["batch"] + resources: ["jobs", "cronjobs"] + verbs: ["get", "list", "watch"] + - apiGroups: ["autoscaling"] + resources: ["horizontalpodautoscalers"] + verbs: ["get", "list", "watch"] + - apiGroups: [""] + resources: ["nodes/stats"] + verbs: ["get", "watch", "list"] + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list", "watch"] diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrolebinding.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrolebinding.yaml new file mode 100644 index 0000000..886802c --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/clusterrolebinding.yaml @@ -0,0 +1,22 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector +subjects: +- kind: ServiceAccount + name: otel-collector + namespace: default diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/configmap-agent.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/configmap-agent.yaml new file mode 100644 index 0000000..f0f1ffa --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/configmap-agent.yaml @@ -0,0 +1,275 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/configmap-agent.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +data: + relay: | + connectors: + spanmetrics: {} + exporters: + debug: {} + opensearch: + http: + endpoint: http://opensearch:9200 + tls: + insecure: true + logs_index: otel-logs + logs_index_time_format: yyyy-MM-dd + otlp/jaeger: + endpoint: jaeger:4317 + sending_queue: + batch: null + tls: + insecure: true + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + sending_queue: + batch: null + tls: + insecure: true + extensions: + health_check: + endpoint: ${env:MY_POD_IP}:13133 + k8s_leader_elector/k8s_cluster: + auth_type: serviceAccount + lease_name: k8s.cluster.receiver.opentelemetry.io + lease_namespace: default + k8s_observer: + auth_type: serviceAccount + node: ${env:K8S_NODE_NAME} + processors: + batch: {} + k8sattributes: + extract: + metadata: + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.uid + - k8s.node.name + - k8s.pod.start_time + - k8s.deployment.name + - k8s.replicaset.name + - k8s.replicaset.uid + - k8s.daemonset.name + - k8s.daemonset.uid + - k8s.job.name + - k8s.job.uid + - k8s.container.name + - k8s.cronjob.name + - k8s.statefulset.name + - k8s.statefulset.uid + - container.image.tag + - container.image.name + - k8s.cluster.uid + - service.namespace + - service.name + - service.version + - service.instance.id + otel_annotations: true + filter: + node_from_env_var: K8S_NODE_NAME + passthrough: false + pod_association: + - sources: + - from: resource_attribute + name: k8s.pod.ip + - sources: + - from: resource_attribute + name: k8s.pod.uid + - sources: + - from: connection + memory_limiter: + check_interval: 5s + limit_percentage: 80 + spike_limit_percentage: 25 + resource: + attributes: + - action: insert + from_attribute: k8s.pod.uid + key: service.instance.id + resourcedetection: + detectors: + - env + - system + transform: + error_mode: ignore + trace_statements: + - conditions: + - span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" + and span.attributes["http.route"] == nil + context: span + statements: + - set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], + "\\/api\\/cart") + - set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], + "\\/api\\/checkout") + - set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], + "\\/api\\/products\\/.*") + - set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], + "\\/api\\/recommendations") + - set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], + "\\/api\\/data.*") + - context: span + statements: + - set_semconv_span_name("1.37.0", "unsanitized_span_name") + receivers: + hostmetrics: + collection_interval: 10s + root_path: /hostfs + scrapers: + cpu: null + disk: null + filesystem: + exclude_fs_types: + fs_types: + - autofs + - binfmt_misc + - bpf + - cgroup2 + - configfs + - debugfs + - devpts + - devtmpfs + - fusectl + - hugetlbfs + - iso9660 + - mqueue + - nsfs + - overlay + - proc + - procfs + - pstore + - rpc_pipefs + - securityfs + - selinuxfs + - squashfs + - sysfs + - tracefs + match_type: strict + exclude_mount_points: + match_type: regexp + mount_points: + - /dev/* + - /proc/* + - /sys/* + - /run/k3s/containerd/* + - /var/lib/docker/* + - /var/lib/kubelet/* + - /snap/* + load: null + memory: null + network: null + jaeger: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:14250 + thrift_compact: + endpoint: ${env:MY_POD_IP}:6831 + thrift_http: + endpoint: ${env:MY_POD_IP}:14268 + k8s_cluster: + collection_interval: 10s + k8s_leader_elector: k8s_leader_elector/k8s_cluster + kubeletstats: + auth_type: serviceAccount + collection_interval: 20s + endpoint: ${env:K8S_NODE_IP}:10250 + otlp: + protocols: + grpc: + endpoint: ${env:MY_POD_IP}:4317 + http: + cors: + allowed_origins: + - http://* + - https://* + endpoint: ${env:MY_POD_IP}:4318 + prometheus: + config: + scrape_configs: + - job_name: opentelemetry-collector + scrape_interval: 10s + static_configs: + - targets: + - ${env:MY_POD_IP}:8888 + receiver_creator/metrics: + discovery: + enabled: true + watch_observers: + - k8s_observer + zipkin: + endpoint: ${env:MY_POD_IP}:9411 + service: + extensions: + - health_check + - k8s_observer + - k8s_leader_elector/k8s_cluster + pipelines: + logs: + exporters: + - opensearch + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + metrics: + exporters: + - otlphttp/prometheus + - debug + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - batch + receivers: + - otlp + - spanmetrics + - receiver_creator/metrics + - hostmetrics + - kubeletstats + - k8s_cluster + traces: + exporters: + - otlp/jaeger + - debug + - spanmetrics + processors: + - k8sattributes + - memory_limiter + - resourcedetection + - resource + - transform + - batch + receivers: + - otlp + - jaeger + - zipkin + telemetry: + metrics: + level: detailed + readers: + - periodic: + exporter: + otlp: + endpoint: http://otel-collector:4318 + insecure: true + protocol: http/protobuf + interval: 10000 + timeout: 5000 diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/daemonset.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/daemonset.yaml new file mode 100644 index 0000000..689294e --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/daemonset.yaml @@ -0,0 +1,122 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/daemonset.yaml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: otel-collector-agent + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector +spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + updateStrategy: + type: RollingUpdate + template: + metadata: + annotations: + checksum/config: 1fdac890ba8aee9d05a37e748f9dcb8f5571ddf715332cc2ba32a7cfdbc9893f + + labels: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + + spec: + + serviceAccountName: otel-collector + automountServiceAccountToken: true + securityContext: + {} + containers: + - name: opentelemetry-collector + args: + - --config=/conf/relay.yaml + securityContext: + {} + image: "otel/opentelemetry-collector-contrib:0.142.0" + imagePullPolicy: IfNotPresent + ports: + + - name: jaeger-compact + containerPort: 6831 + protocol: UDP + hostPort: 6831 + - name: jaeger-grpc + containerPort: 14250 + protocol: TCP + hostPort: 14250 + - name: jaeger-thrift + containerPort: 14268 + protocol: TCP + hostPort: 14268 + - name: metrics + containerPort: 8888 + protocol: TCP + - name: otlp + containerPort: 4317 + protocol: TCP + hostPort: 4317 + - name: otlp-http + containerPort: 4318 + protocol: TCP + hostPort: 4318 + - name: zipkin + containerPort: 9411 + protocol: TCP + hostPort: 9411 + env: + - name: MY_POD_IP + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: status.podIP + - name: K8S_NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + - name: K8S_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: GOMEMLIMIT + value: "160MiB" + livenessProbe: + httpGet: + path: / + port: 13133 + readinessProbe: + httpGet: + path: / + port: 13133 + resources: + limits: + memory: 200Mi + volumeMounts: + - mountPath: /conf + name: opentelemetry-collector-configmap + - name: hostfs + mountPath: /hostfs + readOnly: true + mountPropagation: HostToContainer + volumes: + - name: opentelemetry-collector-configmap + configMap: + name: otel-collector-agent + items: + - key: relay + path: relay.yaml + - name: hostfs + hostPath: + path: / + hostNetwork: false diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/ingress.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/ingress.yaml new file mode 100644 index 0000000..b708847 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/ingress.yaml @@ -0,0 +1,28 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/ingress.yaml +apiVersion: "networking.k8s.io/v1" +kind: Ingress +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector + component: agent-collector +spec: + rules: + - host: "otel-demo-collector.example.com" + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: otel-collector + port: + number: 4318 diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/service.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/service.yaml new file mode 100644 index 0000000..d57f891 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/service.yaml @@ -0,0 +1,54 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector + component: agent-collector +spec: + type: ClusterIP + ports: + + - name: jaeger-compact + port: 6831 + targetPort: 6831 + protocol: UDP + - name: jaeger-grpc + port: 14250 + targetPort: 14250 + protocol: TCP + - name: jaeger-thrift + port: 14268 + targetPort: 14268 + protocol: TCP + - name: metrics + port: 8888 + targetPort: 8888 + protocol: TCP + - name: otlp + port: 4317 + targetPort: 4317 + protocol: TCP + appProtocol: grpc + - name: otlp-http + port: 4318 + targetPort: 4318 + protocol: TCP + - name: zipkin + port: 9411 + targetPort: 9411 + protocol: TCP + selector: + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + component: agent-collector + internalTrafficPolicy: Local diff --git a/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/serviceaccount.yaml b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/serviceaccount.yaml new file mode 100644 index 0000000..73ebb08 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/opentelemetry-collector/serviceaccount.yaml @@ -0,0 +1,15 @@ +--- +# Source: opentelemetry-demo/charts/opentelemetry-collector/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector + namespace: default + labels: + helm.sh/chart: opentelemetry-collector-0.142.2 + app.kubernetes.io/name: opentelemetry-collector + app.kubernetes.io/instance: example + app.kubernetes.io/version: "0.142.0" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: opentelemetry-collector + app.kubernetes.io/component: agent-collector diff --git a/chart/examples/public-hosted-ingress/rendered/posgresql-init-config.yaml b/chart/examples/public-hosted-ingress/rendered/posgresql-init-config.yaml new file mode 100644 index 0000000..4c75905 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/posgresql-init-config.yaml @@ -0,0 +1,173 @@ +--- +# Source: opentelemetry-demo/templates/posgresql-init-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-init + namespace: default + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm +data: + + init.sql: | + -- Copyright The OpenTelemetry Authors + -- SPDX-License-Identifier: Apache-2.0 + + CREATE USER otelu WITH PASSWORD 'otelp'; + + -- Accounting Service: create a schema + CREATE SCHEMA accounting; + GRANT USAGE ON SCHEMA accounting TO otelu; + + -- Accounting Service: create tables + CREATE TABLE accounting."order" ( + order_id TEXT PRIMARY KEY + ); + + CREATE TABLE accounting.shipping ( + shipping_tracking_id TEXT PRIMARY KEY, + shipping_cost_currency_code TEXT NOT NULL, + shipping_cost_units BIGINT NOT NULL, + shipping_cost_nanos INT NOT NULL, + street_address TEXT, + city TEXT, + state TEXT, + country TEXT, + zip_code TEXT, + order_id TEXT NOT NULL, + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + CREATE TABLE accounting.orderitem ( + item_cost_currency_code TEXT NOT NULL, + item_cost_units BIGINT NOT NULL, + item_cost_nanos INT NOT NULL, + product_id TEXT NOT NULL, + quantity INT NOT NULL, + order_id TEXT NOT NULL, + PRIMARY KEY (order_id, product_id), + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE + ); + + -- Accounting Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA accounting TO otelu; + + -- Product Review Service: create a schema + CREATE SCHEMA reviews; + GRANT USAGE ON SCHEMA reviews TO otelu; + + -- Product Review Service: create tables + CREATE TABLE reviews.productreviews ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + product_id VARCHAR(16) NOT NULL, + username VARCHAR(64) NOT NULL, + description VARCHAR(1024), + score NUMERIC(2,1) NOT NULL + ); + + -- Product Review Service: create index for product_id lookups + CREATE INDEX product_id_index ON reviews.productreviews (product_id); + + -- Product Review Service: grant permission to schema + GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA reviews TO otelu; + + -- Product Review Service: add product review data + INSERT INTO reviews.productreviews (product_id, username, description, score) + VALUES + ('OLJCESPC7Z', 'stargazer_mike', 'Great entry-level telescope! Easy to set up and provides clear views of the moon and brighter planets. Highly recommend for new astronomers.', '4.5'), + ('OLJCESPC7Z', 'nightskylover', 'For the price, this Explorascope delivers excellent performance. I was able to see Jupiter''s moons clearly. A fantastic purchase for casual viewing.', '4.0'), + ('OLJCESPC7Z', 'beginner_astro', 'A bit tricky to get used to the manual controls, but once you do, it''s very rewarding. Saw the Orion Nebula for the first time! Good value.', '3.5'), + ('OLJCESPC7Z', 'celestial_explorer', 'Perfect for camping trips. It''s lightweight and portable, making it easy to take anywhere. The views are surprisingly good for its size.', '4.0'), + ('OLJCESPC7Z', 'telescope_fan', 'Not the most powerful scope, but it''s great for kids and beginners. My children love looking at the moon with it. A solid choice for family fun.', '3.0'), + + ('66VCHSJNUP', 'tech_astro', 'The StarSense app is revolutionary! It made finding celestial objects incredibly easy. This telescope is a game-changer for beginners.', '5.0'), + ('66VCHSJNUP', 'app_user', 'Amazing technology, the smartphone integration works flawlessly. I''ve never had so much fun exploring the night sky. Worth every penny.', '4.5'), + ('66VCHSJNUP', 'innovator_john', 'Setup was a breeze, and the tutorials in the app are very helpful. The views are crisp and clear. My only minor gripe is battery drain on the phone.', '4.0'), + ('66VCHSJNUP', 'clear_skies', 'Finally, a telescope that takes the guesswork out of stargazing. The real-time positioning is incredibly accurate. Highly recommended for anyone new to astronomy.', '5.0'), + ('66VCHSJNUP', 'gadget_geek', 'Fantastic product, the app truly guides you. It''s like having a personal astronomer with you. The optical quality is also very good.', '4.5'), + + ('1YMWWN1N4O', 'solar_viewer', 'Perfect for solar observations! The Solar Safe filter gives peace of mind. I used it for the last partial eclipse and it was fantastic.', '5.0'), + ('1YMWWN1N4O', 'eclipse_chaser', 'Compact and easy to carry, this telescope is ideal for eclipse events. The included backpack is a nice touch. Views of the sun are incredibly clear and safe.', '4.5'), + ('1YMWWN1N4O', 'travel_astro', 'Excellent travel scope for solar viewing. The magnification is much better than binoculars for the sun. A must-have for any solar enthusiast.', '4.0'), + ('1YMWWN1N4O', 'sun_gazer', 'Very impressed with the safety features and clarity. Sharing the sun with family has never been easier or safer. Great value for a dedicated solar scope.', '5.0'), + ('1YMWWN1N4O', 'safe_viewer', 'The ISO compliant filter is reassuring. It''s a well-designed product for safe solar observation. Highly recommend for educational purposes too.', '4.5'), + + ('L9ECAV7KIM', 'clean_optics', 'This kit is a lifesaver for all my optics. The brush and wipes work perfectly without leaving any residue. My lenses have never been cleaner.', '5.0'), + ('L9ECAV7KIM', 'photog_pro', 'Essential for any photographer or telescope owner. It safely removes dust and fingerprints. A high-quality cleaning solution.', '4.5'), + ('L9ECAV7KIM', 'daily_cleaner', 'I use this on my binoculars, camera lenses, and even my phone screen. It''s very effective and gentle. A versatile cleaning kit.', '4.0'), + ('L9ECAV7KIM', 'tech_maintenance', 'Great value for money. The different cleaning options cover all needs. Keeps my expensive equipment in pristine condition.', '5.0'), + ('L9ECAV7KIM', 'sharp_view', 'Works as advertised, my telescope views are much clearer after using this. The fluid and cloth are excellent. Definitely recommend.', '4.5'), + + ('2ZYFJ3GM2N', 'bird_watcher', 'Incredible clarity and brightness, perfect for bird watching. The ED glass really makes a difference. I can spot the subtlest markings.', '5.0'), + ('2ZYFJ3GM2N', 'nature_lover', 'These binoculars are fantastic for nature observation. The close focus is a huge advantage for viewing nearby wildlife. Very comfortable to hold.', '4.5'), + ('2ZYFJ3GM2N', 'hiker_guy', 'Lightweight and durable, these are my go-to binoculars for hiking. The wide field of view is excellent. Highly recommend for outdoor enthusiasts.', '4.0'), + ('2ZYFJ3GM2N', 'stadium_fan', 'Took these to a game and had an amazing view of the action. They perform great in various lighting conditions. A solid all-around binocular.', '4.0'), + ('2ZYFJ3GM2N', 'outdoor_adventurer', 'Excellent build quality and optical performance. They feel robust and provide sharp images. A great investment for any outdoor activity.', '4.5'), + + ('0PUK6V6EV0', 'astro_photog', 'This imager is a fantastic step up for planetary photography. The color quality is superb. Easy to use with my existing telescope setup.', '5.0'), + ('0PUK6V6EV0', 'planet_shooter', 'Finally capturing stunning images of Saturn and Jupiter! The NexImage 10 makes it so accessible. Great for beginners in astrophotography.', '4.5'), + ('0PUK6V6EV0', 'imager_pro', 'Excellent resolution and color rendition for its price point. It''s a perfect solution for those looking to start imaging planets. Highly satisfied.', '4.0'), + ('0PUK6V6EV0', 'space_artist', 'The detail I can capture with this imager is incredible. It integrates well with various software. A must-have for serious planetary observers.', '5.0'), + ('0PUK6V6EV0', 'digital_sky', 'A solid choice for getting into solar system imaging. The setup was straightforward. Produces beautiful, vibrant planetary images.', '4.5'), + + ('LS4PSXUNUM', 'night_walker', 'The red light is perfect for preserving night vision during astronomy sessions. The hand warmer is an unexpected bonus. Very practical device.', '5.0'), + ('LS4PSXUNUM', 'star_party_goer', 'This flashlight is indispensable for star parties. The red mode is gentle on the eyes, and the power bank feature is super handy. Love it!', '4.5'), + ('LS4PSXUNUM', 'camper_chris', 'Rugged and versatile, this flashlight is great for camping and night walks. The hand warmer function is a game-changer on cold nights. Highly recommend.', '4.5'), + ('LS4PSXUNUM', 'emergency_kit', 'A fantastic multi-tool for my emergency kit. The red light is useful, and the power bank means I can charge my phone. Great design.', '4.0'), + ('LS4PSXUNUM', 'astro_accessory', 'Every astronomer needs one of these. The red light is essential, and the hand warmer and power bank make it incredibly useful. A top-tier accessory.', '5.0'), + + ('9SIQT8TOJO', 'deep_sky_master', 'The RASA V2 is a dream come true for deep-sky imaging. The f/2.2 speed drastically cuts down exposure times. My best astrophotography investment yet.', '5.0'), + ('9SIQT8TOJO', 'pro_astro', 'Unbelievable performance for wide-field astrophotography. The short focal length makes guiding less critical. Produces stunning, detailed images.', '5.0'), + ('9SIQT8TOJO', 'imaging_guru', 'This OTA is a beast! The fast optics mean more data in less time. If you''re serious about deep-sky imaging, this is the one.', '4.5'), + ('9SIQT8TOJO', 'advanced_scope', 'Worth every penny for the quality and speed it offers. My images have never been sharper or more vibrant. A truly professional piece of equipment.', '5.0'), + ('9SIQT8TOJO', 'precision_optics', 'The engineering behind this RASA is exceptional. It''s incredibly efficient for capturing faint objects. A high-end choice for dedicated imagers.', '4.5'), + + ('6E92ZMYYFZ', 'solar_safety', 'Essential for safe solar viewing with my 8-inch telescope. The Velcro straps ensure it stays securely in place. Peace of mind during solar observations.', '5.0'), + ('6E92ZMYYFZ', 'telescope_upgrade', 'This EclipSmart filter is a perfect addition to my setup. The ISO compliance is crucial. Highly recommend for anyone looking to view the sun safely.', '4.5'), + ('6E92ZMYYFZ', 'safe_sun_gazer', 'Easy to attach and provides crystal clear, safe views of the sun. The build quality is excellent. A must-have accessory for solar enthusiasts.', '5.0'), + ('6E92ZMYYFZ', 'filter_fan', 'Works perfectly with my 8-inch scope. No more worries about accidental dislodgement. Great product for protecting your eyes and equipment.', '4.5'), + ('6E92ZMYYFZ', 'eclipse_ready', 'Bought this for the upcoming eclipse, and it fits perfectly. Tested it out, and the views are fantastic and safe. Very happy with this purchase.', '5.0'), + + ('HQTGWGPNH4', 'history_buff', 'A fascinating glimpse into historical astronomical thought. The content is incredibly insightful. A must-read for anyone interested in the history of science.', '5.0'), + ('HQTGWGPNH4', 'bookworm_astro', 'Beautifully presented historical document. It''s amazing to see how comets were understood centuries ago. A valuable addition to any astronomy library.', '4.5'), + ('HQTGWGPNH4', 'ancient_texts', 'Such a unique and intriguing read. The historical context is captivating. It offers a different perspective on celestial events.', '4.0'), + ('HQTGWGPNH4', 'celestial_history', 'I love historical astronomy, and this book delivers. It''s well-researched and provides a window into past beliefs. Highly recommended for scholars.', '5.0'), + ('HQTGWGPNH4', 'rare_find', 'A truly special book for enthusiasts of astronomical history. The details about ancient astrologers are very interesting. Great for a deeper understanding.', '4.5'); + + -- Product Catalog Service: create a schema + CREATE SCHEMA catalog; + GRANT USAGE ON SCHEMA catalog TO otelu; + + -- Product Catalog Service: create tables + CREATE TABLE catalog.products ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT, + picture TEXT, + price_currency_code TEXT NOT NULL, + price_units BIGINT NOT NULL, + price_nanos INT NOT NULL, + categories TEXT + ); + + -- Product Catalog Service: grant permission to schema + GRANT SELECT ON ALL TABLES IN SCHEMA catalog TO otelu; + + -- Product Catalog Service: add product data + INSERT INTO catalog.products (id, name, description, picture, price_currency_code, price_units, price_nanos, categories) + VALUES + ('OLJCESPC7Z', 'National Park Foundation Explorascope', 'The National Park Foundation''s (NPF) Explorascope 60AZ is a manual alt-azimuth, refractor telescope perfect for celestial viewing on the go. The NPF Explorascope 60 can view the planets, moon, star clusters and brighter deep sky objects like the Orion Nebula and Andromeda Galaxy.', 'NationalParkFoundationExplorascope.jpg', 'USD', 101, 960000000, 'telescopes'), + ('66VCHSJNUP', 'Starsense Explorer Refractor Telescope', 'The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app''s user-friendly interface and detailed tutorials. It''s like having your own personal tour guide of the night sky', 'StarsenseExplorer.jpg', 'USD', 349, 950000000, 'telescopes'), + ('1YMWWN1N4O', 'Eclipsmart Travel Refractor Telescope', 'Dedicated white-light solar scope for the observer on the go. The 50mm refracting solar scope uses Solar Safe, ISO compliant, full-aperture glass filter material to ensure the safest view of solar events. The kit comes complete with everything you need, including the dedicated travel solar scope, a Solar Safe finderscope, tripod, a high quality 20mm (18x) Kellner eyepiece and a nylon backpack to carry everything in. This Travel Solar Scope makes it easy to share the Sun as well as partial and total solar eclipses with the whole family and offers much higher magnifications than you would otherwise get using handheld solar viewers or binoculars.', 'EclipsmartTravelRefractorTelescope.jpg', 'USD', 129, 950000000, 'telescopes,travel'), + ('L9ECAV7KIM', 'Lens Cleaning Kit', 'Wipe away dust, dirt, fingerprints and other particles on your lenses to see clearly with the Lens Cleaning Kit. This cleaning kit works on all glass and optical surfaces, including telescopes, binoculars, spotting scopes, monoculars, microscopes, and even your camera lenses, computer screens, and mobile devices. The kit comes complete with a retractable lens brush to remove dust particles and dirt and two options to clean smudges and fingerprints off of your optics, pre-moistened lens wipes and a bottled lens cleaning fluid with soft cloth.', 'LensCleaningKit.jpg', 'USD', 21, 950000000, 'accessories'), + ('2ZYFJ3GM2N', 'Roof Binoculars', 'This versatile, all-around binocular is a great choice for the trail, the stadium, the arena, or just about anywhere you want a close-up view of the action without sacrificing brightness or detail. It''s an especially great companion for nature observation and bird watching, with ED glass that helps you spot the subtlest field markings and a close focus of just 6.5 feet.', 'RoofBinoculars.jpg', 'USD', 209, 950000000, 'binoculars'), + ('0PUK6V6EV0', 'Solar System Color Imager', 'You have your new telescope and have observed Saturn and Jupiter. Now you''re ready to take the next step and start imaging them. But where do you begin? The NexImage 10 Solar System Imager is the perfect solution.', 'SolarSystemColorImager.jpg', 'USD', 175, 0, 'accessories,telescopes'), + ('LS4PSXUNUM', 'Red Flashlight', 'This 3-in-1 device features a 3-mode red flashlight, a hand warmer, and a portable power bank for recharging your personal electronics on the go. Whether you use it to light the way at an astronomy star party, a night walk, or wildlife research, ThermoTorch 3 Astro Red''s rugged, IPX4-rated design will withstand your everyday activities.', 'RedFlashlight.jpg', 'USD', 57, 80000000, 'accessories,flashlights'), + ('9SIQT8TOJO', 'Optical Tube Assembly', 'Capturing impressive deep-sky astroimages is easier than ever with Rowe-Ackermann Schmidt Astrograph (RASA) V2, the perfect companion to today''s top DSLR or astronomical CCD cameras. This fast, wide-field f/2.2 system allows for shorter exposure times compared to traditional f/10 astroimaging, without sacrificing resolution. Because shorter sub-exposure times are possible, your equatorial mount won''t need to accurately track over extended periods. The short focal length also lessens equatorial tracking demands. In many cases, autoguiding will not be required.', 'OpticalTubeAssembly.jpg', 'USD', 3599, 0, 'accessories,telescopes,assembly'), + ('6E92ZMYYFZ', 'Solar Filter', 'Enhance your viewing experience with EclipSmart Solar Filter for 8" telescopes. With two Velcro straps and four self-adhesive Velcro pads for added safety, you can be assured that the solar filter cannot be accidentally knocked off and will provide Solar Safe, ISO compliant viewing.', 'SolarFilter.jpg', 'USD', 69, 950000000, 'accessories,telescopes'), + ('HQTGWGPNH4', 'The Comet Book', 'A 16th-century treatise on comets, created anonymously in Flanders (now northern France) and now held at the Universitätsbibliothek Kassel. Commonly known as The Comet Book (or Kometenbuch in German), its full title translates as "Comets and their General and Particular Meanings, According to Ptolomeé, Albumasar, Haly, Aliquind and other Astrologers". The image is from https://publicdomainreview.org/collection/the-comet-book, made available by the Universitätsbibliothek Kassel under a CC-BY SA 4.0 license (https://creativecommons.org/licenses/by-sa/4.0/)', 'TheCometBook.jpg', 'USD', 0, 990000000, 'books'); diff --git a/chart/examples/public-hosted-ingress/rendered/prometheus/clusterrole.yaml b/chart/examples/public-hosted-ingress/rendered/prometheus/clusterrole.yaml new file mode 100644 index 0000000..b56cd11 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/prometheus/clusterrole.yaml @@ -0,0 +1,50 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrole.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +rules: + - apiGroups: + - "" + resources: + - nodes + - nodes/proxy + - nodes/metrics + - services + - endpoints + - pods + - ingresses + - configmaps + verbs: + - get + - list + - watch + - apiGroups: + - "networking.k8s.io" + resources: + - ingresses/status + - ingresses + verbs: + - get + - list + - watch + - apiGroups: + - "discovery.k8s.io" + resources: + - endpointslices + verbs: + - get + - list + - watch + - nonResourceURLs: + - "/metrics" + verbs: + - get diff --git a/chart/examples/public-hosted-ingress/rendered/prometheus/clusterrolebinding.yaml b/chart/examples/public-hosted-ingress/rendered/prometheus/clusterrolebinding.yaml new file mode 100644 index 0000000..34a3b6f --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/prometheus/clusterrolebinding.yaml @@ -0,0 +1,21 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/clusterrolebinding.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus +subjects: + - kind: ServiceAccount + name: prometheus + namespace: default +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: prometheus diff --git a/chart/examples/public-hosted-ingress/rendered/prometheus/cm.yaml b/chart/examples/public-hosted-ingress/rendered/prometheus/cm.yaml new file mode 100644 index 0000000..d1816ba --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/prometheus/cm.yaml @@ -0,0 +1,361 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/cm.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +data: + allow-snippet-annotations: "false" + alerting_rules.yml: | + {} + alerts: | + {} + prometheus.yml: | + global: + evaluation_interval: 1m + scrape_interval: 1m + scrape_timeout: 10s + storage: + tsdb: + out_of_order_time_window: 30m + otlp: + keep_identifying_resource_attributes: true + promote_resource_attributes: + - service.instance.id + - service.name + - service.namespace + - service.version + - cloud.availability_zone + - cloud.region + - deployment.environment.name + - k8s.cluster.name + - k8s.container.name + - k8s.cronjob.name + - k8s.daemonset.name + - k8s.deployment.name + - k8s.job.name + - k8s.namespace.name + - k8s.node.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.statefulset.name + - container.name + - host.name + - postgresql.database.name + - postgresql.schema.name + - postgresql.table.name + - postgresql.index.name + scrape_configs: + - job_name: kubernetes-api-servers + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: default;kubernetes;https + source_labels: + - __meta_kubernetes_namespace + - __meta_kubernetes_service_name + - __meta_kubernetes_endpoint_port_name + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-nodes-cadvisor + bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token + kubernetes_sd_configs: + - role: node + relabel_configs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - replacement: kubernetes.default.svc:443 + target_label: __address__ + - regex: (.+) + replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor + source_labels: + - __meta_kubernetes_node_name + target_label: __metrics_path__ + scheme: https + tls_config: + ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + - job_name: kubernetes-pods + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-pods-slow + honor_labels: true + kubernetes_sd_configs: + - role: pod + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4}) + replacement: '[$2]:$1' + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: replace + regex: (\d+);((([0-9]+?)(\.|$)){4}) + replacement: $2:$1 + source_labels: + - __meta_kubernetes_pod_annotation_prometheus_io_port + - __meta_kubernetes_pod_ip + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_pod_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_pod_name + target_label: pod + - action: drop + regex: Pending|Succeeded|Failed|Completed + source_labels: + - __meta_kubernetes_pod_phase + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-service-endpoints + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape + - action: drop + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + - job_name: kubernetes-service-endpoints-slow + honor_labels: true + kubernetes_sd_configs: + - role: endpoints + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow + - action: replace + regex: (https?) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_scheme + target_label: __scheme__ + - action: replace + regex: (.+) + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_path + target_label: __metrics_path__ + - action: replace + regex: (.+?)(?::\d+)?;(\d+) + replacement: $1:$2 + source_labels: + - __address__ + - __meta_kubernetes_service_annotation_prometheus_io_port + target_label: __address__ + - action: labelmap + regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+) + replacement: __param_$1 + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - action: replace + source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - action: replace + source_labels: + - __meta_kubernetes_service_name + target_label: service + - action: replace + source_labels: + - __meta_kubernetes_pod_node_name + target_label: node + scrape_interval: 5m + scrape_timeout: 30s + - job_name: kubernetes-services + honor_labels: true + kubernetes_sd_configs: + - role: service + metrics_path: /probe + params: + module: + - http_2xx + relabel_configs: + - action: keep + regex: true + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + - source_labels: + - __address__ + target_label: __param_target + - replacement: blackbox + target_label: __address__ + - source_labels: + - __param_target + target_label: instance + - action: labelmap + regex: __meta_kubernetes_service_label_(.+) + - source_labels: + - __meta_kubernetes_namespace + target_label: namespace + - source_labels: + - __meta_kubernetes_service_name + target_label: service + - job_name: prometheus + static_configs: + - targets: + - localhost:9090 + - job_name: prometheus-pushgateway + honor_labels: true + kubernetes_sd_configs: + - role: service + relabel_configs: + - action: keep + regex: pushgateway + source_labels: + - __meta_kubernetes_service_annotation_prometheus_io_probe + rule_files: + - /etc/config/recording_rules.yml + - /etc/config/alerting_rules.yml + - /etc/config/rules + - /etc/config/alerts + recording_rules.yml: | + {} + rules: | + {} diff --git a/chart/examples/public-hosted-ingress/rendered/prometheus/deploy.yaml b/chart/examples/public-hosted-ingress/rendered/prometheus/deploy.yaml new file mode 100644 index 0000000..80f382a --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/prometheus/deploy.yaml @@ -0,0 +1,95 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/deploy.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + strategy: + type: Recreate + rollingUpdate: null + selector: + matchLabels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + replicas: 1 + revisionHistoryLimit: 10 + template: + metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + spec: + enableServiceLinks: true + serviceAccountName: prometheus + containers: + + - name: prometheus-server + image: "quay.io/prometheus/prometheus:v3.9.0" + imagePullPolicy: "IfNotPresent" + args: + - --storage.tsdb.retention.time=7d + - --config.file=/etc/config/prometheus.yml + - --storage.tsdb.path=/data + - --web.console.libraries=/etc/prometheus/console_libraries + - --web.console.templates=/etc/prometheus/consoles + - --enable-feature=exemplar-storage + - --web.enable-otlp-receiver + ports: + - containerPort: 9090 + readinessProbe: + httpGet: + path: /-/ready + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 5 + timeoutSeconds: 4 + failureThreshold: 3 + successThreshold: 1 + livenessProbe: + httpGet: + path: /-/healthy + port: 9090 + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 15 + timeoutSeconds: 10 + failureThreshold: 3 + successThreshold: 1 + resources: + limits: + memory: 400Mi + volumeMounts: + - name: config-volume + mountPath: /etc/config + - name: storage-volume + mountPath: /data + subPath: "" + dnsPolicy: ClusterFirst + securityContext: + fsGroup: 65534 + runAsGroup: 65534 + runAsNonRoot: true + runAsUser: 65534 + terminationGracePeriodSeconds: 300 + volumes: + - name: config-volume + configMap: + name: prometheus + - name: storage-volume + emptyDir: + {} diff --git a/chart/examples/public-hosted-ingress/rendered/prometheus/service.yaml b/chart/examples/public-hosted-ingress/rendered/prometheus/service.yaml new file mode 100644 index 0000000..f6bb01c --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/prometheus/service.yaml @@ -0,0 +1,26 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default +spec: + ports: + - name: http + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + sessionAffinity: None + type: "ClusterIP" diff --git a/chart/examples/public-hosted-ingress/rendered/prometheus/serviceaccount.yaml b/chart/examples/public-hosted-ingress/rendered/prometheus/serviceaccount.yaml new file mode 100644 index 0000000..2281f27 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/prometheus/serviceaccount.yaml @@ -0,0 +1,16 @@ +--- +# Source: opentelemetry-demo/charts/prometheus/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: server + app.kubernetes.io/name: prometheus + app.kubernetes.io/instance: example + app.kubernetes.io/version: v3.9.0 + helm.sh/chart: prometheus-28.2.0 + app.kubernetes.io/part-of: prometheus + name: prometheus + namespace: default + annotations: + {} diff --git a/chart/examples/public-hosted-ingress/rendered/serviceaccount.yaml b/chart/examples/public-hosted-ingress/rendered/serviceaccount.yaml new file mode 100644 index 0000000..122e927 --- /dev/null +++ b/chart/examples/public-hosted-ingress/rendered/serviceaccount.yaml @@ -0,0 +1,13 @@ +--- +# Source: opentelemetry-demo/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: example + labels: + helm.sh/chart: opentelemetry-demo-0.40.6 + + + app.kubernetes.io/version: "2.2.0" + app.kubernetes.io/part-of: opentelemetry-demo + app.kubernetes.io/managed-by: Helm diff --git a/chart/examples/public-hosted-ingress/values.yaml b/chart/examples/public-hosted-ingress/values.yaml new file mode 100644 index 0000000..beb395c --- /dev/null +++ b/chart/examples/public-hosted-ingress/values.yaml @@ -0,0 +1,25 @@ +components: + frontend: + envOverrides: + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: https://otel-demo-collector.example.com/v1/traces + + frontend-proxy: + ingress: + enabled: true + hosts: + - host: otel-demo.example.com + paths: + - path: / + pathType: Prefix + port: 8080 + +opentelemetry-collector: + ingress: + enabled: true + hosts: + - host: otel-demo-collector.example.com + paths: + - path: / + pathType: Prefix + port: 4318 diff --git a/chart/flagd/demo.flagd.json b/chart/flagd/demo.flagd.json new file mode 100644 index 0000000..822fed5 --- /dev/null +++ b/chart/flagd/demo.flagd.json @@ -0,0 +1,150 @@ +{ + "$schema": "https://flagd.dev/schema/v0/flags.json", + "flags": { + "llmInaccurateResponse": { + "defaultVariant": "off", + "description": "LLM returns an inaccurate product summary for product ID L9ECAV7KIM", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "llmRateLimitError": { + "defaultVariant": "off", + "description": "LLM intermittently returns a rate limit error", + "state": "ENABLED", + "variants": { + "off": false, + "on": true + } + }, + "productCatalogFailure": { + "description": "Fail product catalog service on a specific product", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "recommendationCacheFailure": { + "description": "Fail recommendation service cache", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adManualGc": { + "description": "Triggers full manual garbage collections in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adHighCpu": { + "description": "Triggers high cpu load in the ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "adFailure": { + "description": "Fail ad service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "kafkaQueueProblems": { + "description": "Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "cartFailure": { + "description": "Fail cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "paymentFailure": { + "description": "Fail payment service charge requests n%", + "state": "ENABLED", + "variants": { + "100%": 1, + "90%": 0.95, + "75%": 0.75, + "50%": 0.5, + "25%": 0.25, + "10%": 0.1, + "off": 0 + }, + "defaultVariant": "off" + }, + "paymentUnreachable": { + "description": "Payment service is unavailable", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "loadGeneratorFloodHomepage": { + "description": "Flood the frontend with a large amount of requests.", + "state": "ENABLED", + "variants": { + "on": 100, + "off": 0 + }, + "defaultVariant": "off" + }, + "imageSlowLoad": { + "description": "slow loading images in the frontend", + "state": "ENABLED", + "variants": { + "10sec": 10000, + "5sec": 5000, + "off": 0 + }, + "defaultVariant": "off" + }, + "failedReadinessProbe": { + "description": "readiness probe failure for cart service", + "state": "ENABLED", + "variants": { + "on": true, + "off": false + }, + "defaultVariant": "off" + }, + "emailMemoryLeak": { + "description": "Memory leak in the email service.", + "state": "ENABLED", + "variants": { + "off": 0, + "1x": 1, + "10x": 10, + "100x": 100, + "1000x": 1000, + "10000x": 10000 + }, + "defaultVariant": "off" + } + } +} diff --git a/chart/grafana/provisioning/alerting/cart-service-alerting.yml b/chart/grafana/provisioning/alerting/cart-service-alerting.yml new file mode 100644 index 0000000..d811eca --- /dev/null +++ b/chart/grafana/provisioning/alerting/cart-service-alerting.yml @@ -0,0 +1,93 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +--- +apiVersion: 1 +groups: + - orgId: 1 + name: otel-demo + folder: cart + interval: 1m + rules: + - uid: des78nlna99tsf + title: CartAddItemHighLatency + condition: p95_threshold + data: + - refId: p95_duration + relativeTimeRange: + from: 600 + to: 0 + datasourceUid: webstore-metrics + model: + editorMode: code + expr: |- + histogram_quantile( + 0.95, + sum by (deployment_environment_name, service_namespace, service_name, service_instance_id, http_route, http_request_method, le) ( + rate( + http_server_request_duration_seconds_bucket{ + deployment_environment_name="", + service_namespace="opentelemetry-demo", + service_name="cart", + http_request_method="POST", + http_route="/oteldemo.CartService/AddItem" + }[5m] + ) + ) + ) + instant: true + interval: "" + intervalMs: 1000 + legendFormat: __auto + maxDataPoints: 43200 + range: false + refId: p95_duration + - refId: p95_threshold + datasourceUid: __expr__ + model: + conditions: + - evaluator: + params: + - 0.0001 + type: gt + operator: + type: and + query: + params: + - C + reducer: + params: [] + type: last + type: query + datasource: + type: __expr__ + uid: __expr__ + expression: p95_duration + intervalMs: 1000 + maxDataPoints: 43200 + refId: p95_threshold + type: threshold + dashboardUid: febljk0a32qyoa + panelId: 17 + noDataState: NoData + execErrState: Error + for: 1m + keepFiringFor: 2m + annotations: + description: |- + The 95th percentile response time for operation {{ $labels.service_namespace + }}/{{ $labels.service_name }} "{{ $labels.http_request_method }} {{ + $labels.http_route }}" has been + above xxx seconds for 2 minutes on {{ $labels.service_instance_id}}. Current + value: {{ .Value | humanizeDuration }}. + summary: |- + High P95 for {{ $labels.service_namespace }}/{{ $labels.service_name }} "{{ + $labels.http_request_method }} {{ $labels.http_route }}" + labels: + service_name: cart + service_namespace: opentelemetry-demo + severity: warning + team_name: webstore + isPaused: false + notification_settings: + receiver: grafana-default-email diff --git a/chart/grafana/provisioning/dashboards/NGINX-metrics.json b/chart/grafana/provisioning/dashboards/NGINX-metrics.json new file mode 100644 index 0000000..8badf72 --- /dev/null +++ b/chart/grafana/provisioning/dashboards/NGINX-metrics.json @@ -0,0 +1,341 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of accepted client connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_accepted_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Accepted connections", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of handled connections", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 5, + "x": 5, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_handled_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Connections handled", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The total number of client requests", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_requests_total", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{__name__}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Total number of client requests", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "The current number of nginx connections by state", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 11, + "w": 19, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "nginx_connections_current", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "{{state}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Number of connections by state", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "[Image-Provider] NGINX Metrics", + "uid": "6fb665e0-cb81-40a5-bd21-a9485c5477b4", + "version": 1 +} diff --git a/chart/grafana/provisioning/dashboards/apm-dashboard.json b/chart/grafana/provisioning/dashboards/apm-dashboard.json new file mode 100644 index 0000000..a2cdcab --- /dev/null +++ b/chart/grafana/provisioning/dashboards/apm-dashboard.json @@ -0,0 +1,2267 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "APM dashboard for monitoring OpenTelemetry-based services. \n\nInstrument your applications using OpenTelemetry SDKs and send traces, metrics, and logs to Jaeger for traces, a Prometheus-compatible database for metrics, and OpenSearch for logs. This dashboard provides a centralized view of your application's health and performance. ", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 1, + "links": [], + "panels": [ + { + "description": "service.namespace=${service_namespace}, service.name=${service_name}, deployment.environment.name=${deployment_environment_name}", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 20, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "

\"OpenTelemetry Service ${service_namespace}/${service_name}

\n", + "mode": "html" + }, + "pluginVersion": "12.2.0", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Shows the timestamp of the latest metrics received in the past 24h.", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#24292e", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 3, + "x": 10, + "y": 0 + }, + "hideTimeOverride": true, + "id": 39, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "/^Time$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "timestamp(sum by (deployment_environment_name, service_namespace, service_name) (target_info{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}) or absent{})\n", + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "timeFrom": "now-24h", + "title": "Latest metrics received", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 15, + "panels": [], + "title": "Server RED Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration and https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 0, + "y": 3 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP p95", + "range": true, + "refId": "HTTP P95", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n http_server_request_duration_seconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "HTTP avg", + "range": true, + "refId": "HTTP AVG", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "histogram_quantile(\n 0.95,\n sum by (le, deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_bucket{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC p95", + "range": true, + "refId": "RPC P95" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "avg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_sum{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n ) / 1000\n)\n/\navg by (deployment_environment_name, service_namespace, service_name) (\n rate(\n rpc_server_duration_milliseconds_count{\n deployment_environment_name=~\"$deployment_environment_name\",\n service_namespace=~\"$service_namespace\",\n service_name=\"$service_name\"\n }[$__rate_interval]\n )\n)", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC avg", + "range": true, + "refId": "RPC AVG" + } + ], + "title": "Duration", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP and RPC endpoints aggregation on the `http.server.request.duration` and `rpc.server.duration` metrics. \n\nErrors are identified by : \n* `http.response.status_code=~\"5..\"`\n* `rpc.grpc.status_code!=\"0\"`\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMax": 100, + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 5, + "y": 3 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "(\n (sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval])) * 100) \n / \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)\nor\n(\n 0\n * \n sum by(deployment_environment_name, service_namespace, service_name) (rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]))\n)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP 5xx errors", + "range": true, + "refId": "HTTP 5xx", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "((sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval])) * 100) / sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))\nor\n(0 * sum without (rpc_grpc_status_code, instance) (rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])))", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC errors", + "range": true, + "refId": "RPC Err" + } + ], + "title": "Error", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP & RPC endpoints aggregation on the `http.server.request.duration` & `rpc.server.duration` metrics.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "log": 10, + "type": "log" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "noValue": "No HTTP or RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 5, + "x": 10, + "y": 3 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "(sum(rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "HTTP requests", + "range": true, + "refId": "HTTP RPS" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(sum(rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval])) by (deployment_environment_name, service_namespace, service_name)) * $__interval_ms / 1000", + "hide": false, + "instant": false, + "interval": "60", + "legendFormat": "RPC requests", + "range": true, + "refId": "RPC RPS" + } + ], + "title": "Request Rate", + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 9, + "x": 15, + "y": 3 + }, + "id": 40, + "options": { + "alertInstanceLabelFilter": "{service_name=\"$service_name\", service_namespace=\"$service_namespace\"}", + "alertName": "", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 20, + "showInactiveAlerts": false, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": false, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.2.0", + "title": "Alerts", + "type": "alertlist" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound HTTP operations of the service (aka HTTP endpoints) based on the `http.server.request.duration` metric.\n\nErrors are identified by `http.response.status_code=~\"5..\"`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpserverrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + }, + { + "id": "custom.width", + "value": 219 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 21, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(http_server_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(http_server_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \" \",\n \"http_request_method\",\n \"http_route\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "HTTP Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Inbound gRPC operations of the service (aka gRPC endpoints) based on the `rpc.server.request.duration` metric.\n\nErrors are identified by `rpc.grpc.status_code != 0` which make the panel specific to the gRPC protocol.\n\nhttps://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#metric-rpcserverduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC operation", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (p99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 27, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Operation" + } + ] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\nsum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", rpc_grpc_status_code!=\"0\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\n histogram_quantile(\n 0.99,\n sum by (le, operation) (\n label_join(\n rate(rpc_server_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"operation\",\n \"/\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )\n ", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{operation}}", + "range": true, + "refId": "Duration" + } + ], + "title": "gRPC Operations", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "operation", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #Duration": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "operation": 0 + }, + "renameByName": { + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 28, + "panels": [], + "title": "Outbound Services and Databases", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "HTTP calls made by the service based on the `http.client.request.duration` metric.\n\nCalls broken done by remote `server.address` and by `http.request.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/http/http-metrics/#metric-httpclientrequestduration", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No HTTP call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 16 + }, + "id": 23, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ", + "fullMetaSearch": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(http_client_request_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \" \",\n \"server_address\",\n \"http_request_method\",\n \"url_template\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{http_request_method}} {{url_template}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound HTTP Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "DB calls made by the service based on the `db.client.operation.duration` metric.\n\nCalls broken down by `server.address` and `db.namespace`.\n\nSee https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No database call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "s" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 24, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n)\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n / \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n ) or (0 * \n sum by (database) (\n label_join(\n rate(db_client_operation_duration_seconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, database) (\n label_join(\n rate(db_client_operation_duration_seconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"database\",\n \"/\",\n \"server_address\",\n \"db_namespace\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "{{server_address}} {{db_namespace}}", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound Databases", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "DURATION": { + "timeField": "Time" + }, + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "database", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "database": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "database": "Database", + "database_operation": "Database Operation", + "operation": "Operation", + "outbound_service": "Service" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "gRPC calls made by the service based on the `rpc.client.request.duration` metric.\n\nSpecific to gRPC due to the usage of the `grpc.status.code` attribute to identify errors.\n\nCalls broken down by `server.address`, `rpc.service`, and `rpc.method`.\n\nSee https://opentelemetry.io/docs/specs/semconv/rpc/rpc-metrics/#rpc-client\n\n", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No RPC call", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Duration (P99)" + }, + "properties": [ + { + "id": "unit", + "value": "ms" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "unit", + "value": "reqps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 21 + }, + "id": 32, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "RPS", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\", http_response_status_code=~\"5..\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n / \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n ) or (0 * \n sum by (outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_count{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[$__rate_interval]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n )", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "ERR_PCT" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nhistogram_quantile(\n 0.99,\n sum by (le, outbound_service) (\n label_join(\n rate(rpc_client_duration_milliseconds_bucket{deployment_environment_name=~\"$deployment_environment_name\", service_namespace=~\"$service_namespace\", service_name=\"$service_name\"}[5m]),\n \"outbound_service\",\n \"/\",\n \"server_address\",\n \"rpc_service\",\n \"rpc_method\"\n )\n )\n)", + "hide": false, + "instant": false, + "interval": "60s", + "legendFormat": "__auto", + "range": true, + "refId": "DURATION" + } + ], + "title": "Outbound gRPC Services", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "Duration": { + "timeField": "Time" + }, + "ERR_PCT": { + "timeField": "Time" + }, + "RPS": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "outbound_service", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #DURATION": 1, + "Trend #ERR_PCT": 2, + "Trend #RPS": 3, + "outbound_service": 0 + }, + "renameByName": { + "Trend #DURATION": "Duration (P99)", + "Trend #Duration": "Duration (p99)", + "Trend #ERR_PCT": "Error", + "Trend #RPS": "Rate", + "operation": "Operation", + "outbound_service": "Service Method" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, + "id": 42, + "panels": [], + "title": "Infrastructure", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Host CPU" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Host Used Memory" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 27 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (host_name) (\n rate(system_cpu_time_seconds_total{service_name=\"\", state!=\"idle\"}[$__rate_interval])\n)\n* on(host_name) \ngroup by (host_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": " (\n (\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\", state=\"used\"}\n )\n /\n sum by (host_name) (\n system_memory_usage_bytes{service_name=\"\"}\n )\n )\n * on(host_name) (\n group by (host_name) (\n target_info{service_name=\"${service_name}\"}\n )\n )\n )\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_pct" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_pct": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "host_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Host CPU", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_pct": "Host Used Memory", + "host_name": "Host", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Pod CPU usage" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Pod Memory Usage" + }, + "properties": [ + { + "id": "unit", + "value": "decbytes" + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 30 + }, + "id": 43, + "options": { + "cellHeight": "sm", + "frameIndex": 1, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "editorMode": "code", + "expr": "sum by (k8s_pod_name) (\n rate(k8s_pod_cpu_time_seconds_total{}[$__rate_interval])\n)\n* on(k8s_pod_name) \ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "legendFormat": "__auto", + "range": true, + "refId": "cpu_time_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "\nsum by (k8s_pod_name) (\n k8s_pod_memory_working_set_bytes{}\n)\n* on(k8s_pod_name)\ngroup by (k8s_pod_name) (\n target_info{service_name=\"${service_name}\", service_instance_id!=\"\"}\n)\n", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "memory_usage_bytes" + } + ], + "title": "", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "cpu_time_percentage": { + "timeField": "Time" + }, + "memory_usage_pct": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "k8s_pod_name", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "service_instance_id": true + }, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #cpu_time_pct": "Pod CPU usage", + "Trend #cpu_time_percentage": "Host CPU", + "Trend #memory_usage_bytes": "Pod Memory Usage", + "Trend #memory_usage_pct": "Host Memory", + "k8s_pod_name": "Kubernetes Pod Name", + "service_instance_id_host_name": "Instance / Host" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 25, + "panels": [], + "title": "Logs", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs of the service, filtered by `service.name`, `service.namespace`, and `deployment.environment.name`.\n\nTo explore the logs, open the menu clicking on the icon `⋮` of this panel and click on `Explore`.", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No application logs", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "@timestamp" + }, + "properties": [ + { + "id": "custom.width", + "value": 226 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 136 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "instrumentationScope.name" + }, + "properties": [ + { + "id": "custom.width", + "value": 246 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 24, + "x": 0, + "y": 34 + }, + "id": 26, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "hide": false, + "luceneQueryType": "Logs", + "metrics": [ + { + "id": "1", + "type": "logs" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" and resource.service.namespace=\"$service_namespace\" | fields @timestamp, severity.text, body, instrumentationScope.name\n", + "queryType": "PPL", + "refId": "B", + "timeField": "observedTimestamp" + } + ], + "title": "", + "transformations": [ + { + "id": "formatTime", + "options": { + "outputFormat": "YYYY-MM-DD HH:MM:ss.sss", + "timeField": "@timestamp", + "timezone": "browser", + "useTimezone": true + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "@timestamp": 0, + "body": 3, + "instrumentationScope.name": 2, + "severity.text": 1 + }, + "renameByName": { + "@timestamp": "Time", + "body": "Message", + "instrumentationScope.name": "Logger", + "severity.text": "Severity" + } + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 29, + "panels": [], + "title": "Traces", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "description": "Traces containing a span emitted by the service", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "noValue": "No traces", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trace Service" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Span ID" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": false + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "deployment.environment.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.name" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "service.namespace" + }, + "properties": [ + { + "id": "custom.hideFrom.viz", + "value": true + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 50 + }, + "id": 30, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "${jaeger_datasource}" + }, + "queryType": "search", + "refId": "A", + "service": "$service_name", + "tags": "service.namespace=\"$service_namespace\"" + } + ], + "title": "", + "type": "table" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [ + { + "allowCustomValue": false, + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "Jaeger", + "value": "webstore-traces" + }, + "description": "OpenTelemetry traces", + "label": "Traces", + "name": "jaeger_datasource", + "options": [], + "query": "jaeger", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "current": { + "text": "demo", + "value": "demo" + }, + "definition": "label_values(target_info,deployment_environment_name)", + "description": "Deployment environment (`production`, `staging`...).\nResource attribute `deployment.environment.name` via `target_info`.\nValue `<>` when the resource attribute `deployment.environment.name` is not set.", + "label": "Environment", + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info,deployment_environment_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "otel-demo", + "value": "otel-demo" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "description": "Service namespace.\nResource attribute `service.namespace` via `target_info`.\nValue `<>` when the resource attribute `service.namespace` is not set.", + "includeAll": false, + "label": "Namespace", + "name": "service_namespace", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_namespace)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "" + } + ], + "type": "query" + }, + { + "current": { + "text": "checkout", + "value": "checkout" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "description": "Service name.\nResource attribute `service.name` via `target_info`.", + "label": "Name", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(target_info{service_namespace=~\"$service_namespace\", deployment_environment_name=~\"$deployment_environment_name\", telemetry_sdk_name=~\"\\\\S.*\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "APM Dashboard (Jaeger, Prometheus, OpenSearch)", + "uid": "febljk0a32qyoa", + "version": 1 +} diff --git a/chart/grafana/provisioning/dashboards/demo-dashboard.json b/chart/grafana/provisioning/dashboards/demo-dashboard.json new file mode 100644 index 0000000..437e3e6 --- /dev/null +++ b/chart/grafana/provisioning/dashboards/demo-dashboard.json @@ -0,0 +1,1187 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 2, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 21, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows RED metrics for the selected service, as generated by the spanmetrics connector in the OpenTelemetry Collector.\nIf the selected service emits logs, the logs will also be displayed.\nCustom metrics generated by some services are also displayed. \n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.5.2", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 14, + "panels": [], + "title": "Spanmetrics (RED metrics)", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 4 + }, + "id": 12, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_duration_milliseconds_count{service_name=\"${service}\"}[$__rate_interval]))", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Requests Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 4 + }, + "id": 10, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by (span_name) (rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\", service_name=\"${service}\"}[$__rate_interval]))", + "interval": "", + "legendFormat": "{{ span_name }}", + "range": true, + "refId": "A" + } + ], + "title": "Error Rate by Span Name", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 4 + }, + "id": 2, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=\"${service}\"}[$__rate_interval])) by (le, span_name))", + "legendFormat": "{{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Average Duration by Span Name", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 19, + "panels": [], + "title": "Application Log Records", + "type": "row" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "left", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "count()" + }, + "properties": [ + { + "id": "custom.width", + "value": 90 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 4, + "x": 0, + "y": 13 + }, + "id": 20, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "severity.text.keyword", + "id": "3", + "settings": { + "min_doc_count": "1", + "order": "desc", + "orderBy": "_count", + "size": "0" + }, + "type": "terms" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| stats count() by severity.text", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records by Severity", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Count": "", + "severity.text.keyword": "Severity" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto", + "wrapText": false + }, + "filterable": true, + "inspect": true + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "observedTimestamp" + }, + "properties": [] + }, + { + "matcher": { + "id": "byName", + "options": "body" + }, + "properties": [ + { + "id": "custom.width", + "value": 386 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "severity.text" + }, + "properties": [ + { + "id": "custom.width", + "value": 127 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 20, + "x": 4, + "y": 13 + }, + "id": 17, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "alias": "", + "bucketAggs": [], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "webstore-logs" + }, + "format": "table", + "hide": false, + "metrics": [ + { + "id": "1", + "settings": { + "order": "desc", + "size": "100", + "useTimeRange": true + }, + "type": "raw_data" + } + ], + "query": "search source=otel-logs-*\n| where resource.service.name=\"${service}\"\n| sort - observedTimestamp \n| head 100", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "Log Records (100 recent entries)", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "@timestamp": true + }, + "includeByName": {}, + "indexByName": { + "@timestamp": 1, + "attributes.data_stream.dataset": 4, + "attributes.data_stream.namespace": 5, + "attributes.data_stream.type": 6, + "attributes.productId": 7, + "attributes.quantity": 8, + "attributes.userId": 9, + "body": 3, + "instrumentationScope.name": 10, + "observedTimestamp": 0, + "resource.container.id": 11, + "resource.docker.cli.cobra.command_path": 12, + "resource.host.name": 13, + "resource.service.name": 14, + "resource.telemetry.sdk.language": 15, + "resource.telemetry.sdk.name": 16, + "resource.telemetry.sdk.version": 17, + "severity.number": 18, + "severity.text": 2, + "spanId": 19, + "traceId": 20 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 18, + "panels": [], + "title": "Application Metrics", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 22 + }, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"system\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(process_runtime_cpython_cpu_time_seconds_total{type=~\"user\"}[$__rate_interval])*100", + "hide": false, + "interval": "2m", + "legendFormat": "{{job}} ({{type}})", + "range": true, + "refId": "B" + } + ], + "title": "Python services (CPU%)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 22 + }, + "id": 8, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "process_runtime_cpython_memory_bytes{type=\"rss\"}", + "legendFormat": "{{job}}", + "range": true, + "refId": "A" + } + ], + "title": "Python services (Memory)", + "transformations": [ + { + "id": "renameByRegex", + "options": { + "regex": "opentelemetry-demo/(.*)", + "renamePattern": "$1" + } + } + ], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 30 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(app_recommendations_counter_total{recommendation_type=\"catalog\"}[$__rate_interval])", + "interval": "2m", + "legendFormat": "recommendations", + "range": true, + "refId": "A" + } + ], + "title": "Recommendations Rate", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 30 + }, + "id": 16, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "rate(otel_trace_span_processor_spans{job=\"quote\"}[2m])*120", + "interval": "2m", + "legendFormat": "{{state}}", + "range": true, + "refId": "A" + } + ], + "title": "Quote Service batch span processor", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 23, + "panels": [], + "title": "Service Dependency", + "type": "row" + }, + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 18, + "w": 24, + "x": 0, + "y": 39 + }, + "id": 22, + "options": { + "edges": { + "mainStatUnit": "requests" + }, + "nodes": { + "arcs": [], + "mainStatUnit": "" + }, + "zoomMode": "cooperative" + }, + "pluginVersion": "11.5.2", + "targets": [ + { + "datasource": { + "type": "jaeger", + "uid": "webstore-traces" + }, + "queryType": "dependencyGraph", + "refId": "A" + } + ], + "title": "Service Dependency", + "type": "nodeGraph" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "current": { + "text": "frontend", + "value": "frontend" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "traces_span_metrics_duration_milliseconds_bucket", + "includeAll": false, + "label": "Service", + "name": "service", + "options": [], + "query": { + "query": "traces_span_metrics_duration_milliseconds_bucket", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "/.*service.name=\\\"([^\\\"]+)\\\".*/", + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Demo Dashboard", + "uid": "W2gX2zHVk", + "version": 2, + "weekStart": "" +} diff --git a/chart/grafana/provisioning/dashboards/exemplars-dashboard.json b/chart/grafana/provisioning/dashboards/exemplars-dashboard.json new file mode 100644 index 0000000..e7a3943 --- /dev/null +++ b/chart/grafana/provisioning/dashboards/exemplars-dashboard.json @@ -0,0 +1,459 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 8, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard shows the use of metric exemplars.\nExemplars can be used to look up a trace in Jaeger.\nOnly the most recent exemplars may still be available in Jaeger.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.6.1", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 4, + "panels": [], + "title": "GetCart Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "GetCart Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 5, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_get_cart_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 GetCart", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart GetCart Latency with Exemplars", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 3, + "panels": [], + "title": "AddItem Exemplars", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 6, + "interval": "2m", + "options": { + "calculate": false, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "reverse": false, + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-09 + }, + "legend": { + "show": true + }, + "rowsFrame": { + "layout": "auto" + }, + "tooltip": { + "mode": "single", + "showColorScale": false, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval]))", + "format": "heatmap", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": true, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "AddItem Latency Heatmap with Exemplars", + "type": "heatmap" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 32 + }, + "id": 1, + "interval": "2m", + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.6.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": true, + "expr": "histogram_quantile(0.95, sum by(le) (rate(app_cart_add_item_latency_seconds_bucket[$__rate_interval])))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "p95 AddItem", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "95th Pct Cart AddItem Latency with Exemplars", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Cart Service Exemplars", + "uid": "ce6sd46kfkglca", + "version": 1 +} diff --git a/chart/grafana/provisioning/dashboards/linux-dashboard.json b/chart/grafana/provisioning/dashboards/linux-dashboard.json new file mode 100644 index 0000000..1d7985b --- /dev/null +++ b/chart/grafana/provisioning/dashboards/linux-dashboard.json @@ -0,0 +1,2840 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "OpenTelemetry Collector hostmetrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 5, + "links": [], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 267, + "panels": [], + "title": "overview【 $host_name】", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/cpuscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 20, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_cpu_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", state!=\"idle\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "CPU Busy", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Non available RAM memory\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/memoryscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 16, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_utilization_ratio{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$node_name\", host_name=~\"$host_name\", job=\"\", state=\"used\"}", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "intervalFactor": 1, + "range": true, + "refId": "A", + "step": 240, + "useBackend": false + } + ], + "title": "RAM Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/hostmetricsreceiver#collecting-host-metrics-from-inside-a-container-linux-only", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 80 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 154, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "1 \n-\nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"}) \n/ \nsum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "FS Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (5 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 155, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_5m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "sysload_5m", + "step": 240 + } + ], + "title": "Sys Load (5m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Busy state of all CPU cores together (15 min average)\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/loadscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 85 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 95 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 19, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_cpu_load_average_15m{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"} ", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "sysload_15m", + "step": 240 + } + ], + "title": "Sys Load (15m avg)", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Used Swap\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/pagingscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 10 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 25 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 21, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" })\n/\nsum(system_paging_usage_bytes { k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "SWAP Used", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total number of CPU cores", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 1 + }, + "id": 14, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "system_cpu_logical_count{ k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\" }", + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "CPU Cores", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total RAM", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 20, + "y": 1 + }, + "id": 75, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_memory_limit_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "RAM Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Total SWAP", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 22, + "y": 1 + }, + "id": 18, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_paging_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "SWAP Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "Total FS\n\nhttps://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/documentation.md", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": 0 + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 70 + }, + { + "color": "rgba(245, 54, 54, 0.9)", + "value": 90 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 2, + "x": 18, + "y": 3 + }, + "id": 23, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "instant": true, + "intervalFactor": 1, + "range": false, + "refId": "A", + "step": 240 + } + ], + "title": "FS Total", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "System uptime", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 1, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 4, + "x": 20, + "y": 3 + }, + "id": 15, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "system_uptime_seconds{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}", + "instant": true, + "intervalFactor": 1, + "legendFormat": "__auto", + "range": false, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B" + } + ], + "title": "Uptime", + "type": "stat" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 266, + "panels": [], + "title": "Basic", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "percent" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Busy System" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#890F02", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy User" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Wait" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy IRQs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "super-light-yellow", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Busy Other" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-orange", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Idle" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 6 + }, + "id": 77, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 250 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"system\"}[$__rate_interval])) \n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy System", + "range": true, + "refId": "busy system", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{kk8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"user\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy User", + "range": true, + "refId": "busy user", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"wait\"}[$__rate_interval])) \n/ \nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Wait", + "range": true, + "refId": "busy wait", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\".*irq\"}[$__rate_interval])) \n/\nsum((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy IRQs", + "range": true, + "refId": "busy irq", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum(irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state!~\".*irq\", state!=\"idle\", state!=\"user\", state!=\"wait\", state!=\"system\"}[$__rate_interval]))\n/\nsum ((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Busy Other", + "range": true, + "refId": "busy other", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "fej9ntb4ninswf" + }, + "editorMode": "code", + "expr": "sum by(host_name) (irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"idle\"}[$__rate_interval])) \n/ \non(host_name) group_left sum by (host_name)((irate(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}[$__rate_interval])))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Idle", + "range": true, + "refId": "idle", + "step": 240 + } + ], + "title": "CPU", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Apps" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#629E51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Buffers" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#614D93", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#6D1F62", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Cached" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#511749", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Committed" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#508642", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A437C", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Hardware Corrupted - Amount of RAM that the kernel identified as corrupted / not working" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#CFFAFF", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Inactive" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#584477", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "PageTables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Page_Tables" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#0A50A1", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "SWAP Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#806EB7", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Slab_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0752D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap Used" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#BF1B00", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Cache" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#C15C17", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Swap_Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#2F575E", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Unused" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#EAB839", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Total" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#E0F9D7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Cache + Buffer" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#052B51", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "RAM Free" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#7EB26D", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Available" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "#DEDAF7", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 0 + }, + { + "id": "custom.stacking", + "value": { + "group": false, + "mode": "normal" + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 5, + "x": 6, + "y": 6 + }, + "id": 78, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true, + "width": 350 + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Available", + "range": true, + "refId": "A", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "RAM Free", + "range": true, + "refId": "B", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=~\"cached|buffered\"})", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "RAM Cache + Buffer", + "range": true, + "refId": "C", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum(system_memory_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"used\"})", + "format": "time_series", + "instant": false, + "intervalFactor": 1, + "legendFormat": "Used", + "range": true, + "refId": "E", + "step": 240 + } + ], + "title": "Memory", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Receive (-) / Transmit (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "binBps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Rec.*/" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 11, + "y": 6 + }, + "id": 74, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"receive\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Receive", + "range": true, + "refId": "receive", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"transmit\", job=\"\"}[$__rate_interval]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Transmit", + "range": true, + "refId": "transmit", + "step": 240 + } + ], + "title": "Network Traffic", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Read (-) / Write (+)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 40, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/.*Read*./" + }, + "properties": [ + { + "id": "custom.transform", + "value": "negative-Y" + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 7, + "x": 17, + "y": 6 + }, + "id": 42, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"read\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Read", + "range": true, + "refId": "read", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(irate(system_disk_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", direction=\"write\"}[$__rate_interval]))", + "format": "time_series", + "hide": false, + "intervalFactor": 1, + "legendFormat": "Write", + "range": true, + "refId": "write", + "step": 240 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "C" + } + ], + "title": "I/O Usage Read / Write", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, + "id": 272, + "panels": [], + "title": "Details", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_bytes" + }, + "properties": [ + { + "id": "unit", + "value": "binBps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_dropped_packets" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #receive_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Trend #transmit_errors" + }, + "properties": [ + { + "id": "unit", + "value": "pps" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 15, + "x": 0, + "y": 14 + }, + "id": 270, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"transmit\"}[$__rate_interval]))", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_bytes", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_io_bytes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\", direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_bytes" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_dropped_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_dropped_packets" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"receive\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "receive_errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "expr": "sum by(device) (rate(system_network_errors_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", job=\"\",direction=\"transmit\"}[$__rate_interval]))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "transmit_errors" + } + ], + "title": "Network traffic", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "A": { + "timeField": "Time" + }, + "receive": { + "timeField": "Time" + }, + "receive_bytes": { + "timeField": "Time" + }, + "receive_dropped_packets": { + "timeField": "Time" + }, + "receive_errors": { + "timeField": "Time" + }, + "transmit": { + "timeField": "Time" + }, + "transmit_bytes": { + "timeField": "Time" + }, + "transmit_dropped_packets": { + "timeField": "Time" + }, + "transmit_errors": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "device", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #receive_bytes": 4, + "Trend #receive_dropped_packets": 5, + "Trend #receive_errors": 3, + "Trend #transmit_bytes": 1, + "Trend #transmit_dropped_packets": 2, + "Trend #transmit_errors": 6, + "device": 0 + }, + "renameByName": { + "Trend #receive": "Receive", + "Trend #receive_bytes": "Receive", + "Trend #receive_dropped_packets": "Receive dropped", + "Trend #receive_errors": "Transmit err", + "Trend #transmit": "Transmit", + "Trend #transmit_bytes": "Transmit", + "Trend #transmit_dropped_packets": "Transmit dropped", + "Trend #transmit_errors": "Receive err", + "device": "Interface" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Used %" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "basic", + "type": "gauge", + "valueDisplayMode": "color" + } + }, + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "min", + "value": 0 + }, + { + "id": "max", + "value": 1 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Free" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Total" + }, + "properties": [ + { + "id": "custom.width", + "value": 80 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Used" + }, + "properties": [ + { + "id": "custom.width", + "value": 78 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Mount" + }, + "properties": [ + { + "id": "custom.width", + "value": 200 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 9, + "x": 15, + "y": 14 + }, + "id": 269, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "12.2.0", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\", state=\"free\"})", + "format": "table", + "fullMetaSearch": false, + "includeNullMetadata": true, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "free", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "sum by(mountpoint) (system_filesystem_usage_bytes{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"})", + "format": "table", + "hide": false, + "instant": true, + "legendFormat": "__auto", + "range": false, + "refId": "total" + } + ], + "title": "Disk usage", + "transformations": [ + { + "id": "groupBy", + "options": { + "fields": { + "/oldroot": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "/var/lib": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #free": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "Value #total": { + "aggregations": [ + "lastNotNull" + ], + "operation": "aggregate" + }, + "mountpoint": { + "aggregations": [], + "operation": "groupby" + } + } + } + }, + { + "id": "merge", + "options": {} + }, + { + "id": "calculateField", + "options": { + "alias": "used", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + }, + "operator": "-", + "right": { + "matcher": { + "id": "byName", + "options": "Value #free (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "Used %", + "binary": { + "left": { + "matcher": { + "id": "byName", + "options": "used" + } + }, + "operator": "/", + "right": { + "matcher": { + "id": "byName", + "options": "Value #total (lastNotNull)" + } + } + }, + "mode": "binary", + "reduce": { + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Used %": "Used %", + "Value #free (lastNotNull)": "Free", + "Value #total (lastNotNull)": "Total", + "mountpoint": "Mount", + "used": "Used" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "Mount" + } + ] + } + } + ], + "type": "table" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "linux", + "opentelemetry" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "DS_PROMETHEUS", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "allowCustomValue": true, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes cluster. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "allowCustomValue": false, + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "When the Linux server is a Kubernetes node, name of the Kubernetes node. \nFor other use cases, select \"All\". ", + "includeAll": true, + "label": "K8s node", + "name": "node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "docker-desktop", + "value": "docker-desktop" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(system_cpu_time_seconds_total,host_name)", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(system_cpu_time_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 5, + "type": "query" + }, + { + "allowCustomValue": false, + "current": { + "text": "", + "value": "" + }, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "hide": 2, + "label": "host count", + "name": "host_count", + "options": [], + "query": { + "qryType": 3, + "query": "query_result(count(system_cpu_time_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"${node_name}\", host_name=~\"$host_name\"}))", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "/{} (.*) .*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Linux", + "uid": "otel-demo-hostmetrics", + "version": 2 +} diff --git a/chart/grafana/provisioning/dashboards/opentelemetry-collector.json b/chart/grafana/provisioning/dashboards/opentelemetry-collector.json new file mode 100644 index 0000000..6df3e36 --- /dev/null +++ b/chart/grafana/provisioning/dashboards/opentelemetry-collector.json @@ -0,0 +1,5767 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Provides information about the status of the OpenTelemetry Collector", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 12, + "links": [], + "liveNow": true, + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 55, + "panels": [], + "title": "Overview", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + }, + { + "id": "custom.width", + "value": 84 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 4, + "w": 17, + "x": 0, + "y": 1 + }, + "id": 57, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 17, + "y": 1 + }, + "id": 56, + "options": { + "alertInstanceLabelFilter": "deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"", + "alertName": "OpenTelemetryCollector", + "dashboardAlerts": false, + "groupBy": [], + "groupMode": "default", + "maxItems": 17, + "showInactiveAlerts": true, + "sortOrder": 1, + "stateFilter": { + "error": true, + "firing": true, + "noData": true, + "normal": false, + "pending": true, + "recovering": true + }, + "viewMode": "list" + }, + "pluginVersion": "12.3.1", + "title": "Alerts", + "type": "alertlist" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 5 + }, + "id": 63, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Receivers", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 5 + }, + "id": 64, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 5 + }, + "id": 65, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 5 + }, + "id": 66, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 5 + }, + "id": 67, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 5 + }, + "id": 68, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 5 + }, + "id": 69, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 8 + }, + "id": 80, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Processors", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 8 + }, + "id": 88, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 8 + }, + "id": 89, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 8 + }, + "id": 90, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 8 + }, + "id": 91, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 8 + }, + "id": 92, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 8 + }, + "id": 93, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 0, + "y": 11 + }, + "id": 87, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "Exporters", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "", + "type": "text" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 2, + "y": 11 + }, + "id": 74, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 5, + "y": 11 + }, + "id": 82, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 7, + "y": 11 + }, + "id": 76, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 11 + }, + "id": 77, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 11 + }, + "id": 78, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 15, + "y": 11 + }, + "id": 79, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 14 + }, + "id": 53, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "OTel Collectors. Derived from the `otelcol.process.uptime` metric.", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Uptime" + }, + "properties": [ + { + "id": "unit", + "value": "dtdurations" + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Namespace" + }, + "properties": [ + { + "id": "custom.width", + "value": 110 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Version" + }, + "properties": [ + { + "id": "custom.width", + "value": 85 + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 54, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Service Name" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\", service_instance_id=~\"$service_instance_id\", service_name=~\"$service_name\"}", + "format": "table", + "instant": true, + "legendFormat": "__auto", + "queryType": "instant", + "range": false, + "refId": "A" + } + ], + "title": "", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true, + "Value": false, + "__name__": true, + "instance": true, + "job": true + }, + "includeByName": {}, + "indexByName": { + "Time": 2, + "Value": 12, + "__name__": 3, + "host_name": 4, + "instance": 5, + "job": 6, + "k8s_cluster_name": 7, + "k8s_namespace_name": 8, + "k8s_node_name": 9, + "k8s_pod_name": 10, + "service_instance_id": 11, + "service_name": 0, + "service_version": 1 + }, + "orderByMode": "manual", + "renameByName": { + "Value": "Uptime", + "host_name": "Host", + "k8s_cluster_name": "K8s cluster", + "k8s_namespace_name": "Namespace", + "k8s_node_name": "Node", + "k8s_pod_name": "Pod", + "service_instance_id": "Service Instance Id", + "service_name": "Service Name", + "service_version": "Version" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "CPU consumption rate of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 0, + "y": 39 + }, + "id": 50, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "rate(otelcol_process_cpu_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval])", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "CPU Usage", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Resident memory consumed by the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 5, + "y": 39 + }, + "id": 52, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_memory_rss_bytes{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Memory Usage (RSS)", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Total uptime of the OpenTelemetry collector process", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": 0 + }, + { + "color": "yellow", + "value": 300 + }, + { + "color": "green", + "value": 3600 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 10, + "y": 39 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}", + "instant": false, + "legendFormat": "{{service_name}} {{service_instance_id}}", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Uptime", + "type": "stat" + } + ], + "title": "Collector", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 23, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 15 + }, + "id": 39, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Span Rate", + "queryType": "range", + "range": true, + "refId": "spans_rate" + } + ], + "title": "Span Rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Span Errors" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 15 + }, + "id": 40, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n- \nsum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Span Errors", + "queryType": "range", + "range": true, + "refId": "span_errors" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 15 + }, + "id": 59, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 15 + }, + "id": 61, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Log Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate ingestion rate across all receivers by telemetry type", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 15 + }, + "id": 60, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_receiver_accepted_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))\n+\nsum(rate(otelcol_receiver_refused_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 15 + }, + "id": 62, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metric Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by receiver and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 54 + }, + "id": 41, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "accepted_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "refused_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (receiver) (\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "failed_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_receiver) (\n label_join(\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n (\n sum by (receiver) (\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n sum by (receiver) (\n rate(\n otelcol_receiver_accepted_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_refused_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_receiver_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_receiver\",\n \"-\",\n \"signal_type\",\n \"receiver\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "error_pct" + } + ], + "title": "Receivers", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "accepted_rate": { + "timeField": "Time" + }, + "error_pct": { + "timeField": "Time" + }, + "errors": { + "timeField": "Time" + }, + "failed_pct": { + "timeField": "Time" + }, + "failed_rate": { + "timeField": "Time" + }, + "refused_rate": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + }, + "spans_errors": { + "timeField": "Time" + }, + "spans_rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_receiver", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "includeByName": {}, + "indexByName": { + "Trend #accepted_rate": 1, + "Trend #failed_pct": 4, + "Trend #failed_rate": 3, + "Trend #refused_rate": 2, + "signal_type_receiver": 0 + }, + "renameByName": { + "Trend #accepted_rate": "Accepted Rate", + "Trend #error_pct": "Error %", + "Trend #errors": "Error %", + "Trend #failed_pct": "Error %", + "Trend #failed_rate": "Failed Rate", + "Trend #refused_rate": "Refused Rate", + "Trend #rps": "Accepted Rate", + "Trend #spans_errors": "Error", + "Trend #spans_rps": "Rate", + "Value #A": "Spans Rate", + "Value #B": "Spans Failure %", + "Value #C": "Logs Rate", + "Value #D": "Logs Failure %", + "Value #E": "Metrics Rate", + "Value #F": "Metrics Failure %", + "receiver": "Receiver", + "signal_type_receiver": "Receiver" + } + } + } + ], + "type": "table" + } + ], + "title": "Receivers", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 48, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Span processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "traces" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 95 + }, + "id": 81, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 95 + }, + "id": 75, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"traces\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Logs processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 95 + }, + "id": 83, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 95 + }, + "id": 84, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"logs\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Metrics processors inbound rate, aggregated across all processors", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 95 + }, + "id": 85, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rate" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Drop Rate" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 95 + }, + "id": 86, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "(\n sum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n-\n sum by (otel_signal) (\n rate(\n otelcol_processor_outgoing_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n )\n)\n/\nsum by (otel_signal) (\n rate(\n otelcol_processor_incoming_items_total{\n deployment_environment_name =~ \"$deployment_environment_name\",\n k8s_cluster_name =~ \"$k8s_cluster_name\",\n k8s_node_name =~ \"$k8s_node_name\",\n host_name =~ \"$host_name\",\n service_instance_id =~ \"$service_instance_id\",\n service_name =~ \"$service_name\",\n otel_signal = \"metrics\"\n }[$__rate_interval]\n )\n)", + "instant": false, + "legendFormat": "Drop Rate", + "queryType": "range", + "range": true, + "refId": "drop_rate" + } + ], + "title": "Drop Rate", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*\\%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + }, + { + "id": "decimals", + "value": 1 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 121 + }, + "id": 49, + "options": { + "cellHeight": "sm", + "frameIndex": 0, + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n (\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n -\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n )\n )\n /\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "discarded_pct" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_incoming_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "inbound_rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "expr": "sum by (otel_signal_processor)(\n label_join(\n sum by(processor, otel_signal) (\n rate(otelcol_processor_outgoing_items_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval])\n ),\n \"otel_signal_processor\",\n \"-\",\n \"otel_signal\",\n \"processor\"\n )\n)", + "instant": false, + "queryType": "range", + "range": true, + "refId": "outbound_rate" + } + ], + "title": "Processors", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "discarded_pct": { + "timeField": "Time" + }, + "inbound_rate": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "otel_signal_processor", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": { + "Trend #discarded_pct": 2, + "Trend #inbound_rate": 1, + "Trend #outbound_rate": 3, + "otel_signal_processor": 0 + }, + "renameByName": { + "Trend #discarded_pct": "Discarded %", + "Trend #inbound_rate": "Inbound Rate", + "Trend #outbound_rate": "Outbound Rate", + "otel_signal_processor": "Processor", + "otel_signal_receiver": "" + } + } + } + ], + "type": "table" + } + ], + "title": "Processors", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 47, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated spans export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 96 + }, + "id": 43, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_spans_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "A" + } + ], + "title": "Spans", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 3, + "y": 96 + }, + "id": 44, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Spans", + "queryType": "range", + "range": true, + "refId": "spans_error" + } + ], + "title": "Span Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregated logs export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 5, + "y": 96 + }, + "id": 70, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_log_records_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "B" + } + ], + "title": "Logs", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 8, + "y": 96 + }, + "id": 72, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Logs", + "queryType": "range", + "range": true, + "refId": "logs_error" + } + ], + "title": "Logs Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Aggregate metrics export rate across all exporters", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ops" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 10, + "y": 96 + }, + "id": 71, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum(rate(otelcol_exporter_sent_metric_points_total{deployment_environment_name=~\"$deployment_environment_name\",k8s_cluster_name=~\"$k8s_cluster_name\",k8s_node_name=~\"$k8s_node_name\",host_name=~\"$host_name\",service_instance_id=~\"$service_instance_id\",service_name=~\"$service_name\"}[$__rate_interval]))", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "C" + } + ], + "title": "Metrics", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Spans" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Logs" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Metrics" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "purple", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 2, + "x": 13, + "y": 96 + }, + "id": 73, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "1\n-\nsum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n)\n/\n(\n sum(\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n +\n sum(\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n)", + "instant": false, + "legendFormat": "Metrics", + "queryType": "range", + "range": true, + "refId": "metrics_errors" + } + ], + "title": "Metrics Errors", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "description": "Detailed breakdown by exporter and telemetry type", + "fieldConfig": { + "defaults": { + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": false, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": ".*Rate.*" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "sparkline" + } + }, + { + "id": "unit", + "value": "cps" + } + ] + }, + { + "matcher": { + "id": "byRegexp", + "options": ".*%" + }, + "properties": [ + { + "id": "unit", + "value": "percentunit" + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 109 + }, + "id": 45, + "options": { + "cellHeight": "sm", + "showHeader": true + }, + "pluginVersion": "12.4.0-20757165945", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n ),\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "rps" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_spans_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"traces\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_log_records_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"logs\",\n \"\",\n \"\"\n )\n or\n label_replace(\n sum by (exporter) (\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (exporter) (\n rate(\n otelcol_exporter_sent_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n +\n rate(\n otelcol_exporter_send_failed_metric_points_total{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }[$__rate_interval]\n )\n )\n )\n * 100\n ,\n \"signal_type\",\n \"metrics\",\n \"\",\n \"\"\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"signal_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "errors" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "editorMode": "code", + "expr": "sum by (signal_type_exporter) (\n label_join(\n sum by (exporter, data_type) (\n otelcol_exporter_queue_size{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n /\n otelcol_exporter_queue_capacity{\n deployment_environment_name=~\"$deployment_environment_name\",\n k8s_cluster_name=~\"$k8s_cluster_name\",\n k8s_node_name=~\"$k8s_node_name\",\n host_name=~\"$host_name\",\n service_instance_id=~\"$service_instance_id\",\n service_name=~\"$service_name\"\n }\n )\n ,\n \"signal_type_exporter\",\n \"-\",\n \"data_type\",\n \"exporter\"\n )\n)", + "instant": false, + "legendFormat": "__auto", + "queryType": "range", + "range": true, + "refId": "queue_size_pct" + } + ], + "title": "Exporters", + "transformations": [ + { + "id": "timeSeriesTable", + "options": { + "errors": { + "timeField": "Time" + }, + "queue_size": { + "timeField": "Time" + }, + "rps": { + "timeField": "Time" + } + } + }, + { + "id": "joinByField", + "options": { + "byField": "signal_type_exporter", + "mode": "outer" + } + }, + { + "id": "organize", + "options": { + "excludeByName": {}, + "includeByName": {}, + "indexByName": {}, + "renameByName": { + "Trend #errors": "Errors %", + "Trend #queue_size": "Queue size", + "Trend #queue_size_pct": "Queue saturation %", + "Trend #rps": "Rate", + "signal_type_exporter": "Exporter" + } + } + } + ], + "type": "table" + } + ], + "title": "Exporters", + "type": "row" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, + "id": 46, + "panels": [ + { + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "description": "Logs from OpenTelemetry Collector filtered by dashboard variables", + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 19 + }, + "id": 42, + "options": { + "dedupStrategy": "none", + "detailsMode": "sidebar", + "enableInfiniteScrolling": false, + "enableLogDetails": true, + "prettifyLogMessage": false, + "showCommonLabels": false, + "showControls": false, + "showLabels": false, + "showLogAttributes": true, + "showTime": true, + "sortOrder": "Ascending", + "wrapLogMessage": false + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "alias": "", + "bucketAggs": [ + { + "field": "observedTimestamp", + "id": "2", + "settings": { + "interval": "auto" + }, + "type": "date_histogram" + } + ], + "datasource": { + "type": "grafana-opensearch-datasource", + "uid": "${opensearch_datasource}" + }, + "format": "table", + "luceneQueryType": "Metric", + "metrics": [ + { + "id": "1", + "type": "count" + } + ], + "query": "search source=otel-logs-* | where resource.service.name=\"$service_name\" | fields @timestamp, resource.service.name, resource.service.instance.id, resource.host.name, severity.text, body", + "queryType": "PPL", + "refId": "A", + "timeField": "observedTimestamp" + } + ], + "title": "OpenTelemetry Collector Logs", + "type": "logs" + } + ], + "title": "Logs", + "type": "row" + } + ], + "preload": false, + "refresh": "", + "schemaVersion": 42, + "tags": [ + "opentelemetry", + "opentelemetry-collector" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "description": "OpenTelemetry metrics. \nSend metrics using the Prometheus OTLP endpoint activating `keep_identifying_resource_attributes` and resource attribute promotion (aka `promote_resource_attributes`) including `service.name`, service.namespace`, `service.instance.id`, and `deployment.environment.name`", + "label": "Metrics", + "name": "prometheus_datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allowCustomValue": false, + "current": { + "text": "OpenSearch", + "value": "webstore-logs" + }, + "description": "OpenTelemetry logs.", + "label": "Logs", + "name": "opensearch_datasource", + "options": [], + "query": "grafana-opensearch-datasource", + "refresh": 1, + "regex": "(?!grafanacloud-.*-alert-state-history|grafanacloud-.*-usage-insights).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "description": "Deployment environment (e.g. \"production\").\nResource attribute `deployment.environment.name` via `target_info`", + "includeAll": true, + "label": "Environment", + "multi": true, + "name": "deployment_environment_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,deployment_environment)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "description": "Resource attribute `k8s.cluster.name`", + "includeAll": true, + "label": "Kubernetes cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\"},k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": [ + "All" + ], + "value": [ + "$__all" + ] + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "description": "`k8s.node.name`", + "includeAll": true, + "label": "K8s node", + "multi": true, + "name": "k8s_node_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_cpu_seconds_total{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_node_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "staticOptionsOrder": "after", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "description": "`host.name`", + "includeAll": true, + "label": "Host", + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total,host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "staticOptions": [ + { + "text": "<>", + "value": "<>" + } + ], + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "description": "`service.instance.id`", + "includeAll": true, + "label": "Instance", + "name": "service_instance_id", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_instance_id)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "otelcol-contrib", + "value": "otelcol-contrib" + }, + "datasource": { + "type": "prometheus", + "uid": "${prometheus_datasource}" + }, + "definition": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "description": "`service.name`", + "includeAll": true, + "label": "Service", + "name": "service_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(otelcol_process_uptime_seconds_total{deployment_environment_name=~\"$deployment_environment_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_node_name=~\"$k8s_node_name\", host_name=~\"$host_name\"},service_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "browser", + "title": "OpenTelemetry Collector", + "uid": "otel-demo_otel-collector_dashboard", + "version": 1 +} diff --git a/chart/grafana/provisioning/dashboards/postgresql-dashboard.json b/chart/grafana/provisioning/dashboards/postgresql-dashboard.json new file mode 100644 index 0000000..d4f7456 --- /dev/null +++ b/chart/grafana/provisioning/dashboards/postgresql-dashboard.json @@ -0,0 +1,1474 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Performance metrics for PostgreSQL instrumented with the OpenTelemetry Collector PostgreSQL receiver.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 6, + "links": [ + { + "asDropdown": false, + "includeVars": true, + "keepTime": true, + "tags": [ + "postgres-integration" + ], + "title": "Integration dashboards", + "type": "dashboards" + } + ], + "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 15, + "panels": [], + "title": "PostgreSQL Overview", + "type": "row" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "Queries per seconds. Queries being commits or rollbacks.\n", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "rgb(31, 120, 193)", + "mode": "fixed" + }, + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 4, + "x": 0, + "y": 1 + }, + "id": 11, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_commits_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval])) + sum(irate(postgresql_rollbacks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "xact_commit" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 1800, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "QPS", + "type": "stat" + }, + { + "datasource": { + "uid": "$datasource" + }, + "description": "See [pg_stat_database / `tup_fetched`](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-DATABASE-VIEW)", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 20, + "x": 4, + "y": 1 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_fetched_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "fetched", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "fetched", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_returned_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "returned", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "returned", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_inserted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "inserted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "inserted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_updated_total{dpostgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "updated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "updated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "fetched", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(irate(postgresql_tup_deleted_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"}[$__rate_interval]))", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "hide": false, + "intervalFactor": 2, + "legendFormat": "deleted", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deleted", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "tup_fetched" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [ + "10s" + ], + "type": "non_negative_derivative" + } + ] + ], + "step": 120, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Rows", + "type": "timeseries" + }, + { + "datasource": { + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_allocated_total{host_name=~\"$host_name\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers allocated", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "buffers_allocated", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_buffers_writes_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__interval])", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "interval": "", + "legendFormat": "buffers write {{source}}", + "range": true, + "refId": "buffers_write", + "useBackend": false + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_backend_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_backend", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_backend", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "expr": "irate(pg_stat_bgwriter_buffers_clean_total{job=~\"$job\",cluster=~\"$cluster\",instance=~\"$instance\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "buffers_clean", + "measurement": "postgresql", + "policy": "default", + "refId": "buffers_clean", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "Buffers Allocated", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "irate(postgresql_bgwriter_checkpoint_count_total{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}[$__rate_interval])", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "checkpoint {{type}}", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "checkpoint", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "buffers_alloc" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Buffers", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "deadlocks" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "light-red", + "mode": "fixed" + } + } + ] + }, + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "deadlocks" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "alias": "conflicts", + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_deadlocks_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "deadlocks", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "deadlocks", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "conflicts" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + }, + { + "alias": "deadlocks", + "datasource": { + "uid": "$datasource" + }, + "dsType": "prometheus", + "editorMode": "code", + "expr": "sum(postgresql_conflicts_total{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",host_name=~\"$host_name\"})", + "format": "time_series", + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "intervalFactor": 2, + "legendFormat": "conflicts", + "measurement": "postgresql", + "policy": "default", + "range": true, + "refId": "conflicts-not-yet-implemented-in-otelcol", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "deadlocks" + ], + "type": "field" + }, + { + "params": [], + "type": "mean" + }, + { + "params": [], + "type": "difference" + } + ] + ], + "step": 240, + "tags": [ + { + "key": "instance", + "operator": "=~", + "value": "/^$instance$/" + } + ] + } + ], + "title": "Conflicts/Deadlocks", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 15 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "round(\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n /\n (\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_hit_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n +\n sum by (postgresql_database_name) (\n rate(\n postgresql_blks_read_total{\n postgresql_database_name=~\"$db\",\n k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\",\n host_name=~\"$host_name\"\n }[$__rate_interval]\n )\n )\n ) * 100,\n 0.001\n)", + "format": "time_series", + "legendFormat": "{{postgresql_database_name}} - cache hit ratio", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Cache hit ratio", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 15 + }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.0.2", + "targets": [ + { + "datasource": { + "uid": "$datasource" + }, + "editorMode": "code", + "expr": "postgresql_backends{postgresql_database_name=~\"$db\",k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\", host_name=~\"$host_name\"}", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{postgresql_database_name}} - connections", + "range": true, + "refId": "A", + "step": 240 + } + ], + "title": "Number of active connections", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "30s", + "schemaVersion": 41, + "tags": [ + "opentelemetry", + "postgresql" + ], + "templating": { + "list": [ + { + "current": { + "text": "Prometheus", + "value": "webstore-metrics" + }, + "includeAll": false, + "label": "Data Source", + "name": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "(?!grafanacloud-usage|grafanacloud-ml-metrics).+", + "type": "datasource" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count,k8s_cluster_name)", + "description": "When deploying PostgreSQL on Kubernetes, name of the Kubernetes cluster. \nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Cluster", + "multi": true, + "name": "k8s_cluster_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count,k8s_cluster_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "", + "value": "" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "description": "When deploying on Kubernetes, name of the `StatefulSet` of the PostgreSQL deployment (e.g. `my-pg-cluster`).\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "K8s Statefulset", + "multi": true, + "name": "k8s_statefulset_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\"},k8s_statefulset_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": [ + "$__all" + ] + }, + "datasource": { + "uid": "$datasource" + }, + "definition": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "description": "When deploying PostgreSQL on VMs, name on the host on which the database is deployed.\nFor other deployments, select \"All\". ", + "includeAll": true, + "label": "Host", + "multi": true, + "name": "host_name", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},host_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "sort": 1, + "type": "query" + }, + { + "allValue": ".+", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "includeAll": true, + "label": "Database", + "name": "db", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(postgresql_table_count{host_name=~\"$host_name\", postgresql_database_name!~\"template.*|postgres\", k8s_cluster_name=~\"$k8s_cluster_name\", k8s_statefulset_name=~\"$k8s_statefulset_name\"},postgresql_database_name)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 2, + "regex": "", + "type": "query" + } + ] + }, + "time": { + "from": "now-30m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "PostgreSQL", + "uid": "xHhbQmdjA", + "version": 5 +} diff --git a/chart/grafana/provisioning/dashboards/spanmetrics-dashboard.json b/chart/grafana/provisioning/dashboards/spanmetrics-dashboard.json new file mode 100644 index 0000000..7c9d211 --- /dev/null +++ b/chart/grafana/provisioning/dashboards/spanmetrics-dashboard.json @@ -0,0 +1,1034 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "description": "Spanmetrics way of demo application view.", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 2, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 26, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "This dashboard uses RED metrics generated for all services by the spanmetrics connector configured in the OpenTelemetry Collector.\n
\nChart panels may require 5 minutes after the Demo is started before rendering data.", + "mode": "html" + }, + "pluginVersion": "11.4.0", + "title": "", + "type": "text" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 24, + "panels": [], + "title": "Service Level - Throughput and Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 20, + "w": 12, + "x": 0, + "y": 3 + }, + "id": 2, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,service_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - Service Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "super-light-blue", + "value": 1 + }, + { + "color": "#EAB839", + "value": 2 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 3 + }, + "id": 4, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum by (service_name) (rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean Rate over Range", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-reds" + }, + "decimals": 4, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "red", + "value": 15 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 16 + }, + "id": 15, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "vertical", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "text": {}, + "valueMode": "color" + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (service_name))", + "instant": true, + "interval": "", + "legendFormat": "{{service_name}}", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Services Mean ERROR Rate over Range", + "type": "bargauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 14, + "panels": [], + "title": "span_names Level - Throughput", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "bRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-BlYlRd" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "eRate" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "lcd", + "type": "gauge" + } + }, + { + "id": "color", + "value": { + "mode": "continuous-RdYlGr" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Error Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 663 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Rate" + }, + "properties": [ + { + "id": "custom.width", + "value": 667 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Service" + }, + "properties": [ + { + "id": "custom.width" + } + ] + } + ] + }, + "gridPos": { + "h": 11, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 22, + "interval": "5m", + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "11.4.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name)) ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Rate" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "exemplar": false, + "expr": "topk(7, sum(rate(traces_span_metrics_calls_total{status_code=\"STATUS_CODE_ERROR\",service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (span_name,service_name))", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "Error Rate" + } + ], + "title": "Top 7 span_names and Errors (APM Table)", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "span_name" + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true + }, + "indexByName": {}, + "renameByName": { + "Value #Error Rate": "Error Rate", + "Value #Rate": "Rate", + "service_name 1": "Rate in Service", + "service_name 2": "Error Rate in Service" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "bRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "calculateField", + "options": { + "alias": "eRate", + "mode": "reduceRow", + "reduce": { + "include": [ + "Error Rate" + ], + "reducer": "sum" + } + } + }, + { + "id": "organize", + "options": { + "excludeByName": { + "Error Rate": true, + "Rate": true, + "bRate": false + }, + "indexByName": { + "Error Rate": 4, + "Error Rate in Service": 6, + "Rate": 1, + "Rate in Service": 5, + "bRate": 2, + "eRate": 3, + "span_name": 0 + }, + "renameByName": { + "Rate in Service": "Service", + "bRate": "Rate", + "eRate": "Error Rate", + "span_name": "span_name Name" + } + } + }, + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "desc": true, + "field": "Rate" + } + ] + } + } + ], + "type": "table" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 35 + }, + "id": 20, + "panels": [], + "title": "span_name Level - Latencies", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue" + }, + { + "color": "green", + "value": 2 + }, + { + "color": "#EAB839", + "value": 64 + }, + { + "color": "orange", + "value": 128 + }, + { + "color": "red", + "value": 256 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 0, + "y": 36 + }, + "id": 25, + "interval": "5m", + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.50, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name)))", + "format": "time_series", + "hide": true, + "instant": false, + "interval": "", + "legendFormat": "{{service_name}}-quantile_0.50", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7,histogram_quantile(0.95, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__range])) by (le,span_name)))", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "{{span_name}}", + "range": false, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.99, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile99", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "histogram_quantile(0.999, sum(rate(traces_span_metrics_duration_milliseconds_bucket{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])) by (le,service_name))", + "hide": true, + "interval": "", + "legendFormat": "quantile999", + "range": true, + "refId": "D" + } + ], + "title": "Top 3x3 - span_name Latency - quantile95", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "continuous-BlYlRd" + }, + "decimals": 2, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 13, + "w": 12, + "x": 12, + "y": 36 + }, + "id": 10, + "interval": "5m", + "options": { + "displayMode": "lcd", + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "maxVizHeight": 300, + "minVizHeight": 10, + "minVizWidth": 0, + "namePlacement": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "showUnfilled": true, + "sizing": "auto", + "valueMode": "color" + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": false, + "expr": "topk(7, sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"${service}\", span_name=~\"$span_name\"}[5m]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"${service}\",span_name=~\"$span_name\"}[5m\n])))", + "instant": true, + "interval": "", + "legendFormat": "{{span_name}} [{{service_name}}]", + "range": false, + "refId": "A" + } + ], + "title": "Top 7 Highest Endpoint Latencies Mean Over Range ", + "type": "bargauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 49 + }, + "id": 16, + "interval": "5m", + "options": { + "legend": { + "calcs": [ + "mean", + "logmin", + "max", + "delta" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "editorMode": "code", + "exemplar": true, + "expr": "topk(7,sum by (span_name,service_name)(increase(traces_span_metrics_duration_milliseconds_sum{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval]) / increase(traces_span_metrics_duration_milliseconds_count{service_name=~\"$service\", span_name=~\"$span_name\"}[$__rate_interval])))", + "instant": false, + "interval": "", + "legendFormat": "[{{service_name}}] {{span_name}}", + "range": true, + "refId": "A" + } + ], + "title": "Top 7 Latencies Over Range ", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "5m", + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [ + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "includeAll": true, + "multi": true, + "name": "service", + "options": [], + "query": { + "query": "query_result(count by (service_name)(count_over_time(traces_span_metrics_calls_total[$__range])))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*service_name=\"(.*)\".*/", + "sort": 1, + "type": "query" + }, + { + "allValue": ".*", + "current": { + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "webstore-metrics" + }, + "definition": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "includeAll": true, + "multi": true, + "name": "span_name", + "options": [], + "query": { + "query": "query_result(sum ({__name__=~\".*traces_span_metrics_calls_total\",service_name=~\"$service\"}) by (span_name))", + "refId": "StandardVariableQuery" + }, + "refresh": 2, + "regex": "/.*span_name=\"(.*)\".*/", + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Spanmetrics Demo Dashboard", + "uid": "W2gX2zHVk48", + "version": 2, + "weekStart": "" +} diff --git a/chart/grafana/provisioning/datasources/default.yaml b/chart/grafana/provisioning/datasources/default.yaml new file mode 100644 index 0000000..ee65d92 --- /dev/null +++ b/chart/grafana/provisioning/datasources/default.yaml @@ -0,0 +1,23 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + + +apiVersion: 1 + +datasources: + - name: Prometheus + uid: webstore-metrics + type: prometheus + url: http://prometheus:9090 + editable: true + isDefault: true + jsonData: + # Align Prometheus data source time interval with the OTel SDKs' export interval (see OTEL_METRIC_EXPORT_INTERVAL) + timeInterval: "60s" + exemplarTraceIdDestinations: + - datasourceUid: webstore-traces + name: trace_id + + - url: http://localhost:8080/jaeger/ui/trace/$${__value.raw} + name: trace_id + urlDisplayLabel: View in Jaeger UI diff --git a/chart/grafana/provisioning/datasources/jaeger.yaml b/chart/grafana/provisioning/datasources/jaeger.yaml new file mode 100644 index 0000000..08c93bd --- /dev/null +++ b/chart/grafana/provisioning/datasources/jaeger.yaml @@ -0,0 +1,22 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + + +apiVersion: 1 + +datasources: + - name: Jaeger + uid: webstore-traces + type: jaeger + url: http://jaeger:16686/jaeger/ui + editable: true + isDefault: false + jsonData: + tracesToLogsV2: + datasourceUid: webstore-logs + spanStartTimeShift: "-20m" + spanEndTimeShift: "20m" + filterByTraceID: true + filterBySpanID: true + customQuery: true + query: traceId:"$${__trace.traceId}" AND spanId:"$${__span.spanId}" diff --git a/chart/grafana/provisioning/datasources/opensearch.yaml b/chart/grafana/provisioning/datasources/opensearch.yaml new file mode 100644 index 0000000..6c83d48 --- /dev/null +++ b/chart/grafana/provisioning/datasources/opensearch.yaml @@ -0,0 +1,21 @@ +# Copyright The OpenTelemetry Authors +# SPDX-License-Identifier: Apache-2.0 + +apiVersion: 1 + +datasources: + - name: OpenSearch + uid: webstore-logs + type: grafana-opensearch-datasource + url: http://opensearch:9200/ + access: proxy + editable: true + isDefault: false + jsonData: + database: otel-logs-* + flavor: opensearch + logLevelField: severity.text.keyword + logMessageField: body + pplEnabled: true + timeField: observedTimestamp + version: 3.4.0 diff --git a/chart/postgresql/init.sql b/chart/postgresql/init.sql new file mode 100644 index 0000000..3cc5132 --- /dev/null +++ b/chart/postgresql/init.sql @@ -0,0 +1,156 @@ +-- Copyright The OpenTelemetry Authors +-- SPDX-License-Identifier: Apache-2.0 + +CREATE USER otelu WITH PASSWORD 'otelp'; + +-- Accounting Service: create a schema +CREATE SCHEMA accounting; +GRANT USAGE ON SCHEMA accounting TO otelu; + +-- Accounting Service: create tables +CREATE TABLE accounting."order" ( + order_id TEXT PRIMARY KEY +); + +CREATE TABLE accounting.shipping ( + shipping_tracking_id TEXT PRIMARY KEY, + shipping_cost_currency_code TEXT NOT NULL, + shipping_cost_units BIGINT NOT NULL, + shipping_cost_nanos INT NOT NULL, + street_address TEXT, + city TEXT, + state TEXT, + country TEXT, + zip_code TEXT, + order_id TEXT NOT NULL, + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE +); + +CREATE TABLE accounting.orderitem ( + item_cost_currency_code TEXT NOT NULL, + item_cost_units BIGINT NOT NULL, + item_cost_nanos INT NOT NULL, + product_id TEXT NOT NULL, + quantity INT NOT NULL, + order_id TEXT NOT NULL, + PRIMARY KEY (order_id, product_id), + FOREIGN KEY (order_id) REFERENCES accounting."order"(order_id) ON DELETE CASCADE +); + +-- Accounting Service: grant permission to schema +GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA accounting TO otelu; + +-- Product Review Service: create a schema +CREATE SCHEMA reviews; +GRANT USAGE ON SCHEMA reviews TO otelu; + +-- Product Review Service: create tables +CREATE TABLE reviews.productreviews ( + id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, + product_id VARCHAR(16) NOT NULL, + username VARCHAR(64) NOT NULL, + description VARCHAR(1024), + score NUMERIC(2,1) NOT NULL +); + +-- Product Review Service: create index for product_id lookups +CREATE INDEX product_id_index ON reviews.productreviews (product_id); + +-- Product Review Service: grant permission to schema +GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA reviews TO otelu; + +-- Product Review Service: add product review data +INSERT INTO reviews.productreviews (product_id, username, description, score) +VALUES + ('OLJCESPC7Z', 'stargazer_mike', 'Great entry-level telescope! Easy to set up and provides clear views of the moon and brighter planets. Highly recommend for new astronomers.', '4.5'), + ('OLJCESPC7Z', 'nightskylover', 'For the price, this Explorascope delivers excellent performance. I was able to see Jupiter''s moons clearly. A fantastic purchase for casual viewing.', '4.0'), + ('OLJCESPC7Z', 'beginner_astro', 'A bit tricky to get used to the manual controls, but once you do, it''s very rewarding. Saw the Orion Nebula for the first time! Good value.', '3.5'), + ('OLJCESPC7Z', 'celestial_explorer', 'Perfect for camping trips. It''s lightweight and portable, making it easy to take anywhere. The views are surprisingly good for its size.', '4.0'), + ('OLJCESPC7Z', 'telescope_fan', 'Not the most powerful scope, but it''s great for kids and beginners. My children love looking at the moon with it. A solid choice for family fun.', '3.0'), + + ('66VCHSJNUP', 'tech_astro', 'The StarSense app is revolutionary! It made finding celestial objects incredibly easy. This telescope is a game-changer for beginners.', '5.0'), + ('66VCHSJNUP', 'app_user', 'Amazing technology, the smartphone integration works flawlessly. I''ve never had so much fun exploring the night sky. Worth every penny.', '4.5'), + ('66VCHSJNUP', 'innovator_john', 'Setup was a breeze, and the tutorials in the app are very helpful. The views are crisp and clear. My only minor gripe is battery drain on the phone.', '4.0'), + ('66VCHSJNUP', 'clear_skies', 'Finally, a telescope that takes the guesswork out of stargazing. The real-time positioning is incredibly accurate. Highly recommended for anyone new to astronomy.', '5.0'), + ('66VCHSJNUP', 'gadget_geek', 'Fantastic product, the app truly guides you. It''s like having a personal astronomer with you. The optical quality is also very good.', '4.5'), + + ('1YMWWN1N4O', 'solar_viewer', 'Perfect for solar observations! The Solar Safe filter gives peace of mind. I used it for the last partial eclipse and it was fantastic.', '5.0'), + ('1YMWWN1N4O', 'eclipse_chaser', 'Compact and easy to carry, this telescope is ideal for eclipse events. The included backpack is a nice touch. Views of the sun are incredibly clear and safe.', '4.5'), + ('1YMWWN1N4O', 'travel_astro', 'Excellent travel scope for solar viewing. The magnification is much better than binoculars for the sun. A must-have for any solar enthusiast.', '4.0'), + ('1YMWWN1N4O', 'sun_gazer', 'Very impressed with the safety features and clarity. Sharing the sun with family has never been easier or safer. Great value for a dedicated solar scope.', '5.0'), + ('1YMWWN1N4O', 'safe_viewer', 'The ISO compliant filter is reassuring. It''s a well-designed product for safe solar observation. Highly recommend for educational purposes too.', '4.5'), + + ('L9ECAV7KIM', 'clean_optics', 'This kit is a lifesaver for all my optics. The brush and wipes work perfectly without leaving any residue. My lenses have never been cleaner.', '5.0'), + ('L9ECAV7KIM', 'photog_pro', 'Essential for any photographer or telescope owner. It safely removes dust and fingerprints. A high-quality cleaning solution.', '4.5'), + ('L9ECAV7KIM', 'daily_cleaner', 'I use this on my binoculars, camera lenses, and even my phone screen. It''s very effective and gentle. A versatile cleaning kit.', '4.0'), + ('L9ECAV7KIM', 'tech_maintenance', 'Great value for money. The different cleaning options cover all needs. Keeps my expensive equipment in pristine condition.', '5.0'), + ('L9ECAV7KIM', 'sharp_view', 'Works as advertised, my telescope views are much clearer after using this. The fluid and cloth are excellent. Definitely recommend.', '4.5'), + + ('2ZYFJ3GM2N', 'bird_watcher', 'Incredible clarity and brightness, perfect for bird watching. The ED glass really makes a difference. I can spot the subtlest markings.', '5.0'), + ('2ZYFJ3GM2N', 'nature_lover', 'These binoculars are fantastic for nature observation. The close focus is a huge advantage for viewing nearby wildlife. Very comfortable to hold.', '4.5'), + ('2ZYFJ3GM2N', 'hiker_guy', 'Lightweight and durable, these are my go-to binoculars for hiking. The wide field of view is excellent. Highly recommend for outdoor enthusiasts.', '4.0'), + ('2ZYFJ3GM2N', 'stadium_fan', 'Took these to a game and had an amazing view of the action. They perform great in various lighting conditions. A solid all-around binocular.', '4.0'), + ('2ZYFJ3GM2N', 'outdoor_adventurer', 'Excellent build quality and optical performance. They feel robust and provide sharp images. A great investment for any outdoor activity.', '4.5'), + + ('0PUK6V6EV0', 'astro_photog', 'This imager is a fantastic step up for planetary photography. The color quality is superb. Easy to use with my existing telescope setup.', '5.0'), + ('0PUK6V6EV0', 'planet_shooter', 'Finally capturing stunning images of Saturn and Jupiter! The NexImage 10 makes it so accessible. Great for beginners in astrophotography.', '4.5'), + ('0PUK6V6EV0', 'imager_pro', 'Excellent resolution and color rendition for its price point. It''s a perfect solution for those looking to start imaging planets. Highly satisfied.', '4.0'), + ('0PUK6V6EV0', 'space_artist', 'The detail I can capture with this imager is incredible. It integrates well with various software. A must-have for serious planetary observers.', '5.0'), + ('0PUK6V6EV0', 'digital_sky', 'A solid choice for getting into solar system imaging. The setup was straightforward. Produces beautiful, vibrant planetary images.', '4.5'), + + ('LS4PSXUNUM', 'night_walker', 'The red light is perfect for preserving night vision during astronomy sessions. The hand warmer is an unexpected bonus. Very practical device.', '5.0'), + ('LS4PSXUNUM', 'star_party_goer', 'This flashlight is indispensable for star parties. The red mode is gentle on the eyes, and the power bank feature is super handy. Love it!', '4.5'), + ('LS4PSXUNUM', 'camper_chris', 'Rugged and versatile, this flashlight is great for camping and night walks. The hand warmer function is a game-changer on cold nights. Highly recommend.', '4.5'), + ('LS4PSXUNUM', 'emergency_kit', 'A fantastic multi-tool for my emergency kit. The red light is useful, and the power bank means I can charge my phone. Great design.', '4.0'), + ('LS4PSXUNUM', 'astro_accessory', 'Every astronomer needs one of these. The red light is essential, and the hand warmer and power bank make it incredibly useful. A top-tier accessory.', '5.0'), + + ('9SIQT8TOJO', 'deep_sky_master', 'The RASA V2 is a dream come true for deep-sky imaging. The f/2.2 speed drastically cuts down exposure times. My best astrophotography investment yet.', '5.0'), + ('9SIQT8TOJO', 'pro_astro', 'Unbelievable performance for wide-field astrophotography. The short focal length makes guiding less critical. Produces stunning, detailed images.', '5.0'), + ('9SIQT8TOJO', 'imaging_guru', 'This OTA is a beast! The fast optics mean more data in less time. If you''re serious about deep-sky imaging, this is the one.', '4.5'), + ('9SIQT8TOJO', 'advanced_scope', 'Worth every penny for the quality and speed it offers. My images have never been sharper or more vibrant. A truly professional piece of equipment.', '5.0'), + ('9SIQT8TOJO', 'precision_optics', 'The engineering behind this RASA is exceptional. It''s incredibly efficient for capturing faint objects. A high-end choice for dedicated imagers.', '4.5'), + + ('6E92ZMYYFZ', 'solar_safety', 'Essential for safe solar viewing with my 8-inch telescope. The Velcro straps ensure it stays securely in place. Peace of mind during solar observations.', '5.0'), + ('6E92ZMYYFZ', 'telescope_upgrade', 'This EclipSmart filter is a perfect addition to my setup. The ISO compliance is crucial. Highly recommend for anyone looking to view the sun safely.', '4.5'), + ('6E92ZMYYFZ', 'safe_sun_gazer', 'Easy to attach and provides crystal clear, safe views of the sun. The build quality is excellent. A must-have accessory for solar enthusiasts.', '5.0'), + ('6E92ZMYYFZ', 'filter_fan', 'Works perfectly with my 8-inch scope. No more worries about accidental dislodgement. Great product for protecting your eyes and equipment.', '4.5'), + ('6E92ZMYYFZ', 'eclipse_ready', 'Bought this for the upcoming eclipse, and it fits perfectly. Tested it out, and the views are fantastic and safe. Very happy with this purchase.', '5.0'), + + ('HQTGWGPNH4', 'history_buff', 'A fascinating glimpse into historical astronomical thought. The content is incredibly insightful. A must-read for anyone interested in the history of science.', '5.0'), + ('HQTGWGPNH4', 'bookworm_astro', 'Beautifully presented historical document. It''s amazing to see how comets were understood centuries ago. A valuable addition to any astronomy library.', '4.5'), + ('HQTGWGPNH4', 'ancient_texts', 'Such a unique and intriguing read. The historical context is captivating. It offers a different perspective on celestial events.', '4.0'), + ('HQTGWGPNH4', 'celestial_history', 'I love historical astronomy, and this book delivers. It''s well-researched and provides a window into past beliefs. Highly recommended for scholars.', '5.0'), + ('HQTGWGPNH4', 'rare_find', 'A truly special book for enthusiasts of astronomical history. The details about ancient astrologers are very interesting. Great for a deeper understanding.', '4.5'); + +-- Product Catalog Service: create a schema +CREATE SCHEMA catalog; +GRANT USAGE ON SCHEMA catalog TO otelu; + +-- Product Catalog Service: create tables +CREATE TABLE catalog.products ( + id TEXT PRIMARY KEY, + name TEXT NOT NULL, + description TEXT, + picture TEXT, + price_currency_code TEXT NOT NULL, + price_units BIGINT NOT NULL, + price_nanos INT NOT NULL, + categories TEXT +); + +-- Product Catalog Service: grant permission to schema +GRANT SELECT ON ALL TABLES IN SCHEMA catalog TO otelu; + +-- Product Catalog Service: add product data +INSERT INTO catalog.products (id, name, description, picture, price_currency_code, price_units, price_nanos, categories) +VALUES + ('OLJCESPC7Z', 'National Park Foundation Explorascope', 'The National Park Foundation''s (NPF) Explorascope 60AZ is a manual alt-azimuth, refractor telescope perfect for celestial viewing on the go. The NPF Explorascope 60 can view the planets, moon, star clusters and brighter deep sky objects like the Orion Nebula and Andromeda Galaxy.', 'NationalParkFoundationExplorascope.jpg', 'USD', 101, 960000000, 'telescopes'), + ('66VCHSJNUP', 'Starsense Explorer Refractor Telescope', 'The first telescope that uses your smartphone to analyze the night sky and calculate its position in real time. StarSense Explorer is ideal for beginners thanks to the app''s user-friendly interface and detailed tutorials. It''s like having your own personal tour guide of the night sky', 'StarsenseExplorer.jpg', 'USD', 349, 950000000, 'telescopes'), + ('1YMWWN1N4O', 'Eclipsmart Travel Refractor Telescope', 'Dedicated white-light solar scope for the observer on the go. The 50mm refracting solar scope uses Solar Safe, ISO compliant, full-aperture glass filter material to ensure the safest view of solar events. The kit comes complete with everything you need, including the dedicated travel solar scope, a Solar Safe finderscope, tripod, a high quality 20mm (18x) Kellner eyepiece and a nylon backpack to carry everything in. This Travel Solar Scope makes it easy to share the Sun as well as partial and total solar eclipses with the whole family and offers much higher magnifications than you would otherwise get using handheld solar viewers or binoculars.', 'EclipsmartTravelRefractorTelescope.jpg', 'USD', 129, 950000000, 'telescopes,travel'), + ('L9ECAV7KIM', 'Lens Cleaning Kit', 'Wipe away dust, dirt, fingerprints and other particles on your lenses to see clearly with the Lens Cleaning Kit. This cleaning kit works on all glass and optical surfaces, including telescopes, binoculars, spotting scopes, monoculars, microscopes, and even your camera lenses, computer screens, and mobile devices. The kit comes complete with a retractable lens brush to remove dust particles and dirt and two options to clean smudges and fingerprints off of your optics, pre-moistened lens wipes and a bottled lens cleaning fluid with soft cloth.', 'LensCleaningKit.jpg', 'USD', 21, 950000000, 'accessories'), + ('2ZYFJ3GM2N', 'Roof Binoculars', 'This versatile, all-around binocular is a great choice for the trail, the stadium, the arena, or just about anywhere you want a close-up view of the action without sacrificing brightness or detail. It''s an especially great companion for nature observation and bird watching, with ED glass that helps you spot the subtlest field markings and a close focus of just 6.5 feet.', 'RoofBinoculars.jpg', 'USD', 209, 950000000, 'binoculars'), + ('0PUK6V6EV0', 'Solar System Color Imager', 'You have your new telescope and have observed Saturn and Jupiter. Now you''re ready to take the next step and start imaging them. But where do you begin? The NexImage 10 Solar System Imager is the perfect solution.', 'SolarSystemColorImager.jpg', 'USD', 175, 0, 'accessories,telescopes'), + ('LS4PSXUNUM', 'Red Flashlight', 'This 3-in-1 device features a 3-mode red flashlight, a hand warmer, and a portable power bank for recharging your personal electronics on the go. Whether you use it to light the way at an astronomy star party, a night walk, or wildlife research, ThermoTorch 3 Astro Red''s rugged, IPX4-rated design will withstand your everyday activities.', 'RedFlashlight.jpg', 'USD', 57, 80000000, 'accessories,flashlights'), + ('9SIQT8TOJO', 'Optical Tube Assembly', 'Capturing impressive deep-sky astroimages is easier than ever with Rowe-Ackermann Schmidt Astrograph (RASA) V2, the perfect companion to today''s top DSLR or astronomical CCD cameras. This fast, wide-field f/2.2 system allows for shorter exposure times compared to traditional f/10 astroimaging, without sacrificing resolution. Because shorter sub-exposure times are possible, your equatorial mount won''t need to accurately track over extended periods. The short focal length also lessens equatorial tracking demands. In many cases, autoguiding will not be required.', 'OpticalTubeAssembly.jpg', 'USD', 3599, 0, 'accessories,telescopes,assembly'), + ('6E92ZMYYFZ', 'Solar Filter', 'Enhance your viewing experience with EclipSmart Solar Filter for 8" telescopes. With two Velcro straps and four self-adhesive Velcro pads for added safety, you can be assured that the solar filter cannot be accidentally knocked off and will provide Solar Safe, ISO compliant viewing.', 'SolarFilter.jpg', 'USD', 69, 950000000, 'accessories,telescopes'), + ('HQTGWGPNH4', 'The Comet Book', 'A 16th-century treatise on comets, created anonymously in Flanders (now northern France) and now held at the Universitätsbibliothek Kassel. Commonly known as The Comet Book (or Kometenbuch in German), its full title translates as "Comets and their General and Particular Meanings, According to Ptolomeé, Albumasar, Haly, Aliquind and other Astrologers". The image is from https://publicdomainreview.org/collection/the-comet-book, made available by the Universitätsbibliothek Kassel under a CC-BY SA 4.0 license (https://creativecommons.org/licenses/by-sa/4.0/)', 'TheCometBook.jpg', 'USD', 0, 990000000, 'books'); diff --git a/chart/templates/NOTES.txt b/chart/templates/NOTES.txt new file mode 100644 index 0000000..de06fcf --- /dev/null +++ b/chart/templates/NOTES.txt @@ -0,0 +1,21 @@ +======================================================================================= + + + ██████╗ ████████╗███████╗██╗ ██████╗ ███████╗███╗ ███╗ ██████╗ +██╔═══██╗╚══██╔══╝██╔════╝██║ ██╔══██╗██╔════╝████╗ ████║██╔═══██╗ +██║ ██║ ██║ █████╗ ██║ ██║ ██║█████╗ ██╔████╔██║██║ ██║ +██║ ██║ ██║ ██╔══╝ ██║ ██║ ██║██╔══╝ ██║╚██╔╝██║██║ ██║ +╚██████╔╝ ██║ ███████╗███████╗ ██████╔╝███████╗██║ ╚═╝ ██║╚██████╔╝ + ╚═════╝ ╚═╝ ╚══════╝╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ + + +- All services are available via the Frontend proxy: http://localhost:8080 + by running these commands: + kubectl --namespace {{ .Release.Namespace }} port-forward svc/frontend-proxy 8080:8080 + + The following services are available at these paths after the frontend-proxy service is exposed with port forwarding: + Webstore http://localhost:8080/ + Jaeger UI http://localhost:8080/jaeger/ui/ + Grafana http://localhost:8080/grafana/ + Load Generator UI http://localhost:8080/loadgen/ + Feature Flags UI http://localhost:8080/feature/ diff --git a/chart/templates/_helpers.tpl b/chart/templates/_helpers.tpl new file mode 100644 index 0000000..9d65621 --- /dev/null +++ b/chart/templates/_helpers.tpl @@ -0,0 +1,84 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "otel-demo.name" -}} +{{- default .Release.Name | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "otel-demo.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "otel-demo.labels" -}} +helm.sh/chart: {{ include "otel-demo.chart" . }} +{{ include "otel-demo.selectorLabels" . }} +{{ include "otel-demo.workloadLabels" . }} +app.kubernetes.io/part-of: opentelemetry-demo +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + + + +{{/* +Workload (Pod) labels +*/}} +{{- define "otel-demo.workloadLabels" -}} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +{{- if .name }} +app.kubernetes.io/component: {{ .name}} +app.kubernetes.io/name: {{ .name }} +{{- end }} +{{- end }} + + + + +{{/* +Selector labels +*/}} +{{- define "otel-demo.selectorLabels" -}} +{{- if .name }} +opentelemetry.io/name: {{ .name }} +{{- end }} +{{- end }} + +{{- define "otel-demo.envOverriden" -}} +{{- $mergedEnvs := list }} +{{- $envOverrides := default (list) .envOverrides }} + +{{- range .env }} +{{- $currentEnv := . }} +{{- $hasOverride := false }} +{{- range $envOverrides }} +{{- if eq $currentEnv.name .name }} +{{- $mergedEnvs = append $mergedEnvs . }} +{{- $envOverrides = without $envOverrides . }} +{{- $hasOverride = true }} +{{- end }} +{{- end }} +{{- if not $hasOverride }} +{{- $mergedEnvs = append $mergedEnvs $currentEnv }} +{{- end }} +{{- end }} +{{- $mergedEnvs = concat $mergedEnvs $envOverrides }} +{{- mustToJson $mergedEnvs }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "otel-demo.serviceAccountName" -}} +{{- if .serviceAccount.create }} +{{- default (include "otel-demo.name" .) .serviceAccount.name }} +{{- else }} +{{- default "default" .serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/chart/templates/_objects.tpl b/chart/templates/_objects.tpl new file mode 100644 index 0000000..4e53bd1 --- /dev/null +++ b/chart/templates/_objects.tpl @@ -0,0 +1,310 @@ +{{/* +Demo component Deployment template +*/}} +{{- define "otel-demo.deployment" }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .name }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} +spec: + replicas: {{ .replicas | default .defaultValues.replicas }} + revisionHistoryLimit: {{ .revisionHistoryLimit | default .defaultValues.revisionHistoryLimit }} + selector: + matchLabels: + {{- include "otel-demo.selectorLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "otel-demo.selectorLabels" . | nindent 8 }} + {{- include "otel-demo.workloadLabels" . | nindent 8 }} + {{- if .podLabels }} + {{- toYaml .podLabels | nindent 8 }} + {{- end }} + {{- if .podAnnotations }} + annotations: + {{- toYaml .podAnnotations | nindent 8 }} + {{- end }} + spec: + {{- if or .defaultValues.image.pullSecrets ((.imageOverride).pullSecrets) }} + imagePullSecrets: + {{- ((.imageOverride).pullSecrets) | default .defaultValues.image.pullSecrets | toYaml | nindent 8}} + {{- end }} + serviceAccountName: {{ include "otel-demo.serviceAccountName" .}} + {{- $schedulingRules := .schedulingRules | default dict }} + {{- if or .defaultValues.schedulingRules.nodeSelector $schedulingRules.nodeSelector}} + nodeSelector: + {{- $schedulingRules.nodeSelector | default .defaultValues.schedulingRules.nodeSelector | toYaml | nindent 8 }} + {{- end }} + {{- if or .defaultValues.schedulingRules.affinity $schedulingRules.affinity}} + affinity: + {{- $schedulingRules.affinity | default .defaultValues.schedulingRules.affinity | toYaml | nindent 8 }} + {{- end }} + {{- if or .defaultValues.schedulingRules.tolerations $schedulingRules.tolerations}} + tolerations: + {{- $schedulingRules.tolerations | default .defaultValues.schedulingRules.tolerations | toYaml | nindent 8 }} + {{- end }} + {{- if or .defaultValues.podSecurityContext .podSecurityContext }} + securityContext: + {{- .podSecurityContext | default .defaultValues.podSecurityContext | toYaml | nindent 8 }} + {{- end}} + containers: + - name: {{ .name }} + image: '{{ ((.imageOverride).repository) | default .defaultValues.image.repository }}:{{ ((.imageOverride).tag) | default (printf "%s-%s" (default .Chart.AppVersion .defaultValues.image.tag) .name) }}' + imagePullPolicy: {{ ((.imageOverride).pullPolicy) | default .defaultValues.image.pullPolicy }} + {{- if .command }} + command: + {{- .command | toYaml | nindent 12 -}} + {{- end }} + {{- if or .ports .service}} + ports: + {{- include "otel-demo.pod.ports" . | nindent 12 }} + {{- end }} + env: + {{- include "otel-demo.pod.env" . | nindent 12 }} + resources: + {{- .resources | toYaml | nindent 12 }} + {{- if or .defaultValues.securityContext .securityContext }} + securityContext: + {{- .securityContext | default .defaultValues.securityContext | toYaml | nindent 12 }} + {{- end}} + {{- if .livenessProbe }} + livenessProbe: + {{- .livenessProbe | toYaml | nindent 12 }} + {{- end }} + {{- if .readinessProbe }} + readinessProbe: + {{- .readinessProbe | toYaml | nindent 12 }} + {{- end }} + volumeMounts: + {{- if .additionalVolumeMounts }} + {{- tpl (toYaml .additionalVolumeMounts) . | nindent 12 }} + {{- end }} + {{- range .mountedConfigMaps }} + - name: {{ .name | lower }} + mountPath: {{ .mountPath }} + {{- if .subPath }} + subPath: {{ .subPath }} + {{- end }} + {{- end }} + {{- range .mountedEmptyDirs }} + - name: {{ .name | lower }} + mountPath: {{ .mountPath }} + {{- if .subPath }} + subPath: {{ .subPath }} + {{- end }} + {{- end }} + {{- range .sidecarContainers }} + {{- $sidecar := set . "name" (.name | lower)}} + {{- $sidecar := set . "Chart" $.Chart }} + {{- $sidecar := set . "Release" $.Release }} + {{- $sidecar := set . "defaultValues" $.defaultValues }} + - name: {{ .name }} + image: '{{ ((.imageOverride).repository) | default .defaultValues.image.repository }}:{{ ((.imageOverride).tag) | default (printf "%s-%s" (default .Chart.AppVersion .defaultValues.image.tag) .name) }}' + imagePullPolicy: {{ ((.imageOverride).pullPolicy) | default .defaultValues.image.pullPolicy }} + {{- if .command }} + command: + {{- .command | toYaml | nindent 12 -}} + {{- end }} + {{- if or .ports .service }} + ports: + {{- include "otel-demo.pod.ports" . | nindent 12 }} + {{- end }} + env: + {{- include "otel-demo.pod.env" . | nindent 12 }} + {{- if .resources }} + resources: + {{- .resources | toYaml | nindent 12 }} + {{- end }} + {{- if or .defaultValues.securityContext .securityContext }} + securityContext: + {{- .securityContext | default .defaultValues.securityContext | toYaml | nindent 12 }} + {{- end}} + {{- if .livenessProbe }} + livenessProbe: + {{- .livenessProbe | toYaml | nindent 12 }} + {{- end }} + {{- if .readinessProbe }} + readinessProbe: + {{- .readinessProbe | toYaml | nindent 12 }} + {{- end }} + {{- if .volumeMounts }} + volumeMounts: + {{- .volumeMounts | toYaml | nindent 12 }} + {{- end }} + {{- end }} + {{- if .initContainers }} + initContainers: + {{- tpl (toYaml .initContainers) . | nindent 8 }} + {{- end}} + volumes: + {{- range .mountedConfigMaps }} + - name: {{ .name | lower}} + configMap: + {{- if .existingConfigMap }} + name: {{ tpl .existingConfigMap $ }} + {{- else }} + name: {{ $.name }}-{{ .name | lower }} + {{- end }} + {{- end }} + {{- range .mountedEmptyDirs }} + - name: {{ .name | lower}} + emptyDir: {} + {{- end }} + {{- if .additionalVolumes }} + {{- tpl (toYaml .additionalVolumes) . | nindent 8 }} + {{- end }} +{{- end }} + +{{/* +Demo component Service template +*/}} +{{- define "otel-demo.service" }} +{{- if or .ports .service}} +{{- $service := .service | default dict }} +--- +apiVersion: v1 +kind: Service +metadata: + name: {{ .name }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} + {{- with $service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ $service.type | default "ClusterIP" }} + ports: + {{- if .ports }} + {{- range .ports }} + - port: {{ .value }} + name: {{ .name}} + targetPort: {{ .value }} + {{- end }} + {{- end }} + + {{- if and .service .service.port }} + - port: {{ .service.port}} + name: tcp-service + targetPort: {{ .service.port }} + {{- if .service.nodePort }} + nodePort: {{ .service.nodePort }} + {{- end }} + {{- end }} + + {{- range $i, $sidecar := .sidecarContainers }} + {{- if .ports }} + {{- range .ports }} + - port: {{ .value }} + name: {{ .name}} + targetPort: {{ .value }} + {{- end }} + {{- end }} + + {{- if and .service .service.port }} + - port: {{ .service.port}} + name: tcp-service-{{ $i }} + targetPort: {{ .service.port }} + {{- if .service.nodePort }} + nodePort: {{ .service.nodePort }} + {{- end }} + {{- end }} + {{- end }} + selector: + {{- include "otel-demo.selectorLabels" . | nindent 4 }} +{{- end}} +{{- end}} + +{{/* +Demo component ConfigMap template +*/}} +{{- define "otel-demo.configmap" }} +{{- range .mountedConfigMaps }} +{{- if .data }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ $.name }}-{{ .name | lower }} + labels: + {{- include "otel-demo.labels" $ | nindent 4 }} +data: + {{- .data | toYaml | nindent 2}} +{{- end}} +{{- end}} +{{- end}} + +{{/* +Demo component Ingress template +*/}} +{{- define "otel-demo.ingress" }} +{{- $hasIngress := false}} +{{- if .ingress }} +{{- if .ingress.enabled }} +{{- $hasIngress = true }} +{{- end }} +{{- end }} +{{- $hasServicePorts := false}} +{{- if .service }} +{{- if .service.port }} +{{- $hasServicePorts = true }} +{{- end }} +{{- end }} +{{- if and $hasIngress (or .ports $hasServicePorts) }} +{{- $ingresses := list .ingress }} +{{- if .ingress.additionalIngresses }} +{{- $ingresses := concat $ingresses .ingress.additionalIngresses -}} +{{- end }} +{{- range $ingresses }} +--- +apiVersion: "networking.k8s.io/v1" +kind: Ingress +metadata: + {{- if .name }} + name: {{ $.name }}-{{ .name | lower }} + {{- else }} + name: {{ $.name }} + {{- end }} + labels: + {{- include "otel-demo.labels" $ | nindent 4 }} + {{- if .annotations }} + annotations: + {{ toYaml .annotations | nindent 4 }} + {{- end }} +spec: + {{- if .ingressClassName }} + ingressClassName: {{ .ingressClassName }} + {{- end -}} + {{- if .tls }} + tls: + {{- range .tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + {{- with .secretName }} + secretName: {{ . }} + {{- end }} + {{- end }} + {{- end }} + rules: + {{- range .hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + pathType: {{ .pathType }} + backend: + service: + name: {{ $.name }} + port: + number: {{ .port }} + {{- end }} + {{- end }} +{{- end}} +{{- end}} +{{- end}} diff --git a/chart/templates/_pod.tpl b/chart/templates/_pod.tpl new file mode 100644 index 0000000..d6c2987 --- /dev/null +++ b/chart/templates/_pod.tpl @@ -0,0 +1,63 @@ +{{/* +Get Pod Env +- Merges default environment variables (if used) with component environment variables. +- If using defaults, will pull out OTEL_RESOURCE_ATTRIBUTES from the list to be reused later. +- An environment variable named OTEL_RESOURCE_ATTRIBUTES_EXTRA will have its value appended to the value of the +OTEL_RESOURCE_ATTRIBUTES environment variable if it exists. +- The OTEL_RESOURCES_ATTRIBUTES environment variable will typically use Kubernetes environment variable expansion and +should be last. +*/}} +{{- define "otel-demo.pod.env" -}} +{{- $resourceAttributesEnv := dict }} +{{- $allEnvs := list }} + +{{- if .useDefault.env }} +{{- $defaultEnvs := include "otel-demo.envOverriden" (dict "env" .defaultValues.env "envOverrides" .defaultValues.envOverrides) | mustFromJson }} +{{- range $defaultEnvs }} +{{- if eq .name "OTEL_RESOURCE_ATTRIBUTES" }} +{{- $resourceAttributesEnv = . }} +{{- else }} +{{- $allEnvs = append $allEnvs . }} +{{- end }} +{{- end }} +{{- end }} + +{{- if or .env .envOverrides }} +{{- $localEnvs := include "otel-demo.envOverriden" . | mustFromJson }} +{{- range $localEnvs }} +{{- if eq .name "OTEL_RESOURCE_ATTRIBUTES" }} +{{- $resourceAttributesEnv = . }} +{{- else if and $resourceAttributesEnv (eq .name "OTEL_RESOURCE_ATTRIBUTES_EXTRA") }} +{{- $newValue := (printf "%s,%s" (get $resourceAttributesEnv "value") .value) }} +{{- $resourceAttributesEnv = dict "name" "OTEL_RESOURCE_ATTRIBUTES" "value" $newValue }} +{{- else }} +{{- $allEnvs = append $allEnvs . }} +{{- end }} +{{- end }} +{{- end }} + +{{- if $resourceAttributesEnv }} +{{- $allEnvs = append $allEnvs $resourceAttributesEnv }} +{{- end }} + +{{- tpl (toYaml $allEnvs) . }} +{{- end }} + + +{{/* +Get Pod ports +*/}} +{{- define "otel-demo.pod.ports" -}} +{{- if .ports }} +{{- range $port := .ports }} +- containerPort: {{ $port.value }} + name: {{ $port.name}} +{{- end }} +{{- end }} +{{- if .service }} +{{- if .service.port }} +- containerPort: {{.service.port}} + name: service +{{- end }} +{{- end }} +{{- end }} diff --git a/chart/templates/component.yaml b/chart/templates/component.yaml new file mode 100644 index 0000000..382cac3 --- /dev/null +++ b/chart/templates/component.yaml @@ -0,0 +1,18 @@ +{{- range $name, $config := .Values.components }} + {{- $config := set . "Capabilities" $.Capabilities }} + {{- $config := set . "Template" $.Template }} + {{- $config := set . "name" ($name | lower) }} + {{- $config := set . "Release" $.Release }} + {{- $config := set . "Chart" $.Chart }} + {{- $config := set . "serviceAccount" $.Values.serviceAccount }} + {{- $config := set . "observability" $.Values.observability }} + {{- $config := set . "defaultValues" $.Values.default }} + + {{- if $config.enabled -}} + {{- include "otel-demo.deployment" $config -}} + {{- include "otel-demo.service" $config -}} + {{- include "otel-demo.ingress" $config -}} + {{- include "otel-demo.configmap" $config -}} + {{ end }} + +{{- end }} diff --git a/chart/templates/flagd-config.yaml b/chart/templates/flagd-config.yaml new file mode 100644 index 0000000..02d312a --- /dev/null +++ b/chart/templates/flagd-config.yaml @@ -0,0 +1,11 @@ +{{- if .Values.components.flagd.enabled -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: flagd-config + namespace: {{ .Release.Namespace }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} +data: + {{ (.Files.Glob "flagd/*.json").AsConfig | nindent 2 }} +{{- end }} diff --git a/chart/templates/grafana-config.yaml b/chart/templates/grafana-config.yaml new file mode 100644 index 0000000..cc5a99a --- /dev/null +++ b/chart/templates/grafana-config.yaml @@ -0,0 +1,42 @@ +{{- if .Values.grafana.enabled -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-alerting + namespace: {{ .Release.Namespace }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} + grafana_alert: "1" +data: + {{ (.Files.Glob "grafana/provisioning/alerting/*.yaml").AsConfig | nindent 2 }} + +{{- range $path, $_ := .Files.Glob "grafana/provisioning/dashboards/*.json" }} +{{- $name := base $path | trimSuffix ".json" }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-dashboard-{{ $name | lower }} + namespace: {{ $.Release.Namespace }} + labels: + {{- include "otel-demo.labels" $ | nindent 4 }} + grafana_dashboard: "1" +data: + {{ $name }}.json: |- +{{ $.Files.Get $path | indent 4 }} +{{- end }} + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: grafana-datasources + namespace: {{ .Release.Namespace }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} + grafana_datasource: "1" +data: + {{ (.Files.Glob "grafana/provisioning/datasources/*.yaml").AsConfig | nindent 2 }} + +{{- end }} diff --git a/chart/templates/posgresql-init-config.yaml b/chart/templates/posgresql-init-config.yaml new file mode 100644 index 0000000..5a51788 --- /dev/null +++ b/chart/templates/posgresql-init-config.yaml @@ -0,0 +1,11 @@ +{{- if .Values.components.postgresql.enabled -}} +apiVersion: v1 +kind: ConfigMap +metadata: + name: postgresql-init + namespace: {{ .Release.Namespace }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} +data: + {{ (.Files.Glob "postgresql/*.sql").AsConfig | nindent 2 }} +{{- end }} diff --git a/chart/templates/serviceaccount.yaml b/chart/templates/serviceaccount.yaml new file mode 100644 index 0000000..12ebd0c --- /dev/null +++ b/chart/templates/serviceaccount.yaml @@ -0,0 +1,15 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + {{- $_ := set . "serviceAccount" .Values.serviceAccount }} + name: {{ include "otel-demo.serviceAccountName" . }} + labels: + {{- include "otel-demo.labels" . | nindent 4 }} + {{- if .Values.serviceAccount.annotations }} + annotations: + {{- range $key, $value := .Values.serviceAccount.annotations }} + {{- printf "%s: %s" $key (tpl $value $ | quote) | nindent 4 }} + {{- end }} + {{- end }} +{{- end }} diff --git a/chart/values.schema.json b/chart/values.schema.json new file mode 100644 index 0000000..195a61b --- /dev/null +++ b/chart/values.schema.json @@ -0,0 +1,834 @@ +{ + "$schema": "http://json-schema.org/schema#", + "type": "object", + "title": "Values", + "additionalProperties": false, + "properties": { + "enabled": { + "description": "Usually used when using Opentelemetry-demo as a subchart.", + "type": "boolean" + }, + "global": { + "type": "object" + }, + "default": { + "$ref": "#/definitions/Default" + }, + "serviceAccount": { + "type": "object", + "additionalProperties": false, + "properties": { + "create": { + "type": "boolean" + }, + "annotations": { + "type": "object" + }, + "name": { + "type": "string" + } + }, + "required": [ + "create" + ] + }, + "components": { + "$ref": "#/definitions/Components" + }, + "opentelemetry-collector": { + "type": "object" + }, + "jaeger": { + "type": "object" + }, + "prometheus": { + "type": "object" + }, + "grafana": { + "type": "object" + }, + "opensearch": { + "type": "object" + } + }, + "required": [ + "components", + "serviceAccount" + ], + "definitions": { + "Components": { + "type": "object", + "additionalProperties": false, + "properties": { + "accounting": { + "$ref": "#/definitions/Component" + }, + "ad": { + "$ref": "#/definitions/Component" + }, + "cart": { + "$ref": "#/definitions/Component" + }, + "checkout": { + "$ref": "#/definitions/Component" + }, + "currency": { + "$ref": "#/definitions/Component" + }, + "email": { + "$ref": "#/definitions/Component" + }, + "flagd": { + "$ref": "#/definitions/Component" + }, + "fraud-detection": { + "$ref": "#/definitions/Component" + }, + "frontend": { + "$ref": "#/definitions/Component" + }, + "frontend-proxy": { + "$ref": "#/definitions/Component" + }, + "image-provider": { + "$ref": "#/definitions/Component" + }, + "load-generator": { + "$ref": "#/definitions/Component" + }, + "payment": { + "$ref": "#/definitions/Component" + }, + "product-catalog": { + "$ref": "#/definitions/Component" + }, + "product-reviews": { + "$ref": "#/definitions/Component" + }, + "quote": { + "$ref": "#/definitions/Component" + }, + "recommendation": { + "$ref": "#/definitions/Component" + }, + "shipping": { + "$ref": "#/definitions/Component" + }, + "kafka": { + "$ref": "#/definitions/Component" + }, + "llm": { + "$ref": "#/definitions/Component" + }, + "postgresql": { + "$ref": "#/definitions/Component" + }, + "valkey-cart": { + "$ref": "#/definitions/Component" + } + }, + "title": "Components" + }, + "Component": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "useDefault": { + "type": "object", + "additionalProperties": false, + "properties": { + "env": { + "type": "boolean", + "additionalProperties": false + } + }, + "required": [ + "env" + ] + }, + "imageOverride": { + "$ref": "#/definitions/Image" + }, + "replicas": { + "type": "integer" + }, + "revisionHistoryLimit": { + "type": "integer" + }, + "service": { + "$ref": "#/definitions/Service" + }, + "ports": { + "type": "array", + "items": { + "$ref": "#/definitions/Port" + } + }, + "env": { + "type": "array", + "items": { + "$ref": "#/definitions/Env" + } + }, + "envOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/Env" + } + }, + "command": { + "type": "array", + "items": {} + }, + "additionalVolumeMounts": { + "type": "array", + "items": { + "type": "object" + } + }, + "mountedConfigMaps": { + "type": "array", + "items": { + "$ref": "#/definitions/MountedConfigMap" + } + }, + "mountedEmptyDirs": { + "type": "array", + "items": { + "$ref": "#/definitions/MountedEmptyDirs" + } + }, + "livenessProbe": { + "$ref": "#/definitions/LivenessProbe" + }, + "readinessProbe": { + "$ref": "#/definitions/ReadinessProbe" + }, + "schedulingRules": { + "$ref": "#/definitions/SchedulingRules" + }, + "podLabels": { + "type": "object" + }, + "podAnnotations": { + "type": "object" + }, + "resources": { + "$ref": "#/definitions/ContainerResources" + }, + "securityContext": { + "type": "object" + }, + "podSecurityContext": { + "type": "object" + }, + "ingress": { + "$ref": "#/definitions/Ingress" + }, + "initContainers": { + "type": "array" + }, + "sidecarContainers": { + "type": "array" + }, + "additionalVolumes": { + "type": "array" + } + }, + "required": [ + "enabled", + "useDefault" + ], + "title": "Service" + }, + "Env": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + }, + "valueFrom": { + "type": "object", + "additionalProperties": false, + "properties": { + "configMapKeyRef": { + "$ref": "#/definitions/ConfigMapKeyRef" + }, + "fieldRef": { + "$ref": "#/definitions/FieldRef" + }, + "resourceFieldRef": { + "$ref": "#/definitions/ResourceFieldRef" + }, + "secretKeyRef": { + "$ref": "#/definitions/SecretKeyRef" + } + } + } + }, + "required": [ + "name" + ], + "title": "Env" + }, + "Default": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "env": { + "type": "array", + "items": { + "$ref": "#/definitions/Env" + } + }, + "envOverrides": { + "type": "array", + "items": { + "$ref": "#/definitions/Env" + } + }, + "replicas": { + "type": "integer" + }, + "revisionHistoryLimit": { + "type": "integer" + }, + "image": { + "$ref": "#/definitions/Image" + }, + "schedulingRules": { + "$ref": "#/definitions/SchedulingRules" + }, + "securityContext": { + "type": "object" + }, + "podSecurityContext": { + "type": "object" + } + }, + "required": [ + "image", + "schedulingRules", + "securityContext" + ], + "title": "Default" + }, + "ConfigMapKeyRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "optional": { + "type": "boolean" + } + }, + "required": [ + "key" + ], + "title": "ConfigMapKeyRef" + }, + "FieldRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "fieldPath": { + "type": "string" + }, + "apiVersion": { + "type": "string" + } + }, + "required": [ + "fieldPath" + ], + "title": "FieldRef" + }, + "ResourceFieldRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "resource": { + "type": "string" + }, + "containerName": { + "type": "string" + }, + "divisor": { + "type": "integer" + } + }, + "required": [ + "resource" + ], + "title": "ResourceFieldRef" + }, + "SecretKeyRef": { + "type": "object", + "additionalProperties": false, + "properties": { + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "optional": { + "type": "boolean" + } + }, + "required": [ + "key" + ] + }, + "Service": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "nodePort": { + "type": "integer" + }, + "annotations": { + "type": "object" + } + }, + "title": "Service" + }, + "Port": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "integer" + } + }, + "required": [ + "name", + "value" + ], + "title": "Port" + }, + "Image": { + "type": "object", + "additionalProperties": false, + "properties": { + "repository": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "pullPolicy": { + "type": "string" + }, + "pullSecrets": { + "type": "array", + "items": {} + } + }, + "title": "Image" + }, + "ContainerResources": { + "type": "object", + "properties": { + "limits": { + "$ref": "#/definitions/ContainerResourceDef" + }, + "requests": { + "$ref": "#/definitions/ContainerResourceDef" + } + } + }, + "ContainerResourceDef": { + "type": "object", + "properties": { + "cpu": { + "type": "string" + }, + "memory": { + "type": "string" + } + } + }, + "SchedulingRules": { + "title": "SchedulingRules", + "type": "object", + "additionalProperties": false, + "properties": { + "nodeSelector": { + "type": "object" + }, + "affinity": { + "type": "object" + }, + "tolerations": { + "type": "array", + "items": {} + } + } + }, + "Ingress": { + "type": "object", + "additionalProperties": false, + "properties": { + "enabled": { + "type": "boolean" + }, + "ingressClassName": { + "type": "string" + }, + "annotations": { + "type": "object" + }, + "hosts": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "host": { + "type": "string" + }, + "paths": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "path": { + "type": "string" + }, + "pathType": { + "type": "string", + "enum": [ + "Exact", + "Prefix", + "ImplementationSpecific" + ] + }, + "port": { + "type": "integer" + } + }, + "required": [ + "path", + "pathType", + "port" + ] + } + } + }, + "required": [ + "paths" + ] + } + }, + "tls": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "secretName": { + "type": "string" + }, + "hosts": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "additionalIngresses": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "ingressClassName": { + "type": "string" + }, + "annotations": { + "type": "object" + }, + "hosts": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "host": { + "type": "string" + }, + "paths": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "path": { + "type": "string" + }, + "pathType": { + "type": "string", + "enum": [ + "Exact", + "Prefix", + "ImplementationSpecific" + ] + }, + "port": { + "type": "integer" + } + }, + "required": [ + "path", + "pathType", + "port" + ] + } + } + }, + "required": [ + "paths" + ] + } + }, + "tls": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "secretName": { + "type": "string" + }, + "hosts": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "required": [ + "name" + ] + } + } + }, + "required": [ + "enabled" + ] + }, + "LivenessProbe": { + "type": "object", + "additionalProperties": false, + "required": [ + "httpGet" + ], + "properties": { + "httpGet": { + "type": "object", + "required": [ + "port" + ], + "additionalProperties": false, + "properties": { + "path": { + "type": "string" + }, + "host": { + "type": "string" + }, + "scheme": { + "type": "string" + }, + "httpHeaders": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "port": { + "type": "integer" + } + } + }, + "initialDelaySeconds": { + "type": "integer" + }, + "timeoutSeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + }, + "successThreshold": { + "type": "integer" + }, + "failureThreshold": { + "type": "integer" + } + } + }, + "ReadinessProbe": { + "type": "object", + "additionalProperties": false, + "required": [ + "httpGet" + ], + "properties": { + "httpGet": { + "type": "object", + "required": [ + "port" + ], + "additionalProperties": false, + "properties": { + "path": { + "type": "string" + }, + "host": { + "type": "string" + }, + "scheme": { + "type": "string" + }, + "httpHeaders": { + "type": "array", + "items": { + "type": "object", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "port": { + "type": "integer" + } + } + }, + "initialDelaySeconds": { + "type": "integer" + }, + "timeoutSeconds": { + "type": "integer" + }, + "periodSeconds": { + "type": "integer" + }, + "successThreshold": { + "type": "integer" + }, + "failureThreshold": { + "type": "integer" + } + } + }, + "MountedConfigMap": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "mountPath": { + "type": "string" + }, + "subPath": { + "type": "string" + }, + "existingConfigMap": { + "type": "string" + }, + "data": { + "type": "object" + } + }, + "required": [ + "name", + "mountPath" + ], + "oneOf": [ + { + "required": [ + "existingConfigMap" + ] + }, + { + "required": [ + "data" + ] + } + ] + }, + "MountedEmptyDirs": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string" + }, + "mountPath": { + "type": "string" + } + }, + "required": [ + "name", + "mountPath" + ] + } + } +} diff --git a/chart/values.yaml b/chart/values.yaml new file mode 100644 index 0000000..537221d --- /dev/null +++ b/chart/values.yaml @@ -0,0 +1,1223 @@ +# yaml-language-server: $schema=./values.schema.json +default: + # List of environment variables applied to all components + env: + - name: OTEL_SERVICE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: "metadata.labels['app.kubernetes.io/component']" + - name: OTEL_COLLECTOR_NAME + value: otel-collector + - name: OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE + value: cumulative + # Allows overriding and additions to .Values.default.env + envOverrides: [] + # - name: OTEL_K8S_NODE_NAME + # value: "someConstantValue" + image: + repository: ghcr.io/open-telemetry/demo + # Overrides the image tag whose default is the chart appVersion. + # The service's name will be applied to the end of this value. + tag: "" + pullPolicy: IfNotPresent + pullSecrets: [] + # Default # of replicas for all components + replicas: 1 + # default revisionHistoryLimit for all components (number of old ReplicaSets to retain) + revisionHistoryLimit: 10 + # Default schedulingRules for all components + schedulingRules: + nodeSelector: {} + affinity: {} + tolerations: [] + # Default securityContext for all components + securityContext: {} + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +components: + ## Demo Components are named objects (services) with several properties + # demoService: + ## Enable the component (service) + # enabled: true + # useDefault: + ## Use default environment variables + # env: true + ## Override Image repository and Tag. Tag will use appVersion as default. + ## Component's name will be applied to end of this value. + # imageOverride: {} + ## Optional service definitions to apply + # service: + ## Service Type to use for this component. Default is ClusterIP. + # type: ClusterIP + ## Service Port to use to expose this component. Default is nil + # port: 8080 + ## Service Node Port to use to expose this component on a NodePort service. Default is nil + # nodePort: 30080 + ## Service Annotations to add to this component + # annotations: {} + ## Additional service ports to use to expose this component + # ports: + # - name: extraServicePort + # value: 8081 + ## Environment variables to add to the component's pod + # env: + ## Environment variables that upsert (append + merge) into the `env` specification for this component. + ## A variable named OTEL_RESOURCE_ATTRIBUTES_EXTRA will have its value appended to the OTEL_RESOURCE_ATTRIBUTES value. + # envOverrides: + ## Pod Scheduling rules for nodeSelector, affinity, or tolerations. + # schedulingRules: + # nodeSelector: {} + # affinity: {} + # tolerations: [] + ## Pod labels to add to this component + # podLabels: {} + ## Pod Annotations to add to this component + # podAnnotations: {} + ## Resources for this component + # resources: {} + ## Container security context for setting user ID (UID), group ID (GID) and other security policies + # securityContext: + ## Ingresses rules to add for the to the component + # ingress: + ## Enable the creation of Ingress rules. Default is false + # enabled: false + ## Annotations to add to the ingress rule + # annotations: {} + ## Which Ingress class (controller) to use. Default is unspecified. + # ingressClassName: nginx + ## Hosts definitions for the Ingress rule + # hosts: + # - host: demo.example.com + ## Each host can have multiple paths/routes + # paths: + # - path: / + # pathType: Prefix + # port: 8080 + ## Optional TLS specifications for the Ingress rule + # tls: + # - secretName: demo-tls + # hosts: + # - demo.example.com + ## Additional ingresses - only created if ingress.enabled is true + ## Useful for when differently annotated ingress services are required + ## Each additional ingress needs key "name" set to something unique + # additionalIngresses: [] + # - name: extra-demo-ingress + # ingressClassName: nginx + # annotations: {} + # hosts: + # - host: demo.example.com + # paths: + # - path: / + # pathType: Prefix + # port: 8080 + # tls: + # - secretName: demo-tls + # hosts: + # - demo.example.com + ## Command to use in the container spec, in case you don't want to go with the default command from the image. + # command: [] + ## Configuration to for this component; will create a Volume, and Mount backed by an optionally created ConfigMap. + ## The name, mountPath are required, and one of existingConfigMap or data is required. + ## If an existing ConfigMap is not provided, the contents under data will be used for the created ConfigMap. + # mountedConfigMaps: [] + # - name: my-config + # mountPath: /etc/config + # subPath: + # existingConfigMap: my-configmap + # data: + # my-config.yaml: | + # key: value + ## Configuration to create an custom Volume + # additionalVolumes: + # - name: nginx-logs + # hostPath: + # path: /var/log/nginx + # type: "" + ## Configuration to mount the custom Volume to the container + # additionalVolumeMounts: + # - name: nginx-logs + # mountPath: /var/log/nginx + # # Kubernetes container health check options + # livenessProbe: {} + # readinessProbe: {} + # # Optional init container to run before the pod starts. + # initContainers: + # - name: + # image: + # command: [list of commands for the init container to run] + # # Replicas for the component + # replicas: 1 + # # Number of old ReplicaSets to retain + # revisionHistoryLimit: 10 + # # Optional pod security context for setting user ID (UID), group ID (GID) and other security policies + # # This will be applied at pod level, can be applied globally for all pods: .Values.default.podSecurityContext + # # Or it can be applied to a specific component: .Values.components..podSecurityContext + # podSecurityContext: + # runAsGroup: 65534 + # runAsNonRoot: true + # runAsUser: 65534 + + accounting: + enabled: true + useDefault: + env: true + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: KAFKA_ADDR + value: kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: DB_CONNECTION_STRING + value: Host=postgresql;Username=otelu;Password=otelp;Database=otel + - name: OTEL_DOTNET_AUTO_TRACES_ENTITYFRAMEWORKCORE_INSTRUMENTATION_ENABLED + value: "false" + resources: + limits: + memory: 120Mi + initContainers: + - name: wait-for-kafka + image: busybox:latest + command: ["sh", "-c", "until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done;"] + + ad: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: AD_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_LOGS_EXPORTER + value: otlp + resources: + limits: + memory: 300Mi + + cart: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: CART_PORT + value: "8080" + - name: ASPNETCORE_URLS + value: http://*:$(CART_PORT) + - name: VALKEY_ADDR + value: valkey-cart:6379 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 160Mi + initContainers: + - name: wait-for-valkey-cart + image: busybox:latest + command: ["sh", "-c", "until nc -z -v -w30 valkey-cart 6379; do echo waiting for valkey-cart; sleep 2; done;"] + + checkout: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: CHECKOUT_PORT + value: "8080" + - name: CART_ADDR + value: cart:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: EMAIL_ADDR + value: http://email:8080 + - name: PAYMENT_ADDR + value: payment:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 16MiB + resources: + limits: + memory: 20Mi + initContainers: + - name: wait-for-kafka + image: busybox:latest + command: ["sh", "-c", "until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done;"] + + currency: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: CURRENCY_PORT + value: "8080" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: VERSION + value: "{{ .Chart.AppVersion }}" + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + + email: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: EMAIL_PORT + value: "8080" + - name: APP_ENV + value: production + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + resources: + limits: + memory: 100Mi + + fraud-detection: + enabled: true + useDefault: + env: true + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: KAFKA_ADDR + value: kafka:9092 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES + value: "true" + - name: OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED + value: "true" + resources: + limits: + memory: 300Mi + initContainers: + - name: wait-for-kafka + image: busybox:latest + command: ["sh", "-c", "until nc -z -v -w30 kafka 9092; do echo waiting for kafka; sleep 2; done;"] + + frontend: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: FRONTEND_PORT + value: "8080" + - name: PORT + value: $(FRONTEND_PORT) + - name: FRONTEND_ADDR + value: :8080 + - name: AD_ADDR + value: ad:8080 + - name: CART_ADDR + value: cart:8080 + - name: CHECKOUT_ADDR + value: checkout:8080 + - name: CURRENCY_ADDR + value: currency:8080 + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: PRODUCT_REVIEWS_ADDR + value: product-reviews:3551 + - name: RECOMMENDATION_ADDR + value: recommendation:8080 + - name: SHIPPING_ADDR + value: http://shipping:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: ENV_PLATFORM + value: kubernetes + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: WEB_OTEL_SERVICE_NAME + value: frontend-web + - name: PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + value: http://localhost:8080/otlp-http/v1/traces # This expects users to use `kubectl port-forward ...` + resources: + limits: + memory: 250Mi + securityContext: + runAsUser: 1001 # nextjs + runAsGroup: 1001 + runAsNonRoot: true + + frontend-proxy: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + io.opentelemetry.discovery.metrics/enabled: 'true' + io.opentelemetry.discovery.metrics/scraper: httpcheck + io.opentelemetry.discovery.metrics/config: | + targets: + - endpoint: "http://`endpoint`" + env: + - name: ENVOY_PORT + value: "8080" + - name: ENVOY_ADDR + value: "0.0.0.0" + - name: ENVOY_ADMIN_PORT + value: "10000" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_UI_HOST + value: flagd + - name: FLAGD_UI_PORT + value: "4000" + - name: FRONTEND_HOST + value: frontend + - name: FRONTEND_PORT + value: "8080" + - name: GRAFANA_HOST + value: grafana + - name: GRAFANA_PORT + value: "80" + - name: IMAGE_PROVIDER_HOST + value: image-provider + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: JAEGER_HOST + value: jaeger + - name: JAEGER_UI_PORT + value: "16686" + - name: LOCUST_WEB_HOST + value: load-generator + - name: LOCUST_WEB_PORT + value: "8089" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + resources: + limits: + memory: 65Mi + securityContext: + runAsUser: 101 # envoy + runAsGroup: 101 + runAsNonRoot: true + + image-provider: + enabled: true + useDefault: + env: true + service: + port: 8081 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + io.opentelemetry.discovery.metrics/enabled: 'true' + io.opentelemetry.discovery.metrics/scraper: nginx + io.opentelemetry.discovery.metrics/config: | + endpoint: "http://`endpoint`/status" + collection_interval: "10s" + timeout: "20s" + env: + - name: IMAGE_PROVIDER_PORT + value: "8081" + - name: OTEL_COLLECTOR_PORT_GRPC + value: "4317" + - name: OTEL_COLLECTOR_HOST + value: $(OTEL_COLLECTOR_NAME) + resources: + limits: + memory: 50Mi + + load-generator: + enabled: true + useDefault: + env: true + service: + port: 8089 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: LOCUST_WEB_HOST + value: "0.0.0.0" + - name: LOCUST_WEB_PORT + value: "8089" + - name: LOCUST_USERS + value: "10" + - name: LOCUST_SPAWN_RATE + value: "1" + - name: LOCUST_HOST + value: http://frontend-proxy:8080 + - name: LOCUST_HEADLESS + value: "false" + - name: LOCUST_AUTOSTART + value: "true" + - name: LOCUST_BROWSER_TRAFFIC_ENABLED + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: FLAGD_OFREP_PORT + value: "8016" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 1500Mi + + payment: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: PAYMENT_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 140Mi + securityContext: + runAsUser: 1000 # node + runAsGroup: 1000 + runAsNonRoot: true + + product-catalog: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: PRODUCT_CATALOG_PORT + value: "8080" + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: GOMEMLIMIT + value: 16MiB + - name: DB_CONNECTION_STRING + value: postgres://otelu:otelp@postgresql/otel?sslmode=disable + - name: OTEL_SEMCONV_STABILITY_OPT_IN + value: database + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 20Mi + + product-reviews: + enabled: true + useDefault: + env: true + service: + port: 3551 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: OPENAI_API_KEY + value: dummy + - name: LLM_MODEL + value: astronomy-llm + - name: LLM_HOST + value: llm + - name: LLM_PORT + value: "8000" + - name: LLM_BASE_URL + value: http://$(LLM_HOST):$(LLM_PORT)/v1 + - name: PRODUCT_REVIEWS_PORT + value: "3551" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: DB_CONNECTION_STRING + value: host=postgresql user=otelu password=otelp dbname=otel + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 100Mi + + quote: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: QUOTE_PORT + value: "8080" + - name: OTEL_PHP_AUTOLOAD_ENABLED + value: "true" + - name: OTEL_PHP_INTERNAL_METRICS_ENABLED + value: "true" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 40Mi + securityContext: + runAsUser: 33 # www-data + runAsGroup: 33 + runAsNonRoot: true + + recommendation: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: RECOMMENDATION_PORT + value: "8080" + - name: PRODUCT_CATALOG_ADDR + value: product-catalog:8080 + - name: OTEL_PYTHON_LOG_CORRELATION + value: "true" + - name: PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION + value: python + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + resources: + limits: + memory: 500Mi # This is high to enable supporting the recommendationCache feature flag use case + + shipping: + enabled: true + useDefault: + env: true + service: + port: 8080 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: SHIPPING_PORT + value: "8080" + - name: QUOTE_ADDR + value: http://quote:8080 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4317 + - name: IPV6_ENABLED + value: "false" + resources: + limits: + memory: 20Mi + + flagd: + enabled: true + imageOverride: + repository: "ghcr.io/open-feature/flagd" + tag: "v0.12.9" + useDefault: + env: true + replicas: 1 + ports: + - name: rpc + value: 8013 + - name: ofrep + value: 8016 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: FLAGD_OTEL_COLLECTOR_URI + value: $(OTEL_COLLECTOR_NAME):4317 + - name: GOMEMLIMIT + value: 60MiB + resources: + limits: + memory: 75Mi + command: + - "/flagd-build" + - "start" + - "--port" + - "8013" + - "--ofrep-port" + - "8016" + - "--uri" + - "file:./etc/flagd/demo.flagd.json" + mountedEmptyDirs: + - name: config-rw + mountPath: /etc/flagd + # flagd-ui as a sidecar container in the same pod so the flag json file can be shared + sidecarContainers: + - name: flagd-ui + useDefault: + env: true + service: + port: 4000 + env: + - name: FLAGD_METRICS_EXPORTER + value: otel + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: FLAGD_UI_PORT + value: "4000" + - name: SECRET_KEY_BASE + value: yYrECL4qbNwleYInGJYvVnSkwJuSQJ4ijPTx5tirGUXrbznFIBFVJdPl5t6O9ASw + - name: PHX_HOST + value: localhost + resources: + limits: + memory: 250Mi + volumeMounts: + - name: config-rw + mountPath: /app/data + initContainers: + - name: init-config + image: busybox + command: ["sh", "-c", "cp /config-ro/demo.flagd.json /config-rw/demo.flagd.json && cat /config-rw/demo.flagd.json"] + volumeMounts: + - mountPath: /config-ro + name: config-ro + - mountPath: /config-rw + name: config-rw + additionalVolumes: + - name: config-ro + configMap: + name: flagd-config + + kafka: + enabled: true + useDefault: + env: true + replicas: 1 + ports: + - name: plaintext + value: 9092 + - name: controller + value: 9093 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: KAFKA_ADVERTISED_LISTENERS + value: PLAINTEXT://kafka:9092 + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://$(OTEL_COLLECTOR_NAME):4318 + - name: KAFKA_HEAP_OPTS + value: "-Xmx400M -Xms400M" + - name: KAFKA_LISTENERS + value: PLAINTEXT://:9092,CONTROLLER://:9093 + - name: KAFKA_CONTROLLER_LISTENER_NAMES + value: CONTROLLER + - name: KAFKA_CONTROLLER_QUORUM_VOTERS + value: 1@kafka:9093 + resources: + limits: + memory: 700Mi + securityContext: + runAsUser: 1000 # appuser + runAsGroup: 1000 + runAsNonRoot: true + + llm: + enabled: true + useDefault: + env: true + service: + port: 8000 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + env: + - name: FLAGD_HOST + value: flagd + - name: FLAGD_PORT + value: "8013" + + postgresql: + enabled: true + useDefault: + env: false + imageOverride: + repository: "postgres" + tag: "17.6" + replicas: 1 + service: + port: 5432 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + io.opentelemetry.discovery.metrics/enabled: 'true' + io.opentelemetry.discovery.metrics/scraper: postgresql + io.opentelemetry.discovery.metrics/config: | + username: root + password: otel + metrics: + postgresql.blks_hit: + enabled: true + postgresql.blks_read: + enabled: true + postgresql.tup_fetched: + enabled: true + postgresql.tup_returned: + enabled: true + postgresql.tup_inserted: + enabled: true + postgresql.tup_updated: + enabled: true + postgresql.tup_deleted: + enabled: true + postgresql.deadlocks: + enabled: true + tls: + insecure: true + env: + - name: POSTGRES_USER + value: root + - name: POSTGRES_PASSWORD + value: otel + - name: POSTGRES_DB + value: otel + mountedConfigMaps: + - name: postgresql-init + mountPath: /docker-entrypoint-initdb.d + existingConfigMap: postgresql-init + resources: + limits: + memory: 100Mi + + valkey-cart: + enabled: true + useDefault: + env: false + imageOverride: + repository: "valkey/valkey" + tag: "9.0.1-alpine3.23" + replicas: 1 + ports: + - name: valkey-cart + value: 6379 + podAnnotations: + resource.opentelemetry.io/service.namespace: otel-demo + io.opentelemetry.discovery.metrics/enabled: 'true' + io.opentelemetry.discovery.metrics/scraper: redis + io.opentelemetry.discovery.metrics/config: | + username: valkey + collection_interval: 10s + resources: + limits: + memory: 20Mi + securityContext: + runAsUser: 999 # valkey + runAsGroup: 1000 + runAsNonRoot: true + +opentelemetry-collector: + enabled: true + image: + repository: "otel/opentelemetry-collector-contrib" + fullnameOverride: otel-collector + mode: daemonset + presets: + hostMetrics: + enabled: true + kubernetesAttributes: + enabled: true + kubeletMetrics: + enabled: true + clusterMetrics: + enabled: true + annotationDiscovery: + metrics: + enabled: true + resources: + limits: + memory: 200Mi + service: + enabled: true + ports: + metrics: + enabled: true + config: + receivers: + otlp: + protocols: + http: + # Since this collector needs to receive data from the web, enable cors for all origins + # `allowed_origins` can be refined for your deployment domain + cors: + allowed_origins: + - "http://*" + - "https://*" + + exporters: + otlp/jaeger: + endpoint: jaeger:4317 + tls: + insecure: true + sending_queue: + batch: + otlphttp/prometheus: + endpoint: http://prometheus:9090/api/v1/otlp + tls: + insecure: true + sending_queue: + batch: + opensearch: + logs_index: otel-logs + logs_index_time_format: "yyyy-MM-dd" + http: + endpoint: http://opensearch:9200 + tls: + insecure: true + + processors: + memory_limiter: + check_interval: 5s + limit_percentage: 80 + spike_limit_percentage: 25 + resourcedetection: + detectors: [env, system] + transform: + error_mode: ignore + trace_statements: + # Sanitize spans to prevent span metrics cardinality explosion + # caused by non-compliant high cardinality span names: + # 1. Define missing http.route on key HTTP operations for meaningful operation names + # 2. Then normalize span names; http server spans lacking http.route default to operations "GET", "POST", etc. + - context: span + # FRONTEND SERVICE + conditions: + - span.kind == SPAN_KIND_SERVER and resource.attributes["service.name"] == "frontend" and span.attributes["http.route"] == nil + statements: + # Workaround for Next.js high cardinality span name issue: https://github.com/vercel/next.js/issues/54694 + - set(span.attributes["http.route"], "/api/cart") where IsMatch(span.attributes["http.target"], "\\/api\\/cart") # e.g. # /api/cart + - set(span.attributes["http.route"], "/api/checkout") where IsMatch(span.attributes["http.target"], "\\/api\\/checkout") # e.g. # /api/checkout + - set(span.attributes["http.route"], "/api/products/{productId}") where IsMatch(span.attributes["http.target"], "\\/api\\/products\\/.*") # e.g. /api/products/1YMWWN1N4O + - set(span.attributes["http.route"], "/api/recommendations") where IsMatch(span.attributes["http.target"], "\\/api\\/recommendations") # e.g. # /api/recommendations?productIds=... + - set(span.attributes["http.route"], "/api/data") where IsMatch(span.attributes["http.target"], "\\/api\\/data.*") # e.g. # " /api/data?contextKeys=telescopes" or /api/data/?contextKeys=cameras + - context: span + statements: + # SANITIZE ALL SPAN NAMES TO PREVENT CARDINALITY EXPLOSION + - set_semconv_span_name("1.37.0", "unsanitized_span_name") + resource: + attributes: + - key: service.instance.id + from_attribute: k8s.pod.uid + action: insert + + connectors: + spanmetrics: {} + + service: + pipelines: + traces: + processors: [memory_limiter, resourcedetection, resource, transform, batch] + exporters: [otlp/jaeger, debug, spanmetrics] + metrics: + receivers: [otlp, spanmetrics] + processors: [memory_limiter, resourcedetection, resource, batch] + exporters: [otlphttp/prometheus, debug] + logs: + processors: [memory_limiter, resourcedetection, resource, batch] + exporters: [opensearch, debug] + telemetry: + metrics: + level: detailed + readers: + - periodic: + interval: 10000 + timeout: 5000 + exporter: + otlp: + protocol: http/protobuf + endpoint: http://otel-collector:4318 + insecure: true + +jaeger: + enabled: true + fullnameOverride: jaeger + jaeger: + storage: + type: memory + extraEnv: + - name: MEMORY_MAX_TRACES + value: "25000" + - name: PROMETHEUS_ADDR + value: prometheus:9090 + - name: OTEL_COLLECTOR_HOST + value: otel-collector + - name: OTEL_COLLECTOR_PORT_HTTP + value: "4318" + - name: JAEGER_HOST + value: "0.0.0.0" + - name: JAEGER_GRPC_PORT + value: "4317" + resources: + limits: + memory: 600Mi + userconfig: | + service: + extensions: [jaeger_storage, jaeger_query, healthcheckv2] + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [jaeger_storage_exporter] + telemetry: + resource: + service.name: jaeger + metrics: + level: detailed + readers: + - periodic: + interval: 10000 + timeout: 5000 + exporter: + otlp: + protocol: http/protobuf + endpoint: http://${env:OTEL_COLLECTOR_HOST}:${env:OTEL_COLLECTOR_PORT_HTTP} + insecure: true + logs: + level: info + extensions: + healthcheckv2: + use_v2: true + http: + endpoint: 0.0.0.0:13133 + jaeger_query: + storage: + traces: memory_backend + metrics: metrics_backend + base_path: /jaeger/ui + jaeger_storage: + backends: + memory_backend: + memory: + max_traces: ${env:MEMORY_MAX_TRACES} + metric_backends: + metrics_backend: + prometheus: + endpoint: "http://${env:PROMETHEUS_ADDR}" + normalize_calls: true + normalize_duration: true + + receivers: + otlp: + protocols: + grpc: + endpoint: ${env:JAEGER_HOST}:${env:JAEGER_GRPC_PORT} + + processors: + batch: + + exporters: + jaeger_storage_exporter: + trace_storage: memory_backend + +prometheus: + enabled: true + alertmanager: + enabled: false + configmapReload: + prometheus: + enabled: false + kube-state-metrics: + enabled: false + prometheus-node-exporter: + enabled: false + prometheus-pushgateway: + enabled: false + server: + fullnameOverride: prometheus + extraFlags: + - "enable-feature=exemplar-storage" + - "web.enable-otlp-receiver" + retention: 7d + tsdb: + out_of_order_time_window: 30m + otlp: + keep_identifying_resource_attributes: true + # Recommended attributes to be promoted to labels. + promote_resource_attributes: + - service.instance.id + - service.name + - service.namespace + - service.version + - cloud.availability_zone + - cloud.region + - deployment.environment.name + # When deploying on Kubernetes, resource attributes used to identify the + # kubernetes resources in dashboards and alerts. + - k8s.cluster.name + - k8s.container.name + - k8s.cronjob.name + - k8s.daemonset.name + - k8s.deployment.name + - k8s.job.name + - k8s.namespace.name + - k8s.node.name + - k8s.pod.name + - k8s.replicaset.name + - k8s.statefulset.name + - container.name + # When deploying on VMs, resource attributes used to identify + # the host in dashboards and alerts. + - host.name + # PostgreSQL resource attributes produced by the OTel Collector PostgreSQL receiver + # and used in dashboards and alerts. + # See https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/postgresqlreceiver/metadata.yaml + - postgresql.database.name + - postgresql.schema.name + - postgresql.table.name + - postgresql.index.name + persistentVolume: + enabled: false + service: + servicePort: 9090 + resources: + limits: + memory: 400Mi + +grafana: + enabled: true + fullnameOverride: grafana + testFramework: + enabled: false + grafana.ini: + auth: + disable_login_form: true + auth.anonymous: + enabled: true + org_name: Main Org. + org_role: Admin + server: + root_url: "%(protocol)s://%(domain)s:%(http_port)s/grafana" + serve_from_sub_path: true + adminPassword: admin + plugins: + - grafana-opensearch-datasource + sidecar: + alerts: + enabled: true + dashboards: + enabled: true + datasources: + enabled: true + resources: + limits: + cpu: 100m + memory: 100Mi + resources: + limits: + memory: 175Mi + +opensearch: + enabled: true + fullnameOverride: opensearch + clusterName: demo-cluster + nodeGroup: otel-demo + singleNode: true + opensearchJavaOpts: "-Xms400m -Xmx400m" + persistence: + enabled: false + extraEnvs: + - name: "bootstrap.memory_lock" + value: "true" + - name: "DISABLE_INSTALL_DEMO_CONFIG" + value: "true" + - name: "DISABLE_SECURITY_PLUGIN" + value: "true" + resources: + limits: + memory: 1100Mi diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..bbf3bee --- /dev/null +++ b/docs/index.md @@ -0,0 +1,81 @@ +# otel-demo + +Deployed from **https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-demo** via the Backstage Hello Demo template. + +| Property | Value | +|---|---| +| **Environment** | `dev` | +| **Namespace** | `demo-apps` | +| **ArgoCD Project** | `veterinary-platform` | +| **Branch** | `main` | +| **Observability** | Enabled (OpenTelemetry) | + +## Quick Links + +- **Repository**: [https://gitea.kyndemo.live/validate/otel-demo](https://gitea.kyndemo.live/validate/otel-demo) +- **ArgoCD**: [https://argocd.kyndemo.live/applications/otel-demo](https://argocd.kyndemo.live/applications/otel-demo) +- **Live App**: [https://otel-demo.kyndemo.live](https://otel-demo.kyndemo.live) + +- **Grafana Dashboard**: [https://grafana.kyndemo.live/d/otel-app-observability-v2/...?var-app=otel-demo](https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=otel-demo) + + +## Architecture + +This service was scaffolded using the **Application Migration Factory** Backstage template. + +**Deployment flow:** + +1. Source cloned from `https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-demo` +2. Catalog entity and CI workflows overlaid by Backstage + +3. The Watcher scanned the repository and injected OpenTelemetry auto-instrumentation via Kustomize overlay + +4. ArgoCD Application created targeting the `demo-apps` namespace +5. ArgoCD continuously syncs from the `main` branch + +**ArgoCD sync path:** `overlays/otel` + +## Development Workflow + +```bash +git clone https://gitea.kyndemo.live/validate/otel-demo.git +cd otel-demo +# make changes, then: +git add . && git commit -m "your change" && git push origin main +``` + +ArgoCD monitors the repository and automatically syncs changes to the `demo-apps` namespace. + +## Rollback + +To roll back to a previous version: + +1. Open the [ArgoCD UI](https://argocd.kyndemo.live/applications/otel-demo) +2. Click **History and Rollback** +3. Select the desired revision and click **Rollback** + +Alternatively, revert the commit in Git and push — ArgoCD will auto-sync the rollback. + + +## Observability + +This service has OpenTelemetry auto-instrumentation enabled. Traces, metrics, and logs are exported to the OTel Collector and visualised in Grafana. + +**Viewing telemetry:** + +- Open the [Grafana Dashboard](https://grafana.kyndemo.live/d/otel-app-observability-v2/opentelemetry-application-observability?orgId=1&var-app=otel-demo) +- Filter by `app=otel-demo` to see service-specific data +- Check the **Alerts** tab in Backstage for any firing Grafana alerts + +**OTel Collector endpoint:** `http://otel-collector.monitoring.svc.cluster.local:4318` + + +## SLOs and Monitoring + +Define your service level objectives here once the service is stable: + +| SLI | Target | Dashboard | +|---|---|---| +| Availability | 99.9% | [Grafana](https://grafana.kyndemo.live) | +| Latency (p99) | < 500ms | [Grafana](https://grafana.kyndemo.live) | +| Error rate | < 1% | [Grafana](https://grafana.kyndemo.live) | diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..75fafbd --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,18 @@ +site_name: otel-demo +site_description: https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-demo deployed via ArgoCD +docs_dir: docs +exclude_docs: | + node_modules/ + vendor/ + .git/ + build/ + dist/ + site/ + __pycache__/ + *.tar.gz + *.jar + *.zip + +plugins: + - techdocs-core + - awesome-pages diff --git a/overlays/deploy/kustomization.yaml b/overlays/deploy/kustomization.yaml new file mode 100644 index 0000000..660e8df --- /dev/null +++ b/overlays/deploy/kustomization.yaml @@ -0,0 +1,16 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +# NOTE: Requires kustomize.buildOptions: --enable-helm in ArgoCD argocd-cm ConfigMap +helmGlobals: + chartHome: ../../ +helmCharts: + - name: chart + releaseName: otel-demo + namespace: demo-apps +resources: + - k6-configmap.yaml + + - ../ingress + + diff --git a/overlays/ingress/ingress.yaml b/overlays/ingress/ingress.yaml new file mode 100644 index 0000000..dc35929 --- /dev/null +++ b/overlays/ingress/ingress.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: otel-demo + namespace: demo-apps + annotations: + kubernetes.io/ingress.class: nginx + cert-manager.io/cluster-issuer: letsencrypt-prod +spec: + ingressClassName: nginx + tls: + - hosts: + - otel-demo.kyndemo.live + secretName: otel-demo-kyndemo-live-tls + rules: + - host: otel-demo.kyndemo.live + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: otel-demo + port: + number: 80 diff --git a/overlays/ingress/kustomization.yaml b/overlays/ingress/kustomization.yaml new file mode 100644 index 0000000..fb80823 --- /dev/null +++ b/overlays/ingress/kustomization.yaml @@ -0,0 +1,2 @@ +resources: + - ingress.yaml