From 9053b5a88bff857ce25cbae0079cd3ae85d2c82f Mon Sep 17 00:00:00 2001 From: Archisman Mridha Date: Thu, 8 Feb 2024 02:18:42 +0530 Subject: [PATCH] Removing dev and staging Kubernetes environments | Installing Dragonfly, Elasticsearch, Apache Kafka, Debezium and Postgres in Kubernetes | Shifting from DigitalOcean to UpCloud | Some other minor changes --- .gitignore | 7 +- backend/lib.rs | 4 +- kubernetes/base/kustomization.yaml | 5 - .../application-controller.application.yaml} | 4 +- .../cluster-role-binding.yaml | 0 .../application-controller/cluster-role.yaml | 0 .../application-controller/deployment.yaml | 3 +- .../instagramclone.io_applications.yaml | 0 .../application-controller/kustomization.yaml | 3 +- .../service-account.yaml | 0 .../bitnami-sealed-secrets.application.yaml} | 0 .../cert-manager.application.yaml} | 4 +- .../cloudflare-api-key.sealed-secret.yaml | 0 .../cert-manager/cluster-issuer.yaml | 0 .../cert-manager/kustomization.yaml | 0 .../cert-manager/namespace.yaml | 0 .../manifests/cloudnative-pg.application.yaml | 25 +++ .../admin-credentials.sealed-secret.yaml | 21 ++ .../atlasgo-credentials.sealed-secret.yaml | 20 ++ .../manifests/cloudnative-pg/cluster.yaml | 73 +++++++ .../grafana-dashboard.configmap.yaml | 11 ++ .../cloudnative-pg/kustomization.yaml | 21 ++ .../main-cluster-init-sql.sealed-secret.yaml | 20 ++ .../manifests/cloudnative-pg/namespace.yaml | 6 + .../manifests/cloudnative-pg/schema.yaml | 57 ++++++ .../debezium.application.yaml} | 10 +- .../manifests/debezium/kustomization.yaml | 13 ++ .../debezium}/namespace.yaml | 2 +- .../postgres-credentials.sealed-secret.yaml | 21 ++ .../debezium/posts-table.debezium-server.yaml | 60 ++++++ .../debezium/users-table.debezium-server.yaml | 93 +++++++++ .../manifests/dragonfly.application.yaml | 23 +++ kubernetes/manifests/dragonfly/cluster.yaml | 31 +++ .../default-credentials.sealed-secret.yaml | 20 ++ .../grafana-dashboard.configmap.yaml | 11 ++ .../manifests/dragonfly/kustomization.yaml | 7 + .../dragonfly}/namespace.yaml | 2 +- .../manifests/dragonfly/pod-monitor.yaml | 17 ++ .../manifests/elasticsearch.application.yaml | 23 +++ .../admin-credentials.sealed-secret.yaml | 20 ++ .../elasticsearch-master.service.yaml | 23 +++ .../elasticsearch/elasticsearch.yaml | 44 +++++ .../manifests/elasticsearch/kibana.yaml | 19 ++ .../elasticsearch/kustomization.yaml | 8 + .../manifests/elasticsearch/namespace.yaml | 4 + .../external-dns.application.yaml} | 4 +- .../cloudflare-dns-api-key.sealed-secret.yaml | 0 .../external-dns/kustomization.yaml | 0 .../external-dns/namespace.yaml | 0 .../falco.application.yaml} | 4 +- .../falcosidekick-config.sealed-secret.yaml | 0 .../falco/kustomization.yaml | 0 .../falco/namespace.yaml | 0 .../istio.application.yaml} | 4 +- .../istio/kustomization.yaml | 0 .../dev => manifests}/istio/namespace.yaml | 0 .../jaeger.application.yaml} | 29 ++- .../kube-prometheus-stack.application.yaml} | 2 +- .../kube-prometheus-stack}/autometrics.yaml | 2 +- .../kube-prometheus-stack/kustomization.yaml | 32 ++- .../kube-prometheus-stack/namespace.yaml | 6 + .../kubescape.application.yaml} | 5 +- kubernetes/manifests/kustomization.yaml | 17 ++ .../metrics-server.application.yaml} | 0 .../manifests/microservices.application.yaml | 23 +++ .../microservices/feeds/application.yaml} | 4 +- .../microservices/feeds/sealed-secret.yaml | 29 +++ .../followships/application.yaml} | 4 +- .../followships/sealed-secret.yaml | 27 +++ .../microservices/gateway/application.yaml} | 6 +- .../microservices/gateway/sealed-secret.yaml | 27 +++ .../microservices/kustomization.yaml | 20 ++ .../manifests/microservices/namespace.yaml | 4 + .../microservices/posts/application.yaml} | 4 +- .../microservices/posts/sealed-secret.yaml | 27 +++ .../microservices/profiles/application.yaml} | 4 +- .../microservices/profiles/sealed-secret.yaml | 31 +++ .../microservices/users/application.yaml} | 4 +- .../microservices/users/sealed-secret.yaml | 28 +++ .../manifests/opa-gatekeeper.application.yaml | 23 +++ .../opa-gatekeeper/kustomization.yaml | 0 kubernetes/manifests/strimzi.application.yaml | 25 +++ .../strimzi/cluster-metrics.configmap.yaml | 183 ++++++++++++++++++ kubernetes/manifests/strimzi/cluster.yaml | 90 +++++++++ .../strimzi/db-events.public.posts.topic.yaml | 14 ++ .../strimzi/db-events.public.users.topic.yaml | 14 ++ .../kafka-connect-metrics.configmap.yaml | 140 ++++++++++++++ .../strimzi/debezium/kustomization.yaml | 7 + .../postgres-credentials.sealed-secret.yaml | 21 ++ .../postgres.kafka-connect-cluster.role.yaml | 30 +++ .../postgres.kafka-connect-cluster.yaml | 49 +++++ .../posts-table.source-connector.yaml | 45 +++++ .../users-table.source-connector.yaml | 80 ++++++++ .../strimzi/grafana-dashboards.configmap.yaml | 19 ++ .../manifests/strimzi/kustomization.yaml | 15 ++ .../strimzi}/namespace.yaml | 2 +- .../manifests/strimzi/pod-monitors.yaml | 66 +++++++ .../workspaces/dev/istio/kustomization.yaml | 87 --------- kubernetes/workspaces/dev/jaeger.yaml | 44 ----- .../dev/kubernetes-dashboard/README.md | 10 - .../kubernetes-dashboard/kustomization.yaml | 7 - .../cluster-admin/cluster-role-binding.yaml | 17 -- .../cluster-admin/kustomization.yaml | 3 - .../cluster-admin/service-account.yaml | 12 -- kubernetes/workspaces/dev/kustomization.yaml | 6 - .../production/kube-prometheus-stack.yaml | 27 --- .../kube-prometheus-stack/kustomization.yaml | 126 ------------ .../workspaces/production/kustomization.yaml | 10 - scripts/generate-sealed-secrets.sh | 22 +-- terragrunt/modules/k3d/locals.tf | 4 - terragrunt/modules/k3d/main.tf | 38 ---- .../modules/prepare-cluster/1.argocd.tf | 6 +- .../manifests/argocd-application-manager.yaml | 7 +- .../modules/prepare-cluster/variables.tf | 2 - terragrunt/modules/upcloud/1.vpc.tf | 40 ++++ .../modules/upcloud/2.kubernetes-cluster.tf | 22 +++ terragrunt/modules/upcloud/3.kubeconfig.tf | 8 + terragrunt/modules/upcloud/main.tf | 28 +++ terragrunt/modules/upcloud/others.tf | 14 ++ .../development/.terraform.lock.hcl | 59 ------ .../workspaces/development/terragrunt.hcl | 7 - .../workspaces/production/terragrunt.hcl | 4 + terragrunt/workspaces/staging/terragrunt.hcl | 3 - 123 files changed, 1977 insertions(+), 541 deletions(-) delete mode 100644 kubernetes/base/kustomization.yaml rename kubernetes/{base/application-controller.yaml => manifests/application-controller.application.yaml} (83%) rename kubernetes/{base => manifests}/application-controller/cluster-role-binding.yaml (100%) rename kubernetes/{base => manifests}/application-controller/cluster-role.yaml (100%) rename kubernetes/{base => manifests}/application-controller/deployment.yaml (94%) rename kubernetes/{base => manifests}/application-controller/instagramclone.io_applications.yaml (100%) rename kubernetes/{base => manifests}/application-controller/kustomization.yaml (86%) rename kubernetes/{base => manifests}/application-controller/service-account.yaml (100%) rename kubernetes/{base/bitnami-sealed-secrets.yaml => manifests/bitnami-sealed-secrets.application.yaml} (100%) rename kubernetes/{workspaces/production/cert-manager.yaml => manifests/cert-manager.application.yaml} (83%) rename kubernetes/{workspaces/production => manifests}/cert-manager/cloudflare-api-key.sealed-secret.yaml (100%) rename kubernetes/{workspaces/production => manifests}/cert-manager/cluster-issuer.yaml (100%) rename kubernetes/{workspaces/production => manifests}/cert-manager/kustomization.yaml (100%) rename kubernetes/{workspaces/production => manifests}/cert-manager/namespace.yaml (100%) create mode 100644 kubernetes/manifests/cloudnative-pg.application.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/admin-credentials.sealed-secret.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/atlasgo-credentials.sealed-secret.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/cluster.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/grafana-dashboard.configmap.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/kustomization.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/main-cluster-init-sql.sealed-secret.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/namespace.yaml create mode 100644 kubernetes/manifests/cloudnative-pg/schema.yaml rename kubernetes/{workspaces/dev/istio.yaml => manifests/debezium.application.yaml} (69%) create mode 100644 kubernetes/manifests/debezium/kustomization.yaml rename kubernetes/{workspaces/dev/kube-prometheus-stack => manifests/debezium}/namespace.yaml (69%) create mode 100644 kubernetes/manifests/debezium/postgres-credentials.sealed-secret.yaml create mode 100644 kubernetes/manifests/debezium/posts-table.debezium-server.yaml create mode 100644 kubernetes/manifests/debezium/users-table.debezium-server.yaml create mode 100644 kubernetes/manifests/dragonfly.application.yaml create mode 100644 kubernetes/manifests/dragonfly/cluster.yaml create mode 100644 kubernetes/manifests/dragonfly/default-credentials.sealed-secret.yaml create mode 100644 kubernetes/manifests/dragonfly/grafana-dashboard.configmap.yaml create mode 100644 kubernetes/manifests/dragonfly/kustomization.yaml rename kubernetes/{workspaces/production/kube-prometheus-stack => manifests/dragonfly}/namespace.yaml (69%) create mode 100644 kubernetes/manifests/dragonfly/pod-monitor.yaml create mode 100644 kubernetes/manifests/elasticsearch.application.yaml create mode 100644 kubernetes/manifests/elasticsearch/admin-credentials.sealed-secret.yaml create mode 100644 kubernetes/manifests/elasticsearch/elasticsearch-master.service.yaml create mode 100644 kubernetes/manifests/elasticsearch/elasticsearch.yaml create mode 100644 kubernetes/manifests/elasticsearch/kibana.yaml create mode 100644 kubernetes/manifests/elasticsearch/kustomization.yaml create mode 100644 kubernetes/manifests/elasticsearch/namespace.yaml rename kubernetes/{workspaces/production/external-dns.yaml => manifests/external-dns.application.yaml} (84%) rename kubernetes/{workspaces/production => manifests}/external-dns/cloudflare-dns-api-key.sealed-secret.yaml (100%) rename kubernetes/{workspaces/production => manifests}/external-dns/kustomization.yaml (100%) rename kubernetes/{workspaces/production => manifests}/external-dns/namespace.yaml (100%) rename kubernetes/{workspaces/production/falco.yaml => manifests/falco.application.yaml} (85%) rename kubernetes/{workspaces/production => manifests}/falco/falcosidekick-config.sealed-secret.yaml (100%) rename kubernetes/{workspaces/production => manifests}/falco/kustomization.yaml (100%) rename kubernetes/{workspaces/production => manifests}/falco/namespace.yaml (100%) rename kubernetes/{workspaces/production/istio.yaml => manifests/istio.application.yaml} (85%) rename kubernetes/{workspaces/production => manifests}/istio/kustomization.yaml (100%) rename kubernetes/{workspaces/dev => manifests}/istio/namespace.yaml (100%) rename kubernetes/{workspaces/production/jaeger.yaml => manifests/jaeger.application.yaml} (58%) rename kubernetes/{workspaces/dev/kube-prometheus-stack.yaml => manifests/kube-prometheus-stack.application.yaml} (89%) rename kubernetes/{base => manifests/kube-prometheus-stack}/autometrics.yaml (99%) rename kubernetes/{workspaces/dev => manifests}/kube-prometheus-stack/kustomization.yaml (86%) create mode 100644 kubernetes/manifests/kube-prometheus-stack/namespace.yaml rename kubernetes/{workspaces/production/kubescape.yaml => manifests/kubescape.application.yaml} (91%) create mode 100644 kubernetes/manifests/kustomization.yaml rename kubernetes/{workspaces/production/metrics-server.yaml => manifests/metrics-server.application.yaml} (100%) create mode 100644 kubernetes/manifests/microservices.application.yaml rename kubernetes/{base/microservices/feeds-microservice.application.yaml => manifests/microservices/feeds/application.yaml} (93%) create mode 100644 kubernetes/manifests/microservices/feeds/sealed-secret.yaml rename kubernetes/{base/microservices/followships-microservice.application.yaml => manifests/microservices/followships/application.yaml} (93%) create mode 100644 kubernetes/manifests/microservices/followships/sealed-secret.yaml rename kubernetes/{base/microservices/gateway.application.yaml => manifests/microservices/gateway/application.yaml} (78%) create mode 100644 kubernetes/manifests/microservices/gateway/sealed-secret.yaml create mode 100644 kubernetes/manifests/microservices/kustomization.yaml create mode 100644 kubernetes/manifests/microservices/namespace.yaml rename kubernetes/{base/microservices/posts-microservice.application.yaml => manifests/microservices/posts/application.yaml} (93%) create mode 100644 kubernetes/manifests/microservices/posts/sealed-secret.yaml rename kubernetes/{base/microservices/profiles-microservice.application.yaml => manifests/microservices/profiles/application.yaml} (93%) create mode 100644 kubernetes/manifests/microservices/profiles/sealed-secret.yaml rename kubernetes/{base/microservices/users-microservice.application.yaml => manifests/microservices/users/application.yaml} (93%) create mode 100644 kubernetes/manifests/microservices/users/sealed-secret.yaml create mode 100644 kubernetes/manifests/opa-gatekeeper.application.yaml rename kubernetes/{base => manifests}/opa-gatekeeper/kustomization.yaml (100%) create mode 100644 kubernetes/manifests/strimzi.application.yaml create mode 100644 kubernetes/manifests/strimzi/cluster-metrics.configmap.yaml create mode 100644 kubernetes/manifests/strimzi/cluster.yaml create mode 100644 kubernetes/manifests/strimzi/db-events.public.posts.topic.yaml create mode 100644 kubernetes/manifests/strimzi/db-events.public.users.topic.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/kafka-connect-metrics.configmap.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/kustomization.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/postgres-credentials.sealed-secret.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.role.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/posts-table.source-connector.yaml create mode 100644 kubernetes/manifests/strimzi/debezium/users-table.source-connector.yaml create mode 100644 kubernetes/manifests/strimzi/grafana-dashboards.configmap.yaml create mode 100644 kubernetes/manifests/strimzi/kustomization.yaml rename kubernetes/{workspaces/production/istio => manifests/strimzi}/namespace.yaml (67%) create mode 100644 kubernetes/manifests/strimzi/pod-monitors.yaml delete mode 100644 kubernetes/workspaces/dev/istio/kustomization.yaml delete mode 100644 kubernetes/workspaces/dev/jaeger.yaml delete mode 100644 kubernetes/workspaces/dev/kubernetes-dashboard/README.md delete mode 100644 kubernetes/workspaces/dev/kubernetes-dashboard/kustomization.yaml delete mode 100644 kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/cluster-role-binding.yaml delete mode 100644 kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/kustomization.yaml delete mode 100644 kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/service-account.yaml delete mode 100644 kubernetes/workspaces/dev/kustomization.yaml delete mode 100644 kubernetes/workspaces/production/kube-prometheus-stack.yaml delete mode 100644 kubernetes/workspaces/production/kube-prometheus-stack/kustomization.yaml delete mode 100644 kubernetes/workspaces/production/kustomization.yaml delete mode 100644 terragrunt/modules/k3d/locals.tf delete mode 100644 terragrunt/modules/k3d/main.tf create mode 100644 terragrunt/modules/upcloud/1.vpc.tf create mode 100644 terragrunt/modules/upcloud/2.kubernetes-cluster.tf create mode 100644 terragrunt/modules/upcloud/3.kubeconfig.tf create mode 100644 terragrunt/modules/upcloud/main.tf create mode 100644 terragrunt/modules/upcloud/others.tf delete mode 100644 terragrunt/workspaces/development/.terraform.lock.hcl delete mode 100644 terragrunt/workspaces/development/terragrunt.hcl delete mode 100644 terragrunt/workspaces/staging/terragrunt.hcl diff --git a/.gitignore b/.gitignore index 1c0db4c..585fb42 100644 --- a/.gitignore +++ b/.gitignore @@ -81,4 +81,9 @@ target/ *.out # Dependency directories (remove the comment below to include it) -vendor/ \ No newline at end of file +vendor/ + +# --- KUBERNETES --- + +secret.yaml +*.secret.yaml \ No newline at end of file diff --git a/backend/lib.rs b/backend/lib.rs index 4a3e9a2..2d57a64 100644 --- a/backend/lib.rs +++ b/backend/lib.rs @@ -202,7 +202,7 @@ pub mod utils { use anyhow::{anyhow, Result}; use kafka::consumer::{Consumer, FetchOffset, GroupOffsetStorage}; use serde::Deserialize; - use tracing::info; + use tracing::debug; pub fn createKafkaConsumer(hosts: Vec, topic: String, group: String) -> Consumer { let consumer = Consumer::from_hosts(hosts) @@ -216,7 +216,7 @@ pub mod utils { topic )); - info!("Created Kafka consumer for {} topic", topic); + debug!("Created Kafka consumer for {} topic", topic); consumer } diff --git a/kubernetes/base/kustomization.yaml b/kubernetes/base/kustomization.yaml deleted file mode 100644 index 4fc6d80..0000000 --- a/kubernetes/base/kustomization.yaml +++ /dev/null @@ -1,5 +0,0 @@ -resources: - - bitnami-sealed-secrets.yaml - - autometrics.yaml - - opa-gatekeeper - - application-controller.yaml \ No newline at end of file diff --git a/kubernetes/base/application-controller.yaml b/kubernetes/manifests/application-controller.application.yaml similarity index 83% rename from kubernetes/base/application-controller.yaml rename to kubernetes/manifests/application-controller.application.yaml index c4da623..7725b6f 100644 --- a/kubernetes/base/application-controller.yaml +++ b/kubernetes/manifests/application-controller.application.yaml @@ -15,9 +15,9 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/base/application-controller + path: kubernetes/manifests/application-controller syncPolicy: automated: prune: true - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/kubernetes/base/application-controller/cluster-role-binding.yaml b/kubernetes/manifests/application-controller/cluster-role-binding.yaml similarity index 100% rename from kubernetes/base/application-controller/cluster-role-binding.yaml rename to kubernetes/manifests/application-controller/cluster-role-binding.yaml diff --git a/kubernetes/base/application-controller/cluster-role.yaml b/kubernetes/manifests/application-controller/cluster-role.yaml similarity index 100% rename from kubernetes/base/application-controller/cluster-role.yaml rename to kubernetes/manifests/application-controller/cluster-role.yaml diff --git a/kubernetes/base/application-controller/deployment.yaml b/kubernetes/manifests/application-controller/deployment.yaml similarity index 94% rename from kubernetes/base/application-controller/deployment.yaml rename to kubernetes/manifests/application-controller/deployment.yaml index c0cd782..06a8f09 100644 --- a/kubernetes/base/application-controller/deployment.yaml +++ b/kubernetes/manifests/application-controller/deployment.yaml @@ -5,6 +5,7 @@ metadata: namespace: default spec: + replicas: 1 selector: matchLabels: app: application-controller @@ -23,4 +24,4 @@ spec: cpu: 100m limits: memory: 256Mi - cpu: 200m \ No newline at end of file + cpu: 200m diff --git a/kubernetes/base/application-controller/instagramclone.io_applications.yaml b/kubernetes/manifests/application-controller/instagramclone.io_applications.yaml similarity index 100% rename from kubernetes/base/application-controller/instagramclone.io_applications.yaml rename to kubernetes/manifests/application-controller/instagramclone.io_applications.yaml diff --git a/kubernetes/base/application-controller/kustomization.yaml b/kubernetes/manifests/application-controller/kustomization.yaml similarity index 86% rename from kubernetes/base/application-controller/kustomization.yaml rename to kubernetes/manifests/application-controller/kustomization.yaml index 6c6fd71..69321c4 100644 --- a/kubernetes/base/application-controller/kustomization.yaml +++ b/kubernetes/manifests/application-controller/kustomization.yaml @@ -1,7 +1,6 @@ resources: - instagramclone.io_applications.yaml - - cluster-role.yaml - cluster-role-binding.yaml - service-account.yaml - - deployment.yaml \ No newline at end of file + - deployment.yaml diff --git a/kubernetes/base/application-controller/service-account.yaml b/kubernetes/manifests/application-controller/service-account.yaml similarity index 100% rename from kubernetes/base/application-controller/service-account.yaml rename to kubernetes/manifests/application-controller/service-account.yaml diff --git a/kubernetes/base/bitnami-sealed-secrets.yaml b/kubernetes/manifests/bitnami-sealed-secrets.application.yaml similarity index 100% rename from kubernetes/base/bitnami-sealed-secrets.yaml rename to kubernetes/manifests/bitnami-sealed-secrets.application.yaml diff --git a/kubernetes/workspaces/production/cert-manager.yaml b/kubernetes/manifests/cert-manager.application.yaml similarity index 83% rename from kubernetes/workspaces/production/cert-manager.yaml rename to kubernetes/manifests/cert-manager.application.yaml index 8bab5c6..78ad7bb 100644 --- a/kubernetes/workspaces/production/cert-manager.yaml +++ b/kubernetes/manifests/cert-manager.application.yaml @@ -14,11 +14,11 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/workspaces/production/cert-manager + path: kubernetes/manifests/cert-manager plugin: name: kustomize-enable-helm syncPolicy: automated: prune: true - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/kubernetes/workspaces/production/cert-manager/cloudflare-api-key.sealed-secret.yaml b/kubernetes/manifests/cert-manager/cloudflare-api-key.sealed-secret.yaml similarity index 100% rename from kubernetes/workspaces/production/cert-manager/cloudflare-api-key.sealed-secret.yaml rename to kubernetes/manifests/cert-manager/cloudflare-api-key.sealed-secret.yaml diff --git a/kubernetes/workspaces/production/cert-manager/cluster-issuer.yaml b/kubernetes/manifests/cert-manager/cluster-issuer.yaml similarity index 100% rename from kubernetes/workspaces/production/cert-manager/cluster-issuer.yaml rename to kubernetes/manifests/cert-manager/cluster-issuer.yaml diff --git a/kubernetes/workspaces/production/cert-manager/kustomization.yaml b/kubernetes/manifests/cert-manager/kustomization.yaml similarity index 100% rename from kubernetes/workspaces/production/cert-manager/kustomization.yaml rename to kubernetes/manifests/cert-manager/kustomization.yaml diff --git a/kubernetes/workspaces/production/cert-manager/namespace.yaml b/kubernetes/manifests/cert-manager/namespace.yaml similarity index 100% rename from kubernetes/workspaces/production/cert-manager/namespace.yaml rename to kubernetes/manifests/cert-manager/namespace.yaml diff --git a/kubernetes/manifests/cloudnative-pg.application.yaml b/kubernetes/manifests/cloudnative-pg.application.yaml new file mode 100644 index 0000000..f2259cf --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg.application.yaml @@ -0,0 +1,25 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application + +metadata: + name: cloudnative-pg + namespace: argocd + +spec: + project: default + + destination: + server: https://kubernetes.default.svc + namespace: cloudnative-pg + + source: + repoURL: https://github.com/Archisman-Mridha/instagram-clone + targetRevision: HEAD + path: kubernetes/manifests/cloudnative-pg + plugin: + name: kustomize-enable-helm + + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/kubernetes/manifests/cloudnative-pg/admin-credentials.sealed-secret.yaml b/kubernetes/manifests/cloudnative-pg/admin-credentials.sealed-secret.yaml new file mode 100644 index 0000000..0980826 --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/admin-credentials.sealed-secret.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: admin-credentials + namespace: cloudnative-pg +spec: + encryptedData: + password: AgB5Jh9QBok6cVlIGaHg0JoYKT2z/9qAzT48Y7sBoAD0NYnmga8rf+vofih0mAOEvy0q0PnZpurLCgduyuEkYgM3KVVIOBJu2bs+TB6Wgrhrm6oS+ldP790riqBmaMrnwMBuwXLVYlCHaGoR4C1CAl7M1ncFojVRA89bgRLMC2PImMzrXvBNXy4egrexLBIBN6AIjM9eTXxGSx6WlviQs8JagrqpCeswx1cnMMmIEhMzFACw33S0h04tQP0tP+6oE+1pkuM90rnBc+K6h6yo/aUBV1kdeumEbxy3Jsp1nm/9IaXHRy32h056GWyGURfJ444yZlnDa+tMoFQtYBDnq+xlBWUYEvENLNQKjdwHBjAPXWZ8Ol8RVnGv4BCu+FwjHjLCeYCpQuGzxV0A5IfLVrV37rwJhIbRhDoSJkyGqhL9i2gyZQVgZcCwNqqOPRvqioC5WENOSgNtUk44pS3p/4NHXbGe5D6/d/hy14RGNI8FsO42Abxto0ubrYF4TbuJYR39Eu4CJahyof/soX1FdgEyyY92sdmiWzormuunZN14r9NLE6hDFNIG62m8konagUtbe2/NEKdFDS1jzFJMiBwfCRdpq6Iqq1uWnkzlEweXmOpT20WsbKIt1vC8g6KmJSlKdfcT1gLUsJzKDVQrOTvi6xO7h8+hhj2SrLIhLkJK3AW3uRzXVQdpjydwJJR1UrYRgGy7LULdIGU/MGhy3vU= + username: AgBK6l5XgOzEk70LGaXCGwOSS/LWB34VpWf7MbqJoTQj1WulZF9Ddp26W8r9dQMzMVfjacAoGeEUrGWUa4i1KjooFr3gYS0HMyIhYmNSsZefi3+zyg6hCFk33gz80WCXpQNhy0Ogk/RpvJUWqwK3uiNlVkkHjnAyMDdtV/ujDGJGCDGfJm/aShs1YhmjDJZV504RPAjF9tvAVR5BCi53RxE47KNKD8SLI5ZNfKpNDy3O4cNxPo27B28bcJ/M6b+S/mARR8V8EhJBeN+QSKnNwj2nK5AeyPrfTohOObQNEBpJU40bpQXQccbR+TqEhAE+zTmx/R1eUHqWTDxkj7DdhaWTWEleBRnlRuiW++2QgNaqcYBTMj5/v9XOGaOY0tGxMavuO8uzeEci62+ANVWX6M2BUXUj0C/5Euv8JSSktEA3GGrJ6yHNM+xcYDIyHj9DXGqoHfbJDlxfA6hrd0Zs3p8BAS0WqHotAwynawVGblVNfjpg+OBmcE6ORJS7FMV3c7aWTBtHYYb/k5XBXUtpG9FxLjmvhsFVwLcY0xkkFXBxjRMCKJdEjDr5XOtRZcwGj1Tzj3h9//GvX789zR4wx20WWt7VEcCYJdPeiWEnGPeQpUtJqQYg9zP/wAgBZX5f9ytWk1xwi4whd4NQFcTv7ANbHCHMSsng+yKOQ/KMxvVxDpnTvj7/nBreyKG65ooxVgxIV1oxLA== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: admin-credentials + namespace: cloudnative-pg + type: kubernetes.io/basic-auth diff --git a/kubernetes/manifests/cloudnative-pg/atlasgo-credentials.sealed-secret.yaml b/kubernetes/manifests/cloudnative-pg/atlasgo-credentials.sealed-secret.yaml new file mode 100644 index 0000000..8314883 --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/atlasgo-credentials.sealed-secret.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: atlasgo-credentials + namespace: cloudnative-pg +spec: + encryptedData: + url: AgCgxs5fqw/k99uChn6XgabDowZoVS+QL0NmUcNDVupUMoVe2pIanpe1vailmbjffi+DddreBCEq4mGsgZ7OBhPGPVaIz5+k2YLMB9AeLBD4pFygdd0xPLlYBISxmdV8JTSuTu6bTrOKS9WPc/JtjrIwvo5NQDkUmUqvjXQU6TeZHO8sIVNn7b4h2kdo9b8wkOkGxCVge5k4UhB2rTJjj+sqMLio8Db0TdXXQcQ7yvcrWNc8OdxA4YxdE5eojhZw45H+hKi7EdjbofZWsE2BB/FmUel55UXnjis3m1c4w16WUzyM8YOVN99Wpke1X4C0xqtrWAuqLS6Wa2pIjUmPztbZqsnSDaW1ZAT1uoAxFSVyWSDpFaZubQcm0GqDoWIce0dp7OQ7Fdn6AHCuBj4JF5g4NXl8n0QO3HvntC7etMIZISHkFeBJLVJzWyWNBktJcbIW37Olbl+gNVGWptg1aA7rDMC35kHtA29Tw0NDuppHZcpIKmGo1iDVM51q3RDdfNJU0AokGMUu+vGc/tA7hwUl4gkFoQ84iDk18jXDjwKHSH85Qhq5xAwbeSbNJ/kijbP2DvrKBJOW/d1OvMdSYRmKyj0cuJvn6ucJ4w74eNTLaNPGiDrNjPOj2ExB4ux3BLtBRnu2BEQn2OSc8LbZviXQKgBYI+YJWCGfkovq/CqAKWoD487RGWeAStG6qXsb1V4P+1NMP55lErdc0o2O1EtPvGgA9WnzYHk+TJy86lKqQbR6n3ORnKWkQoxD1H7goU2vPndMeoG05Sbt0wg5y60fFsS9vBwgzrgpVYmgKw== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: atlasgo-credentials + namespace: cloudnative-pg + type: Opaque diff --git a/kubernetes/manifests/cloudnative-pg/cluster.yaml b/kubernetes/manifests/cloudnative-pg/cluster.yaml new file mode 100644 index 0000000..39293ce --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/cluster.yaml @@ -0,0 +1,73 @@ +apiVersion: postgresql.cnpg.io/v1 + +# Represents a PostgreSQL cluster made up of a single primary and an optional number of replicas +# that co-exist in the same Kubernetes namespace for High Availability and offloading of read-only +# queries. +kind: Cluster + +metadata: + name: main + namespace: cloudnative-pg + +spec: + instances: 1 + + storage: + pvcTemplate: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + storageClassName: upcloud-block-storage-hdd + volumeMode: Filesystem + + resources: + requests: + memory: 256Mi + cpu: 200m + limits: + memory: 256Mi + cpu: 200m + + primaryUpdateStrategy: unsupervised + + postgresql: + parameters: + # Feature to manage the retention of WAL files on the primary server. When a standby server + # connects to a primary server for replication, the primary server keeps track of the WAL + # files that the standby server has successfully replicated. Replication slots (named + # positions in the WAL stream) ensure that the primary server retains the necessary WAL files + # until all standby servers have consumed them. This prevents the primary server from + # removing WAL files that are still needed by the standby servers for replication, thus + # avoiding potential data loss scenarios. + max_replication_slots: "4" + + # WAL senders are PostgreSQL server processes responsible for streaming WAL data from the + # primary server to standby servers for replication. When a standby server establishes a + # streaming replication connection to the primary server, the primary server creates a WAL + # sender process dedicated to streaming WAL data to that specific standby server. + # + # Determines how many maximum standby servers can simultaneously replicate from the primary + # server. + max_wal_senders: "4" + + # How much memory is dedicated to the PostgreSQL server for caching data. + shared_buffers: 64MB + + bootstrap: + initdb: + database: instagram_clone + + owner: admin + secret: + name: admin-credentials + + postInitApplicationSQLRefs: + secretRefs: + - name: main-cluster-init-sql + key: create-debezium-user.sql + + # Enabling integration with Prometheus and Grafana. + monitoring: + enablePodMonitor: true diff --git a/kubernetes/manifests/cloudnative-pg/grafana-dashboard.configmap.yaml b/kubernetes/manifests/cloudnative-pg/grafana-dashboard.configmap.yaml new file mode 100644 index 0000000..b166151 --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/grafana-dashboard.configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cloudnativepg-grafana-dashboards + namespace: prometheus + labels: + grafana_dashboard: "1" + +data: + cloudnativepg.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"}]},"editable":true,"fiscalYearStartMonth":0,"graphTooltip":1,"links":[{"asDropdown":false,"icon":"external link","includeVars":false,"keepTime":false,"tags":["cloudnativepg"],"targetBlank":false,"title":"Related Dashboards","tooltip":"","type":"dashboards","url":""}],"liveNow":false,"panels":[{"collapsed":true,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":563,"panels":[],"title":"Row title","type":"row"},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":1},"id":562,"panels":[],"title":"Summary","type":"row"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":7,"w":3,"x":0,"y":2},"id":334,"options":{"alertInstanceLabelFilter":"{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"}","alertName":"","dashboardAlerts":false,"folder":"","groupBy":[],"groupMode":"default","maxItems":20,"sortOrder":1,"stateFilter":{"error":true,"firing":true,"noData":false,"normal":true,"pending":true},"viewMode":"list"},"title":"Alerts","type":"alertlist"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":15,"x":3,"y":2},"id":336,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"markdown"},"pluginVersion":"10.2.2","title":"Overview","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":18,"y":2},"id":352,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"markdown"},"pluginVersion":"10.2.2","title":"Storage","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":21,"y":2},"id":354,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"markdown"},"pluginVersion":"10.2.2","title":"Backups","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-blue","value":null}]},"unit":"dateTimeFromNow"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":3,"y":3},"id":338,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"max(cnpg_pg_postmaster_start_time{namespace=~\"$namespace\",pod=~\"$instances\"})*1000","format":"time_series","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Last failover","transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]}},"overrides":[]},"gridPos":{"h":6,"w":3,"x":5,"y":3},"id":342,"interval":"1m","options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_xact_commit{namespace=~\"$namespace\",pod=~\"$instances\"}[$__interval])) + sum(rate(cnpg_pg_stat_database_xact_rollback{namespace=~\"$namespace\",pod=~\"$instances\"}[$__interval]))","interval":"","legendFormat":"TPS","range":true,"refId":"TPS"}],"title":"TPS","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"CPU Utilisation from Requests","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"orange","value":0.8},{"color":"red","value":0.9}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":8,"y":3},"id":344,"interval":"1m","links":[],"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"horizontal","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{ namespace=\"$namespace\"}) / sum(kube_pod_container_resource_requests{job=\"kube-state-metrics\", namespace=\"$namespace\", resource=\"cpu\"})","format":"time_series","instant":true,"intervalFactor":2,"refId":"A"}],"title":"CPU Utilisation","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Memory Utilisation from Requests","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"orange","value":0.8},{"color":"red","value":0.9}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":11,"y":3},"id":348,"interval":"1m","links":[],"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"horizontal","reduceOptions":{"calcs":["mean"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"sum(container_memory_working_set_bytes{job=\"kubelet\", metrics_path=\"/metrics/cadvisor\", namespace=\"$namespace\",container!=\"\", image!=\"\"}) / sum(max by(pod) (kube_pod_container_resource_requests{job=\"kube-state-metrics\", namespace=\"$namespace\", resource=\"memory\"}))","format":"time_series","instant":true,"intervalFactor":2,"refId":"A"}],"title":"Memory Utilisation","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":30,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":1},{"color":"orange","value":10},{"color":"red","value":20}]},"unit":"s"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":14,"y":3},"id":465,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(cnpg_pg_replication_lag{namespace=~\"$namespace\",pod=~\"$instances\"})","legendFormat":"__auto","range":true,"refId":"A"}],"title":"Replication Lag","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":1},{"color":"orange","value":10},{"color":"red","value":20}]},"unit":"s"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":16,"y":3},"id":467,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(cnpg_pg_stat_replication_write_lag_seconds{namespace=~\"$namespace\",pod=~\"$instances\"})","legendFormat":"__auto","range":true,"refId":"A"}],"title":"Write Lag","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":2,"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":60000000000},{"color":"red","value":80000000000}]},"unit":"decbytes"},"overrides":[]},"gridPos":{"h":2,"w":3,"x":18,"y":3},"id":358,"links":[],"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["sum"],"fields":"","values":false},"textMode":"value","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"cnpg_pg_database_size_bytes{namespace=\"$namespace\"}","format":"table","instant":true,"legendFormat":"__auto","range":true,"refId":"A"}],"title":"Database Size","transformations":[{"id":"groupBy","options":{"fields":{"Value":{"aggregations":["max"],"operation":"aggregate"},"datname":{"aggregations":[],"operation":"groupby"}}}}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Elapsed time since the last successful base backup.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"from":1,"result":{"color":"semi-dark-orange","index":0,"text":"Invalid date"},"to":1e+42},"type":"range"},{"options":{"from":-2147483648,"result":{"color":"red","index":1,"text":"N/A"},"to":-1577847600},"type":"range"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"semi-dark-red","value":-108000},{"color":"semi-dark-orange","value":-107999},{"color":"#EAB839","value":-89999},{"color":"green","value":-86399}]},"unit":"dtdurations"},"overrides":[]},"gridPos":{"h":2,"w":3,"x":21,"y":3},"id":360,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"-(time() - max(cnpg_collector_last_available_backup_timestamp{namespace=\"$namespace\",pod=~\"$instances\"}))","legendFormat":"__auto","range":true,"refId":"A"}],"title":"Last Base Backup","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"orange","value":0.8},{"color":"red","value":0.9}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":4,"w":3,"x":18,"y":5},"id":356,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"$instances\"} / kubelet_volume_stats_capacity_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"$instances\"}))","format":"time_series","interval":"","legendFormat":"DATA","range":true,"refId":"DATA"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-wal\"} / kubelet_volume_stats_capacity_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-wal\"}))","format":"time_series","interval":"","legendFormat":"WAL","range":true,"refId":"WAL"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(\n sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-tbs.*\"}) \n /\n sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-tbs.*\"}) \n *\n on(namespace, persistentvolumeclaim) group_left(volume)\n kube_pod_spec_volumes_persistentvolumeclaims_info{pod=~\"$instances\"}\n)","hide":false,"instant":false,"legendFormat":"Tablespaces (max)","range":true,"refId":"Max Tablespace"}],"title":"Volume Space Usage","type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Computes the time since the last known WAL archival in the primary.\nWe ensure to ignore the metric in the replicas by using (1 - cnpg_pg_replication_in_recovery ) as a multiplicative factor. It will be 0 for replicas, 1 for the primary.","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"match":"null","result":{"color":"red","index":0,"text":"No backups"}},"type":"special"},{"options":{"from":-1e+22,"result":{"color":"text","index":1,"text":"No data"},"to":0},"type":"range"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"dtdurations"},"overrides":[]},"gridPos":{"h":2,"w":3,"x":21,"y":5},"id":362,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max((1 - cnpg_pg_replication_in_recovery{namespace=~\"$namespace\",pod=~\"$instances\"}) * (time() - timestamp(cnpg_pg_stat_archiver_seconds_since_last_archival{namespace=~\"$namespace\",pod=~\"$instances\"}) +\ncnpg_pg_stat_archiver_seconds_since_last_archival{namespace=~\"$namespace\",pod=~\"$instances\"}))","format":"time_series","interval":"","legendFormat":"__auto","range":true,"refId":"A"}],"title":"Last archived WAL","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-blue","value":null}]},"unit":"string"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":3,"y":6},"id":340,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"/^full$/","values":false},"text":{},"textMode":"value","wideLayout":true},"pluginVersion":"10.2.2","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"builder","exemplar":false,"expr":"cnpg_collector_postgres_version{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"table","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":"{{pod}}","range":false,"refId":"A"}],"title":"Version","transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":1},{"color":"orange","value":10},{"color":"red","value":20}]},"unit":"s"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":14,"y":6},"id":466,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(cnpg_pg_stat_replication_flush_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"})","legendFormat":"__auto","range":true,"refId":"A"}],"title":"Flush Lag","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"yellow","value":1},{"color":"orange","value":10},{"color":"red","value":20}]},"unit":"s"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":16,"y":6},"id":468,"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max(cnpg_pg_stat_replication_replay_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"})","legendFormat":"__auto","range":true,"refId":"A"}],"title":"Replay Lag","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":2,"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":80000000000},{"color":"red","value":90000000000}]},"unit":"none"},"overrides":[]},"gridPos":{"h":2,"w":3,"x":8,"y":7},"id":346,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"center","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{ namespace=\"$namespace\"})","hide":false,"interval":"","legendFormat":"Total","range":true,"refId":"B"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"Excluding cache","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":80000000000},{"color":"red","value":90000000000}]},"unit":"decbytes"},"overrides":[]},"gridPos":{"h":2,"w":3,"x":11,"y":7},"id":350,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"center","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(container_memory_working_set_bytes{pod=~\"$instances\", namespace=\"$namespace\", container!=\"\", image!=\"\"})","hide":false,"interval":"","legendFormat":"Total","range":true,"refId":"B"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"0":{"color":"red","index":1,"text":"N/A"}},"type":"value"},{"options":{"match":"null","result":{"color":"red","index":0,"text":"No backups"}},"type":"special"}],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"dateTimeAsIso"},"overrides":[]},"gridPos":{"h":2,"w":3,"x":21,"y":7},"id":364,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto","wideLayout":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max(cnpg_collector_first_recoverability_point{namespace=~\"$namespace\",pod=~\"$instances\"})*1000","format":"time_series","interval":"","legendFormat":"{{pod}}","range":true,"refId":"A"}],"title":"First Recoverability Point","type":"stat"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":9},"id":12,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":0,"y":20},"id":191,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Instance","transparent":true,"type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":2,"x":3,"y":20},"id":192,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Status","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":5,"y":20},"id":193,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Clustering / replicas","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":2,"x":8,"y":20},"id":384,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Zone","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":4,"x":10,"y":20},"id":195,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Connections","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":14,"y":20},"id":196,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Max Connections","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","gridPos":{"h":1,"w":3,"x":17,"y":20},"id":197,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Wraparound","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":2,"x":20,"y":20},"id":313,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Started","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":2,"x":22,"y":20},"id":198,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Version","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":3,"w":3,"x":0,"y":21},"id":61,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"\n \n

$instances

\n
","mode":"html"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"0":{"index":0,"text":"Down"},"1":{"index":1,"text":"Up"}},"type":"value"}],"thresholds":{"mode":"absolute","steps":[{"color":"dark-red"},{"color":"green","value":1}]}},"overrides":[]},"gridPos":{"h":3,"w":2,"x":3,"y":21},"id":33,"options":{"colorMode":"background","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"min(kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"})","instant":true,"interval":"","legendFormat":"","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[{"options":{"0":{"color":"red","index":1,"text":"No"},"1":{"color":"green","index":0,"text":"Yes"}},"type":"value"}],"noValue":"-","thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":3,"w":2,"x":5,"y":21},"id":60,"options":{"colorMode":"background","graphMode":"area","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"1 - cnpg_pg_replication_in_recovery{namespace=~\"$namespace\",pod=~\"$instances\"} + cnpg_pg_replication_is_wal_receiver_up{namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"noValue":"-","thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":3,"w":1,"x":7,"y":21},"id":229,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_replication_streaming_replicas{namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"This metric depends on exporting the: `topology.kubernetes.io/zone` label through kube-state-metrics (not enabled by default). Can be added by changing its configuration with:\n\n```yaml\nmetricLabelsAllowlist:\n - nodes=[topology.kubernetes.io/zone]\n```","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"blue"}]}},"overrides":[]},"gridPos":{"h":3,"w":2,"x":8,"y":21},"id":386,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"/^label_topology_kubernetes_io_zone$/","values":false},"text":{"valueSize":18},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"kube_pod_info{namespace=~\"$namespace\",pod=~\"$instances\"} * on(node,instance) group_left(label_topology_kubernetes_io_zone) kube_node_labels","format":"table","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"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"}]},"unit":"short"},"overrides":[]},"gridPos":{"h":3,"w":4,"x":10,"y":21},"id":58,"options":{"legend":{"calcs":["last","mean"],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"8.2.1","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum by (pod) (cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"})","instant":false,"interval":"","legendFormat":"-","refId":"A"}],"type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[],"max":100,"min":0,"noValue":"<1%","thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"#EAB839","value":75},{"color":"red","value":90}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":14,"y":21},"id":32,"options":{"orientation":"horizontal","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"text":{}},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"100 * sum by (pod) (cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"}) / sum by (pod) (cnpg_pg_settings_setting{name=\"max_connections\",namespace=~\"$namespace\",pod=~\"$instances\"})","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":2147483647,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"#EAB839","value":200000000},{"color":"red","value":1000000000}]},"unit":"none"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":17,"y":21},"id":8,"options":{"displayMode":"lcd","minVizHeight":10,"minVizWidth":0,"orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showUnfilled":true,"text":{},"valueMode":"color"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max by (pod) (cnpg_pg_database_xid_age{namespace=~\"$namespace\",pod=~\"$instances\"})","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"bargauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-blue"}]},"unit":"dateTimeFromNow"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":20,"y":21},"id":314,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":false,"expr":"cnpg_pg_postmaster_start_time{namespace=~\"$namespace\",pod=~\"$instances\"}*1000","format":"time_series","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"transformations":[],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-blue"}]},"unit":"string"},"overrides":[]},"gridPos":{"h":3,"w":2,"x":22,"y":21},"id":42,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"/^full$/","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":false,"expr":"cnpg_collector_postgres_version{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"table","hide":false,"instant":true,"interval":"","intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"transformations":[],"type":"stat"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Server Health","type":"row"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":10},"id":41,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":0,"y":21},"id":187,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Instance","transparent":true,"type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":3,"y":21},"id":183,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Max Connections","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":6,"y":21},"id":184,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Shared Buffers","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":9,"y":21},"id":185,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Effective Cache Size","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":12,"y":21},"id":186,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Work Mem","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":15,"y":21},"id":188,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Maintenance Work Mem","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":18,"y":21},"id":189,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Random Page Cost","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":3,"x":21,"y":21},"id":190,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"","mode":"html"},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Sequential Page Cost","type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"gridPos":{"h":3,"w":3,"x":0,"y":22},"id":86,"options":{"code":{"language":"plaintext","showLineNumbers":false,"showMiniMap":false},"content":"\n \n

$instances

\n
","mode":"html"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"kube_pod_container_status_ready{container=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"text"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]}},"overrides":[]},"gridPos":{"h":3,"w":3,"x":3,"y":22},"id":30,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_settings_setting{name=\"max_connections\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":6,"y":22},"id":24,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max by (pod) (cnpg_pg_settings_setting{name=\"shared_buffers\",namespace=~\"$namespace\",pod=~\"$instances\"}) * max by (pod) (cnpg_pg_settings_setting{name=\"block_size\",namespace=~\"$namespace\",pod=~\"$instances\"})","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":9,"y":22},"id":57,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max by (pod) (cnpg_pg_settings_setting{name=\"effective_cache_size\",namespace=~\"$namespace\",pod=~\"$instances\"}) * max by (pod) (cnpg_pg_settings_setting{name=\"block_size\",namespace=~\"$namespace\",pod=~\"$instances\"})","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":12,"y":22},"id":26,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_settings_setting{name=\"work_mem\",namespace=~\"$namespace\",pod=~\"$instances\"} * 1024","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]},"unit":"bytes"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":15,"y":22},"id":47,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_settings_setting{name=\"maintenance_work_mem\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]},"unit":"none"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":18,"y":22},"id":48,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_settings_setting{name=\"random_page_cost\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]},"unit":"none"},"overrides":[]},"gridPos":{"h":3,"w":3,"x":21,"y":22},"id":56,"options":{"colorMode":"background","graphMode":"none","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"10.1.5","repeat":"instances","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_settings_setting{name=\"seq_page_cost\",namespace=~\"$namespace\",pod=~\"$instances\"}","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","cellOptions":{"type":"auto"},"filterable":true,"inspect":false},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"dark-purple"}]}},"overrides":[]},"gridPos":{"h":9,"w":24,"x":0,"y":31},"id":150,"options":{"cellHeight":"sm","footer":{"countRows":false,"fields":"","reducer":["sum"],"show":false},"showHeader":true,"sortBy":[]},"pluginVersion":"10.1.5","repeatDirection":"v","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_settings_setting{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"table","instant":true,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Configurations","transformations":[{"id":"organize","options":{"excludeByName":{"Time":true,"__name__":true,"container":true,"endpoint":true,"instance":true,"job":true,"name":false,"namespace":true,"pod":false},"indexByName":{"Time":0,"Value":9,"__name__":1,"container":2,"endpoint":3,"instance":4,"job":5,"name":7,"namespace":8,"pod":6},"renameByName":{"__name__":"","name":"parameter"}}},{"id":"groupingToMatrix","options":{"columnField":"pod","rowField":"parameter","valueField":"Value"}},{"id":"organize","options":{"excludeByName":{},"indexByName":{},"renameByName":{"parameter\\pod":"parameter"}}}],"type":"table"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Configuration","type":"row"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":11},"id":10,"panels":[{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":47},"hiddenSeries":false,"id":273,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null as zero","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.4.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{pod=~\"$instances\", namespace=~\"$namespace\"}) by (pod)","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"{{pod}}","refId":"A","step":10},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{pod=~\"$instances\", namespace=~\"$namespace\"})","hide":false,"interval":"","legendFormat":"total","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"CPU Usage","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:189","format":"short","logBase":1,"min":0,"show":true},{"$$hashKey":"object:190","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fill":2,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":47},"hiddenSeries":false,"id":275,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null as zero","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.4.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"quota - requests","color":"#F2495C","dashes":true,"fill":0,"hiddenSeries":true,"hideTooltip":true,"legend":true,"linewidth":2,"stack":false},{"alias":"quota - limits","color":"#FF9830","dashes":true,"fill":0,"hiddenSeries":true,"hideTooltip":true,"legend":true,"linewidth":2,"stack":false}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(container_memory_working_set_bytes{pod=~\"$instances\", namespace=\"$namespace\", container!=\"\", image!=\"\"}) by (pod)","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"{{pod}}","refId":"A","step":10},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(container_memory_working_set_bytes{pod=~\"$instances\", namespace=\"$namespace\", container!=\"\", image!=\"\"})","hide":false,"interval":"","legendFormat":"total","refId":"B"}],"thresholds":[],"timeRegions":[],"title":"Memory Usage (w/o cache)","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"$$hashKey":"object:246","format":"bytes","logBase":1,"min":0,"show":true},{"$$hashKey":"object:247","format":"short","logBase":1,"show":false}],"yaxis":{"align":false}},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"opacity","hideFrom":{"legend":false,"tooltip":false,"viz":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"}]}},"overrides":[]},"gridPos":{"h":8,"w":24,"x":0,"y":54},"id":39,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"}) by (pod)","hide":false,"interval":"","legendFormat":"total ({{pod}})","refId":"B"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(cnpg_backends_total{namespace=~\"$namespace\",pod=~\"$instances\"}) by (state, pod)","interval":"","legendFormat":"{{state}} ({{pod}})","refId":"A"}],"title":"Session States","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"opacity","hideFrom":{"legend":false,"tooltip":false,"viz":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}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":62},"id":50,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_xact_commit{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])) by (pod)","interval":"","legendFormat":"committed ({{pod}})","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_xact_rollback{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])) by (pod)","hide":false,"interval":"","legendFormat":"rolled back ({{pod}})","refId":"B"}],"title":"Transactions [5m]","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":62},"id":4,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max by (pod) (cnpg_backends_max_tx_duration_seconds{namespace=~\"$namespace\",pod=~\"$instances\"})","interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Longest Transaction","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":70},"id":55,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(cnpg_pg_stat_database_deadlocks{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])","hide":false,"instant":false,"interval":"","legendFormat":"count ({{pod}})","refId":"B"}],"title":"Deadlocks [5m]","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":70},"id":54,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_backends_waiting_total{namespace=~\"$namespace\",pod=~\"$instances\"}","interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Blocked Queries","type":"timeseries"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Operational Stats","type":"row"},{"collapsed":false,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":12},"id":35,"panels":[],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Storage & I/O","type":"row"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":0.7},{"color":"red","value":0.8}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":13},"id":424,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"text":{}},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"$instances\"} / kubelet_volume_stats_capacity_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"$instances\"})","format":"time_series","interval":"","legendFormat":"{{persistentvolumeclaim}}","range":true,"refId":"FREE_SPACE"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-wal\"} / kubelet_volume_stats_capacity_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-wal\"})","format":"time_series","interval":"","legendFormat":"{{persistentvolumeclaim}}","range":true,"refId":"FREE_SPACE_WAL"}],"title":"Volume Space Usage: PGDATA and WAL","transformations":[],"type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":2,"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":0.8},{"color":"red","value":0.9}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":13},"id":426,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"10.2.2","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max by(persistentvolumeclaim) (kubelet_volume_stats_inodes_used{namespace=\"$namespace\", persistentvolumeclaim=~\"$instances\"} / kubelet_volume_stats_inodes{namespace=\"$namespace\", persistentvolumeclaim=~\"$instances\"})","format":"time_series","interval":"","legendFormat":"{{persistentvolumeclaim}}","range":true,"refId":"FREE_INODES"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"max by(persistentvolumeclaim) (kubelet_volume_stats_inodes_used{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-wal\"} / kubelet_volume_stats_inodes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-wal\"})","format":"time_series","interval":"","legendFormat":"{{persistentvolumeclaim}}","range":true,"refId":"FREE_INODES_WAL"}],"title":"Volume Inode Usage: PGDATA and WAL","transformations":[],"type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":1,"min":0,"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"#EAB839","value":0.7},{"color":"red","value":0.8}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":7,"w":24,"x":0,"y":21},"id":564,"options":{"orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"text":{}},"pluginVersion":"10.1.5","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","expr":"sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-tbs.*\"}) \n/\nsum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace=\"$namespace\", persistentvolumeclaim=~\"(${instances})-tbs.*\"}) \n*\non(namespace, persistentvolumeclaim) group_left(volume,pod)\nkube_pod_spec_volumes_persistentvolumeclaims_info{pod=~\"$instances\"}","format":"time_series","interval":"","legendFormat":"{{volume}}-{{pod}}","range":true,"refId":"FREE_SPACE"}],"title":"Volume Space Usage: Tablespaces","transformations":[],"type":"gauge"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"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}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":28},"id":44,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_tup_deleted{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m]))","interval":"","legendFormat":"deleted","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_tup_inserted{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m]))","hide":false,"interval":"","legendFormat":"inserted","range":true,"refId":"B"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_tup_fetched{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m]))","hide":false,"interval":"","legendFormat":"fetched","range":true,"refId":"C"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_tup_returned{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m]))","hide":false,"interval":"","legendFormat":"returned","range":true,"refId":"D"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"sum(rate(cnpg_pg_stat_database_tup_updated{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m]))","hide":false,"interval":"","legendFormat":"updated","range":true,"refId":"E"}],"title":"Tuple I/O [5m]","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"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}]}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":28},"id":46,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"rate(cnpg_pg_stat_database_blks_hit{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])","interval":"","legendFormat":"hit ({{pod}})","range":true,"refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"rate(cnpg_pg_stat_database_blks_read{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])","hide":false,"interval":"","legendFormat":"read ({{pod}})","range":true,"refId":"B"}],"title":"Block I/O [5m]","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"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"}]},"unit":"decbytes"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":36},"id":22,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"8.0.5","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editorMode":"code","exemplar":true,"expr":"max by (datname) (cnpg_pg_database_size_bytes{datname!~\"template.*\",datname!=\"postgres\",namespace=~\"$namespace\",pod=~\"$instances\"})","interval":"","legendFormat":" {{pod}}: {{datname}}","range":true,"refId":"A"}],"title":"Database Size","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"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":"decbytes"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":36},"id":2,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(cnpg_pg_stat_database_temp_bytes{datname=\"\",namespace=~\"$namespace\",pod=~\"$instances\"}[5m])","instant":false,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Temp Bytes [5m]","type":"timeseries"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":44},"id":37,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":0,"y":57},"id":6,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_collector_pg_wal_archive_status{value=\"ready\",namespace=~\"$namespace\",pod=~\"$instances\"}","interval":"","legendFormat":"ready ({{pod}})","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_collector_pg_wal_archive_status{value=\"done\",namespace=~\"$namespace\",pod=~\"$instances\"}","hide":false,"interval":"","legendFormat":"done ({{pod}})","refId":"B"}],"title":"WAL Segment Archive Status","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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}]}},"overrides":[]},"gridPos":{"h":8,"w":8,"x":8,"y":57},"id":52,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(cnpg_pg_stat_archiver_archived_count{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])","interval":"","legendFormat":"archived ({{pod}})","refId":"A"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(cnpg_pg_stat_archiver_failed_count{namespace=~\"$namespace\",pod=~\"$instances\"}[5m])","hide":false,"interval":"","legendFormat":"failed ({{pod}})","refId":"B"}],"title":"Archiver Status [5m]","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"s"},"overrides":[]},"gridPos":{"h":8,"w":8,"x":16,"y":57},"id":53,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_archiver_seconds_since_last_archival{namespace=~\"$namespace\",pod=~\"$instances\"}","interval":"","legendFormat":"age ({{pod}})","refId":"A"}],"title":"Last Archive Age","type":"timeseries"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Write Ahead Log","type":"row"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":45},"id":18,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":false},"lineInterpolation":"linear","lineWidth":1,"pointSize":5,"scaleDistribution":{"type":"linear"},"showPoints":"never","spanNulls":true,"stacking":{"group":"A","mode":"none"},"thresholdsStyle":{"mode":"line"}},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green"},{"color":"#EAB839","value":600},{"color":"dark-red","value":3600}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":6,"x":0,"y":21},"id":16,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_replication_lag{namespace=~\"$namespace\",pod=~\"$instances\"}","instant":false,"interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Replication Lag","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"s"},"overrides":[]},"gridPos":{"h":8,"w":6,"x":6,"y":21},"id":14,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_replication_write_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"}","instant":false,"interval":"","legendFormat":"{{pod}} -> {{application_name}}","refId":"A"}],"title":"Write Lag","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"s"},"overrides":[]},"gridPos":{"h":8,"w":6,"x":12,"y":21},"id":59,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_replication_flush_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"}","instant":false,"interval":"","legendFormat":"{{pod}} -> {{application_name}}","refId":"A"}],"title":"Flush Lag","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":10,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"s"},"overrides":[]},"gridPos":{"h":8,"w":6,"x":18,"y":21},"id":20,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_replication_replay_lag_seconds{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"}","interval":"","legendFormat":"{{pod}} -> {{application_name}}","refId":"A"}],"title":"Replay Lag","type":"timeseries"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Replication","type":"row"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":46},"id":231,"panels":[{"cards":{},"color":{"cardColor":"#b4ff00","colorScale":"sqrt","colorScheme":"interpolateOranges","exponent":0.5,"mode":"spectrum"},"dataFormat":"timeseries","datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"custom":{"hideFrom":{"legend":false,"tooltip":false,"viz":false},"scaleDistribution":{"type":"linear"}}},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":59},"heatmap":{},"hideZeroBuckets":false,"highlightCards":true,"id":233,"legend":{"show":false},"options":{"calculate":true,"calculation":{},"cellGap":2,"cellValues":{},"color":{"exponent":0.5,"fill":"#b4ff00","mode":"scheme","reverse":false,"scale":"exponential","scheme":"Oranges","steps":128},"exemplars":{"color":"rgba(255,0,255,0.7)"},"filterValues":{"le":1e-9},"legend":{"show":false},"rowsFrame":{"layout":"auto"},"showValue":"never","tooltip":{"show":true,"yHistogram":false},"yAxis":{"axisPlacement":"left","reverse":false,"unit":"s"}},"pluginVersion":"9.4.7","reverseYBuckets":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_collector_collection_duration_seconds{namespace=~\"$namespace\",pod=~\"$instances\"}","interval":"","legendFormat":"","refId":"A"}],"title":"Collection Duration","tooltip":{"show":true,"showHistogram":false},"type":"heatmap","xAxis":{"show":true},"yAxis":{"format":"s","logBase":1,"show":true},"yBucketBound":"auto"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":8,"w":12,"x":12,"y":59},"id":235,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_collector_last_collection_error{namespace=~\"$namespace\",pod=~\"$instances\"}","interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"Errors","type":"timeseries"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Collector Stats","type":"row"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":47},"id":239,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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}]},"unit":"dateTimeAsIso"},"overrides":[]},"gridPos":{"h":6,"w":8,"x":0,"y":60},"id":237,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_collector_first_recoverability_point{namespace=~\"$namespace\",pod=~\"$instances\"}*1000 > 0","format":"time_series","interval":"","legendFormat":"{{pod}}","refId":"A"}],"title":"First Recoverability Point","type":"timeseries"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Backups","type":"row"},{"collapsed":true,"datasource":{"uid":"${DS_PROMETHEUS}"},"gridPos":{"h":1,"w":24,"x":0,"y":48},"id":293,"panels":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":-1,"drawStyle":"line","fillOpacity":8,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"none"},"overrides":[]},"gridPos":{"h":6,"w":5,"x":0,"y":40},"id":295,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"8.2.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_bgwriter_checkpoints_req{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"req/{{pod}}","refId":"B"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_bgwriter_checkpoints_timed{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"timed/{{pod}}","refId":"A"}],"title":"Requested/Timed","type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"description":"","fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":-1,"drawStyle":"line","fillOpacity":8,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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":"ms"},"overrides":[]},"gridPos":{"h":6,"w":5,"x":5,"y":40},"id":296,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"multi","sort":"none"}},"pluginVersion":"8.2.1","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_bgwriter_checkpoint_write_time{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"write/{{pod}}","refId":"B"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"cnpg_pg_stat_bgwriter_checkpoint_sync_time{namespace=~\"$namespace\",pod=~\"$instances\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"sync/{{pod}}","refId":"A"}],"title":"Write/Sync time","type":"timeseries"}],"targets":[{"datasource":{"uid":"${DS_PROMETHEUS}"},"refId":"A"}],"title":"Checkpoints","type":"row"}],"refresh":"30s","revision":1,"schemaVersion":38,"tags":["cloudnativepg"],"templating":{"list":[{"current":{"selected":false,"text":"default","value":"default"},"hide":0,"includeAll":false,"label":"Datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","queryValue":"","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{"isNone":true,"selected":false,"text":"None","value":""},"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"definition":"cnpg_collector_up","hide":0,"includeAll":false,"multi":false,"name":"namespace","options":[],"query":{"query":"cnpg_collector_up","refId":"StandardVariableQuery"},"refresh":1,"regex":"/namespace=\"(?[^\"]+)/g","skipUrlSync":false,"sort":0,"type":"query"},{"current":{"isNone":true,"selected":false,"text":"None","value":""},"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"definition":"cnpg_collector_up{namespace=~\"$namespace\"}","hide":0,"includeAll":false,"multi":false,"name":"cluster","options":[],"query":{"query":"cnpg_collector_up{namespace=~\"$namespace\"}","refId":"PrometheusVariableQueryEditor-VariableQuery"},"refresh":1,"regex":"/\\bcluster\\b=\"(?[^\"]+)/g","skipUrlSync":false,"sort":1,"type":"query"},{"current":{"selected":true,"text":["All"],"value":["$__all"]},"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"definition":"cnpg_collector_up{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"}","hide":0,"includeAll":true,"multi":true,"name":"instances","options":[],"query":{"query":"cnpg_collector_up{namespace=~\"$namespace\",pod=~\"$cluster-[0-9]+$\"}","refId":"StandardVariableQuery"},"refresh":1,"regex":"/pod=\"(?[^\"]+)/g","skipUrlSync":false,"sort":1,"type":"query"}]},"time":{"from":"now-6h","to":"now"},"timepicker":{"nowDelay":""},"timezone":"","title":"CloudNativePG","uid":"cloudnative-pg","version":1,"weekStart":""} \ No newline at end of file diff --git a/kubernetes/manifests/cloudnative-pg/kustomization.yaml b/kubernetes/manifests/cloudnative-pg/kustomization.yaml new file mode 100644 index 0000000..9f601cc --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/kustomization.yaml @@ -0,0 +1,21 @@ +resources: + - namespace.yaml + - main-cluster-init-sql.sealed-secret.yaml + - cluster.yaml + - admin-credentials.sealed-secret.yaml + - grafana-dashboard.configmap.yaml + - atlasgo-credentials.sealed-secret.yaml + - schema.yaml + +helmCharts: + - repo: https://cloudnative-pg.io/charts + name: cloudnative-pg + releaseName: cloudnative-pg + namespace: cloudnative-pg + version: 0.20.0 + + - repo: oci://ghcr.io/ariga/charts + name: atlas-operator + releaseName: atlas + namespace: cloudnative-pg + version: 0.4.0 diff --git a/kubernetes/manifests/cloudnative-pg/main-cluster-init-sql.sealed-secret.yaml b/kubernetes/manifests/cloudnative-pg/main-cluster-init-sql.sealed-secret.yaml new file mode 100644 index 0000000..babc587 --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/main-cluster-init-sql.sealed-secret.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: main-cluster-init-sql + namespace: cloudnative-pg +spec: + encryptedData: + create-debezium-user.sql: AgCimJt9zOO3i8eRCYET8UYIGCQdS28PXv0y+8brA4oEi4wu+WTvkRbi4AmqPqMPXMWyvxEGtMig0GJwu3VTRj+Lc9nCyt9Kb5L5KdGy60eurAx8e7SCgvmiMeG+RX5D5uaQpeRCBof5LvDy1Eq/m8ztJjT6BJq2BCjNTaWP3A/1dEq4soUCMqNbaN0lt4iXxvrCTNeGgeHOFt7TQwnhwIFkCaYBBg6iR6SE28VfHE7v1S+oB7+bSIxQkRUmVklaq9M1q8XQ2L///50CJhFRVhqc/+u4chl73PHeSQ3cykLEZrNyH5Wft3NsQYdR3zmuBSvRqsLQV/V5u/YnczN2bYf599sbn1K/pX6MVhoMc4gju2n0qtVMg+qg0G0sE08eOwJ302v/J+312iUjKib1ZVdtwJKNA5EcBPCVxdUbrXhGo3kRd/xocGw9S5M+CaiOpPCRLrpRF7wWcC3mj4SM6X4dPGZXpQNFE6bDI/Oxg2vhYVSAJ1cM2VN5mJYZDLelg8kyyqjeCAVyg3IshfE1Zc3tN/oIvOSujT/7m4tv79keaK8ojube3CDGgYFA29NVWkL3aWnMyTYkrZ6yQMKpV80n6IcJU4vFee7Wbkiu6BkZTsVV6FblfrW+EBNugswMlWkEYk8G9l8UUvoLNuFZ9kPmK6APQa+Dokt/PKGHGShH9IXQr73vtzBxfGEe5q5fzpDtpFNYXy+i3MqkbzR5tI2HGbk4PZMBM+ogYpr1tbPIq6uqQheGKLJLj9P6ClmGV3iJWrbl4XxMwKb1RvW2Z8MZCLDGDIYcIyYqzW4fTRDlam85tUDaptyfeDm2 + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: main-cluster-init-sql + namespace: cloudnative-pg + type: Opaque diff --git a/kubernetes/manifests/cloudnative-pg/namespace.yaml b/kubernetes/manifests/cloudnative-pg/namespace.yaml new file mode 100644 index 0000000..a5703e7 --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: cloudnative-pg + labels: + pod-monitor-scanning: enable \ No newline at end of file diff --git a/kubernetes/manifests/cloudnative-pg/schema.yaml b/kubernetes/manifests/cloudnative-pg/schema.yaml new file mode 100644 index 0000000..d802c37 --- /dev/null +++ b/kubernetes/manifests/cloudnative-pg/schema.yaml @@ -0,0 +1,57 @@ +apiVersion: db.atlasgo.io/v1alpha1 +kind: AtlasSchema +metadata: + name: instagram-clone + namespace: cloudnative-pg + +spec: + + urlFrom: + secretKeyRef: + key: url + name: atlasgo-credentials + + schema: + sql: | + + -- Users Microservice + CREATE TABLE users ( + id SERIAL PRIMARY KEY, + + name VARCHAR(25) NOT NULL, + email VARCHAR(320) NOT NULL UNIQUE, + username VARCHAR(25) NOT NULL UNIQUE, + + password VARCHAR(100) NOT NULL + ); + CREATE INDEX email_idx_users ON users (email); + CREATE INDEX username_idx_users ON users (username); + + -- Profiles Microservice + CREATE TABLE profiles ( + id INT PRIMARY KEY, + + name VARCHAR(25) NOT NULL, + username VARCHAR(25) NOT NULL UNIQUE, + + profile_picture_uri VARCHAR(250) + ); + CREATE INDEX username_idx_profiles ON profiles (username); + + -- Followships Microservice + CREATE TABLE followships ( + follower_id INT, + followee_id INT + ); + CREATE INDEX follower_id_idx_followships ON followships (follower_id, followee_id); + CREATE INDEX followee_id_idx_followships ON followships (followee_id, follower_id); + + -- Posts Microservice + CREATE TABLE posts ( + id SERIAL PRIMARY KEY, + owner_id INT NOT NULL, + + description VARCHAR(255) NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT now( ) + ); + CREATE INDEX owner_id_idx_posts ON posts (owner_id, created_at DESC); \ No newline at end of file diff --git a/kubernetes/workspaces/dev/istio.yaml b/kubernetes/manifests/debezium.application.yaml similarity index 69% rename from kubernetes/workspaces/dev/istio.yaml rename to kubernetes/manifests/debezium.application.yaml index ee97e46..98161f4 100644 --- a/kubernetes/workspaces/dev/istio.yaml +++ b/kubernetes/manifests/debezium.application.yaml @@ -2,22 +2,22 @@ apiVersion: argoproj.io/v1alpha1 kind: Application metadata: - name: istio - namespace: istio-system + name: debezium + namespace: argocd spec: project: default destination: server: https://kubernetes.default.svc - namespace: istio-system + namespace: debezium source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/workspaces/dev/istio + path: kubernetes/manifests/debezium syncPolicy: automated: prune: true - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/kubernetes/manifests/debezium/kustomization.yaml b/kubernetes/manifests/debezium/kustomization.yaml new file mode 100644 index 0000000..5223289 --- /dev/null +++ b/kubernetes/manifests/debezium/kustomization.yaml @@ -0,0 +1,13 @@ +resources: + # CRDs + - https://raw.githubusercontent.com/debezium/debezium-operator/2.4/k8/debeziumservers.debezium.io-v1.yml + + # Operator + - https://raw.githubusercontent.com/debezium/debezium-operator/2.4/k8/kubernetes.yml + + - namespace.yaml + + - postgres-credentials.sealed-secret.yaml + + - users-table.debezium-server.yaml + - posts-table.debezium-server.yaml diff --git a/kubernetes/workspaces/dev/kube-prometheus-stack/namespace.yaml b/kubernetes/manifests/debezium/namespace.yaml similarity index 69% rename from kubernetes/workspaces/dev/kube-prometheus-stack/namespace.yaml rename to kubernetes/manifests/debezium/namespace.yaml index 11563cd..e8d1d2e 100644 --- a/kubernetes/workspaces/dev/kube-prometheus-stack/namespace.yaml +++ b/kubernetes/manifests/debezium/namespace.yaml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: prometheus \ No newline at end of file + name: debezium \ No newline at end of file diff --git a/kubernetes/manifests/debezium/postgres-credentials.sealed-secret.yaml b/kubernetes/manifests/debezium/postgres-credentials.sealed-secret.yaml new file mode 100644 index 0000000..0a278d4 --- /dev/null +++ b/kubernetes/manifests/debezium/postgres-credentials.sealed-secret.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: postgres-credentials + namespace: debezium +spec: + encryptedData: + POSTGRES_PASSWORD: AgBxiBWtg6H27g305LbaTkeGHxFGmXNSWYar3uoR6A6Gl0MnQCTDaB8cbnZ5OZk8QBzqStmlXkGtYq5Bwct2xGO3eBGuqqBIH/1S8eW1YkiuKbqn2cE8+ZEqmGpZS91eExXstjLddZsxJzv/mdwwZA0v5neSBRrTDlqrqYtYn5krJ1B5lpivd2qVpzo8lufjNWTIgaNmMI7yblNGySCBuE7GogWx3e/sFv/MkhGLZEreXT8AV/aez+BUDo+ufxO+hl5bneWXIWUTRq4jGyL3AN9NUhDI6ARfZJoam5XFw3oWmC5mWp42GuBTXCzxGfI+seykiIDx7nSx29QurqaOxjRo/WnwatIr5qiUpNLRdDL0eHTayIPFcfVJtgNCdCoFit6Ga5+/Nz8evvhsCwuaUzzFCeCILIGH6KO+tZw5+225S6t3D/yevikxeIFqAr0XZTwzsKW9ucpR0jDG6aySf7iMNcvkFnPjs6Utn/gMpETtYzHHzuvEktUMgiWHAKLx3NuITWKzeMW2XvQlvMGj9ZfRRJ6eZXQdJNjQUJEiJ85uuKXAGfdUmPa2Vii/9IqD4LFbMNykXo4X1nrqp+gNeJzqxFXXc5fKS2Nc23j/hch9jXhwrSQH4RcoWsyMTbXN70dPJVoe7a2KWQvcmlppVvuSGC1K1G+AvxYrxOuc597Q06up0V3bCw4bvnFtO4NR8d7l+wreRb7KnuHHUnUeZG0= + POSTGRES_USER: AgAXsXxcCtWrBgTqPgDZpwAAvoL2c3zqqayPDwO1h9IgaFqG+HGpBanlTs5NikFeLmHj15MftUg2dlq7w3mWjewW6PLq9BF++btbfMqfojOlPNWyUqFwW6pg26/hDbAURRX5jd87U7w7fbTvGLEhiTqOH6zmnhSo3M8Ii7Vesjigxs1aRVF622D2b3cmeqhAMdFWadOOEVbSx21e3Ko1L/d6hpOhzd3T53BpGr2po7xd5XK9hhpao0RLVOju1KYmwlREes/QB4suTcSHq1inG4JaRMRWce8xyNRJXCna84xivJiDxziQyjlwfr4hV92kXdSZnQ0f03RF7Db6ZaLSPIwlvHvh5CRtYy+waNBJHY5TcggNK7SiY6ZjnLx91nK1k452/VqRRixGVbMOHe3Vo2L2kVSDP/SixWkIQyKFG9paarsDR5A48SM0V+sbZdPJD8w1FmpKTq2xbnojEkzB98B+G3iTGgEwqcbuBlbo1I02vVvgjfM/fTYZvwzfNpxyFliblylOvSS6V+Y7JZr4ZnFqsGTRP6RNLtEzv/25tb42JZ/1Pm77UJTQX//Y/me37qTtu5Q7fc5St3N/TkexwQ3XIfGeILPq3WLmp66WoI/BJob1Hmno6cQzaTGRZcf2ntI2T9EZequ/Yk+gv8chaOrv0ELewD42OigAVijj39NJw5YLl23aFpjrJAbRbv0l+x3fpIG4opolZQ== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: postgres-credentials + namespace: debezium + type: Opaque diff --git a/kubernetes/manifests/debezium/posts-table.debezium-server.yaml b/kubernetes/manifests/debezium/posts-table.debezium-server.yaml new file mode 100644 index 0000000..30fe3a2 --- /dev/null +++ b/kubernetes/manifests/debezium/posts-table.debezium-server.yaml @@ -0,0 +1,60 @@ +apiVersion: debezium.io/v1alpha1 +kind: DebeziumServer +metadata: + name: posts-table + namespace: debezium + +spec: + image: quay.io/debezium/server:2.4.0.Final + + quarkus: + config: + log.console.json: false + kubernetes-config.enabled: true + kubernetes-config.secrets: postgres-credentials + + sink: + type: kafka + config: + producer.bootstrap.servers: main-kafka-bootstrap.strimzi:9092 + producer.key.serializer: org.apache.kafka.common.serialization.StringSerializer + producer.value.serializer: org.apache.kafka.common.serialization.StringSerializer + + source: + class: io.debezium.connector.postgresql.PostgresConnector + config: + offset.storage.file.filename: /debezium/data/offsets.dat + + # connector.id: posts-table-source-connector + # connector.displayName: posts-table-source-connector + + database.server.name: posts + database.hostname: main-rw.cloudnative-pg + database.port: 5432 + database.dbname: instagram_clone + database.user: ${POSTGRES_USER} + database.password: ${POSTGRES_PASSWORD} + database.history: io.debezium.relational.history.FileDatabaseHistory + + tombstones.on.delete: "false" + + skip.messages.without.change: "true" + + slot.name: posts_table_source_connector + + schema.include.list: public + table.include.list: public.posts + column.include.list: public.posts.id,public.posts.owner_id + + plugin.name: pgoutput + + publication.autocreate.mode: all_tables + + # the Debezium event flattening single message transformation (SMT). + # transforms: unwrap + # transforms.unwrap.type: io.debezium.transforms.ExtractNewRecordState + # transforms.unwrap.add.fields: op, + # transforms.unwrap.drop.tombstones: false + # transforms.unwrap.delete.handling.mode: rewrite + + topic.prefix: db-events \ No newline at end of file diff --git a/kubernetes/manifests/debezium/users-table.debezium-server.yaml b/kubernetes/manifests/debezium/users-table.debezium-server.yaml new file mode 100644 index 0000000..903de6b --- /dev/null +++ b/kubernetes/manifests/debezium/users-table.debezium-server.yaml @@ -0,0 +1,93 @@ +apiVersion: debezium.io/v1alpha1 +kind: DebeziumServer +metadata: + name: users-table + namespace: debezium + +spec: + image: quay.io/debezium/server:2.4.0.Final + + quarkus: + config: + log.console.json: false + kubernetes-config.enabled: true + kubernetes-config.secrets: postgres-credentials + + sink: + type: kafka + config: + producer.bootstrap.servers: main-kafka-bootstrap.strimzi:9092 + producer.key.serializer: org.apache.kafka.common.serialization.StringSerializer + producer.value.serializer: org.apache.kafka.common.serialization.StringSerializer + + source: + class: io.debezium.connector.postgresql.PostgresConnector + config: + offset.storage.file.filename: /debezium/data/offsets.dat + + # connector.id: users-table-source-connector + # connector.displayName: users-table-source-connector + + database.server.name: users + database.hostname: main-rw.cloudnative-pg + database.port: 5432 + database.dbname: instagram_clone + database.user: ${POSTGRES_USER} + database.password: ${POSTGRES_PASSWORD} + database.history: io.debezium.relational.history.FileDatabaseHistory + + # Controls whether a delete event is followed by a tombstone event. + # | + # |- true - a delete operation is represented by a delete event and a subsequent tombstone event. + # | + # |- false - only a delete event is emitted. + # + # After a source record is deleted, emitting a tombstone event (the default behavior) allows + # Kafka to completely delete all events that pertain to the key of the deleted row in case log + # compaction is enabled for the topic. + tombstones.on.delete: "false" + + # Specifies whether to skip publishing messages when there is no change in included columns. + # This would essentially filter messages if there is no change in columns included as per + # column.include.list or column.exclude.list properties. + # Note: Only works when REPLICA IDENTITY of the table is set to FULL + skip.messages.without.change: "true" + + # The name of the PostgreSQL logical decoding slot that was created for streaming changes from + # a particular plug-in for a particular database/schema. The server uses this slot to stream + # events to the Debezium connector that you are configuring. + slot.name: users_table_source_connector + + schema.include.list: public + table.include.list: public.users + column.include.list: public.users.id,public.users.name,public.users.username + + # The name of the PostgreSQL logical decoding plug-in installed on the PostgreSQL server. + # Supported values are decoderbufs, and pgoutput. + plugin.name: pgoutput + + # A publication can be defined on any physical replication primary. The node where a publication + # is defined is referred to as publisher. A publication is a set of changes generated from a + # table or a group of tables, and might also be described as a change set or replication set. + # Each publication exists in only one database. + # This setting determines how creation of a publication should work. + # (If a publication exists, the connector uses it. If a publication does not exist, the + # connector creates a publication for all tables in the database for which the connector is + # capturing changes. For the connector to create a publication it must access the database + # through a database user account that has permission to create publications and perform\ + # replications.) + publication.autocreate.mode: all_tables + + # the Debezium event flattening single message transformation (SMT). + # transforms: unwrap + # transforms.unwrap.type: io.debezium.transforms.ExtractNewRecordState + # transforms.unwrap.add.fields: op, + # transforms.unwrap.drop.tombstones: false + # transforms.unwrap.delete.handling.mode: rewrite + + # Topic prefix that provides a namespace for the particular PostgreSQL database server or + # cluster in which Debezium is capturing changes. The prefix should be unique across all other + # connectors, since it is used as a topic name prefix for all Kafka topics that receive records + # from this connector. Only alphanumeric characters, hyphens, dots and underscores must be used + # in the database server logical name. + topic.prefix: db-events \ No newline at end of file diff --git a/kubernetes/manifests/dragonfly.application.yaml b/kubernetes/manifests/dragonfly.application.yaml new file mode 100644 index 0000000..2fac371 --- /dev/null +++ b/kubernetes/manifests/dragonfly.application.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application + +metadata: + name: dragonfly + namespace: argocd + +spec: + project: default + + destination: + server: https://kubernetes.default.svc + namespace: dragonfly + + source: + repoURL: https://github.com/Archisman-Mridha/instagram-clone + targetRevision: HEAD + path: kubernetes/manifests/dragonfly + + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/kubernetes/manifests/dragonfly/cluster.yaml b/kubernetes/manifests/dragonfly/cluster.yaml new file mode 100644 index 0000000..db0fe7a --- /dev/null +++ b/kubernetes/manifests/dragonfly/cluster.yaml @@ -0,0 +1,31 @@ +apiVersion: dragonflydb.io/v1alpha1 +kind: Dragonfly +metadata: + name: main + namespace: dragonfly + +spec: + replicas: 1 + + resources: + requests: + cpu: 200m + memory: 500Mi + limits: + cpu: 200m + memory: 500Mi + + authentication: + passwordFromSecret: + name: default-credentials + key: password + + # snapshot: + # cron: "*/5 * * * *" + # persistentVolumeClaimSpec: + # storageClassName: upcloud-block-storage-hdd + # accessModes: + # - ReadWriteOnce + # resources: + # requests: + # storage: 1Gi \ No newline at end of file diff --git a/kubernetes/manifests/dragonfly/default-credentials.sealed-secret.yaml b/kubernetes/manifests/dragonfly/default-credentials.sealed-secret.yaml new file mode 100644 index 0000000..c46c831 --- /dev/null +++ b/kubernetes/manifests/dragonfly/default-credentials.sealed-secret.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: default-credentials + namespace: dragonfly +spec: + encryptedData: + password: AgAgBxHtV4tGb7YQDVr2XxNXPUeUU0P76jo3DPtrtaSX/O/LxqAjrogH31ZtLFtkx3hqNiU9fdZCooAjq43h3CAqj/bSOuigjmikm2JR3lGOQiOFMGzpa9zmJ6P7S54Kux5dhCTGJfgZWGI63Ol53uoQeymMjImjOXLqJQY2EHKwhaNyX+RWy/wev17cukWW2aBZWiywPxtSSqLPJmPEeEgwNjnkigAHa58h5AtCREMD8PffCP/f9RZ696/L+XSq/7TfmEWQGIS0tlg5EPnRC+2MgJswkzVBE6d4GXKOeVcE1ot4bbruXDp3JNVX6J4RTAI8wLQT6TC1n/hPfyYRoLJKLr2GM3ypmjr2UdKUJ7PoUymX4HQeV78Uz976b98/Z7pdo9Z935w96UWrBMclbG3bpZ/PlNmpMooVYjgExx3efHJLH0qXfA7Lu+eKJqQSMi8OuunmNVGB7mUdAYcFXucHgvcsZAUGqMtT1nKQ0exHOwsf47/2VbsgAtT9fX0/whrQfvZUTfmpUd42ybrzmm+KnActgz32zMXs57yL2MwdghEAc4HpXISHzGeyOX0EF5EZAMwz56UjIVsUQBszU0eVdg408gN6lbMqxz3gHRlx4ztgjlDCLxmct6wHra6+BmsdkVU4HWuPgl9745t2EQAnuEyxRThfJ3BRCzA4IVgsX4RW2xFIcl7mVlqZeWYEl401eDj1lxt21nbIbuJeOCk= + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: default-credentials + namespace: dragonfly + type: Opaque diff --git a/kubernetes/manifests/dragonfly/grafana-dashboard.configmap.yaml b/kubernetes/manifests/dragonfly/grafana-dashboard.configmap.yaml new file mode 100644 index 0000000..b2db299 --- /dev/null +++ b/kubernetes/manifests/dragonfly/grafana-dashboard.configmap.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: dragonfly-grafana-dashboard + namespace: prometheus + labels: + grafana_dashboard: "1" + +data: + dragonfly-main-cluster.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":"","editable":true,"fiscalYearStartMonth":0,"gnetId":11692,"graphTooltip":0,"links":[],"liveNow":false,"panels":[{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":17,"panels":[],"title":"Basic metrics","type":"row"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"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","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":7,"w":4,"x":0,"y":1},"id":9,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.3.6","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"max(max_over_time(dragonfly_uptime_in_seconds{instance=~\"$instance\"}[$__interval]))","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"","metric":"","refId":"A","step":1800}],"title":"Uptime","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"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","value":null},{"color":"red","value":80}]},"unit":"none"},"overrides":[]},"gridPos":{"h":7,"w":2,"x":4,"y":1},"hideTimeOverride":true,"id":12,"links":[],"maxDataPoints":100,"options":{"colorMode":"none","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"textMode":"auto"},"pluginVersion":"9.3.6","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"dragonfly_connected_clients{instance=~\"$instance\"}","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"","metric":"","refId":"A","step":2}],"timeFrom":"1m","title":"Clients","type":"stat"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":0,"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":null},{"color":"rgba(237, 129, 40, 0.89)","value":80},{"color":"rgba(245, 54, 54, 0.9)","value":95}]},"unit":"percent"},"overrides":[]},"gridPos":{"h":7,"w":6,"x":6,"y":1},"hideTimeOverride":true,"id":11,"links":[],"maxDataPoints":100,"options":{"minVizHeight":75,"minVizWidth":75,"orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"9.3.6","targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"100 * (dragonfly_memory_used_bytes{instance=~\"$instance\"} / dragonfly_memory_max_bytes{instance=~\"$instance\"} )","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"","metric":"","refId":"A","step":2}],"timeFrom":"1m","title":"Memory Usage","type":"gauge"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editable":true,"error":false,"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"grid":{},"gridPos":{"h":7,"w":12,"x":12,"y":1},"hiddenSeries":false,"id":2,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":false,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"connected","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(dragonfly_commands_processed_total{instance=~\"$instance\"}[1m])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"","metric":"A","refId":"A","step":240,"target":""}],"thresholds":[],"timeRegions":[],"title":"Commands Executed / sec","tooltip":{"msResolution":false,"shared":true,"sort":0,"value_type":"cumulative"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"short","logBase":1,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{"max":"#BF1B00"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editable":true,"error":false,"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"grid":{},"gridPos":{"h":7,"w":12,"x":0,"y":8},"hiddenSeries":false,"id":7,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null as zero","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"dragonfly_memory_used_bytes{instance=~\"$instance\"} ","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"used","metric":"","refId":"A","step":240,"target":""},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"dragonfly_memory_max_bytes{instance=~\"$instance\"} ","format":"time_series","hide":false,"interval":"","intervalFactor":2,"legendFormat":"max","refId":"B","step":240}],"thresholds":[],"timeRegions":[],"title":"Total Memory Usage","tooltip":{"msResolution":false,"shared":true,"sort":0,"value_type":"cumulative"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"bytes","logBase":1,"min":0,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editable":true,"error":false,"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"grid":{},"gridPos":{"h":7,"w":12,"x":12,"y":8},"hiddenSeries":false,"id":10,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"connected","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(dragonfly_net_input_bytes_total{instance=~\"$instance\"}[5m])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"{{ input }}","refId":"A","step":240},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"rate(dragonfly_net_output_bytes_total{instance=~\"$instance\"}[5m])","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"{{ output }}","refId":"B","step":240}],"thresholds":[],"timeRegions":[],"title":"Network I/O","tooltip":{"msResolution":true,"shared":true,"sort":0,"value_type":"cumulative"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"bytes","logBase":1,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editable":true,"error":false,"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":7,"fillGradient":0,"grid":{},"gridPos":{"h":7,"w":12,"x":0,"y":15},"hiddenSeries":false,"id":5,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"connected","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum (dragonfly_db_keys{instance=~\"$instance\"}) by (db)","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"{{ db }} ","refId":"A","step":240,"target":""}],"thresholds":[],"timeRegions":[],"title":"Total Items per DB","tooltip":{"msResolution":false,"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"none","logBase":1,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editable":true,"error":false,"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":7,"fillGradient":0,"grid":{},"gridPos":{"h":7,"w":12,"x":12,"y":15},"hiddenSeries":false,"id":13,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"connected","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum (dragonfly_db_keys{instance=~\"$instance\"}) - sum (dragonfly_db_keys_expiring{instance=~\"$instance\"}) ","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"not expiring","refId":"A","step":240,"target":""},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum (dragonfly_db_keys_expiring{instance=~\"$instance\"})","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"expiring","metric":"","refId":"B","step":240}],"thresholds":[],"timeRegions":[],"title":"Expiring vs Not-Expiring Keys","tooltip":{"msResolution":false,"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"short","logBase":1,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{"evicts":"#890F02","memcached_items_evicted_total{instance=\"172.17.0.1:9150\",job=\"prometheus\"}":"#890F02","reclaims":"#3F6833"},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"editable":true,"error":false,"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"grid":{},"gridPos":{"h":7,"w":12,"x":0,"y":22},"hiddenSeries":false,"id":8,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":2,"links":[],"nullPointMode":"connected","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"reclaims","yaxis":2}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(dragonfly_expired_keys_total{instance=~\"$instance\"}[5m])) by (instance)","format":"time_series","hide":false,"interval":"","intervalFactor":2,"legendFormat":"expired","metric":"","refId":"A","step":240,"target":""},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"sum(rate(dragonfly_evicted_keys_total{instance=~\"$instance\"}[5m])) by (instance)","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"evicted","refId":"B","step":240}],"thresholds":[],"timeRegions":[],"title":"Expired / Evicted","tooltip":{"msResolution":false,"shared":true,"sort":0,"value_type":"cumulative"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"short","logBase":1,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":22},"hiddenSeries":false,"id":16,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"9.3.6","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"exemplar":true,"expr":"dragonfly_connected_clients{instance=\"$instance\"}","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":[],"timeRegions":[],"title":"Dragonfly connected clients","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"mode":"time","show":true,"values":[]},"yaxes":[{"format":"short","logBase":1,"show":true},{"format":"short","logBase":1,"show":true}],"yaxis":{"align":false}},{"collapsed":false,"gridPos":{"h":1,"w":24,"x":0,"y":29},"id":19,"panels":[],"title":"Advanced metrics","type":"row"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":0,"y":30},"id":18,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"PBFA97CFB590B2093"},"disableTextWrap":false,"editorMode":"code","expr":"rate(dragonfly_fiber_switch_delay_seconds_total[$__rate_interval])/rate(dragonfly_fiber_switch_total[$__rate_interval])","fullMetaSearch":false,"includeNullMetadata":false,"instant":false,"legendFormat":"__auto","range":true,"refId":"A","useBackend":false}],"title":"FiberSwitchDelay","transformations":[],"type":"timeseries"},{"datasource":{"type":"prometheus","uid":"${DS_PROMETHEUS}"},"fieldConfig":{"defaults":{"color":{"mode":"palette-classic"},"custom":{"axisCenteredZero":false,"axisColorMode":"text","axisLabel":"","axisPlacement":"auto","barAlignment":0,"drawStyle":"line","fillOpacity":0,"gradientMode":"none","hideFrom":{"legend":false,"tooltip":false,"viz":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","value":null},{"color":"red","value":80}]},"unit":"s"},"overrides":[]},"gridPos":{"h":8,"w":12,"x":12,"y":30},"id":20,"options":{"legend":{"calcs":[],"displayMode":"list","placement":"bottom","showLegend":true},"tooltip":{"mode":"single","sort":"none"}},"targets":[{"datasource":{"type":"prometheus","uid":"PBFA97CFB590B2093"},"disableTextWrap":false,"editorMode":"code","expr":"rate(dragonfly_fiber_longrun_seconds_total[$__rate_interval])/rate(dragonfly_fiber_longrun_total[$__rate_interval])","fullMetaSearch":false,"includeNullMetadata":false,"instant":false,"legendFormat":"__auto","range":true,"refId":"A","useBackend":false}],"title":"FiberSwitchDelay","transformations":[],"type":"timeseries"}],"refresh":"","schemaVersion":37,"style":"dark","tags":["prometheus","dragonfly"],"templating":{"list":[{"current":{"selected":false,"text":"Prometheus","value":"Prometheus"},"hide":0,"includeAll":false,"label":"Prometheus","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"current":{},"datasource":{"uid":"$DS_PROMETHEUS"},"definition":"label_values(dragonfly_version, namespace)","hide":0,"includeAll":false,"label":"Namespace","multi":false,"name":"namespace","options":[],"query":{"query":"label_values(dragonfly_version, namespace)","refId":"StandardVariableQuery"},"refresh":2,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":{"uid":"$DS_PROMETHEUS"},"definition":"label_values(dragonfly_version{namespace=\"$namespace\"}, pod)","hide":0,"includeAll":false,"label":"Pod Name","multi":false,"name":"pod_name","options":[],"query":{"query":"label_values(dragonfly_version{namespace=\"$namespace\"}, pod)","refId":"StandardVariableQuery"},"refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":{"uid":"$DS_PROMETHEUS"},"definition":"label_values(dragonfly_version{namespace=\"$namespace\", pod=\"$pod_name\"}, instance)","hide":0,"includeAll":false,"multi":false,"name":"instance","options":[],"query":{"query":"label_values(dragonfly_version{namespace=\"$namespace\", pod=\"$pod_name\"}, instance)","refId":"StandardVariableQuery"},"refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-15m","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"Dragonfly Dashboard","uid":"xDLNRKUWz","version":1,"weekStart":""} \ No newline at end of file diff --git a/kubernetes/manifests/dragonfly/kustomization.yaml b/kubernetes/manifests/dragonfly/kustomization.yaml new file mode 100644 index 0000000..7a96ec2 --- /dev/null +++ b/kubernetes/manifests/dragonfly/kustomization.yaml @@ -0,0 +1,7 @@ +resources: + - https://raw.githubusercontent.com/dragonflydb/dragonfly-operator/main/manifests/dragonfly-operator.yaml + - namespace.yaml + - cluster.yaml + - default-credentials.sealed-secret.yaml + - pod-monitor.yaml + - grafana-dashboard.configmap.yaml diff --git a/kubernetes/workspaces/production/kube-prometheus-stack/namespace.yaml b/kubernetes/manifests/dragonfly/namespace.yaml similarity index 69% rename from kubernetes/workspaces/production/kube-prometheus-stack/namespace.yaml rename to kubernetes/manifests/dragonfly/namespace.yaml index 11563cd..5763fa0 100644 --- a/kubernetes/workspaces/production/kube-prometheus-stack/namespace.yaml +++ b/kubernetes/manifests/dragonfly/namespace.yaml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: prometheus \ No newline at end of file + name: dragonfly \ No newline at end of file diff --git a/kubernetes/manifests/dragonfly/pod-monitor.yaml b/kubernetes/manifests/dragonfly/pod-monitor.yaml new file mode 100644 index 0000000..1b1a6f6 --- /dev/null +++ b/kubernetes/manifests/dragonfly/pod-monitor.yaml @@ -0,0 +1,17 @@ +apiVersion: monitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: dragonfly-cluster-metrics + namespace: prometheus + +spec: + namespaceSelector: + matchNames: + - dragonfly + selector: + matchLabels: + app: main + podTargetLabels: + - app + podMetricsEndpoints: + - port: admin \ No newline at end of file diff --git a/kubernetes/manifests/elasticsearch.application.yaml b/kubernetes/manifests/elasticsearch.application.yaml new file mode 100644 index 0000000..4cadd0c --- /dev/null +++ b/kubernetes/manifests/elasticsearch.application.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application + +metadata: + name: elasticsearch + namespace: argocd + +spec: + project: default + + destination: + server: https://kubernetes.default.svc + namespace: elasticsearch + + source: + repoURL: https://github.com/Archisman-Mridha/instagram-clone + targetRevision: HEAD + path: kubernetes/manifests/elasticsearch + + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/kubernetes/manifests/elasticsearch/admin-credentials.sealed-secret.yaml b/kubernetes/manifests/elasticsearch/admin-credentials.sealed-secret.yaml new file mode 100644 index 0000000..0c71490 --- /dev/null +++ b/kubernetes/manifests/elasticsearch/admin-credentials.sealed-secret.yaml @@ -0,0 +1,20 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: main-es-elastic-user + namespace: elasticsearch +spec: + encryptedData: + elastic: AgCQ1yRg3vhnfw3KhBYhL6ObBRqzGafUqgjH89CKgHZoR/rBU3G8gFYXz21kDzmbUUVrugz/k7NNC1hFz0WEEiQpKM5p2ZA/iwlvfXHD/vV0kxm/77jaqQxOjRKOacrTbFw1CL07SnF6ihVILI0qU69JZlOUdR4bR1MiPUpQwGjlMjzSC/GjYm3ivTM5BnIVZepV7XlF50JtmolM36wsOwaf9/pz6jilHeiA4mWRG00+a1axXQjic/Ja3q/emZ7k1SfWBPcGv8aufACx+LLr/pMfzKgtcw+dsEeg6z2FAINpa9CP3kHrJnrRpEKMgF7LxhF7DRq0X4Ak1yQ8ehdXPRIaqeQ7DoyqDDGmGT1ub8jOc35zwgO6S02ivdzYphdiwlIpl81qfMjM9A++giyTSEDctzRd2Up5pCltRLRm556/l9CKJrUUsFfY7u2ElirTRJWVMODdNeOhr0gqr4b3Y11g3G5s8E+jTYPT5uvZfHPbFxHj4Or7JP7KGJu2p7ukq/Y4o4WONByREjY5AbUrumWm5xMVC04M47KWnJouHfs5lNRXVdu5uuBE9lpG7Kl1/zbIZmqh+Cd43CagOYeZE/OMCq4n6xMiRs3YFERPha87W6a2uj6vUntMWz/7UA3Y3MpMcsd0avMaaoN2PM5qUvf0NOztwBYAUeLfbuvba7RwKLFXsw8WTuxt/mJqTMv8cx1tQUbH + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: main-es-elastic-user + namespace: elasticsearch + type: Opaque diff --git a/kubernetes/manifests/elasticsearch/elasticsearch-master.service.yaml b/kubernetes/manifests/elasticsearch/elasticsearch-master.service.yaml new file mode 100644 index 0000000..2b66a1e --- /dev/null +++ b/kubernetes/manifests/elasticsearch/elasticsearch-master.service.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Service +metadata: + name: elasticsearch-master + namespace: elasticsearch + labels: + common.k8s.elastic.co/type: elasticsearch + elasticsearch.k8s.elastic.co/cluster-name: main + elasticsearch.k8s.elastic.co/statefulset-name: main-es-default + +spec: + type: ClusterIP + + selector: + common.k8s.elastic.co/type: elasticsearch + elasticsearch.k8s.elastic.co/cluster-name: main + elasticsearch.k8s.elastic.co/statefulset-name: main-es-default + + ports: + - name: http + port: 9200 + protocol: TCP + targetPort: 9200 diff --git a/kubernetes/manifests/elasticsearch/elasticsearch.yaml b/kubernetes/manifests/elasticsearch/elasticsearch.yaml new file mode 100644 index 0000000..a50fd3d --- /dev/null +++ b/kubernetes/manifests/elasticsearch/elasticsearch.yaml @@ -0,0 +1,44 @@ +apiVersion: elasticsearch.k8s.elastic.co/v1 +kind: Elasticsearch +metadata: + name: main + namespace: elasticsearch + annotations: + eck.k8s.elastic.co/license: basic + +spec: + version: 8.12.1 + + nodeSets: + - name: default + count: 1 + config: + node.store.allow_mmap: false + + podTemplate: + spec: + containers: + - name: elasticsearch + resources: + requests: + cpu: 1000m + memory: 1000Mi + limits: + cpu: 1000m + memory: 1000Mi + + volumeClaimTemplates: + - metadata: + name: elasticsearch-data + spec: + resources: + requests: + storage: 1Gi + storageClassName: upcloud-block-storage-hdd + accessModes: + - ReadWriteOnce + + http: + tls: + selfSignedCertificate: + disabled: true diff --git a/kubernetes/manifests/elasticsearch/kibana.yaml b/kubernetes/manifests/elasticsearch/kibana.yaml new file mode 100644 index 0000000..8d363b7 --- /dev/null +++ b/kubernetes/manifests/elasticsearch/kibana.yaml @@ -0,0 +1,19 @@ +apiVersion: kibana.k8s.elastic.co/v1 +kind: Kibana +metadata: + name: main + namespace: elasticsearch + +spec: + version: 8.11.1 + count: 1 + elasticsearchRef: + name: main + podTemplate: + spec: + containers: + - name: kibana + resources: + limits: + memory: 1Gi + cpu: 1 \ No newline at end of file diff --git a/kubernetes/manifests/elasticsearch/kustomization.yaml b/kubernetes/manifests/elasticsearch/kustomization.yaml new file mode 100644 index 0000000..dacc0eb --- /dev/null +++ b/kubernetes/manifests/elasticsearch/kustomization.yaml @@ -0,0 +1,8 @@ +resources: + - https://download.elastic.co/downloads/eck/2.11.1/crds.yaml + - https://download.elastic.co/downloads/eck/2.11.1/operator.yaml + - namespace.yaml + - admin-credentials.sealed-secret.yaml + - elasticsearch.yaml + - elasticsearch-master.service.yaml + - kibana.yaml diff --git a/kubernetes/manifests/elasticsearch/namespace.yaml b/kubernetes/manifests/elasticsearch/namespace.yaml new file mode 100644 index 0000000..05cb3ce --- /dev/null +++ b/kubernetes/manifests/elasticsearch/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: elasticsearch \ No newline at end of file diff --git a/kubernetes/workspaces/production/external-dns.yaml b/kubernetes/manifests/external-dns.application.yaml similarity index 84% rename from kubernetes/workspaces/production/external-dns.yaml rename to kubernetes/manifests/external-dns.application.yaml index ca5ddc5..77f0562 100644 --- a/kubernetes/workspaces/production/external-dns.yaml +++ b/kubernetes/manifests/external-dns.application.yaml @@ -15,11 +15,11 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/workspaces/production/external-dns + path: kubernetes/manifests/external-dns plugin: name: kustomize-enable-helm syncPolicy: automated: prune: true - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/kubernetes/workspaces/production/external-dns/cloudflare-dns-api-key.sealed-secret.yaml b/kubernetes/manifests/external-dns/cloudflare-dns-api-key.sealed-secret.yaml similarity index 100% rename from kubernetes/workspaces/production/external-dns/cloudflare-dns-api-key.sealed-secret.yaml rename to kubernetes/manifests/external-dns/cloudflare-dns-api-key.sealed-secret.yaml diff --git a/kubernetes/workspaces/production/external-dns/kustomization.yaml b/kubernetes/manifests/external-dns/kustomization.yaml similarity index 100% rename from kubernetes/workspaces/production/external-dns/kustomization.yaml rename to kubernetes/manifests/external-dns/kustomization.yaml diff --git a/kubernetes/workspaces/production/external-dns/namespace.yaml b/kubernetes/manifests/external-dns/namespace.yaml similarity index 100% rename from kubernetes/workspaces/production/external-dns/namespace.yaml rename to kubernetes/manifests/external-dns/namespace.yaml diff --git a/kubernetes/workspaces/production/falco.yaml b/kubernetes/manifests/falco.application.yaml similarity index 85% rename from kubernetes/workspaces/production/falco.yaml rename to kubernetes/manifests/falco.application.yaml index 3dd7342..f6add7a 100644 --- a/kubernetes/workspaces/production/falco.yaml +++ b/kubernetes/manifests/falco.application.yaml @@ -15,11 +15,11 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/workspaces/production/falco + path: kubernetes/manifests/falco plugin: name: kustomize-enable-helm syncPolicy: automated: prune: true - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/kubernetes/workspaces/production/falco/falcosidekick-config.sealed-secret.yaml b/kubernetes/manifests/falco/falcosidekick-config.sealed-secret.yaml similarity index 100% rename from kubernetes/workspaces/production/falco/falcosidekick-config.sealed-secret.yaml rename to kubernetes/manifests/falco/falcosidekick-config.sealed-secret.yaml diff --git a/kubernetes/workspaces/production/falco/kustomization.yaml b/kubernetes/manifests/falco/kustomization.yaml similarity index 100% rename from kubernetes/workspaces/production/falco/kustomization.yaml rename to kubernetes/manifests/falco/kustomization.yaml diff --git a/kubernetes/workspaces/production/falco/namespace.yaml b/kubernetes/manifests/falco/namespace.yaml similarity index 100% rename from kubernetes/workspaces/production/falco/namespace.yaml rename to kubernetes/manifests/falco/namespace.yaml diff --git a/kubernetes/workspaces/production/istio.yaml b/kubernetes/manifests/istio.application.yaml similarity index 85% rename from kubernetes/workspaces/production/istio.yaml rename to kubernetes/manifests/istio.application.yaml index 0a52b74..d4a38a2 100644 --- a/kubernetes/workspaces/production/istio.yaml +++ b/kubernetes/manifests/istio.application.yaml @@ -15,11 +15,11 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/workspaces/production/istio + path: kubernetes/manifests/istio plugin: name: kustomize-enable-helm syncPolicy: automated: prune: true - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/kubernetes/workspaces/production/istio/kustomization.yaml b/kubernetes/manifests/istio/kustomization.yaml similarity index 100% rename from kubernetes/workspaces/production/istio/kustomization.yaml rename to kubernetes/manifests/istio/kustomization.yaml diff --git a/kubernetes/workspaces/dev/istio/namespace.yaml b/kubernetes/manifests/istio/namespace.yaml similarity index 100% rename from kubernetes/workspaces/dev/istio/namespace.yaml rename to kubernetes/manifests/istio/namespace.yaml diff --git a/kubernetes/workspaces/production/jaeger.yaml b/kubernetes/manifests/jaeger.application.yaml similarity index 58% rename from kubernetes/workspaces/production/jaeger.yaml rename to kubernetes/manifests/jaeger.application.yaml index b5019aa..185e90f 100644 --- a/kubernetes/workspaces/production/jaeger.yaml +++ b/kubernetes/manifests/jaeger.application.yaml @@ -19,19 +19,40 @@ spec: helm: releaseName: jaeger valuesObject: - ## Jaeger provisions a Cassandra datastore to store distributed traces. cassandra: persistence: - enabled: true - size: 1Gi + enabled: false + # storageClass: upcloud-block-storage-hdd + # size: 1Gi config: cluster_size: 1 + exporter: + enabled: true + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 200m + memory: 256Mi + agent: enabled: false collector: + # autoscaling: + # enabled: true + # minReplicas: 1 + # maxReplicas: 2 + resources: + requests: + cpu: 200m + memory: 256Mi + limits: + cpu: 200m + memory: 256Mi service: otlp: grpc: @@ -46,4 +67,4 @@ spec: prune: true selfHeal: true syncOptions: - - CreateNamespace=true \ No newline at end of file + - CreateNamespace=true diff --git a/kubernetes/workspaces/dev/kube-prometheus-stack.yaml b/kubernetes/manifests/kube-prometheus-stack.application.yaml similarity index 89% rename from kubernetes/workspaces/dev/kube-prometheus-stack.yaml rename to kubernetes/manifests/kube-prometheus-stack.application.yaml index a8930da..2e966d4 100644 --- a/kubernetes/workspaces/dev/kube-prometheus-stack.yaml +++ b/kubernetes/manifests/kube-prometheus-stack.application.yaml @@ -15,7 +15,7 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone targetRevision: HEAD - path: kubernetes/workspaces/dev/kube-prometheus-stack + path: kubernetes/manifests/kube-prometheus-stack plugin: name: kustomize-enable-helm diff --git a/kubernetes/base/autometrics.yaml b/kubernetes/manifests/kube-prometheus-stack/autometrics.yaml similarity index 99% rename from kubernetes/base/autometrics.yaml rename to kubernetes/manifests/kube-prometheus-stack/autometrics.yaml index aa90e9f..7d91461 100644 --- a/kubernetes/base/autometrics.yaml +++ b/kubernetes/manifests/kube-prometheus-stack/autometrics.yaml @@ -27,4 +27,4 @@ spec: - containerPort: 6789 env: - name: PROMETHEUS_URL - value: http://kube-prometheus-stack-prometheus:9090 \ No newline at end of file + value: http://kube-prometheus-stack-prometheus:9090 diff --git a/kubernetes/workspaces/dev/kube-prometheus-stack/kustomization.yaml b/kubernetes/manifests/kube-prometheus-stack/kustomization.yaml similarity index 86% rename from kubernetes/workspaces/dev/kube-prometheus-stack/kustomization.yaml rename to kubernetes/manifests/kube-prometheus-stack/kustomization.yaml index f5988d3..4a0edb6 100644 --- a/kubernetes/workspaces/dev/kube-prometheus-stack/kustomization.yaml +++ b/kubernetes/manifests/kube-prometheus-stack/kustomization.yaml @@ -1,5 +1,6 @@ resources: - - ./namespace.yaml + - namespace.yaml + - autometrics.yaml helmCharts: - repo: https://prometheus-community.github.io/helm-charts @@ -19,23 +20,37 @@ helmCharts: prometheus: prometheusSpec: + ## Namespaces to be selected for PodMonitor discovery. + ## If nil, select own namespace. + podMonitorNamespaceSelector: + matchLabels: + pod-monitor-scanning: enable + + ## PodMonitors to be selected for target discovery. + ## If {}, select all PodMonitors. + podMonitorSelector: {} + ## If true, a nil or {} value for prometheus.prometheusSpec.podMonitorSelector will cause ## the prometheus resource to be created with selectors based on values in the helm ## deployment, which will also match the podmonitors created. podMonitorSelectorNilUsesHelmValues: false + ## Namespaces to be selected for ServiceMonitor discovery. + serviceMonitorNamespaceSelector: {} + ## If true, a nil or {} value for prometheus.prometheusSpec.serviceMonitorSelector will ## cause the prometheus resource to be created with selectors based on values in the helm ## deployment, which will also match the servicemonitors created. serviceMonitorSelectorNilUsesHelmValues: false - storageSpec: - volumeClaimTemplate: - spec: - resources: - requests: - storage: 100Mi - accessModes: [ReadWriteOnce] + # storageSpec: + # volumeClaimTemplate: + # spec: + # storageClassName: upcloud-block-storage-hdd + # resources: + # requests: + # storage: 1Gi + # accessModes: [ReadWriteOnce] scrapeConfig: matchLabels: @@ -101,6 +116,7 @@ helmCharts: volumeMounts: - mountPath: /etc/prom-certs/ name: istio-certs + annotations: ## Teling Istio not to intercept any inbound ports. traffic.sidecar.istio.io/includeInboundPorts: "" diff --git a/kubernetes/manifests/kube-prometheus-stack/namespace.yaml b/kubernetes/manifests/kube-prometheus-stack/namespace.yaml new file mode 100644 index 0000000..cbff71a --- /dev/null +++ b/kubernetes/manifests/kube-prometheus-stack/namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: prometheus + labels: + pod-monitor-scanning: enable diff --git a/kubernetes/workspaces/production/kubescape.yaml b/kubernetes/manifests/kubescape.application.yaml similarity index 91% rename from kubernetes/workspaces/production/kubescape.yaml rename to kubernetes/manifests/kubescape.application.yaml index 6f768fa..34fe67e 100644 --- a/kubernetes/workspaces/production/kubescape.yaml +++ b/kubernetes/manifests/kubescape.application.yaml @@ -19,13 +19,13 @@ spec: helm: releaseName: kubescape-operator valuesObject: - clusterName: instagram-clone server: api.armosec.io account: 16af738b-23c4-43ec-8ae4-5ca9324173a persistence: + storageClass: upcloud-block-storage-hdd size: backingStorage: 1Gi kubevuln: 1Gi @@ -36,9 +36,8 @@ spec: selfHeal: true --- - apiVersion: v1 kind: Namespace metadata: - name: kubescape \ No newline at end of file + name: kubescape diff --git a/kubernetes/manifests/kustomization.yaml b/kubernetes/manifests/kustomization.yaml new file mode 100644 index 0000000..de88de5 --- /dev/null +++ b/kubernetes/manifests/kustomization.yaml @@ -0,0 +1,17 @@ +resources: + - application-controller.application.yaml + - binami-sealed-secrets.application.yaml + - cloudnative-pg.application.yaml + - cert-manager.application.yaml + - debezium.application.yaml + - dragonfly.application.yaml + - elasticsearch.application.yaml + # - external-dns.application.yaml + # - falco.application.yaml + # - istio.application.yaml + - jaeger.application.yaml + - kube-prometheus-stack.application.yaml + - kubescape.application.yaml + - microservices.application.yaml + # - opa-gatekeeper + - strimzi.application.yaml diff --git a/kubernetes/workspaces/production/metrics-server.yaml b/kubernetes/manifests/metrics-server.application.yaml similarity index 100% rename from kubernetes/workspaces/production/metrics-server.yaml rename to kubernetes/manifests/metrics-server.application.yaml diff --git a/kubernetes/manifests/microservices.application.yaml b/kubernetes/manifests/microservices.application.yaml new file mode 100644 index 0000000..7d0dd20 --- /dev/null +++ b/kubernetes/manifests/microservices.application.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application + +metadata: + name: microservices + namespace: argocd + +spec: + project: default + + destination: + server: https://kubernetes.default.svc + namespace: microservices + + source: + repoURL: https://github.com/Archisman-Mridha/instagram-clone + targetRevision: HEAD + path: kubernetes/manifests/microservices + + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/kubernetes/base/microservices/feeds-microservice.application.yaml b/kubernetes/manifests/microservices/feeds/application.yaml similarity index 93% rename from kubernetes/base/microservices/feeds-microservice.application.yaml rename to kubernetes/manifests/microservices/feeds/application.yaml index 3fd7a52..ba9b815 100644 --- a/kubernetes/base/microservices/feeds-microservice.application.yaml +++ b/kubernetes/manifests/microservices/feeds/application.yaml @@ -7,10 +7,10 @@ metadata: spec: image: ghcr.io/archisman-mridha/instagram-clone-feeds-microservice:07db74b3dd4888026a2e852c6fca860157aa910a replicas: - min: 2 + min: 1 max: 3 resources: cpu: 100m memory: 100Mi secretName: feeds-microservice - port: 4000 \ No newline at end of file + port: 4000 diff --git a/kubernetes/manifests/microservices/feeds/sealed-secret.yaml b/kubernetes/manifests/microservices/feeds/sealed-secret.yaml new file mode 100644 index 0000000..3dd3e7f --- /dev/null +++ b/kubernetes/manifests/microservices/feeds/sealed-secret.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: feeds-microservice + namespace: microservices +spec: + encryptedData: + GRPC_SERVER_PORT: AgDOqylAiCfGz/YchhuXvhgpNZe1IyvIpAhgIE7Z8qpaJ98CxWoNt/Bac7KG+lA4anvXHLJqecnoUabltpbn/815h5VfC8fADHq+o8vb58DjpTuz4gY3VqDvlTnf1uflMfHjagHJ2AJMZ402O9xYRdTzsRGK0dI4KbgU34AQtXFQ/04uhxJ7XtdWM17Z1p7JJtXylQwUmszRMM8Ua6mDWYgGwHLbnfKjZ7xRd7AXYNeOtQhK2FQTvDa8AAMBdxwkT9YDDfSAL4giHaFlkA2MT73/Jhtvn/pLurKDePTix4j+dHJ0gdrMFu0gL4wWDvvYjBjxfL6NVJ+ExxA+b3atZuNdh3rfIDtJ5zldipXQRQAL8d3AnfrsMsXy3xwG2P9aSMdvTnZoKkeCPthIk1bCyfKcp/QjeFkl4mj4W2qpcEmyLg1WrnFS3ovFyn5eXaaNDWJzmOW3LFyr6jaCFGa6CEdNCsTP3J1wrD11mNmKL97W71OBMZmkfu/RxTXJcF9UawMDR/kLg7o5fzcTG9XgxsiijCYCqC9QC3LRkFOZF/AHIUXNkNmhdibsXwOXkkBD5uR5hDWeELzliAehkwtahhc7dR7NOt/MuMPjr+xobcNxwh86ljW8XwDSGTCUMm0YWlZTIhOAyH1BZ8UK2MIXRKphSvEkcC6wPk5gbRxopWNHiuCXqPoerdKecG4T3dSpgLvnYblP + JAEGER_COLLECTOR_URL: AgA7sBJDC8Fz4lDD8Zr0EL+FuA2AM/IU+3Xs3p4+mfafvGQ+Rkdn3TZaHwQtiH+nsFwOUJX3cfU0w9ykWlofrwZgPqEBoLZL9DZOmlz/Vmrq/LwznRjBQ5RwyntDGWPIZySAz55gov1Kbef5NpD2O6SG1V94nAwE+xjaOf9+NAnh4rX/EF8OJzRgIiofYklab+ObLSa9mK4O6CMsH/p38xifgBIo3IegWSElYi3QzIRFHBoctxN+e33X7PocPnm34i9t7DI2/wuWnT1a2zGajkXcTtxT40+WSjQyp5vwOoovRwRNxmOlGKFtKAFZlW8uM+PEIQfII8H8KR6/UDRTpOQvu4pygGfHtNLdRu6/PTGyM45wFZg4Xen+qRupS/XBYNBURHiFkUmbm6x6TiGLH1gZNv2IBXgZ8RCTChG3KpR0AFM9RUVxvzpGbgFlyUPHzJSVbHBQay+mbE+GEsrecALHrwpTAAFdVxViZIn+MophGKxqcX7G2fKs/GXJsDE2OIP8mw59Kkb4H3/FDJxsXL0eycdS5G84FI/0EdehNHoOc4xssZQvrXQFGy9zxPcMJO/Mxa+eaQdZ6Kkb4CL9+1Wogiv0yOJCADJx15wOIayZV35oyiVf2+nD9p17iiCrp9uI923c5uX0FU2ixUJOgJMUdnFDcnBG0iXGnnal3T3IpFhk3JzR85QNY4YBg25rynxk0gIS8c6YRDQUpwsDEdRaujJaHF3rbeQJJg+0QRX3zK85JA== + KAFKA_HOSTS: AgAS0zapEYJLmpYd1wN+cK/O1+QvwQe6CUuy48xXxeqwm/iyRuCBSqkqTc+gxAEnbRHBP5lin4Obq6+T6DcIgdNGQ34NqfzRwZQV93s77dXuCsh6gvy7qwMsAF1t0gppWtQmYEmIZIJK4G6ZIxbt4S2qjBhzXK+Q9MUYz7ZOAb+IDZUP+vCp8SdLN8oCZrUGboFoVWoV0ppCoD6RAORQpGChE/LIDak9soAtS4kTMgGpnYvpMVJZ8Nh42rtdGNhnP//X4cyCHuRoAa6r92W9WPUmZlWYJQxWyHpYymwQpaHqGePDg1qGVsQVV70h7GC2tGikDk33zHonrEmtUiPtZpNQof5eOuALPgZUei24qoIrrK4lXS882d7JtbRO5YM0b6YLRnYvQ5cYwwpZl/YuV1GRirQq7lzSQwCfQG2RJpy5tq3Sr5ndcKofdaU9iByR0yV4AVhZw3wrUDzoPd0YFC7kmlzMbthR1q2S5cEAs/Sq4lSd3HU3Fm1DMP+NXiZPfZ1LIS623yBDMC+4sDjwWyHeDWav/8eFtuzZNPschd4mAOV7wUVBmdA2RVv4nDL4WH/NH9H/QpC55YZ4+6Ktsai4ZxQchMPUd8hBkVdfLHnOgchyC/rjshvhBB+VgY/G7bRS4RCwfXKPUe00FbAlfnP/4F9Ak2qk6bD1cEUcYFRludMEtzSab1N42jkmqnAwt/2+dGCD00AHQmQMeKMjo9eV57kDaN6GRaKwT2RVyUAr + METRICS_SERVER_PORT: AgDP3lc1FQua+kwxZoJ11tUB3m/4vxq0KdSSE1H6O+UXZNoWp9bJX0Ulptjy3/AoDdlZ5WlhY79qhw9XT/k53qtQRa855CCLq9a5w1VI5y3wowMzv4e2VnsmaMnVrHHnxBpd4vQbsM7NHE1r6ocSPzJ5G7hYNNqAwBYeqJZNCq4+ztyC04dA4fQgXmYrLSYPDl2oEAD1nooNBnJsOQzFPuKu3l6rC797lEKMmYNMAvJY+UuQy3S1YrkXaAM8HwWAriAw3OJz07QeFtufLMUVu+Jx/AFvfkt/ndQn0VZE+AgWQ32nWJkGX1fcd60+4myiy2xbzn8D2qWaBVt5oqrDyK8ROd8seEToK7PMpiPsmIuyOTzi2oBkZ3hjvUeR1+i0C6R6pKlfgbuYWpCAdGpdLCWpjsEHeWWNMP7I/3Wv5NF38qqXV4vzQ1/dCWt8CxmysC10ER5xPb4Hk8eakCP3rL0e9zNiv4zz8dHF+DAxK4BGqJERO0VuM6+wuUEG5Y5MTcg0FfuJdsFwBxBhIiTqZ1oGrfePdpZRtNfl4mwezT4f0QzxwqM0BSFPXh88+zyKqAFGDrkpnyHt+Tyky8JBLLUnH/CML54vD1tXGDUg5TeehcvJJyvbHs1sCDDTDLbEdospcJ+07381D7ObrgJI7FXvOm4WkDbNpSRpy4syQ9/rgOtKLJrUJL+hEpwnrd/HD6rvUe1Q + POSTGRES_CONNECTION_POOL_SIZE: AgASENjAswUJi0xQT/aeqKPrIzc3lMpdZsnJr+46u4xzc7eT9z1R8+Ks5YjfOhMajXNsPhAN6pMipRlsy/KcVxhsyp1yl/b4HhQ9BLPxJedh/dO05xTiYXqzdG+jbdF2u7HAsLKyUof76rzygqgdm+rXKthEemj4UVlQ232ESgMPDIT7QMibFbFYOQxrBX+1i/cfzp4NNq6K/4Hgf65eDCQJH2+6fhQGUrIAR/8mYqhyAZEj6Prc2JVfJWapwfVAPRXFfLdu1LsuQm+I9uSuH5c0OhL9FF+QzyjyNblknOkjJ/YHUUBLBGCeSMx/jM4JpmfmnvucIxI+/JpdTHNY6Xdyzy/KAHdckK3y6B3AcwGMpH2vzMiGoDilmR0fDc30utwr+hyH+QfFWO+ZCJ9VZhqk7QQHxr/Wgrq8zH1mFBAWgOanLE/4eoHdLFHDowTOXR06h4KDrKFLrDgXvA0sulDd5gehZ8udUdh6XUXIbmYoP9rW3rYwuCA38QwinQRWOppKvFUafzFIeRy9kn8Spe1N1vmGp2AVMxcyVlR7hZb34/pwdxV4kCDp+ypCirvq1LPdcevXHWn6sqL8QoGDea4UOs55zcknh+VeGPhDa7xKPE2IpeoC5yhC9sum+j7iduSUt2z3AyDhR2+J5WGrNBdKA/LuvFB+CDaVCxjZKDyJ65G00e64v9aOCgoojzwG16jzI/U= + POSTGRES_HOST: AgDYC06GQQLPMt+HdEhAAalDfo5zjTMmWCk+8aofszUWo4hr6Cp4vk5lC33lzTs8xAUQaXNPBlO+1nkPENYlou3Rsy4UfzT0QR6yEF1TQrD6Yi9oodphz4c4Yj6Amu185e2jaFDz/ylpSvnTmT/GHIvCLYu7OZL8hpucqaozkt4p+hF5VcnOrdo677xV16d1VpCecSD/5IY8K/NXvcdrVj5JErOtjO/LaqcyW3ZsSV4HNwxJo8KYGe9VxlrO4Y0f3iuOmt5dI8USwUCIP7BsNii+AhUfuLB22MXV5W6SVzaID4n4zeuZfSlbw9MJWqJ2QjJT5TDBx6e6QRy+yNgbKlc3AGB1BoSLrxv70YndbITVyIg4DiOEfCduEDQG0YDFbN76dvJx0itAX1Z2ubtZHqqJVqSJa5k5B8JrzgRxRIHa05nbBaKycsiN/h0OV03OauiwUw+yAaNtBp6kFwM1pDOmwJGTAjpFIDc2rnIBiNNPruCHnggfsY8CxmFTlq9GvTAQ+SV4daWfo5a3pwcTHT1tJMf6tmihTKfkw9e4TY0tp6FKcPdcRYmeIRJ8/k39KakeplIbCXIwoyY8y8dZIfwSloppVimz4MQZ1j1LYmWxFCut2OUU9IA2/c+UtYABC4xPa6AHLO5lZC0aOkdZYsufGM7SRUUjqgCdBxXxlur8XSuB1+vZEAZM3Y3q+t/2fzQiS8Gy/np6HOBWm18FT1f1P+Gfw/R2 + POSTGRES_PASSWORD: AgCc/PVoOpDc28BAlhI+DLjxVaD1c79YF/25StIzLa3ZTglUjPs/dWDKCmoOjDVs9dD9qF5iaBFJf641S8b/EXZIhKMA3Byd+P3TOR3SRy1mnEQzM3dmiMA1Xu5ANsY62Rhu1P964F7mHxcW3hNiZdF+y8u8mTRBZlR9B6FPc8e7GLztG8Jaz+XfawRwvG0M19wc1c7Nr9IBgm7WlLKQD3LzqYUhn9YPowsw3rflhwPyKV7pWByAUm5eTckYpOw8CKw1MO7EaqGN2FXPu/+S8SjOQbZGXVXqyNJTae8mZZUSie7udZ6bC6L29FLUBtoghUrIE70X/yaBkJ8yBygKteFjs22queSEQfHB1/Zj+v+orEZs9442T9ivoSJFb3cR/TRsF+bXoX71IR/5U5LNEVDug6scLbM3wqtvpKlA+wBImDutoKOiybSRxc6IvVlZHFteW06EChejnZuv8Ay7MSgSFbDg0DSS9HWneIamknsXzNWLhsfSd9WBjzuSAQzBwIgWx6XBvbmbi4PfWQqRqK8iI6rvbcs8WI7GhFL5vY2oRwQ7FjWbtU8t36+l+TOMy8xVX4zGY62F2qGuclIREIDLRMPVwPELjhcBpGYf0ucTai8cl+1kyjXnuEoISZh/PqUAf39rYxdoPcmKur1C8rvItvFrcOqWkm3Du685vPoHP7NGOB5Hca6GxksfQ/PJDCZjBIm8h66JVOYvHYUt7EU= + POSTGRES_PORT: AgALdHUunlXTzOck1Qrnx6UOQ6/huUYxOEsVuB3ZOH86UjHV9E78o8JWJ5vWjY/mIS8FlpfsuVoVVPeNqN1pkXWet+J6XumDYCIzWx6e/Uc92PYvs3ivoD9bk5+ls5UchTuhNm82FsO6Jpgr3YXQxgZFjPwwUelemgFtAmfqkMs/o7HIL4xcNtUGRnX4mpMgxI1+UKd/jQaefZP+d3CH4hyFadGFi/8qOwxEVUgqVQzg18PAVF1AiZi25DrecIrHN9PI8faJELifJwCtXiRSfgMU5EbXdpHBuf90nGSB5pTJ9oQcPSyFPXvagYr9BBp3d20c/JJ4twpTHjz94edhR+uKUnCEF+fPUp2v6BxsqBj+lWqWLsBV3aUMl3KnMql1FCneTZispomIGIu/U+Uo16uWySVIUlNJilnvtwDYPzhZqtJmJN/9mjvxZ7fhRBC88h3IbP7pzY5A86GK18ddBZBo6a0rOFxWQMXfPzL0xdoNq/d+f/xY3QgpIPPGMMcgZD27IyunKq0K8Stku9sSQ1IuqO77wmr7/hrYsfnaAtsi6k0UXMKgCILPwxcGXbym1gVG07m9+5EJC/hMYAe9J9toybIQ262hfLcS5cTWcE69NCtJLtZNUbfvyaSAGX5HDqID5ZREJGBvDknKF6mej3vXWUdM45cQtQRtyQeKWbyQMcLQMPD6uek1SBKHBdQoJ3az6/8a + POSTGRES_USER: AgCdMdHKQrlaez9JRQe14AnP/sbNKxScAo3fQm1UtMbIXRdOkfrJQW1p6Fg+UNcZAzIhvfcCHhFqNVGuubn4mKdVsjMpw4M6qK9K/EOL05nrqCemjh0W4/z1YkkBGFL6UoWkb3Ibmn17Z0O1GtjaF6P6eX/d/Td2yz1TGoCCSPTRt51PpnIPiiaohsoecc+cFwpMro/NrSjEHAZjRrCRy6E5yYtV3sgpZBhIqzECfBdGdMssqkM5ue/O4gBda1aL611vO3g1wUvQDbzxnpt108O/lfH8uCyDeoeNWonktKY9t6VvNjT4+ZOzKkNt4QBSkjVSah8gIVuzkVMCtGgWQxJjHgZz6OiF/y9uYyYNHYl83EISp78ey6kM4FKm+/luIdHnzrWGA4nO2YrZdYKd06Ct/bTNamyvx0nm1igWtIZB8uHMipT3UXDrHkbk2umGG9RJJtp5wHDRQIdDzeOZW0rG8BbMnwn/LC+wvluM00KFiFTNfyirPvw9KKKLvOP755c/UfZF3K/aNeoeJdRVKEy61sZ9QiHeIpC8PYqQgkNjWHXEdywgbvG3fdBIc0Wf9UQs1flAg/6+Yv0PuzQJxOk32E2ZeiHAVQyNwJ22vx4EKlVkSRMStRlDWOxJKq6l3hlQXg8DN6Ms+QbeL7CFCgXp8qSmaMhhCehPwWMcby63OBq3n+eLO/7TwXrWrQcFB5xwUcfKMw== + REDIS_URL: AgA+irnucUqUxYpvfKWsgjHDVIyJefKLvddbbBErCw9m9EPqaCT9NNz1K/atbzEIaWEtVOJOooNOn9r796se+lU5ixFCbOBci75pHGZSKu6qMol68/yt3KVdWxthMgJQFSrurckLe5M7xyetszslulE3xgBzzLZrzLZz3XUtFe3V3aPyZnL+eijAegL71vsyU/zu9Fe2hN9okiiu87/nyf2VNZFl3dp6YKPk2ORcnyHU+6qHyb/GxsKVEkTeCi7bZWlgzhAAejHXUW0jUR5sBf7qbgBLo/ZIyeKllXYUVp0cx5caunnQlhfQzt/8APzequxyFKzuhC/rhFRa3k+K/oRU/pCHq+4yzgyi6SXPE3pU6aBLElQh154hR0Je+M9IeCQxxIgc78iuuRTcjOlAh2suZZlOR3h1k3lfGy4Y8RRvuxi6r5iKfkmmw+uzkfoDzt1cHeXymLrPc2CLGP3tUptUQqzlC/ssgeVjRocmsqHhfQAfUhmWZ2TNF4RyD0Lze54423+69gSWbA7wbKjo/VuXH3D9co7mgMOr8kZXkgDY6GM+JM196pOKTvdIYv8yfnmUPlzWvezELqcgeJNyWqlIU/1+eSwVQxWgkWZTBOt61fZ9Tjp8lzMqUwxRuHo0L8cf+KBbOMY/+SP22GhLE4imJBTSBTk8/04OlY89l548bXwdur3qtilAkfJYtUnd6LrFRi7swsnEwJRz7/r4sBRwACjkgSNM5yl5zHAQBjae+Wswlz0bgTPObncMaw== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: feeds-microservice + namespace: microservices + type: Opaque diff --git a/kubernetes/base/microservices/followships-microservice.application.yaml b/kubernetes/manifests/microservices/followships/application.yaml similarity index 93% rename from kubernetes/base/microservices/followships-microservice.application.yaml rename to kubernetes/manifests/microservices/followships/application.yaml index 43c70a7..5e081af 100644 --- a/kubernetes/base/microservices/followships-microservice.application.yaml +++ b/kubernetes/manifests/microservices/followships/application.yaml @@ -7,10 +7,10 @@ metadata: spec: image: ghcr.io/archisman-mridha/instagram-clone-followships-microservice:07db74b3dd4888026a2e852c6fca860157aa910a replicas: - min: 2 + min: 1 max: 3 resources: cpu: 100m memory: 100Mi secretName: followships-microservice - port: 4000 \ No newline at end of file + port: 4000 diff --git a/kubernetes/manifests/microservices/followships/sealed-secret.yaml b/kubernetes/manifests/microservices/followships/sealed-secret.yaml new file mode 100644 index 0000000..335dc22 --- /dev/null +++ b/kubernetes/manifests/microservices/followships/sealed-secret.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: followships-microservice + namespace: microservices +spec: + encryptedData: + GRPC_SERVER_PORT: AgCiMlhgvD7xJDJTY9OsBRcuGMDjOhc9cpWLiDlhaQ33iovSTczxPrBoE8KCfDLWN/Dyg5qiMy+J5UNc58Gk7bYyiub1C0Dpy7vyz8yWHczN6nIKznjg5RIzdp/TcHqMn1FOQb9HGjfqENFx4Fivv5MPPrBej6HAyCRQrkT1tyJL0bsuMkU3vzV+rSRGzqJswEZ8KBC8b6lhbny5an1ZEvdSJP+ehIqG1hnsCo4u5DXPVeMmKJurNLOtMZeEZBsb+pllzJQYojJ/MnT6ymn3RlvssoFAEvH0trVG4hLKB0ZcYYpQQnULbBsGJkG1zZjnZ/P2rXJBqnbMDOD91kY/W0T5LU8RtXnTKbbHMdXQ7DT/cLfdGFfJbgbnceHuNFYi9pTIxfcLTlOBCarGWei1j3Pasvufrum7I1E74WOfSc0QMajfvw8VnFO60cLQXvPYiplReatigoRQ8UQx9cdJ4+QlyihtWYrKnfdnc6GvxbJVx8RY/MS2w9eX6SG1KtJHMkT8GhcVPnYONYfMpSrh9Ng8dF7k8zW8TdH7Ae0Udhfnvz2ynv5lnEhdNjcbQ9F9sjCG5dgWrJW5xxXiBBfoAoZtloRm49HcNmOFmco9rGvltZD7MVd57wW6o0NduXQK1IGZHMnObv/ae+JoCAD8q1+dWyBx/hEa+ijk4OsmQ+PrLbzeV5TkuZQjFQvxDTqRbKuyMGIf + JAEGER_COLLECTOR_URL: AgAsBkrp33M0M9l3s7tFZwh2GaniE2lO8VtHPWQHLCgt84trZu1Fe6CDnocVeo/qIOFjKH4YWxXf08FZq2qHe7sEZSnEbPxfQ4it8+r4HOyeVf/Gq0l8mqkMmhysMnCjdqKIcfj6at+N4xJ6W1TrWsXcHNU0um1FpiVXkmONBSTU/dTj4wGRTHld2MXkSVJ3x9QD5JuCgPFKVqJLe6Tp3rLuWbex/eV30ekgR+ASnXA2w7KEgj7Hj/yADbci3XdQhKHRY2kEx9nXdpeZktNiD6vZqZUwRTX8q9xsfwFJj+1S8ckNuk+H8Mv6pDNSduDwiKXcd2xeqaKdcmRTQwS3bHarzNawDKqTpPX7wHZdcfKH4aDm95+i3IxR3YKGzma79XeGwSVedcVNHSBoIRhQE//ecK2LR4OnHLS4s6UzL1BjjV6nei/KtDIOjKdjkZDdE0UhK9FJ+Z4HxEzIFj9gveXdc+DcRbUMx8Nq+A4sz72UUrp+2JINbfDBfqT90vea2Zsh/ajdGh0z2Gk8HZ9LbztxNeI7AjNGKadbHPFMHOMDMp9kz0lOFK+zu0FZ+uNKZXiD85trFy0j6BXkFLzk0uf22pIPY8Xi4QDtJLGHJQ3OiypKTQqOnqtqZDKO9br6sUjpszL22ZpBb5iUQ7KMd/oBMMN9B3mXtrgz+pZ1eTI4GXaFOl48zo3g8JYCDf+XQJaYDQ3W/HX+E3xIgX3oBJqV8auYHpNPwNC3a9AchX3f7xP+nw== + METRICS_SERVER_PORT: AgBpllKCyBcSPaC+1chf6ckSd4L9gFbhg9erSCSd9VYtje8fYzeB49euJdvVp/gy8HhJR+ISnksd/xl/FnjaILTjmiuUd6PJt30rt5yBfJd3Hky2lYO7+N7uJFzYkjxRnR6pLBCa/grdPT8bAblcmSG/ap4l/FlaxdXszc0DvUx9u9i5moOAKsm/c8AClMh+3ZNCn9/lmFyKX7nuug7fitbaL+pJwdSRbDRBCH627X9D1z8aHPfOc4r1u8y663e2TuBlOwY7uITl7Umgv6EpMQBhPVuDyn3h/FBxaU44qgRsAjn7J6Z2TG9/Tl0vZYj5W8liYpQ3Mj01Eg4DMj8t6OkySa7FqdVim5eJlnywr5d0e9JJ+xQpUKTLqyxo+8iSrohruHZlUmewhnyaQ9BXbRUWlvFl3gznUDjlzfGjLhHPLn9+9SCc0GH/5oxlrcjZy/REGBY3mGxfdLUERIWN+zTDi6X/CocPaqCnhSg6K+nNdWl6j89Xscq2CK52GZT7cdVrDn0dyFQaT4C/FOzVNXr7nAGW/V+QefBRwshpUeePcKoQiaS1EuI4jF+zuvMclij7cKJ/rMV+mkqrI6+VOZTOfATgnCW3HYhGeUMZHBD4ET+55DKL2QRP2SUcjLDte9m/HFyu5uuy/54fAYAvA5YPUTaULDeWz5z5HyuVHdIpb/ksiyXV8KmsCfKHcVkNPh3PRdpd + POSTGRES_CONNECTION_POOL_SIZE: AgBoNLu8sz00qQSW1sAwET/rP7JAKcOfAM1eM5wyeQvfvhbUtcajWLBpZ9c69CUAbAh7DWiwGT6lr94/d/9GoSJ5lzYFCZLSxHlYrxxVw1nV6qZ0SJPM6JSiESX7+RrMrkpR2023RkSFB66l4pbtLbtRZFodauAsz6o1Nx/mfzrnak5gWDIu6d9kl9frDyL3XyH6GVXapyWwHB2KEXvzupuTM9RyeF/eC4FQLnIv9BTC25FtjGvsKtgC/1BFH8OmcQwOJSbE0/AsUlzbtBU5aV1C+m3/DlzHQH0+k9A2z5mJ0lXopk2/AR6tRBDO+YNbn4GsUz/VS55M1a9HWMNgeg4+0Y93BGrnQDw3iE+NtGQAPm8vDsKf65NA/7CFB2/85kDxSogwYU4+S5yR2bMALKb27LWJ3I141Cgo/rSbc0o7JtL6EbDRE55uenH3ekSR+asHIywORYJjaTJ5Uj8EBSvU5Nh2SksEV1ft3DqKMWy5woiRYK0XqVz5gTlRVho+NnN/utLNko2UtjPs7n0bPpGyTJx8JTY70Mqyfirbs40dGHG/F3L2eyyvyWiwY0bYWR16aK9zT01hi9iZ78ouJmMDNvEKEh61rQ0J5w0xO/ei7ELEESJbNH0Yz7RJ9QEqMXXxwEwuQgbcSd8zsz1aSEU5PT6YY/ObzCfk2LTIFadI8p9Jq8YApDKsjXZKQC+wFUbMgEU= + POSTGRES_HOST: AgA4Mn51ssVK0OOefCyiiEtzxgRszL8hwUXzsc+IxgQgl81McaXWyhmBT6Mcmji6omZOh3JX0zoMSqTVdrjMe4/nusiYLKbUsZ5tuqLlOKtZ+n6I4BzRTdUsv1kz5AzRBt7c3dKNssiLoZaM3phyapaApZdLRJ3lfhqq6OttMjqQYfa6pi0vIAB7F/BgQN5gk2YUEUsBI9o9J+Wfp8SJnf+CJUH2yaUHvMzrsNzUMuvu1pQ7MAIR3daG3hCPvhqtIzxzXlBHghJlb7DqI9+6Ya3u4KpldLNTojnAGoayDjTu16shTO38zu7QEvvO7yaF9cTK3AM1gumqfwYh/hDW7pL1R+9VBFG6OJfrHbMPF8priTGIK2P0uIfPUDg7QOVY2s4WsHR8Pn03IPVdcvaGcbhECOaHiHNWPM9HztdHgogACo65KBxo/nYo5SsXITrC1s5qitzKjvl4GvObGPOmVh1c+DA8gbZdkt4JYXb1gVjbwStX2yS+w071dFandAkENe5bWs4WRBoYN2FYrKiuKiIL2tmJfMFCoav1ElL4z9qx5gljGPpbYoxCpqDlst6Sxzf5lzpvECgysm6b53wugDvAe3Yw9B2X/rVYyMOR883gNDtkiYsVySXWQzmidX5oqB1qwEfE+QD/T0VQkhTxSJhdnvapyZb6Pp/hDBYF5ND7V7oHHZOSN2Iwgl3lZks0cduvOk/Shll1rMlo0DkggQtjZh3vUcyQ + POSTGRES_PASSWORD: AgCn/Ho2S3tUf+o6uRRkmV78ucDYUwpuDy9FchsSO8QPEwX2xAiyEZITD94XNF17S5cbleXnjNNivCk0WwnA8el262dOfvBvIhmUkPpO2Kts3qdgjN54AzMFb+z2YhIjQAxAUQyR09xOrmSKHkQfmvbhvjLdF7j1Gqn4EWPcmo5Yo4pVSesv+NBVn84a7d1zhU5ZcuoY3sxaPQZrbJF5XUhoDNe9PrX9rk+RPHvCPXr8fVtp+l9nWMRGiIs4EAaZ9KFQmtYj9k86rIHolBr2MP59fUFS3sfs9kAzxfhWoeUqAMCcwHgItj+1iobQcuV/ev8m9EibsfaHuxAPbo8eLCmaGjyvG+J0YXGxLYxbk7dFLC5STdIHQ4HDwSxK3gUFbd+ci3BoxVbtNEyUL82MTvppkq57KV6XBrhIzaY7pb8ugezqCAEMKp8rQVvQhAXReg+iHkjNgtRg2omRzOdXQDWpzljddFJSz52Ot4GGltLHmQOImMIMYq4Hcz5SYJo5RepGwsKaCxkKwDDsrGpQbw1YKC/t/sdQ4rVeCMI8aef08F4AapJP5vhprowSSHtslL8QKMLYyILRZ32rvFLdJHcNHrx5ZSDRnHvqkrJFoKxRm+LT8rtV6ShZ487ti4Jx7A354c+Pk7fg51rKJJuVFZz3NENn9N/jQn1MQDhyk1ifjj4ZYqggvmjtYPEd0oZldoA74UdXkslVT8rdxvyixz8= + POSTGRES_PORT: AgDgLYZpIDbAim4FOmS7+q2zRvrs1csQPNQa1EU8UuSji+4Iow1Wu+O2QcbZja4el0fmq7Wokx6o6ceXOr/AjeFr+Vuqm16Jx7rwlbJLDr9Ku81T6bTp56oywWVJcX1jMFaQAogylW8IBf0Z4WCM3QF5NybMkY0Wood4gfgmopFzotB+z8aZP46yrnjV4hP+MNsxnmCYqY82lksEXYy0T676bhS4wieX+exGPWpW3M9bPaUN6YN3+18uQzgDbmA5j/GuA2ZSVt5ZqrK8MiBFJVhGIgWwy6tN/FM8jSYMQ8af1y2GBYRqsLHIakVv55w5Qos9djD1BOCe187F4ab5oi5XdaIpUp3p1AZ4Lxn/3PeSYXqL24NhpSahoaDFh2hku+GdIGUkkkCnaqAgsEgx8bstlWaH+W+xQQb7r4zVGSHpfLwilprke+pFVoBx4ftzrvrg6RSCy8tIzJq2RNcZ73ZZsItiPk+OknMjAesPJUz86TR8BWMn+bMfKepP3+wPl4vLpK0zWvyizCxb7Lj0y61dvwDl03sARaaYUnoR4bxPrS8LeVyx7EGHzHJsDLmaQiXDpXH4TOjqNFSr4am36cq+S5EN+M4eWQqnAFDswJc+y7s7RcVPFbaY5Rtmni0fouLDRwqlZgvdzArNrDDsbTQN8ZQoog7eYwowSgLQDScg9PL9n6niLiCUmrkWdlZybvJsvt1k + POSTGRES_USER: AgDdUEbmO0CxIlnAmM8dHUCdaItEtfqqHNYkuYThXBLgHW6YkZeK1OT/72qgjrvisRcH97qm8kj0Jq829qCdVa/s0y1Nh6JzBhcNP6vsbvHFIaxRA9k39oZ+hL24v3phnR+xk7JXJpur8Ki2r6d1Dk6LArSWPOooT8Xk+VGGQt5SkJgk11Zv7EwPcz1Jp95LMkXOdQhhEXw3L3zDsY0SxWkLIA8ISRyAsL3ha2OP6E4iXF8bEpxINZZnKzO++t00JiR+/ppC7QY9CBKhT8FXGg0c2Rt6YNcm5jI8aHuqg16lpmOfdDQBx81bQRVUvLoEOnuMLzunYWV3pxSgHsx6Z2yJd4CUcATA0njUNaPByhzv8BQ4WDSURJQeZtOKSy0JFXmvPSwkt0GMtrb+pMWSHkKKxPi6aTrGLt2Q4jFm8SjGYeI6pHzF2dpf8pvZuygTaXOni1h1VsZ+HTRvRxzXVbpV5KqbeGjd+UXMulsX6B6ioeihLS1CEr44nspimN2GJ65rQldBs36etnlXNoLzfYHIxQalg1DG7z3lbK3ll7VcHCf9xPJXa1JGOV4pvlKrJ2jQN47bOks7OKv2PnihWmJAHBEapdRwJExo5tbY3mSDPrWFp6NOOfmkEBa+XlqH6deCmYo5LS9rGYxavCZcMN+cYE2AMrM1KRFxJrX3MLd62SC1se9yn8V5Z8rpl4ijLj7e1HLU5w== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: followships-microservice + namespace: microservices + type: Opaque diff --git a/kubernetes/base/microservices/gateway.application.yaml b/kubernetes/manifests/microservices/gateway/application.yaml similarity index 78% rename from kubernetes/base/microservices/gateway.application.yaml rename to kubernetes/manifests/microservices/gateway/application.yaml index be8ab49..48c2910 100644 --- a/kubernetes/base/microservices/gateway.application.yaml +++ b/kubernetes/manifests/microservices/gateway/application.yaml @@ -1,16 +1,16 @@ apiVersion: instagramclone.io/v1alpha1 kind: Application metadata: - name: gateway + name: gateway-microservice namespace: microservices spec: image: ghcr.io/archisman-mridha/instagram-clone-gateway:5516c30f64f06c5cd86589ddb19e23e1d5b18cc7 replicas: - min: 2 + min: 1 max: 3 resources: cpu: 100m memory: 100Mi - secretName: gateway + secretName: gateway-microservice port: 4000 \ No newline at end of file diff --git a/kubernetes/manifests/microservices/gateway/sealed-secret.yaml b/kubernetes/manifests/microservices/gateway/sealed-secret.yaml new file mode 100644 index 0000000..66f060c --- /dev/null +++ b/kubernetes/manifests/microservices/gateway/sealed-secret.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: gateway-microservice + namespace: microservices +spec: + encryptedData: + FEEDS_MICROSERVICE_URL: AgCD4RLgB0APidaznHGhbLwvOuk5u9xdlvGLHWKdxDoimfnRRKVEemU2lL2fb1GRIBX7QSGG5w64hrbPtjiKGieky1/YgZVSX1E2shvLVY15Q48iY42sF0qt1h3xw+iRu9fAjGfy04EUsq4G8mZBjRUp/wDGSvsLKUfcOjtzjfTAmDIdcnT/VdkxqNLv6xOSdM20EY60I7tNXMObRePNFXM1YRrHENZBaqhqX8xk/F/EeFmZ8kGRBDZ+r2myxwx3Spb+CbexHBBudG1lXrokC89+wgAwD40HdXEhkfURJ9l90clyzn63kJY9+MB3r9/igpFuCwvKm/CNZDv8emfKV3bH7iwlYq0v3jZFg03/6fl/hhnaRBMIlDttN4vgy+FedTF0q5DKzuqdYnwLcNZz7kY+QpAytvwN0p6YBcFM8BCUdhqlwvKMBcIoPLJZa7W5U81W/w2aVt4kDdsGw/uOva1JpS02IHjt0ApQAlqFosvjWA19JP2wo42g+J1gW33l1zH4zYRT/3nuOkKWdTeMtEG2A7WBU0x2jCw3CMWtALxFxfr1FfxGnHOeWJvTFgdw6K0fx1nMebbvJ9aLY6LykSDfR+aKJu6p75ggnEOv3uqCrbwX44xYtz/4XWyx/LgW/r4pXH616HsQHF7kbqXULLwd1P7dalZ6zR35aK4sK+/jJeDSXSd4PJGJd5NpLgb6CApsqWFE2UqjiPGe3S6z9XFfannaYadj5g== + FOLLOWSHIPS_MICROSERVICE_URL: AgCXPoX+L5PpT3GHULiT/DEfRgb1vcEkZuZZhkUV6O+UjqS3eBtafA5ohEzDCkTQoIyLi99x35HeDRmKhQkuIIcDPb3foRo66ZpbaeHkpsX4vgZ+Jk/+/krUQ8s5gG4Td+t0GmSu3Cj4k1o+U85lowyxQVsyFCYhTdIkn6yZ4O3tdp22w7TQ4jBiLH6B1r2wtMhvsclxsSGhd/Rx2RX6lS07l7GQ6jA/27KdVsxzOuSDJd21C5YWseGd8a6iB9gH/e+hc2l5imKDtcXY3YSQDrcowiDz0Z4RdGyHkS1UP91gkcUNosoRUk73ZgxKSbNcCt9k2i7YJs3+tJW/6mOPwZefFtqS+T/5ASqJHcWjpkSyQ98d1ei2b+5ziJddYeHT7RoQNyGxqnClctioCsKwkV6xuutZFuSc3ckGbDkvFvnQ6c0taC+jaFhKx5sChSrElo66YeJLsOz/b++xrxJELkO7WfVWlCCZbZ9P/x32wwSp79UiNnj8smtl+DZg9fY2olMGKyc/j+oAmRl2BnE67pCj42oojm0WDCrosn+kiEMGG82j7vYtQ7l5d96IpZBngJTMCiyCyBniS/zZxCesYCy101BexGE0oGSliWnU5AV8NdS17pec1Clt6IndFHKehlkxN0JTSrOD/FYS2Fnmk+kBD9BakmyAVxubAtBVmSxDDHBCtW/IvqRRX/7NQQrAvecXNqJOZ5Iy6g6tU9wkfH6pSETVfJZWqowNgf6MCA== + GRAPHQL_SERVER_PORT: AgDtf2Kz2/+wfYCkbb0xTstPi1UsjwJzBSYRHAOrCgeE6j1wkFiCEFpjdKDr6NnNxl0u/4OEK6HJBug9rkXSvzW7Wokf3LQ75B6xHmCruF+LDQ1wiI75rVlpblVLTokpTnnfzHxFucLNnAmUsG3A5maLmBue4fZSG5OM5Z3Dnqeu45sJIxIZGqikESenpArBSq5sC379/jNKt6uYbCiEwsnDvnlt3c9OITYUfzgiVbN1QHnpJXPX7AiwZmQKo/k8wENnzJ7sMibTNscyoUzx4aR3EMWVpqrMqUXqjH1Bzl/+xdg4EXM3AOBq+V2uqOBh4PHtO8PYMwFmsudnE16nf0VxjJUWQGTdL+7KVfhRELmatWikUdxlJYs/uyYMnBumKDC9QAQtcKOKk0orquZ5dl1aMRGu73aJmGkJtUfzZStAgHu+XT9Pb7W91ej+hKxYVDLgrQTXNi8qUm05qnw+bABeHsIK/sADLHgTSm2/Mp+OnASoFWzM8mYK++oG6Pioil4tFpO8c3qL3kmPNcqU3UEjZC+Ft4eGMk14UGsaskoxr8MhWTl45CCAg1pDZa5brVTZs0E2vEDY8WrDrzl6Y8HhpKb6cwZ0FNgbxIgG506FdSeYL+VLwdFBc0liBvpgAfbDVi+MiP+D4Asd5oV3XXZmHQvSNtNRVAkSzfMP4VEmxte1qW0p0SNyihjd77ZQkeqiIu++ + JAEGER_COLLECTOR_URL: AgDLDisZtx/Tg5Tn90z36HK9uBpZxzfH0iLifQJ08y5tm+XU41rYKk2kef298o1tM7dplTx414T5GsBbgagvbZwCJ14mxLaO3Lh12Cvg1LuLf2yn36EFGKHRzGx3We119hfNIPDoAdhc3TQqautg067N7tZRFf7y3cH+d8nljb/yU+U4u6yUea61Ql0C3W/xPhL7SHKghgu/aHFTV7evKuNQ8AqLH4xi3Om4p0smEFtei26PQsSZXRLtJHwl+3dzdG4q+KSgrkCW00izrZ+YHr2thmcA4HQWSYgKQiaOK8S/kONx3+ochhZ5QMfOM5twMazFjOOKPs2PxqNKhulAOZVzDNzxAxg+Hi9Q87VLSpbbI59NWqXs/naxdWHJKyI5ecqxqaNa5MEGC/zAtU0JdhXcrza1OPlHQTGbYnDmuPLnUmA7PVUIwXtSGgrbZEowXs8nw5LEz3yjoySRKCcg2/HiccubpbCje2O7fHA/dlAlGgi0enZRXbvjpt887cmT3JQZ+fOmLGkKg5H0ieWyUvKgALJgFw9MMu6lEQ9RNPOBdiY0XS3vQTIRRnqo0nR/j2OEEB0zC9j5+WIb7jWcfOP4vimWO/Brmi4NGL5jZkQNfy3JxCDfnEsLuSvveFgB+ZfPylIcakBKOvCNDSJnOU1ocMO7Fo3wlWsew3hwtCQhC4/uloHny9569Hu5i1hnP1Aap6WzBw3qAe1IR/V8jUHp+ew6rbOf5H8Q9Eb0 + METRICS_SERVER_PORT: AgCU+O/l7y2pJBFB+IRisi53r9/sYiyHHiQdA+YdPmCTia4kLMmduIjTKdwLxuX2WVss61VZfkPebQazTre2rKwSz5MctAGppQhhfhnpkcTxb0dRn9DeIQAJiyDjtKm9O6EIV07QZ/HBt2TD7Kr6NL96yVgWiNXhB/1a2QamJNe9T9rHzxUBX+3qz3zr3Z8keflnYZeAp0F2HSIKP2KKveWaa+VdNFc9fQuP2I510YgAq0dRgc86xlSGq/ioigGq1DU0Ok0vdYE2Qcw75Xqj5ADWrRRKjXjA0uzT9JIpqPLGAJq3ErEsC2ViDN3O6FHde73hHpsqcB8OxBhemnh9F5dWisVpCmax1MBXRQlnh6qL7uksECK5a9hsQBYoTRYjapJtcKDczeFYH8yfBvW5jC48LN5ycUMyJjuIkmsHcOA1r5Z8ll/S1kPylLDy1AHJ3rPSPtU6SpuZSU1Ftr0JDA7FgHVVGIfUu9SUc/qPd0h0m9ap4P0LTH6GAUx/yZLwpWlkZyFIK9DP3hWSUlFFG+nRT/dWnQZ2WQYY34lY/+/TK9wSLrsb+eQxJ8vJSqqRpcYkKoA51lfTly+j0TmYsq9BpK1mUAaaCiwAMqrn37IhBbJYiPTNYXruRgT9Syemrqlkn/9d6N1fIEMV399IvXLoI1a+HFwVuwpbCZzH/JcRc/DIbhiQe1wwr/Z/M2Yb+2xpwdUY + POSTS_MICROSERVICE_URL: AgDQa/TtAtBqaJepoMc80G/PBJluHGphqOprLJFuGt6uoFfszgzI1mOAZRJ9116F6A7hCVDOs84gx6f2VKh1NggyaoiNbHyeXjWDB+RiE2fMMYKH3e/bWzrIjj+hry9tRBaTxdrCDV4Sxb+cgyV/t3Vj3cQoIZoN3O1QOQo4Fe/r6TlKFQio671u3ube68722aBC2EKimlpwluk38MwrdqLwgmwfnk/VIONxd+/8u+bSackglPRx2kMf8iBLlN6gkByfpCMBak9/cwOmOvivCZCdBzgOr9man4Re9KbZx8JczHXYCf77gKzSD1UWeDOVyFmSNhtgdQg2I8QVg/08k21k+Rd44qbWBNkMYf+WSBGTsQ6GBUAgbnoPhKPlteEdpTU7V61yA9Fb8MmFBWe0kIpfHIJU9apvfVAFdRJ7IwrenqXlI8htYpSoSXIp1QHGrrtUM8hDDo+itoUXcMyUjxXk+wuCnL10O9dAaUqpNBDofbGFnC8YaPj45a2EW23giSbI++sUIaJKk7S4rs6up7NCygomh5eblhyZdOPgqantyZTw8RIdQoC2NJ3L1EAVHkr+OMKiJILmmtNMdPfOlB4hPzN8nL1llbgkXn/qe+nNJV2hGZ6zXdIqjpA3Ucf482PhpzXuh8f7y49og2uE4YiuUNqJmf6NkXA4cRXVO9E34LKEhFRvvcRXLhSz2PmH/BoKNmfET85hvVn9qSu5CIm7cDyXHLIPHQ== + PROFILES_MICROSERVICE_URL: AgDSHRnwBwZu52W8ADX348f3ahXqPAis/2428h7ZuJeyRMT30lM5mICXhvUtJYFGI/G/7Oqw9vrIrRfXcySgJtGPYy8fvmafCfpQMie9EMDk00NiLwVAMJ1oicxWARn6QvoqjzQMWOspMiKPGd/P1YZoGqkmmR0v10z8iDyb6SgBF0IqJZBHrb2RE/nLM/8RCNxZFGpx7J2N/tgk/HBzECQWLa1cFVHxy8uOMT2YCQmxNYEbgk1gj9UsURkPJHlXkdOBOKmybY0yE6VvsYMqj+dpjgvbYk2ORJULjoEB7RxOVp3BLxaLv21Sl4OZvc07OfAzM46w3oZyjOtyN/HlJ16CMJVV4DpS9YE+R3eHvj1EMpiBWnT6bG0Sy3Xw6mxyc8NmyyJl3k284eoHWusk1pfWgbMWDAXZrEWWSc025SqXhqUyVriO8EONmgraaXL+xE70T1rsq7ew0/RZ8hqdXrZe1UCku0o9QLdGOlzI6fCdAa2qxoSR0jl9DPgqxm/m+KrYftGux2JHAw9gcn/P6cnvzdZF8Y3S8JPJBmvmjzhq6KlY+1nGmAnuCMXrjq01dOdmt2E08UzESgDkLuvFl7fNyC/a30GdASJwHuwwE+1tcAorA5A5Ku9ZeKXHmy5rhKQnvcSYd/CWPE2VouuNac8w1e12DFRqIzFgholn1jyG0QY4itEoTrms+8RZEebSpc/PyT0sS7KCjlo8l0hcm+llcKCaBa7QanRdpA== + USERS_MICROSERVICE_URL: AgDTiZl/6tSyvpDRnVBKqWGnX3hu45KFCamFtgzE31x+g6d4zzxbqMdvOrRDjdc5QGhGY10b1wCVbqIDkodDxBrroI1dCb3Z/sHt6lSIiaTd1rtKY35NuVgguSCHSqYbbKeb/85xned4nODGnHkEHfmCLXgndeGQxEx0W27roRYviemh9o0Eb/6EqGBXrRhN+IJ5HVjvTXTymCxVVnKDQrqC1cSn8w/tjqxbrMoAABx/C1+hzQNwzDP5qVt8k2A6/3bZ5Vzod2vphBsMe8N/koVUSKTNWZmkL8XDjsAiARPvNoRxCmkVDEsQxWOgVSSKGKEdc+wS0fsvj7hgiIqn/0eoGOBMW08PWq+QdH+isFmGqEpRYQnoXeYBRcyuUzXKd7fGdYWInSC3ukAVmcNstWXp4U1UJh0MAMHtMHVO+6EZ4/bphuHWgTJ7R5gtr2SK5FG6e+OU/H2OLo+vNtpGBPWHnFuzUS+JIBqtne0/Cpxj0+iMnkuWCyn6bfKomkQU2LlHBxh6XlzRtOuDzBcM4pVfdJV759t5hqELHCHlJ2i+CefIXKeJK1CVnpbkutb1Px8ADc7ihpwFYS5247T9JLgGnFy37rhvbzlp8Y9TMbgqCdAgLAXBEkZCWU/H4e2GQGpgwIMm1JGOIi016nxy/GxuI9dt1gScmCirckjfUi9B6tMoLx2bDEYAkEvDsyYIwBLJh/hPWY3yHmvuuQC4Oz/v2azOYux7Gg== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: gateway-microservice + namespace: microservices + type: Opaque diff --git a/kubernetes/manifests/microservices/kustomization.yaml b/kubernetes/manifests/microservices/kustomization.yaml new file mode 100644 index 0000000..9599194 --- /dev/null +++ b/kubernetes/manifests/microservices/kustomization.yaml @@ -0,0 +1,20 @@ +resources: + - namespace.yaml + + - users/application.yaml + - users/sealed-secret.yaml + + - profiles/application.yaml + - profiles/sealed-secret.yaml + + - followships/application.yaml + - followships/sealed-secret.yaml + + - posts/application.yaml + - posts/sealed-secret.yaml + + - feeds/application.yaml + - feeds/sealed-secret.yaml + + - gateway/application.yaml + - gateway/sealed-secret.yaml diff --git a/kubernetes/manifests/microservices/namespace.yaml b/kubernetes/manifests/microservices/namespace.yaml new file mode 100644 index 0000000..ba4e5e9 --- /dev/null +++ b/kubernetes/manifests/microservices/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: microservices \ No newline at end of file diff --git a/kubernetes/base/microservices/posts-microservice.application.yaml b/kubernetes/manifests/microservices/posts/application.yaml similarity index 93% rename from kubernetes/base/microservices/posts-microservice.application.yaml rename to kubernetes/manifests/microservices/posts/application.yaml index 67cf5a6..f446fb0 100644 --- a/kubernetes/base/microservices/posts-microservice.application.yaml +++ b/kubernetes/manifests/microservices/posts/application.yaml @@ -7,10 +7,10 @@ metadata: spec: image: ghcr.io/archisman-mridha/instagram-clone-posts-microservice:07db74b3dd4888026a2e852c6fca860157aa910a replicas: - min: 2 + min: 1 max: 3 resources: cpu: 100m memory: 100Mi secretName: posts-microservice - port: 4000 \ No newline at end of file + port: 4000 diff --git a/kubernetes/manifests/microservices/posts/sealed-secret.yaml b/kubernetes/manifests/microservices/posts/sealed-secret.yaml new file mode 100644 index 0000000..ddaaa5a --- /dev/null +++ b/kubernetes/manifests/microservices/posts/sealed-secret.yaml @@ -0,0 +1,27 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: posts-microservice + namespace: microservices +spec: + encryptedData: + GRPC_SERVER_PORT: AgA+RhB3NdeefmZVHgnz82P40SX2zPYwQIWgR4umIz8P5PjTo0t/gl3GCuCIThY2U/zqw8HG8ORVYmrRt0/umUpv+cuDV0/jh/599+7WWXWHwQezSqzQBFcsuNYiIKp6yD3wRCNauBG/AoeuVuBmU8wQObhegrpcL7EuuiC0q3GVJbm9JK1VivKc3QAbMk+wie71dbgTpgh3+ZWH30agV0yw5XIieehv3OZ9CH7Hm/+Q1o5/JieOVrwqzNCHxCYPimtTFRR/LXyG+bIq7ib7+xFnIr4F1vW3tzZ2PTxxvgxXQZRmDw3wxyxGfZUYSidrT9197IRRltnuFNwWLoLV1iN6LuTTcdaDE7p1Xowas62oWkyFkBwcZ4yk+et4UE6k6550LTQQnK2phkLa0zpkE523aJnDfHO3OI0RrfAgwFgstLRdLByfA+W9vs7NTWGvNXmfafbbdvtDDex3UQYf+40SUgKT84c3g1QiqJYY8BaBSWLafai01u8epbsTWqQfpikdH2INW30HqUIF26/1PvOSexPogvdlissw4HvDxiDqxEDb1aEmLDYKjAynAbcoemBAn6JTBI8la4Nhg93gIhTeB7cSrEtIHol+9cv/DrEfVshi3CFY0vST3Dow1Q/nsWxVY5A2RfATGngMnTuMr9Rcb7oAJfC1wKQsLhS6KzMvU+bs1ahxip+F4jk6NM/1H6zcp7Sh + JAEGER_COLLECTOR_URL: AgA10e2SaUSOgrFVSBU+SMDPRRMXn4dPnZOEGsKtSSylME210KkWpTcWXCNUV+q1A8k17zglAA/N8Cm7S34a9tkM/1AIaYZ0msNrN+mkPP1Wz9y7yz1k6HgQg85Ns+EmjPYe0gu/HnRwVwubhz20zKu6CAcU+DitNk5jg/YQTfuhPkH8YBg2FXcwOgg5US0iAsNqJVNcn3ocB0KmrIpIJvU30WtRRajDlyoI4UE3MyigBz9W4X17l6SBIz2xh6fuytWKeCvUrqSn9udB9RSrl7lN7FRJuHI0ac+lw0gjwySQOqyJIE34XneJBovNjcUq7TmWiD11MLtQS3aCHCwFPZxJ6vwtP/vzCrcPO/d46rhX4XQoTZ0lSG1Dw7QEuyuOIzOUr6u92b6gXzSsCtJYyN/R6NJBr5YHKctY9bSHOeCB9OEXqYb6y7vmEYr6TORr5CMhXoV0ABaF8hfHVNXfkdrpqLQ231tOJxWyfg8hns7oYCSN7onLp2em8rfSqXrMtqWNThZPQcf14f3Zz+PdbKxjNMejNF8uXdVbtI2xGZXtaYoOyJqxPN01xwUK+iZPMScuyaD1uVB4TT9r+h6FqB7YIUxGcdflCmYTRgFMfs0bOzW7KHmCEYtmoS6Qz4k/xHAcB01eU83hu5uAQT7gkG4dBoiY+SkVXSvinA+k7noPdBOe9LCVOaBockkYgj8POVkbH1YFBIlU6UDegFqf2MP1R0DPaQvQh62OaW2xlKYJpQ9rMQ== + METRICS_SERVER_PORT: AgAo/u16KHVxC5sGE07uBN8p5QXXjVvwbd2dVYokwjuj+x0+FQ+dzq5BNoqNR1AA4sY5QMUvexd0Ih95DN5OZ3YWIMub7DebCpA4aB5676GVGAFDUn1ofbRVTShv1jJ4TL1qAUpPzTACQN3jlMrhWcrleyANlbMcRL+D4MbFgTGHW/bf+3I0UgMHq2CE1Ef6cxeEjwFRmypy8gL4yU0DzX9MzZpmWGGxI+qNw2yo5LPdnq2DHc20ZBas8pAfkUO394BLvS7AewlLPtAw+iwyBMA3DgBs3l7W77MI1t6k+pmcfsU9QEEhAe5EKo1zunKxYxNHtFqNhpeHxuxdRpw97aqd2OPBV8Kieexw2BR3pcV2WCjr/qFdE7d0EveD+BtAtjyyKn5HGQkJ0HWEwxTKtYcNbRbYHY32gWz5vkxDaYYem0Dsz4RL/vCeFPHGsZHTI8N12M04PRj3HDdTnHITw9GUaWI/bUAiKO7+tVgfdzD0YnhKjaCE4bHT6OfzFnnVX6CN9y9nDkW4N7XDVgBJrPOQFp2cGzQP1b4vE4zfrlDhzBcDVZE496vfX4j+NczVvcPFTktSy6gPXE90Yub7GaiugIIu6emAMHeIKXpTToW1oGEN2oRLHXQ1U+FtrTThtU1h+qJa8rhjlyrPzLXbN0pfaC3u7PqtIhkCLmnqk9AQYcryYwW+SnNh/mlx/ClNdWwfd3x9 + POSTGRES_CONNECTION_POOL_SIZE: AgCpe4Av4uWWU8cWZzv1AoOxFaGWrq9EWnoUFC3sriwViqrxyIThTSCRSc+ii4LQRsB3JhEv2S+w4b/8oTxcZqjNnyzsivZVV2UNQF+oECpeSeolBddmRJx9U2tcgiZeSu5Twh+YAursIhJTxCz3Pc48j6lCS0ncJZzyirYwcQaf5yWRPn7fhKZW+Yyo0aNiQwRneivto+IvrFDz5WuRtiQwkhq3Sc5VB/ESoAp9qjvRD0/c5b0nj5zA7HHcjNRNqXkQU3vedp/bmpGKUhOrQF3Q74azjxAEcA5IWx5ELX5HIR7z8DWfHzFAXg+/yop4AzPAD3JLQcEDA3sLeTO2zwdOwzk90pcaVWl9NvEAbP8lCS7VAz5OPh7U3gVAJ9DN2G1wNNuJZQLkrG0OYPBC+AGNmkAu44mOnt2QQBG3AlPQXS244YGMI43/ZvtaI2NXWBp5zCtVSHJGfNQBnPKnkIhIj+6I+arme/lnt5Gkg4dkWlLhi81naWQmFz6fvmMxoaX3RL523tSxH4RRL23tL9XmEzMat28WTuEZtZoF/Ktkuclner0LwzQgyBlObg8jGqRCF+P99qTBn3XEu2uhao067JHNEEOgCqJfT4gNK63OQRnLyyFx5in+Ay8/B8iRjnz4LDBZMnTzTjx+wIymPVbDQwKOaOCjXqiJBiCBnUSRrGVefR/BIJmhObZl53JNlXE4TRc= + POSTGRES_HOST: AgADqnP0Ig4MQHPv9V4Mg/ZH03EAJDsdNMRVmctyOynkdXxuoJOISZAG8y2YFh57DKt+Gp55kws2SmY2ik6muK3qc955ME2XwxL6bFLcW+GgbgS8O4gZWUXGTEzN5x33TXJRs19AO+lbqUvADfLvXIZlV3q5/QyTdEANmt8xkTwq+tLwAvMwssuQ56vZ9WU+jTnkJ04J0LP4k64th6V/tlnJ6aLHSCdLfwqzW8h9MJU6LuBj6Nmo+LgqhNw/DvS7/E889FRI8I0iHhyYek3fJQgG7wFRjoP45axSfhWJWXO4SHI2k94zuZrvGlyYmKuXBkqs/RLAFWBjc0x68OlKnI7gVzmwzfPcDNmaPkiqoZRvJMhFlJ1Fxm6xbW4S36qv869aa0xFFHGZNjA2RympBiCdfbEyLMFl4MLWHckwDYWz/GsKaj632Npf+rHOqAIHAujn7q5JEAjL4XM/WS/cOAJTON//lBWrX/LVVdrbImoGfbhPP89GSxEBFXzt0Z1bsJUxazjehfUfW4pal387XfQLRu80JamT/ZLs6jssoZBkOTXSwBB+tC5p2fkxiAKgsrBtGVVccfkLuB8G/QlwpE3oyRkDkTOG4XLWhmUUgvawEmZESnXZ6515wKHbB1N/O/eafGzRhjXBH+Eg2O6BMB54ZML39QQnJ8i5jnzR/xiyfoTiVtMeJcDMdujnLtpEcywp2hUeOz2rpTUkAIzWW9iHEoortEBt + POSTGRES_PASSWORD: AgCyZKd62tu3vANy5qiKsmEXiwRDd3OQ9Pvuo+ziJOEeBCMIpt7k41rFhnBkH5NY+VlM2GmLICtL1s7SHXZhXhSUwlsABk1m0SVUs3WjATYwUfJkPy4JkZr5loNecHVnRR9lzx8vhWaMUTyr0xJXBRmVlLhVf3GnloOCmVNRLkZJMuaPyYJD9+KNn6at8n9QlozMT7idYChc1Mwcvk8SfS3b9koJ1TbQQC7lPAoJt76UkN2A5M2w9GacyVr7EXmJ+NY2B07QWXPS8Awicz47/LkW8yLCaOrcqDkHePAjQ+VGIMWTqd7cEIJE12rCXjVNy7C/EdxMg+7fwQMaEAT9jZPWDWtkdF6P/zUae7SBrbMIuCqhiKPLl2IVkL0bNt0ztL8YZt8cvCK5NJ6W+s78reGZn9BUP+t7QDGK+X6NhzQh/73dHgO55TTHD8Ggrq4WAQ4tE4U71PvQIrvL4mCKyIg99me7fiiyLYErX34HLeJ1oLtmLef7LBmgh1v/ck5UoFFXLNRIWrLbAtP9iTXPWLvRFcWcg5xucP52ELFV6ujQY++8O5MswIrTQYQTr1XYRGQWTPzryKCFS/FbKUmy//E2FKUKD1Yvu48mjaStZVpG6QrF+3iMptsuVn3Vb7A3LmFgu3rqEojrB8C59oFqsqPiEmXzngGj6YJcfd8sowckQDMnV30GpPYUDmwPvDgilbr+FXp5CsdigDJsaipVRFA= + POSTGRES_PORT: AgDGFnLUPIo4KjI/qSnn6XcPEadGv01OfteZqmbFkYCiChjc2QyGhJ1rcvT1s1v3Nwl9AxpF8gxtazeuIzeKY+F0Z2YRGDPXdppH7aM0gSI6W60kkW8PqAS4kn2U66my0ruTZqEi03vQ8alJc4z1o0xmfepV4QKkSvS7woWGoQAc8XFkKmIJP2i1i3vregeB86tNZYjh9FB9gbeUzKqZqTsUcSS3QaOGLX6c8esjjRAoPM6ksw9URleFqsLN6V3n4pox3NuGv9stPBlPnRrLyatpliHkQ7FJ4dj+R2RjmFwv3erSoSXzgNXpkbVswyWNDdWmKWNi4NM9M+b+QmGBzqKTLBHVo3VLt8oh9VpF1Wqbz9MLEffB/pIXQRF/u4835hfyAN6P+NeBfluEKz1HvJvAJ5N35aM4r0dJkbccz8k2IuSfYGt4YGOep/2JJAN3JTQwIRhlHWRVKPl5ja/FyT5zPmUeXScV8L4uhKqxxwrmoSKHcaDwuIuhA8XaDBMBrPy/MNuLVx1ak/4KjIjUWw2RGX2eijBcEAVDHxhJoha1ShDTiRiBhfsEus6rdBfoqwZEe6MWmhm4tEWf6rLPfrYUtP6ng3wSDmOPPkvHR9MipbyqBc5pS5W9poa1UrdoQDNcVLUjAZ0y9J1+1pfolkVyv3BBokTWIzKVeyqkIaKVbqotICz4cdF07nZa6k2eFvhraMaL + POSTGRES_USER: AgAesKLKK8YfpobMfIxmzrHMuhPDsulXDxMs2q61PX8alqHQOSbsHAppMEFuOrt3OF5VqRvWR26eAr2hP6S7ya7gkebQjH/IGNnHvhU97AHWkh9a/XwxRzFgT+SE3B9ntAvqUZLX0vaba37+fJdUXtlN0yNCfq99dslYHSZresRg1FzsDUe3UImkUi5JaAZwNKHlPBnDgq3NB4v/kn0WBtWPIaJygXvg/WryIezKujFKjsa6/+VuwVHRMgDn11L3cIla9qvkcbSVWKKptiQ4k6XjPzgWat/ApZz7FnqWx3c3luBI6WHOWsKSQIZD6m6JDab7FPj2WUPsQxC+8s5d+SHqxUpaC2OAdWykwZB4hYWj4x7GkH04A6Za0siQ/+RHzDQjEsbJowcczUqbOzGDVDjrdzt9qPG0cXNiJO2jPsrfPhp8yFtLeBdp0Wcb1Dbpdjuu/oCEK0ezNHYhJ8vPJcimDwg9tH6q05MQazb2g5wnM5P5IDqBxlI0zuqTe/mVS7WEJwYi6voeszYyzLQlg8aCBFr5g7N8W2IIHYtFtm0Z9vBprLqrpsfy1ciTuo5Ct4BiWeWIH3SIKzPkCmiFqaeIVlHgFIRU3mNn5dpczRWXYsYN7F6LfQpY8OqbQaKrNWi/9yzSO4G9twr/KOO0UEqogKQHQ8DGwrTtShnS8EQmc9WaxMgEQ/nOROySMVFX0ddZXzpsrg== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: posts-microservice + namespace: microservices + type: Opaque diff --git a/kubernetes/base/microservices/profiles-microservice.application.yaml b/kubernetes/manifests/microservices/profiles/application.yaml similarity index 93% rename from kubernetes/base/microservices/profiles-microservice.application.yaml rename to kubernetes/manifests/microservices/profiles/application.yaml index 62488e8..504fe9b 100644 --- a/kubernetes/base/microservices/profiles-microservice.application.yaml +++ b/kubernetes/manifests/microservices/profiles/application.yaml @@ -7,10 +7,10 @@ metadata: spec: image: ghcr.io/archisman-mridha/instagram-clone-profiles-microservice:07db74b3dd4888026a2e852c6fca860157aa910a replicas: - min: 2 + min: 1 max: 3 resources: cpu: 100m memory: 100Mi secretName: profiles-microservice - port: 4000 \ No newline at end of file + port: 4000 diff --git a/kubernetes/manifests/microservices/profiles/sealed-secret.yaml b/kubernetes/manifests/microservices/profiles/sealed-secret.yaml new file mode 100644 index 0000000..4e53d82 --- /dev/null +++ b/kubernetes/manifests/microservices/profiles/sealed-secret.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: profiles-microservice + namespace: microservices +spec: + encryptedData: + ELASTICSEARCH_PASSWORD: AgBKY1TvOPT6CZ3FfYeS7umVxIJMA85/VeImd9GaeQae52y1KzvwjPEDZMfrw9ouXrUNlvtYFw2fB1vvilj6u9xBp6LM8dMQmsq+8mWhmSIkU65COLkM0GuYJPrCgUuXGFB0KQeB3H3Pk07GED1mCyctyU6eTUIE+AW/POvyewMD/Yo29XhrATyybCIJYsVu+yDXvnesXCUaYJAw8p5h0bxNM60oc3dEGoGW1QxawHR7U4Zz1CuH1x1HpgB9qZxNunxBbgjcIF1EitJ5s99KeKauaiLU8o32F308ANHKttHJR2DWmVWGy5oUmWaxphtVijbTnMBBT/TcGNVxOnThmsRh+9UIYCOUEoXcz5QRGxIWQwc9v6OE0f2pruCRPzWuMNMDygek7wwcYDYWZc8ThFv/vYdwBz6ciXcNHg/qeGFCWJAbj7JYw4leoj49cibgUHyZFy2lywt/58zr2XFJ6WXffJT7vyP0PgxtO/GhMs2NxTDmAanLRr0ECVkOa8bqPuNGBvQuYx9+jKzIO/9U8wmB0xTJBx3G8xB5eRJc2UDaDfAiOoUM+wH0yRrsm54cdpxy2hzmINytyy/9cusjTakLKazaBcRxzFVd+tK8/54+8Vs13I5mHr4Lup8KwapVHnfOmpTVQd2BBatMPBB4k5koWHLwxfY0abd0mvbXzbKX+2B5a6Xea43CzFU5dtiiYM/qLRAc + ELASTICSEARCH_URL: AgDiViFXUAfGFR0bxthJ5Vf2q9vtXtNdmscleKy866cO879KzQBZmdVtbsj2IKBvZdZu3IoeTkJtGYnlQd6WPCRh48/kL90ePI/BorA8eHAewZRFgPiWYTSCIuOALINSFOEJX0htfo9K46TN0HY4wmQ1RuIuoQmm1VtoTTR6aESwuIvWrXKOQPmBKU9d8ZwWaHDx+rlu0P3b0Rr0Ds+V4Y8yO8oHwLX7xwYdYXuVY5J6ij1w5irCDBDuH/tz+PLBzSZ1J7n8YX69KpOdGMkTJ2ty2bL+YldDnxNn7MXrXJJZFx0tU4bCxi6kUZSkaX3DuaNHQoaoRt+SrUKPLpCTKYoZZ1ctgrR6aDhWTgj+8Je98I/jogzy5MRXT5eUAO8z9W1QJp8Nm9aN1sGiYH5P0AB6HvKUs1mM6kGCbZx5n8Q/eHdE8JRs3zUI2riteBtIuGGlvJfc9msutw8Uxzn3vbuRKTwUNlGc4ztL5QlS6HR+/deDLzAug2GNsfrbZi4ff4/VkAGPdsuiBbpQGy+ykideDQFu/okXR691ysvRBIocr88e4XtsP2DLQ/5oHEJ7Cp03U8679XAsOvr5rbQIGsvoY/okrk57a0B6+uawGGTUKvojdqFlpmnkTlEW804G+0CVXXXWyj5veOE1+mojr8cfTycpMWQgpZouQUm4ipjvPMWOIc1eOzp3tWZv7RttkS3lFkkuuiBRUIMWdlKrNa67Q/cFs/WHgsDVcHaa0+8wnhAkDflJqhQ+ug== + ELASTICSEARCH_USERNAME: AgDmNetmArFyvBiMNw+s7+nkLxVhx7AR3kV2TPiaN/4JMneYnvj2RTDdbNCEYRJcemXsNTHamGFjqYid0hX1q1zUL+OMAw1KZpWanLT9epyhFJ/usv3HM309JneXwhdt+h7JjiMzK92rk4WoFlsTECV8s1UZIzO37LAvWHP/YX+GwHiWUCcJGjtG4p/vdjZiY+MVtOPwcBYPA2LoG5tFSvplU8ZqA7VfLK8qnC5TmtsW4dAWZqpS6qBZ/KGt1InmVik/KQ8PKn4qZqapA7tiDBeCff+4FIQyZIMym6A22foSMb4s6qsw42QHeG2Zb1VtM/yHgkG5uzgMd8QwsAc9otcTCvRBFRxvGN/26Pq4tgb967AFShX+sv2ALX2igsnyn/jkOyhy2Aj/67K3MU0IGoNDnFr/PE9EMoocl0auDVRCEpqCMINifjtCf/QTDgVksBjkFtNPKYLI56kkLBUthvS4zvWPVTuA6PhEfzW2kc3ZTNaEcmVufS3qpw8TM4H6pHzimNmcw6tl9sk1Uq664F6FMklCvPacDx6ROo/g1rnGRzme34u0Sz8N2BNhTQej+QBY3pKbD1+aITHVkU8Z0TvsYfUxo9I8wQlaFsIZgqgALEQC4LUtrnFWsdp2Bd+uvnATcAstgvEtwd7pE6rTYHIlZqTUHIT4k37QRNKrzRXAcxhik3GHNXoNwLJz7DakN4rk/dHl3vmj + GRPC_SERVER_PORT: AgBnruvoJF7vU6TH4eswdHKKNCsZvrlben5SE4VZvS54W2I/YAaegcYtbA/n+/wMgp56wCzW8cQHgqthKKH7YAnrZGRjCVY7cWVpQRUThgic6PUI8WLKutu8LKcrHCDg3gLTPNwtMK28OjsMjAljtXlXGNqaLgo7UJwlF5kYD8e6CAIjZAaIvNzVq8rCwZW1Dn3CzvvQvKQKLJezpzJqO2QsXkwGLvv8VSzpgD6ABu7/PZEmYgIb1tWKsiT4DpVL8HYlsBz1B8k8O9bIv+CzITA51l/POtrCmOh6pv0P5EYp5DFhNMsXyujHPvNI+CCqI/+hDzNsTSTXpPel9gkUXoMyeuESZCNjvBMMl4MdWNDiQRxa5yPX3GKWiHnkj7zuIjAHC4y98jU8oLUPoqL/Kmp3EcLBkANUPcD+2cC0vZpk4Ate8YtwGC94akW8tn/vJwAl5KLOY7D63oJT/BMdWYxkdls5O/jyFnc2nZr7wTHa563Ylxou2mRmLTd7oZOwz1VZGFfeV3rjdtMvsryOPCA/YsjvYullPrTZSBNkYD6tJ6W4H/lb1oFYyJtWQjpH4s7Nfl+knVDZr+fzPjolus8qu274Q5M8r/DND/sNzAqBjnQ63sDl7cZAW2yAL3sJuAAxTkVlIYPve+R6CqRF8tYgZpLsX2Y6H6Yv4Kftko6cKRPO82zxE5IvYJSVl2q10J140jOG + JAEGER_COLLECTOR_URL: AgBD5t8K4DFYvSrj4sLuDvfquLQ/dQnygk4nf1PE9uozz23PN1qlbZdQhdfieC6tT075vsdJFmLhfGWc8LKwJHhkysYEa1URbgnx2K2ZthHRgKPaeHkaLT6D1t4aMXGbaopGi+8Lr2sw9Wgqu0nYCc9qPpQ8zk6KFrakpEtiw8UnPCpSBkDteGsl+p+IAHuTnkpY8Q9HYxNTcIC4cQXjRIZx/VimWiczZa6iaTpshmJilKLH19VLezmTTL7XJFWuijjr2i0dyR+RrdsTv8+K51c0SNoNy4EQH62Q7ZjSKe/nJ2MXBW4Fp8KF6g+/0jGgZRqtOhhpblTZwXFIXGGfH80Yn5vM2GtUv+yTGXvzkIhueOMdzlqZ0qnN/S1kppIcgpmAXY60ggOcdfpE1PglQykBzKT/6yOyGFqpzwB/8mSdrTeIu1U63HX5jsC2yK2E2UduHXuO2eBrZOV0j0WSo28SUQWtVKeAofyU2KIsOqClIzR55I6q0hScTCdb6iB+daLmN4e7CLxYpD3KdWlgxi1qMBCWjwnBo62XSDQoP2ngRFGn5Dp7Qcswg3NEZCydaWU0YPU27jXG6UwSR+nlHZBUNLJesvDTsPhXGCjrnJ3RIkao/22rNBACh3Iz3DYDtxIuR+RS6MztAl4r+dO+Hw7OOF3Kqa4VlcqKktydoefaADD2fu6637xBvBBt0iT9llE7MbmzYet0El+AbqY7BMJwCiL/W26+CecfWKecIT33e6WMgg== + KAFKA_HOSTS: AgCKNWV58t7ZcAgtDqlVUDMTvnG7aIUqFTTm9wOYYTe1gCw3mzlh+bWOq2GlxPBxxbjw0Zi7jysAgfFX/t+v/r4Rwc1ZfAWle5B23etjZ4CKnaXvB4zCl382Tdf/1ZxNlxtAek75/BD4jU6g9DVIMiZGy63BV9MerjhWXAz73aaiFiztGq2xgRo8WTsovmdXLygepMQp2/yo1ev8ppCtS/lbAyOXREVnDbptR61o984J9oqQRvNTcKwNk4xtKNdQsPS/3eIudSa547kKqDaHg/1VNhmTYWbDD0dmrs0iBTaVQqHoN3H4YW2Ay0TlHB/V2mEH7cApMDefEzCUtolA1MCM9kzjPhDgY0bQbHWftJ0qFEFMeRsaKTbtjjsRDIukfAfi0Kbw1WmCAU7lrKL2JIUlQpFBrwLwPKr4BaY9OOUkf3MHDiPNlnb/wesjG8EravHbYXKEt4/41NmyP+brUjhc7fOFRPNOhEbWU1hg1pkJixRuaZEpV0WfBxV5hP8uNGF6w/mBrvpuBOnJTqUBuqSryU7Iy84/JtFaxG9Bis5P1wlhG+ytuwDmIAvxBxs5GJf6ybNd+NcdHQWRzE+r1qLo/ahib6HYOzIvqcwag8ZE/9xw/UxvTnBVbo5V6ePprfzrOjT5q2ErmqRishYsClCI+9OWvkGZL+DgIp4Or2yVbXeUpTGm77dm/8blPSKC6Lx3tLQMn1An8LsFmfDnyM3I+VJ32NMa0ML+UVnFZD17 + METRICS_SERVER_PORT: AgAOzTQ0XBRHF/a3/Hit+JHmjSvGbvwDdxhyZSczOCGC+S2SOmY9aFx5VT4rDi4o92SIgXaYsciSGDyKXwLkQgFV3MlJjyZqTrXnxlMiLyWGtuqhtpMtmZTD6LUNy81dgsvA+PE1wJf2u6W+fY93PjxrIQVq01XRruA49tBR9fWyydbgTDMZsWwcotP2DajynyOscOotOSgYgSAmAXaynvz6p8FWDoaNG64/s5NUT4HxlaKfJsM38sLVBl2/NpHmBBOah5n4PdIFgU2J3w+DkIyn+aE5oOneuGLGJxfMji3WXPKg2qgacP679th/mZNqs3DHnFAhO5BIbfZEqS1FkfQfqmH3UDA0xafeG4WK3qSeEkexlOGLuHxjVPMtpO/BxS+kWBnnIzzbJYTYz7CE34bHlPJjXHzNXrLpXDQKirRVkO29X6K+mcAB0LLF8uo1QIk+sjO8Gb/z41B+kvzuMANFZB5fThrCWp7BZ2d2lc9Jxtlc93LDhSEy1EjeIZVtISIw30zKnl/DGo13JaYuhO/7Fvi6JMm0auO0SWHTcJu5r61oncnJKGK+Z5t1uoF6rjhJd2Mt/EOfyKK4hhUlI6OCfhdkNniMuBHU4pQI2x8IiWfJRq+H4ckVZ8yUyoWcOI+O48+RZTToxQ+lU4/KcxyxKpbuSySGKkFpOTEU51lcA5ScGgSz5Gj0aPrtq/LzdJg1Dudy + POSTGRES_CONNECTION_POOL_SIZE: AgCkEWDhnsyUaXe5/UsxPb9tUgdC2Wii+npmGfnc93y1sGqeP2jZxOm/I3mH0sf+nGfOYoVI8+uAlaXJpdylNKk+1XnPMu2Ckv4B15HIGwJ5vUgmbdVP5RR1+2a1NEauvJIHBIUhn3L6cjGU6a8X4S05IhAmtacJYfyYfGnEC7MqdkIUWtVXYizHvDsjEPiJXDOeePcwm9y5f2OXizYEmggEEUxKjNZxPPyHLenutHn4WobjZosYZDC2FZEun/fFWRr+i6EJNmdBEalHZHughUOQ1BeXK43YmpngXSgY1aRze7pB02HdkLXYQO/CSXG/zeYOEx592zOd3Udj68DFUktaaiABokUmiiMa+mZ3lD1MTIXOfflRyXm3grW5uyLsf24tqlLDh7i2KvuIbnyl7lwDaH7wggn4qgZIBW5pBYx+vQHKMnbkrkKca7szQTb10KTAyF3PsOWFVJ7Rkws/LSeoqnWRxFKCI1xJUJz+O2LyEOMCPmce6fl7vfRXJEg7jm7rBB/3tvoNupxZdH5vCTY1iY90NQIj7MLiY0Bq2DYcf4Bq9Y9A1GKFUsuGTO4zD7NghvKNDOeGCQzUnibetZyL69agbHps8xi4UaXR0Hpiewyg0ADyHWVjHww/NqKEl+P+5+hQL0olz0WQLRYyHokwt+9pTdve1HuyDWkJrvAM5goQfdYtEs4dLb/fYD0Lf41AJ+o= + POSTGRES_HOST: AgCHvoVwMYnbiUhCkus7jTk4Tsv0ebkc50f+2e78E3teUdBrqyCxcSrXRsenM/ci8Ts6FlEnirYjpRd7KKC+EEuvOX/4qElj+/1QUuGzEHOAD0TDfZfl+Py7aCRN/APZyTng4+0z3c4QZuTDxz5RBIbY3+uWYSELELQ9yPSYatqQEuFmWrqvT/M7wXpkdBPqVYJnBkeKAEVJUlFgSGceIEJwMasIly4SuSv6sCVhr+EoR0W8E7t8rKVGrXYCQV3TbgrjCbnkUgu51FC8WJG6CEu4eQEIubec8UsgVwHV4xh2MH/FuYAwBiEbvt4js+C5wB4hvEdD3T0Q0sdFdGOVFc+O+b6QxTb6dzyibty9W8sesZO+jSaI7D88jQVjqfbZZW46Y7FTSFfxCeMNBgtKAWullPVInrtSotPy0Fy+egOU8stfHofVq7kYjkEhbL4HUUfgMXprASqm+t8M0p6yRDkzgIidNxjlA7BDbzA/yEwdG5iZiGpWpSBVWA0Su+80bSySNgKbQ0G1t/DBLA1K9ddhRUL2GayXhtsY12uqyMNCid28n+5NfkbuUtRas7dq3vYsmJWRWR5M9AcyuJyYhobSfsXF7UlruBoA6mm7Ytl62Mse0tvsVlsqbN2ixRqYFUkYmnt5wYOitCg8vvbaaMTrw8hinvZmCDw+LXFtJ3LkWoRb56UNRRDBELwunlXdaFsqzSvesa4hggsPdpMLRSs42Cuafdxa + POSTGRES_PASSWORD: AgCx080sPCYsRDJD/OsPsq45pUnuBNDMEnzUNzvtuQDAr9r5UzNUy4RZ0ApaAXwydoi8pI0mebQCKwvkKg7OuHw8w2N5NPlk88gD+bpoRsxH6a1uDMOBZzKGlOGltuZN9HkSBPInCqumaB/m0nLVtK+/5NQw8tfTQwylp1aYU6F0IgnoPVJGxIzoNyMcPAPj9XDUH4loSUGjIzaAqwTvzonadIro41ONtOAK9tAErRaXXiUzqMRwc0aWcZjMyovemYKW6Q/kPUS14KZoDLRkJFuUmW6FYI2GXI+2Mmnv/HnfS13Kb27klK/YP92tH0ih38z3UoBNCboaKjtVjRS9UCPBXcVCmqLAiJkG9tXQAtzCcV6SWG3eOTCi5SmDNjG6pZlSQE7iX51E/E/qFjoFx0rC4AnGy6x/OMsjXH49lxAvk8hXArFEzjG2hUUrR9hGPg2ChePf4xrww/WmxaAjxrkrPbnqZBIywxBryoRVPLD/EW/LmvR2KBstxvSx1jU9EwXQL15QBA2CkbWAsJSSTxokVLkgVNSL1aP2BLYdw+j49UTKkHoIyyUi6oCj6xQWYv0BmsJWnqzN73KF8F/nZFqmX8fdK8MiCyHTRKah0mFS6hLaHAm+lcxBzc0gsanmWJ2LYY3u1BsWMKxRPyk6aeiv9rTn31x3yHw1wiN2Ud8AvGHMnks09EIdYFYUFHWZjTZm+t36d3o7cS77dwG6PQU= + POSTGRES_PORT: AgDO2XGEciiWIM42olNtovKpkJDeBDlZQbdPHRKmCbnLNmF93wRZCWWsp9gPma8DBi08zmkfnHv22xaLkRTnSYS98RJPvC1ma6qkY6mH90V37kPgS9TXNXP4EcjqkFeInGf7sQ4LBoidpjD77sf2Xx1/EaEswY19/3Bg90DsHuaazdGtGYOKyTux6y3HYkSgbxhRRC07mM7f4oP8ezEHcETAr5k5MbRoHYhVuXbgICpt4P+KG9mPtjZW+ADj1EM2vAl2N0l/OTcBSozo/fRo+S7Wb22oA4fq27C46mzy6U/yOohq9yggByTn+hoUZ/S0iyoPv3O1Dz3SBXBIizpFkBtrUwDsBKeY9mMFSNmzlJUgQhnNhSymQwfjGy1qlNOtVlzQBhvpwhU6jP3txWbMDnappGx0rSy19WvN/15zgl0gy+msl3ErGoH3NfPhH1If8sl2IJhmxCpuFfk9OY29AjDxSLxilVqhVeLXcoCbPKfTAWIvvsUamOlaWhVz4kYvW9umbsjWLYGEVaM8jFQMikAT+vqjnsC3KiTywij3xr0GcWmdEIRCLJv4WlYyeUFtYRtzcCZPzU2WSstbwoqkmighRW5sn/z7EQ8ITbOG/iwpQZnYIZFLsoeUzKH8InXL0HV07MRfTLPoYSMdRzHkIi3KzTZkoIenVhh0BFFToeiUnG9nNoBscipw+YamfNmO6LW6CdTs + POSTGRES_USER: AgDS59UUkh8dfnLI0IpQMO4+ODLa2sfkpIkHWvvKViaesHGCjPjGMHhhSgeSEgkchoUG0lqwpBe7/vzoNcrHhIALryfYvc9sDnewF2JBLXMjA7eiO0R+z6XIsRVjFslNSxE+YiRyx5YGj4WcILL2Nym/nPYxV5DicmonUbkQIK5aHoA2MgamYmWBTmxncnwf9Y0C75ymsYNXAfEh196wldClrNTk4f3A6ByqwheYq6mYRTKzbcnyvVa2sI4X5gVvKL+ntZsyIY8nPxm2ykqGHjSjHtaiZUR//tWm+jcFKI7QSOedprcPjlZO69TnMLL4p8ySXTiJ9W7MccExlVtAlfeFTb18qiGCfJlfdILuel0nuQu4VpQZvwemITIiyHcm35DmjDioTLi9Dlr7he69MPalOHIR+O9nBra2PpRXOxMyLaNoliwAB6YG+KeZmQGHARO6bD7YSBeuht7+E5GIgLcWg9007e/8ZSTzHSTEuITjhtgR7q3fCiVfIoDOJGdhkw3X7h7OLNp4BFYC9IrQ3d7m4FMm7DYbF4Lc+sKt9pPZn88chCm302IBdtKLc8x2DFwTXdmmKJfxH5qabuzANjumI9ODkkIlBLj7eSKKqQ1/VLIodLk2WvsjPFsNlwvqp9gG53MyYa/PRNFRoTDWnb/hVQZj8Micapg5bQ6/QAOq/rmdXEcuWq+hDUPZdyEOKhCyqe+NEg== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: profiles-microservice + namespace: microservices + type: Opaque diff --git a/kubernetes/base/microservices/users-microservice.application.yaml b/kubernetes/manifests/microservices/users/application.yaml similarity index 93% rename from kubernetes/base/microservices/users-microservice.application.yaml rename to kubernetes/manifests/microservices/users/application.yaml index 6a9ea67..90cd00b 100644 --- a/kubernetes/base/microservices/users-microservice.application.yaml +++ b/kubernetes/manifests/microservices/users/application.yaml @@ -7,10 +7,10 @@ metadata: spec: image: ghcr.io/archisman-mridha/instagram-clone-users-microservice:07db74b3dd4888026a2e852c6fca860157aa910a replicas: - min: 2 + min: 1 max: 3 resources: cpu: 100m memory: 100Mi secretName: users-microservice - port: 4000 \ No newline at end of file + port: 4000 diff --git a/kubernetes/manifests/microservices/users/sealed-secret.yaml b/kubernetes/manifests/microservices/users/sealed-secret.yaml new file mode 100644 index 0000000..4b1bb34 --- /dev/null +++ b/kubernetes/manifests/microservices/users/sealed-secret.yaml @@ -0,0 +1,28 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: users-microservice + namespace: microservices +spec: + encryptedData: + GRPC_SERVER_PORT: AgBxBWcqpf2fhA82n/jMcrS20fM5O4ZI5T0luPZiR5Dwm3AzbGkHcIujQ4EDu70EsRAyxbxtS6WNVIGul9BkNhBWPi2ZKEypX6kQdVI3VssXIGMqEIUSsmsj+0XaCecYJyHbv/pDqfvXMkCURguk24+vFrwTsHTiLEapi+IGkz/L76FhHHn8Mv21gyg5NCFJhEci9dYK/SWzHouXkn0FOMHu819PZR+bpPId8nIDpxHHVwVl5psC6Bu4a88ycUTOHSO7do/eCas22fL9HI7tnwlulH8hgq/cFeBKzBGnEdSQnIpMNx/kvy+cxIm0S8CLnhVDg6HEelrMEuXbHOtZYjwomqWAvTHiYj4iaVFTg2tAMYMZjw8LNRaoajIIPJ4a+1PDA+G21W7GI9YLnHrNT9y21vm9JXqDlqGOHiRDO52XRS4tDZlMQuvWMoFA4PtQmURCXYHgtOlfbH9/Dq+206gaLSbx7lSycg5vTxTKE32yNYAr8u24hdW7Ckq1mWZEBqUzdSG2IGPBtg4x9KEMG2QCYhxnvg3q9GEoi8BuslUG9BPh0XrY+8uN0rX+nKCHX4dZmH0V/15jig3EFgY+iauI1MGEaCIhwYGz8UMmvijoFq/WY8PpUUEcDO5vuM0P3layFcR74xa5d14LhP8SGn5fqAyeznLyDEQ1E9qKmXZ0gTInDdvrAjKPOxybkaoTyO6+pBcu + JAEGER_COLLECTOR_URL: AgDaHsOjsRtKpQgXzeYFIt+bGukOT/KooZriBrvlHbUpO+xTvGPLMDqiU+fh++A5LX51S4IZg8fFlzAqzwuXoJgu+zpifeCTOCqc7Qv2Hr5ceyAqUOBWri34nndAVTNy5E8geKLQDsm9gfGM21Y50eZbwsNj/bpG1SmGqDjU9Rpuw4zsYeL4HXdEp4uoPTMJUaeJKc/MsfpOEVvI2g7nH3CxIawM+m6DBNLoYsUEV+ZXh5bB3ubuJLHNolQEgMO4f7HLWx53vddTjrTzMbcJSIpBBddL5p4ajR7eZ3xy0N3XeflZV1s43LSJKEAE0KtIXFRU8DEj+wT4Her5acOnE0UMGjB8vMpLP7V0gTe+K9vJVziDaV2Oh9vxUHXs5LMKc2YIedsaCe4mjmCtdIk81xrgWbUUwnm4IukBipDBzyFS+9zjoVqsf9F4K4I+u7nTgZUW7iskn1W3x/x9TN1Z0UymqU02VdIRfsa5+psBo1qp24RLriBfXTwLGD5ZpuwcQrs9bWrJ+ulkTPmDxIXbVDSDevUHFTJJvI4hYMuy9usnJMlQ+2cdfNR9rxynA8bDu79ZLAcZPBcIxmfecJ1FbQR1W5Q4gQwKN6Zc6XAH5FmJyo0dgc854t9ry6MKy7S/BTDSEgRlzS2EbPvpWUTBOoQwZK3YgZAhuCkYtCqh9rzkeX5FrmTSkXw5QXRygm3+TZ8Y2vpLwI7W0cbMP3ZenNCW1c2P0lhoepf14piSzPXEBNrR0w== + JWT_SECRET: AgC96H0n0iztIpP9xjUqpeY8VPNX6Eiq567vbJf/5VLTjE1Q4vKosBnh3zAJGO5jB+IQqVcm7BTdCryFOjtP2QZx6wj6b953je8ioa1Uszo+RhrbGektTqdZHN8vOUgNCJ31y+arDAgB4hzs0L2G1E8xi3tanv4HEfF+w/0Jchol9IYsW4KJN3O18EqsKB6g9fdljbpUj/VX0Z1dgrzfLZRxYa6uCmQuPGx1OAHvt9ut3n5Qke4llbBd/1de+3AlWpLfBAwZPRVFmtp6ap+1muTqMweswLIREtchdQNBDTHbxprW36qiBEpuIy5A85uq2l65bQq72EpnF3e7ZzTidyusGCyB+B9IQvdSFevPjIDLKX6EqZGz12Roe4zsrrNpoN96fuNCHfarUFl7ZgUOVU7fDuinsRozr8hUeWtM+Wg0KtqqacEQsrTq4QvD+G0/9YS70IMnyo8EJyyMHubne40e4zRiU16gm2wsjNA60eVleJZLnOgqlJDtvPQmqV3X0k4PsMSjgcGsQr0L+71Z4sgmjc2BPjOPHgbK1ZYUC8wXc8EE3YfyiWs73OUqBLQIMjW6zkE78LPZ5fRoWxW/RP2NrKdlOYwXRzVMXXH9kQFBO3do6JXBrhd6u+YjOLVLBCZTaPlNzD0oYHSwJnx8+zPPvIyvWnw7Uko/h7wVFcN4wXl1B9qkjjYiavZGmnQgA6R2UqIjdTI= + METRICS_SERVER_PORT: AgCpoKVjoRLR6jvxepRnLMjayDzXsvDtxyaxKRb0yWXfuq2x67PVvJ9syfeHGNjAqPAuC+0fDjeU8qL32+yX9KOkfWR0otaqpOe5AuvZdneOa+7meqCgETQ1JP/KVsu3Uy1n31zUvfWUJZac1riiSTU5eN/cBq8SZ6/bL1i6Ya3+INhzJrqHmp2hYPib1iDSGDLbrfYKctkJeuQ/9PKYe3iBbIkyfsR1LqGXl9CgHqJXSTFaIQh2Ct1ttts2CFEHJhVCkzfl9RirqfY5xmFo6t2yHyoAXym5ydrM34M1XQcebOxiktcNZkP4KcUkMJgR1bS7XXWkgeAXG4YxTBXJqfTPWKs/uxt0rb7iy4VApC/uHnoiZ0N3VyS7NpYdb/abfM0VBs8Zo66d1eO6Znw7EijrRrI7CO+K6J5dMXWwQIxsVxuOqH4wOfAQI9ujSlwNWbMZBd+yVtkyFh5yj2vF0Dr5DmcE6/X23GSIC1vtNWXykCIIlZdIROfHZbqy2ZKifCZpxBMozUwqDLjXzWB14PT0I423sdlZ4++NYoLRb/kXqFJ4KHSvfOQN3aWYbQBrH5+wysffF5U7RqFUpwA4NYUCkK7uwVGC7vaSLNX9S94X9TdP/wVhgiVkV+XZMvKEThBoGHzQfcjrvRdcUrG6aWH4FBdRhM3yIo43bxASrEylwQ0T9cbp2JAFBQL1R/4Na2kRpIKU + POSTGRES_CONNECTION_POOL_SIZE: AgBGQXzaHnahunuLJdiyjUa87D/7e9g1jEVXFfar4cgBdyyuzHd0waNJwfhQYhJvJN++9uytnTR923Dq+sCwJZHEdmvckd6ETXDwsGxvdT60JoIRhC/2O2FBt5fa3NkfLtFs/FNlluipkDSsjGyD+Sbz52DFuoktJ14J5aBpVi//8PGBA+TARfp6842AhlOU3HF1RwGrhcVoN52hU0v5GtusJv3ifpJS+MBjfWsg0itINH2dPs0fMnusfOa8nNqoQl5pLNMnYD0Tr+/C5bx687vNcW/wvI78JaE6Rw3z+Z6ELhrP4/W0PckRbC5HFq5zK+ufwdvx1/pDaJOw0lxTC1Q8esoxdt1jM1Jx88TD58MHWoJdSORzMLFB1LzdczaC8WCzqFubD5HlZ7y7aQ/+wVYl2Bkxu1ibPcSF6vPtHTyOSRQael/VYyUGyJlG9eZeVk1ApGKTUHkL62jkJjArNJ7vWHebsdWgRW4e5rifl+fTdGXLzU5ZvQtRvIkEmZfkXrL4aSdjETDXBqVlgaD9SFiFwzrpj8EpOKcyK0XkaKroGdUpWQxU15DdQ8Sd4AyCWWN+OotrK1Yh1ZDYqtDF+gSZBDRXD3cEAJ290FbBBVh6q4khw/JKpOGTb36oDYB+ZTobMgjUNeExkUgzr+uV3jtrEb/VT1j+1NGyKez5F80B/TM9HATII10uC1T5uYm7MZpdFMo= + POSTGRES_HOST: AgDiuYt74C7DKB3eYxJTD8C7ygk3Bgo9xkN+ad4EnO9elEoLbcCxlr1gs58uxCArrxLjD1GSCsojmxuGXV6vAZbL+k5QOmEFNqUwf4MnFh4LNx+QKYZJmfk+QZB9sQHRVuGTQ6tJWI9qW65A6ab4bzbvtTeDquZ1XDPAqR2xD6YlgrFL5R2vqarNW2hh+y1B4jk8ZRINu7F4g3IMZFkYsSZ6zg6VADge96ndfPMGhfxU2D9qthLy1khCsMi/p4tG22r5LyYABwdlg/NK6rRPCiV0YnVm1lwtSDa2XrwVAiN/jUNk1WkMZnPjmpP4egaKJIq4usxrKTtupGaMx1e3YX3tdcXTnib1YUJngHS3GzCOAJsKWa79gjJ6nKA1+ElyIk4FVbb7gZD5JlJZ+ymTYnAlsxWDcKeQRIqFg5zgcJOnKPUDZDzyPiTPbL4sN8t8QyGcb3+PEvtseVUEJphrUoYmsu5vUfk4BLUHtSX6RCyl+l1mjevnubGCnXxHeMj9FMl+mq2B47OEFiCnCKveij+M7tdC018qMtwEjXfwKguBmHMrwWZvMbXVncEEtTZs43NP4mzhtNFk33LbZCDmm9yS8mWRLds7p7PetQf3O6D/Auxgr82qyoLZdeyhee1aM+887JX8o7W1NkVOvnL+5V8xeEGBWFTRdkdxXjHXp/FYbEblnJpyTOXhWUzfMDLuVJ4yEbBqAkFhguO5vrl1NmULfQJyLYm/ + POSTGRES_PASSWORD: AgC4xgGUCjm3DIxbwrfz7DFTYREKvomS5KvGjFoycZxJ+4ykhZN8rD7mo+PKKmS696GJLrSa4MEzp8m0WD3w6YXwScfvbhE/kogdb9jBPiW0M094VCZ40WoZjI3Tsw2beklHYk809A7piyok2oVWWdYDFL+rUk6qn/cM2Proa+yFmAt2WdfndCrtGJdaYZeS+5jsrsUeibbVRcrlRpbsGYjtSgI/QN9blUccvxaWNRn37WE4aRmTNoUGB+OoWtKib0/ttl7fNcCCkVxCwsfwSldYIvkbJfhJ5A7Tbd3rkV5HMSS5/0HKTXZ4tlXCyQ8GGQaKQdPpxlEK2fg6Y4r7jFjRyClVmfpdOhK3413KxWNurjtkoWaZsUCamCFbYLALYkC1ofWmapEVdTXVjCaApUKOPT5BkbYW/gE6VxSC5luOcoQ+ExKrfAo8KHDchNn4IL+dqbJ5n7bN9OUnHdiIvM/KzgUOasxzaqSDosPZZwXo9yJxqAz/SxWv5WfF8WUDfTKzQcpdw2zwRBrqgq/qqXZV4pKNjXBL6OfzxGQqXQL6zz4z21+L6Z+ga6mtercPD6mbtPBeTbY+mzXcxE7jrPw1qv0YjyLrvYDIS/Yrcv/KmRasLMg0xNDGou3G9s5Lq3y8Lg4cUvJFtg6iUo9SbrcO2XPm+mi1cj/ZNqt0h1CcE8470D31xCKcntwqzknwZ+wI/JNPeegOZ7U8+n+Ugjo= + POSTGRES_PORT: AgASnaHo8O+esWfFaf+Q2krtvNEAArPT2pjyFYocWJEPItuY9dgTrfyYN4UCsRtHZbsr8667LXWL0uhBD1/NH9fQjYYSL7sQKF4ki4dSpg3HIDfqlvzTL1AfIQTDmdm+reX6fQJq/+neOeGxsp1IwK/FAwSg+Ku/kAwagTpAEvlDJaBcpipqHCmCJA6gjyKC7u6juuR5loIol+e5g/5S9ieZcwDyUw1bOIhY2bSZeLSOf7CCUqLb5NXhhTb4R09teF6ieR2QffLIzWah+kvgvh6JKkI26KoGsdY8vk7SxP1/ms/agqjxSNW9gGUy73G+Sg8W2udej8YQ2sursfM2ArRJSVwQeo9z02bjf+EEhpJNyxb8LAzaw70eQsd21K/G3oVSbq24NrWs7mBF4vOJWNARWJjtveVtbJBuHLlrO+sv6vm//Kmk7NJ77NCZVj952ozRdOVgFBz5aMphg/ahAfqfY6PLgLVuUuEt3CgXdKYsZAS616NSg4liMJbyGO/zIW5uZMIDSOVcNuUdhfZJky31foPu6TdNECLpyF7Jbdj1+2R5cg1yi8AueXYl3v/Uvz0CLs7VIoIFaKDGqeGCu1w0949YRgbSxed3fvTLGhH9fqiC0uNZS0wyK87HVCVlyh55NdLoH1Qt1LR4zMfkugh1867wLVjf7+CUCNAK48QD2L/PiuAk0nnVmzYeAOS6t1LfKVhl + POSTGRES_USER: AgDQws9c1s+lhJIuIW0bvrrcjKC27MvSRoeV0p0J1FFjobZAHQ3NQFPAWb9Yy5QDWZcPg4U2pYVQ1+KM5hVVOk+Y7Cl2JgJX5/JGZOgGy3ubaV/J6tNULE+DzAL0LF5/PXrd+c2uZRNxOUgKWl2S6GjmjKgslMsHNmKIsCwAOzWbtqbaJToRUo+24pwVbqKpSiUyjk96jGHD16BufkejmrDAuPm4hipbrqMKFSWh+Ci1gPaKroOuKSw/PUmclh4YCIV3OaRNWHNHUsu8WGkKg9QNoHYPoS7rpgbMUkOEVsVNVGLuBciABq9ewiALxFwwA6HivvkD2q4snI34Q8DEKEFZNe1xDZ2oyYBxwxtV9taOnKTN7RHeJo4VR41FAgMfu5MSoRCBKmtuKZNQo/4sFJp4jxWY87me1GOUp5d/giKYxhJv4aN+B/MIeU3aL1btdFNcAz9vm/yzPAXuhLx2chXxz/XAJZ4WK7uTRjrQKLuhWoKV6JmO1U4b5q6W01fAnjgrwPVFWueBNLq8Q56l/M83/EMrNHpIHw1u21Dcwrn0lCGnNEOYY3DES3pzcA5o6XCvYHap9BhS1Ot1eCZu9ISnANEWeiS6vra7iYo85crOMg5+EIaBvSqNGMcMHzgLe7vyi9YeN19PvjTq3jgFc1lIuvaufKKdorgXaEWWuaFZ7j40Zu7MuAEsunxJGqU4Tnfceyqm0w== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: users-microservice + namespace: microservices + type: Opaque diff --git a/kubernetes/manifests/opa-gatekeeper.application.yaml b/kubernetes/manifests/opa-gatekeeper.application.yaml new file mode 100644 index 0000000..ba327de --- /dev/null +++ b/kubernetes/manifests/opa-gatekeeper.application.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application + +metadata: + name: opa-gatekeeper + namespace: argocd + +spec: + project: default + + destination: + server: https://kubernetes.default.svc + namespace: opa-gatekeeper + + source: + repoURL: https://github.com/Archisman-Mridha/instagram-clone + targetRevision: HEAD + path: kubernetes/manifests/opa-gatekeeper + + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/kubernetes/base/opa-gatekeeper/kustomization.yaml b/kubernetes/manifests/opa-gatekeeper/kustomization.yaml similarity index 100% rename from kubernetes/base/opa-gatekeeper/kustomization.yaml rename to kubernetes/manifests/opa-gatekeeper/kustomization.yaml diff --git a/kubernetes/manifests/strimzi.application.yaml b/kubernetes/manifests/strimzi.application.yaml new file mode 100644 index 0000000..8911acd --- /dev/null +++ b/kubernetes/manifests/strimzi.application.yaml @@ -0,0 +1,25 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application + +metadata: + name: strimzi + namespace: argocd + +spec: + project: default + + destination: + server: https://kubernetes.default.svc + namespace: strimzi + + source: + repoURL: https://github.com/Archisman-Mridha/instagram-clone + targetRevision: HEAD + path: kubernetes/manifests/strimzi + plugin: + name: kustomize-enable-helm + + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/kubernetes/manifests/strimzi/cluster-metrics.configmap.yaml b/kubernetes/manifests/strimzi/cluster-metrics.configmap.yaml new file mode 100644 index 0000000..d10838a --- /dev/null +++ b/kubernetes/manifests/strimzi/cluster-metrics.configmap.yaml @@ -0,0 +1,183 @@ +kind: ConfigMap +apiVersion: v1 +metadata: + name: cluster-metrics + namespace: strimzi + +data: + kafka-metrics-config.yaml: | + # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics + lowercaseOutputName: true + rules: + # Special cases and very specific rules + - pattern: kafka.server<>Value + name: kafka_server_$1_$2 + type: GAUGE + labels: + clientId: "$3" + topic: "$4" + partition: "$5" + - pattern: kafka.server<>Value + name: kafka_server_$1_$2 + type: GAUGE + labels: + clientId: "$3" + broker: "$4:$5" + - pattern: kafka.server<>connections + name: kafka_server_$1_connections_tls_info + type: GAUGE + labels: + cipher: "$2" + protocol: "$3" + listener: "$4" + networkProcessor: "$5" + - pattern: kafka.server<>connections + name: kafka_server_$1_connections_software + type: GAUGE + labels: + clientSoftwareName: "$2" + clientSoftwareVersion: "$3" + listener: "$4" + networkProcessor: "$5" + - pattern: "kafka.server<>(.+):" + name: kafka_server_$1_$4 + type: GAUGE + labels: + listener: "$2" + networkProcessor: "$3" + - pattern: kafka.server<>(.+) + name: kafka_server_$1_$4 + type: GAUGE + labels: + listener: "$2" + networkProcessor: "$3" + # Some percent metrics use MeanRate attribute + # Ex) kafka.server<>MeanRate + - pattern: kafka.(\w+)<>MeanRate + name: kafka_$1_$2_$3_percent + type: GAUGE + # Generic gauges for percents + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3_percent + type: GAUGE + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3_percent + type: GAUGE + labels: + "$4": "$5" + # Generic per-second counters with 0-2 key/value pairs + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_total + type: COUNTER + labels: + "$4": "$5" + "$6": "$7" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_total + type: COUNTER + labels: + "$4": "$5" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_total + type: COUNTER + # Generic gauges with 0-2 key/value pairs + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + "$6": "$7" + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + - pattern: kafka.(\w+)<>Value + name: kafka_$1_$2_$3 + type: GAUGE + # Emulate Prometheus 'Summary' metrics for the exported 'Histogram's. + # Note that these are missing the '_sum' metric! + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_count + type: COUNTER + labels: + "$4": "$5" + "$6": "$7" + - pattern: kafka.(\w+)<>(\d+)thPercentile + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + "$6": "$7" + quantile: "0.$8" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_count + type: COUNTER + labels: + "$4": "$5" + - pattern: kafka.(\w+)<>(\d+)thPercentile + name: kafka_$1_$2_$3 + type: GAUGE + labels: + "$4": "$5" + quantile: "0.$6" + - pattern: kafka.(\w+)<>Count + name: kafka_$1_$2_$3_count + type: COUNTER + - pattern: kafka.(\w+)<>(\d+)thPercentile + name: kafka_$1_$2_$3 + type: GAUGE + labels: + quantile: "0.$4" + # KRaft mode: uncomment the following lines to export KRaft related metrics + # KRaft overall related metrics + # distinguish between always increasing COUNTER (total and max) and variable GAUGE (all others) metrics + #- pattern: "kafka.server<>(.+-total|.+-max):" + # name: kafka_server_raftmetrics_$1 + # type: COUNTER + #- pattern: "kafka.server<>(.+):" + # name: kafka_server_raftmetrics_$1 + # type: GAUGE + # KRaft "low level" channels related metrics + # distinguish between always increasing COUNTER (total and max) and variable GAUGE (all others) metrics + #- pattern: "kafka.server<>(.+-total|.+-max):" + # name: kafka_server_raftchannelmetrics_$1 + # type: COUNTER + #- pattern: "kafka.server<>(.+):" + # name: kafka_server_raftchannelmetrics_$1 + # type: GAUGE + # Broker metrics related to fetching metadata topic records in KRaft mode + #- pattern: "kafka.server<>(.+):" + # name: kafka_server_brokermetadatametrics_$1 + # type: GAUGE + zookeeper-metrics-config.yaml: | + # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics + lowercaseOutputName: true + rules: + # replicated Zookeeper + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$2" + type: GAUGE + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$3" + type: GAUGE + labels: + replicaId: "$2" + - pattern: "org.apache.ZooKeeperService<>(Packets\\w+)" + name: "zookeeper_$4" + type: COUNTER + labels: + replicaId: "$2" + memberType: "$3" + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$4" + type: GAUGE + labels: + replicaId: "$2" + memberType: "$3" + - pattern: "org.apache.ZooKeeperService<>(\\w+)" + name: "zookeeper_$4_$5" + type: GAUGE + labels: + replicaId: "$2" + memberType: "$3" \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/cluster.yaml b/kubernetes/manifests/strimzi/cluster.yaml new file mode 100644 index 0000000..6494b79 --- /dev/null +++ b/kubernetes/manifests/strimzi/cluster.yaml @@ -0,0 +1,90 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: Kafka +metadata: + name: main + namespace: strimzi + annotations: { } + # strimzi.io/node-pools: enabled + # strimzi.io/kraft: enabled + +spec: + kafka: + version: 3.6.1 + metadataVersion: 3.6-IV2 + + replicas: 1 + + listeners: + - name: plain + port: 9092 + type: internal + tls: false + - name: tls + port: 9093 + type: internal + tls: true + + config: + + # Determines the replication factor for the internal Kafka topic where consumer group offsets + # are stored. + offsets.topic.replication.factor: 1 + + # Default replication factor for newly created topics when no replication factor is specified + # explicitly. + default.replication.factor: 1 + + # Minimum number of in-sync replicas that must acknowledge a write before it is considered + # successful. + min.insync.replicas: 1 + + # Similar to the offsets topic, Kafka uses an internal topic to store transaction state logs. + # This parameter sets the replication factor for that topic. + transaction.state.log.replication.factor: 1 + + # Minimum number of in-sync replicas (ISRs) that must acknowledge a write for the transaction + # state log topic. + transaction.state.log.min.isr: 1 + + inter.broker.protocol.version: "3.6" + + # The storage field is required by the Kafka CRD schema while the KafkaNodePools feature gate is + # in alpha phase. But it will be ignored when Kafka Node Pools are used + storage: + type: ephemeral + # type: jbod + # volumes: + # - id: 0 + # type: persistent-claim + # size: 1Gi + # deleteClaim: false + + metricsConfig: + type: jmxPrometheusExporter + valueFrom: + configMapKeyRef: + name: cluster-metrics + key: kafka-metrics-config.yaml + + # The ZooKeeper section is required by the Kafka CRD schema while the UseKRaft feature gate is + # in alpha phase. But it will be ignored when running in KRaft mode + zookeeper: + replicas: 1 + storage: + type: ephemeral + # type: persistent-claim + # size: 100Gi + # deleteClaim: false + metricsConfig: + type: jmxPrometheusExporter + valueFrom: + configMapKeyRef: + name: cluster-metrics + key: zookeeper-metrics-config.yaml + + entityOperator: + topicOperator: {} + userOperator: {} + +# NOTE : Use this command to get the list of Kafka topics : +# kubectl -n strimzi exec main-kafka-0 -c kafka -i -t -- bin/kafka-topics.sh --bootstrap-server localhost:9092 --list \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/db-events.public.posts.topic.yaml b/kubernetes/manifests/strimzi/db-events.public.posts.topic.yaml new file mode 100644 index 0000000..24c69eb --- /dev/null +++ b/kubernetes/manifests/strimzi/db-events.public.posts.topic.yaml @@ -0,0 +1,14 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaTopic +metadata: + name: db-events.public.posts + namespace: strimzi + labels: + strimzi.io/cluster: main + +spec: + partitions: 1 + replicas: 1 + config: + retention.ms: 7200000 + segment.bytes: 1073741824 \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/db-events.public.users.topic.yaml b/kubernetes/manifests/strimzi/db-events.public.users.topic.yaml new file mode 100644 index 0000000..40771a8 --- /dev/null +++ b/kubernetes/manifests/strimzi/db-events.public.users.topic.yaml @@ -0,0 +1,14 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaTopic +metadata: + name: db-events.public.users + namespace: strimzi + labels: + strimzi.io/cluster: main + +spec: + partitions: 1 + replicas: 1 + config: + retention.ms: 7200000 + segment.bytes: 1073741824 \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/debezium/kafka-connect-metrics.configmap.yaml b/kubernetes/manifests/strimzi/debezium/kafka-connect-metrics.configmap.yaml new file mode 100644 index 0000000..87a25d9 --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/kafka-connect-metrics.configmap.yaml @@ -0,0 +1,140 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: kafka-connect-metrics + namespace: strimzi + +data: + config.yaml: | + # Inspired by kafka-connect rules + # https://github.com/prometheus/jmx_exporter/blob/master/example_configs/kafka-connect.yml + # See https://github.com/prometheus/jmx_exporter for more info about JMX Prometheus Exporter metrics + lowercaseOutputName: true + lowercaseOutputLabelNames: true + rules: + #kafka.connect:type=app-info,client-id="{clientid}" + #kafka.consumer:type=app-info,client-id="{clientid}" + #kafka.producer:type=app-info,client-id="{clientid}" + - pattern: 'kafka.(.+)<>start-time-ms' + name: kafka_$1_start_time_seconds + labels: + clientId: "$2" + help: "Kafka $1 JMX metric start time seconds" + type: GAUGE + valueFactor: 0.001 + - pattern: 'kafka.(.+)<>(commit-id|version): (.+)' + name: kafka_$1_$3_info + value: 1 + labels: + clientId: "$2" + $3: "$4" + help: "Kafka $1 JMX metric info version and commit-id" + type: GAUGE + + #kafka.consumer:type=consumer-fetch-manager-metrics,client-id="{clientid}",topic="{topic}"", partition="{partition}" + - pattern: kafka.consumer<>(.+-total|compression-rate|.+-avg|.+-replica|.+-lag|.+-lead) + name: kafka_consumer_fetch_manager_$4 + labels: + clientId: "$1" + topic: "$2" + partition: "$3" + help: "Kafka Consumer JMX metric type consumer-fetch-manager-metrics" + type: GAUGE + + #kafka.producer:type=producer-topic-metrics,client-id="{clientid}",topic="{topic}" + - pattern: kafka.producer<>(.+-total|compression-rate|.+-avg|.+rate) + name: kafka_producer_topic_$3 + labels: + clientId: "$1" + topic: "$2" + help: "Kafka Producer JMX metric type producer-topic-metrics" + type: GAUGE + + #kafka.connect:type=connect-node-metrics,client-id="{clientid}",node-id="{nodeid}" + #kafka.consumer:type=consumer-node-metrics,client-id=consumer-1,node-id="{nodeid}" + - pattern: kafka.(.+)<>(.+-total|.+-avg|.+-rate) + name: kafka_$2_$5 + labels: + clientId: "$3" + nodeId: "$4" + help: "Kafka $1 JMX metric type $2" + type: GAUGE + + #kafka.connect:type=kafka-metrics-count,client-id="{clientid}" + #kafka.consumer:type=consumer-fetch-manager-metrics,client-id="{clientid}" + #kafka.consumer:type=consumer-coordinator-metrics,client-id="{clientid}" + #kafka.consumer:type=consumer-metrics,client-id="{clientid}" + - pattern: kafka.(.+)<>(.+-total|.+-avg|.+-bytes|.+-count|.+-ratio|.+-age|.+-flight|.+-threads|.+-connectors|.+-tasks|.+-ago) + name: kafka_$2_$4 + labels: + clientId: "$3" + help: "Kafka $1 JMX metric type $2" + type: GAUGE + + #kafka.connect:type=connector-metrics,connector="{connector}" + - pattern: 'kafka.connect<>(connector-class|connector-type|connector-version|status): (.+)' + name: kafka_connect_connector_$2 + value: 1 + labels: + connector: "$1" + $2: "$3" + help: "Kafka Connect $2 JMX metric type connector" + type: GAUGE + + #kafka.connect:type=connector-task-metrics,connector="{connector}",task="{task}<> status" + - pattern: 'kafka.connect<>status: ([a-z-]+)' + name: kafka_connect_connector_task_status + value: 1 + labels: + connector: "$1" + task: "$2" + status: "$3" + help: "Kafka Connect JMX Connector task status" + type: GAUGE + + #kafka.connect:type=task-error-metrics,connector="{connector}",task="{task}" + #kafka.connect:type=source-task-metrics,connector="{connector}",task="{task}" + #kafka.connect:type=sink-task-metrics,connector="{connector}",task="{task}" + #kafka.connect:type=connector-task-metrics,connector="{connector}",task="{task}" + - pattern: kafka.connect<>(.+-total|.+-count|.+-ms|.+-ratio|.+-seq-no|.+-rate|.+-max|.+-avg|.+-failures|.+-requests|.+-timestamp|.+-logged|.+-errors|.+-retries|.+-skipped) + name: kafka_connect_$1_$4 + labels: + connector: "$2" + task: "$3" + help: "Kafka Connect JMX metric type $1" + type: GAUGE + + #kafka.connect:type=connect-worker-metrics,connector="{connector}" + - pattern: kafka.connect<>([a-z-]+) + name: kafka_connect_worker_$2 + labels: + connector: "$1" + help: "Kafka Connect JMX metric $1" + type: GAUGE + + #kafka.connect:type=connect-worker-metrics + - pattern: kafka.connect<>([a-z-]+) + name: kafka_connect_worker_$1 + help: "Kafka Connect JMX metric worker" + type: GAUGE + + #kafka.connect:type=connect-worker-rebalance-metrics,leader-name|connect-protocol + - pattern: 'kafka.connect<>(leader-name|connect-protocol): (.+)' + name: kafka_connect_worker_rebalance_$1 + value: 1 + labels: + $1: "$2" + help: "Kafka Connect $2 JMX metric type worker rebalance" + type: UNTYPED + + #kafka.connect:type=connect-worker-rebalance-metrics + - pattern: kafka.connect<>([a-z-]+) + name: kafka_connect_worker_rebalance_$1 + help: "Kafka Connect JMX metric rebalance information" + type: GAUGE + + #kafka.connect:type=connect-coordinator-metrics + - pattern: kafka.connect<>(assigned-connectors|assigned-tasks) + name: kafka_connect_coordinator_$1 + help: "Kafka Connect JMX metric assignment information" + type: GAUGE diff --git a/kubernetes/manifests/strimzi/debezium/kustomization.yaml b/kubernetes/manifests/strimzi/debezium/kustomization.yaml new file mode 100644 index 0000000..fcb6fb6 --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/kustomization.yaml @@ -0,0 +1,7 @@ +resources: + - postgres-credentials.sealed-secret.yaml + - postgres.kafka-connect-cluster.yaml + - postgres.kafka-connect-cluster.role.yaml + - kafka-connect-metrics.configmap.yaml + - users-table.source-connector.yaml + - posts-table.source-connector.yaml diff --git a/kubernetes/manifests/strimzi/debezium/postgres-credentials.sealed-secret.yaml b/kubernetes/manifests/strimzi/debezium/postgres-credentials.sealed-secret.yaml new file mode 100644 index 0000000..2678d9a --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/postgres-credentials.sealed-secret.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: bitnami.com/v1alpha1 +kind: SealedSecret +metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: postgres-credentials + namespace: strimzi +spec: + encryptedData: + password: AgAlBBXJndgbTDY6lUouVraUY9mnjIUyg951hmrC0iDXJfDqbGyk/5LRPGpZkEbqh2eqAXBnlICfOA/IGIhqjUtyu5vhiK4AkwSmy43N7d0QgIRJaxwaZXGxCkVA70zXqs1yhREln4/aEmtzs4gQj+XiykA14/iitxWjRk5wO4bivMSF1+6TFzp6/dhkQnbdJfbvOBBdBaV6TKHUr/EYVH5NC+EgJa2WvAXigdm5ihKGhP5f0K3mx9XeTm64PK64If3ZTMdTMMRXg2J1zpeK1GbuUIZIvtDE9/u5HhXc3pwXk8pzfiAfFdk2ORuN+G+RNldua4hnvzdh241uyc1zJwaalY9KJUOOMWyuUBWB44TY32UxUB1h9yd8/dLcAN5ci1YkiPfsxxE7B72ldbqxZhfavxU/zmKWCaaf/RmrqfdUPCAmleEaMmUpfrnkepSfyumGwguydHgp7k/29hCyCf7X8s1XP+I0Mhb6YLlWA67h469rNbOE/KMGDYqZvWdkZ/Rza8utzgUdTgseBl0mAx4OqpU4urczYxivqruy0wGTBNno5indHekmx6ocmipj2CsORTpMWwFsblZMDQRjmanr6ERTyCz/jV2EXPY0Ph/sGFSwgi+RrVK9abv20gdlatENvjPrlUX7NPbFSvf9x2gKMz0CfMcdfcT/qQiMeebXwOH7+NvCYW/f96XR6p2QGh7P2m50rwmqc/SpnMXjll8= + username: AgA9TfiSBV9Yvf1igMLt/QNPMgLb84Az+QdM4tNPAFZq5gKtvaDAXcf7t0ctXDEfHJmLFl4ATgRsEBriod8zFoxE7jURZFh+/qaZa/YE9QJcaSc5bEmVEqir5rjdPZML/3KgWv2BXCDtYyRaJ+0s5/T2yAWjTw8pFbm1Q4XrbJqjn3MBKJL8iMhSgwT66VKXPbtkZkGEORu1xzH++hReth8EU7SA6su/GjpLd72p+cEWnwo5NyRHWONme4WsmkD2O70WoXXeTxrisSrUTumwQsHKEaOSHYDhdBp4dcCa/1MFofkOSqNOMW4DPIhpIHr2dolO79NfRrGrKVCHPaYvuQaX+G/QLdOWOW2KAiZcYQsXrUa9Z8h5Gf6h9qKi1Ak1sp9R7wcR8phYAjMFIFk3JKZtvf4wfUP7BsAon1PpHVnWKsfHYUHqAfEIwO1Fm97c4zwGdmgIs23q2qqtDUEX6qkGOIprdfaAcaVbqfB3IvknbaAGm3XQtzsaoZ03KeuGo04BoaHhpbtruJl6AqI9FxyI1HG5nqhYv7QlgriBR08CzSgLjCQiuvzM63jZE/6VQUgw536nO4vzHbPIZOPdHCijgB4C7IiyOnMPpz4uHWvn9FjKLDHUOxjbMHUhuSwHhe6AeDV+6o3yD+wqLtGzMJEBi3W+n9T3NP/bKbY9xfDuYR2Tjrq956+qVc30nb4OUI1BtNgLy5chJQ== + template: + metadata: + annotations: + sealedsecrets.bitnami.com/cluster-wide: "true" + creationTimestamp: null + name: postgres-credentials + namespace: strimzi + type: Opaque diff --git a/kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.role.yaml b/kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.role.yaml new file mode 100644 index 0000000..f234c11 --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.role.yaml @@ -0,0 +1,30 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: postgres-kafka-connect-cluster + namespace: strimzi + +rules: + - apiGroups: [""] + resources: ["secrets"] + resourceNames: ["postgres-credentials"] + verbs: ["get"] + +--- + +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: postgres-kafka-connect-cluster + namespace: strimzi + +roleRef: + kind: Role + name: postgres-kafka-connect-cluster + apiGroup: rbac.authorization.k8s.io + +subjects: + # The service account will be created by Strimzi once we deploy the Kafka Connect cluster. + - kind: ServiceAccount + name: postgres-connect + namespace: strimzi \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.yaml b/kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.yaml new file mode 100644 index 0000000..cad4eda --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/postgres.kafka-connect-cluster.yaml @@ -0,0 +1,49 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaConnect +metadata: + name: postgres + namespace: strimzi + annotations: + # enables KafkaConnectors to create, delete, and reconfigure connectors. + strimzi.io/use-connector-resources: "true" + +spec: + image: aarzak/debezium-connect-postgresql:latest + + replicas: 1 + + resources: + requests: + cpu: 1 + memory: 1Gi + limits: + cpu: 2 + memory: 2Gi + + bootstrapServers: main-kafka-bootstrap:9092 + + config: + group.id: postgres-kafka-connect-cluster + + config.providers: secrets + config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider + + key.converter: org.apache.kafka.connect.json.JsonConverter + value.converter: org.apache.kafka.connect.json.JsonConverter + key.converter.schemas.enable: true + value.converter.schemas.enable: true + + offset.storage.topic: postgres-kafka-connect-cluster-offsets + config.storage.topic: postgres-kafka-connect-cluster-configs + status.storage.topic: postgres-kafka-connect-cluster-status + # -1 means it will use the default replication factor configured in the broker + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 + + metricsConfig: + type: jmxPrometheusExporter + valueFrom: + configMapKeyRef: + name: kafka-connect-metrics + key: config.yaml \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/debezium/posts-table.source-connector.yaml b/kubernetes/manifests/strimzi/debezium/posts-table.source-connector.yaml new file mode 100644 index 0000000..84d07a8 --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/posts-table.source-connector.yaml @@ -0,0 +1,45 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaConnector +metadata: + name: posts-table-source-connector + namespace: strimzi + labels: + strimzi.io/cluster: postgres + +spec: + class: io.debezium.connector.postgresql.PostgresConnector + + tasksMax: 1 + + config: + # connector.id: posts-table-source-connector + # connector.displayName: posts-table-source-connector + + database.server.name: posts + database.hostname: main-rw.cloudnative-pg + database.port: 5432 + database.dbname: instagram_clone + database.user: ${secrets:strimzi/postgres-credentials:username} + database.password: ${secrets:strimzi/postgres-credentials:password} + + tombstones.on.delete: "false" + + skip.messages.without.change: "true" + + slot.name: posts_table_source_connector + + schema.include.list: public + table.include.list: public.posts + column.include.list: public.posts.id,public.posts.owner_id + + plugin.name: pgoutput + publication.autocreate.mode: all_tables + + # the Debezium event flattening single message transformation (SMT). + # transforms: unwrap + # transforms.unwrap.type: io.debezium.transforms.ExtractNewRecordState + # transforms.unwrap.add.fields: op, + # transforms.unwrap.drop.tombstones: false + # transforms.unwrap.delete.handling.mode: rewrite + + topic.prefix: db-events \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/debezium/users-table.source-connector.yaml b/kubernetes/manifests/strimzi/debezium/users-table.source-connector.yaml new file mode 100644 index 0000000..d5085fd --- /dev/null +++ b/kubernetes/manifests/strimzi/debezium/users-table.source-connector.yaml @@ -0,0 +1,80 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaConnector +metadata: + name: users-table-source-connector + namespace: strimzi + labels: + strimzi.io/cluster: postgres + +spec: + # The name of the Java class for the connector. + class: io.debezium.connector.postgresql.PostgresConnector + + tasksMax: 1 + + config: + # connector.id: users-table-source-connector + # connector.displayName: users-table-source-connector + + database.server.name: users + database.hostname: main-rw.cloudnative-pg + database.port: 5432 + database.dbname: instagram_clone + database.user: ${secrets:strimzi/postgres-credentials:username} + database.password: ${secrets:strimzi/postgres-credentials:password} + + # Controls whether a delete event is followed by a tombstone event. + # | + # |- true - a delete operation is represented by a delete event and a subsequent tombstone event. + # | + # |- false - only a delete event is emitted. + # + # After a source record is deleted, emitting a tombstone event (the default behavior) allows + # Kafka to completely delete all events that pertain to the key of the deleted row in case log + # compaction is enabled for the topic. + tombstones.on.delete: "false" + + # Specifies whether to skip publishing messages when there is no change in included columns. + # This would essentially filter messages if there is no change in columns included as per + # column.include.list or column.exclude.list properties. + # Note: Only works when REPLICA IDENTITY of the table is set to FULL + skip.messages.without.change: "true" + + # The name of the PostgreSQL logical decoding slot that was created for streaming changes from + # a particular plug-in for a particular database/schema. The server uses this slot to stream + # events to the Debezium connector that you are configuring. + slot.name: users_table_source_connector + + schema.include.list: public + table.include.list: public.users + column.include.list: public.users.id,public.users.name,public.users.username + + # The name of the PostgreSQL logical decoding plug-in installed on the PostgreSQL server. + # Supported values are decoderbufs, and pgoutput. + plugin.name: pgoutput + + # A publication can be defined on any physical replication primary. The node where a publication + # is defined is referred to as publisher. A publication is a set of changes generated from a + # table or a group of tables, and might also be described as a change set or replication set. + # Each publication exists in only one database. + # This setting determines how creation of a publication should work. + # (If a publication exists, the connector uses it. If a publication does not exist, the + # connector creates a publication for all tables in the database for which the connector is + # capturing changes. For the connector to create a publication it must access the database + # through a database user account that has permission to create publications and perform\ + # replications.) + publication.autocreate.mode: all_tables + + # the Debezium event flattening single message transformation (SMT). + # transforms: unwrap + # transforms.unwrap.type: io.debezium.transforms.ExtractNewRecordState + # transforms.unwrap.add.fields: op, + # transforms.unwrap.drop.tombstones: false + # transforms.unwrap.delete.handling.mode: rewrite + + # Topic prefix that provides a namespace for the particular PostgreSQL database server or + # cluster in which Debezium is capturing changes. The prefix should be unique across all other + # connectors, since it is used as a topic name prefix for all Kafka topics that receive records + # from this connector. Only alphanumeric characters, hyphens, dots and underscores must be used + # in the database server logical name. + topic.prefix: db-events \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/grafana-dashboards.configmap.yaml b/kubernetes/manifests/strimzi/grafana-dashboards.configmap.yaml new file mode 100644 index 0000000..6da9028 --- /dev/null +++ b/kubernetes/manifests/strimzi/grafana-dashboards.configmap.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: strimzi-grafana-dashboards + namespace: prometheus + labels: + grafana_dashboard: "1" + +data: + strimzi-operators.json: | + {"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"7.3.7"},{"type":"panel","id":"graph","name":"Graph","version":"5.0.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"5.0.0"},{"type":"panel","id":"singlestat","name":"Singlestat","version":"5.0.0"}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":null,"iteration":1687301758926,"links":[],"panels":[{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":4,"panels":[],"title":"Custom Resources","type":"row"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":6,"w":4,"x":0,"y":1},"id":2,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"Kafka\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Kafka CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":6,"w":4,"x":4,"y":1},"id":15,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaUser\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"User CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":6,"w":4,"x":8,"y":1},"id":50,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaTopic\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Topics CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":4,"x":12,"y":1},"id":11,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaConnect\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Connect CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":4,"x":16,"y":1},"id":16,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaMirrorMaker2\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Mirror Maker 2 CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":4,"x":20,"y":1},"id":12,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaMirrorMaker\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Mirror Maker CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":4,"x":12,"y":4},"id":13,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaBridge\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Bridge CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":4,"x":16,"y":4},"id":54,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaConnector\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Connector CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":4,"x":20,"y":4},"id":55,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(strimzi_resources{kind=\"KafkaRebalance\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Rebalance CRs","type":"singlestat","valueFontSize":"120%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":7},"id":10,"panels":[],"title":"Reconciliations","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":0,"y":8},"hiddenSeries":false,"id":48,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true,"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(increase(strimzi_reconciliations_successful_total[1h])) by (kind)","format":"time_series","intervalFactor":1,"legendFormat":"{{kind}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Successful Reconciliation per hour","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":8,"y":8},"hiddenSeries":false,"id":49,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true,"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(increase(strimzi_reconciliations_failed_total[1h])) by (kind)","format":"time_series","intervalFactor":1,"legendFormat":"{{kind}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Failed Reconciliation per hour","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":8},"hiddenSeries":false,"id":51,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true,"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(increase(strimzi_reconciliations_locked_total[1h])) by (kind)","format":"time_series","intervalFactor":1,"legendFormat":"{{kind}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Reconciliation without Lock per hour","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":0,"y":16},"hiddenSeries":false,"id":47,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true,"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(increase(strimzi_reconciliations_total[1h])) by (kind)","format":"time_series","intervalFactor":1,"legendFormat":"{{kind}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Started Reconciliation per hour","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":8,"y":16},"hiddenSeries":false,"id":46,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true,"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(increase(strimzi_reconciliations_periodical_total[1h])) by (kind)","format":"time_series","intervalFactor":1,"legendFormat":"{{kind}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Periodical Reconciliation per hour","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":null,"fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":16},"hiddenSeries":false,"hideTimeOverride":false,"id":52,"legend":{"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true,"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(strimzi_reconciliations_duration_seconds_max) by (kind)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{kind}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Maximum reconciliation time","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"s","label":"","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":18,"panels":[],"title":"JVM","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":8,"x":0,"y":25},"id":20,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_memory_used_bytes{container=~\"user-operator|topic-operator|strimzi-cluster-operator\"}) by (container)","format":"time_series","intervalFactor":1,"legendFormat":"{{container}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Memory Used","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"decbytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":8,"x":8,"y":25},"id":21,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_pause_seconds_sum{container=~\"user-operator|topic-operator|strimzi-cluster-operator\"}[5m])) by (container)","format":"time_series","intervalFactor":1,"legendFormat":"{{container}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Time","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"ms","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{},"links":[]},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":8,"x":16,"y":25},"id":22,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_pause_seconds_count{container=~\"user-operator|topic-operator|strimzi-cluster-operator\"}[5m])) by (container)","format":"time_series","intervalFactor":1,"legendFormat":"{{container}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":26,"style":"dark","tags":["Strimzi","Kafka"],"templating":{"list":[{"current":{},"error":null,"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Strimzi Operators","uid":"ISIAR7rWz","version":3} + strimzi-kafka.json: | + {"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"7.3.7"},{"type":"panel","id":"graph","name":"Graph","version":"5.0.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"5.0.0"},{"type":"panel","id":"singlestat","name":"Singlestat","version":"5.0.0"}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"iteration":1687298918684,"links":[],"panels":[{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Number of brokers online","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":0,"y":0},"id":46,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"repeat":null,"repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"count(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"0,2","title":"Brokers Online","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","#e5ac0e","#bf1b00"],"datasource":"${DS_PROMETHEUS}","description":"Number of active controllers in the cluster","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":3,"y":0},"id":36,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_controller_kafkacontroller_activecontrollercount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","hide":false,"intervalFactor":1,"refId":"A"}],"thresholds":"2","title":"Active Controllers","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","description":"Unclean leader election rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":6,"y":0},"id":38,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(irate(kafka_controller_controllerstats_uncleanleaderelections_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"}[5m]))","format":"time_series","hide":false,"intervalFactor":1,"refId":"A"}],"thresholds":"2","title":"Unclean Leader Election Rate","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Replicas that are online","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":9,"y":0},"id":40,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_server_replicamanager_partitioncount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"0,0","title":"Online Replicas","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#508642","rgba(237, 129, 40, 0.89)","#bf1b00"],"datasource":"${DS_PROMETHEUS}","description":"Number of under-replicated partitions (| ISR | < | all replicas |).","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":12,"y":0},"id":30,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"100%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_server_replicamanager_underreplicatedpartitions{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","hide":false,"intervalFactor":2,"refId":"A"}],"thresholds":"1,5","title":"Under Replicated Partitions","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#508642","#ef843c","#bf1b00"],"datasource":"${DS_PROMETHEUS}","description":"Number of partitions which are at their minimum in sync replica count (| ISR | == | min.insync.replicas |)","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":15,"y":0},"id":102,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"100%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_cluster_partition_atminisr{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","hide":false,"intervalFactor":2,"refId":"A"}],"thresholds":"1,5","title":"Partitions at minimum ISR","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#508642","#ef843c","#bf1b00"],"datasource":"${DS_PROMETHEUS}","description":"Number of partitions which are under their minimum in sync replica count (| ISR | < | min.insync.replicas |)","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":18,"y":0},"id":103,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"100%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_cluster_partition_underminisr{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","hide":false,"intervalFactor":2,"refId":"A"}],"thresholds":"1,1","title":"Partitions under minimum ISR","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#508642","#ef843c","#bf1b00"],"datasource":"${DS_PROMETHEUS}","description":"Number of partitions that don’t have an active leader and are hence not writable or readable","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":21,"y":0},"id":32,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_controller_kafkacontroller_offlinepartitionscount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","format":"time_series","hide":false,"intervalFactor":1,"refId":"A"}],"thresholds":"1,1","title":"Offline Partitions Count","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":4},"id":28,"panels":[],"title":"Kafka","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Kafka broker pods memory usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":5},"hiddenSeries":false,"id":82,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(container_memory_usage_bytes{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}) by (pod)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Aggregated Kafka broker pods CPU usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":5},"hiddenSeries":false,"id":81,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(container_cpu_usage_seconds_total{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}[5m])) by (pod)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Kafka broker pods disk usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":5},"hiddenSeries":false,"id":83,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kubelet_volume_stats_available_bytes{namespace=\"$kubernetes_namespace\",persistentvolumeclaim=~\"data(-[0-9]+)?-$strimzi_cluster_name-(kafka|$pool_name)-[0-9]+\"}) by (persistentvolumeclaim)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{persistentvolumeclaim}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Available Disk Space","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Open File Descriptors","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":5},"hiddenSeries":false,"id":107,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(process_open_fds{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",container=\"kafka\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Open File Descriptors","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":12},"hiddenSeries":false,"id":93,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_memory_bytes_used{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Memory Used","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"decbytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":12},"hiddenSeries":false,"id":95,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_sum{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Time","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"ms","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":12},"hiddenSeries":false,"id":97,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_count{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"JVM thread count","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":12},"hiddenSeries":false,"id":108,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Thread Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Total incoming byte rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"Bps","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":6,"x":0,"y":19},"id":98,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"0","to":"null"}],"repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"0,2","title":"Total Incoming Byte Rate","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Total outgoing byte rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"Bps","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":6,"x":6,"y":19},"id":99,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"0,2","title":"Total Outgoing Byte Rate","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Incoming messages rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"wps","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":6,"x":12,"y":19},"id":100,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"0,2","title":"Incoming Messages Rate","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Total produce request rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"reqps","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":6,"x":18,"y":19},"id":101,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"repeatDirection":"h","sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"","refId":"A"}],"thresholds":"0,2","title":"Total Produce Request Rate","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"0","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Byte rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":23},"hiddenSeries":false,"id":44,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_bytesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"Total Incoming Byte Rate","refId":"A"},{"expr":"sum(irate(kafka_server_brokertopicmetrics_bytesout_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Total Outgoing Byte Rate","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Byte Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"bytes","label":"","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":23},"hiddenSeries":false,"id":58,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_messagesin_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","intervalFactor":1,"legendFormat":"Total Incoming Messages Rate","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Messages In Per Second","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Produce request rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":31},"id":50,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_totalproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","intervalFactor":1,"legendFormat":"Total Produce Request Rate","refId":"A"},{"expr":"sum(irate(kafka_server_brokertopicmetrics_failedproducerequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"Failed Produce Request Rate","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Produce Request Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Fetch request rate","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":31},"id":56,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_brokertopicmetrics_totalfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","intervalFactor":1,"legendFormat":"Fetch Request Rate","refId":"A"},{"expr":" sum(irate(kafka_server_brokertopicmetrics_failedfetchrequests_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",topic=~\"$kafka_topic\",topic!=\"\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m]))","format":"time_series","intervalFactor":1,"legendFormat":"Failed Fetch Request Rate","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Fetch Request Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Average percentage of time network processor is idle","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":39},"id":60,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_network_socketserver_networkprocessoravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Network Processor Avg Idle Percent","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percent","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Average percentage of time request handler threads are idle","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":39},"id":62,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_kafkarequesthandlerpool_requesthandleravgidle_percent{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}*100) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Request Handler Avg Idle Percent","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percent","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Disk writes","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":8,"x":0,"y":47},"id":104,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_kafkaserver_linux_disk_write_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Disk Writes","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Disk reads","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":8,"x":8,"y":47},"id":105,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_kafkaserver_linux_disk_read_bytes{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}[1m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Disk Reads","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Disk reads","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":8,"x":16,"y":47},"id":106,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_socket_server_metrics_connection_count{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"}) by (kubernetes_pod_name, listener)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{listener}}-{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Connection Count per Listener","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":55},"id":91,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\",partition=~\"$kafka_partition\"}","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"{{topic}}:{{partition}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Log Size","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":55},"id":110,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_zookeeperclientmetrics_zookeeperrequestlatencyms{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","instant":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"ZK request latecy","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":26,"style":"dark","tags":["Strimzi","Kafka"],"templating":{"list":[{"current":{},"error":null,"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Namespace","multi":false,"name":"kubernetes_namespace","options":[],"query":"query_result(kafka_server_replicamanager_leadercount)","refresh":1,"regex":"/.*namespace=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Cluster Name","multi":false,"name":"strimzi_cluster_name","options":[],"query":"query_result(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\"})","refresh":1,"regex":"/.*strimzi_io_cluster=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","hide":2,"includeAll":true,"label":"Pool name","multi":true,"name":"pool_name","options":[],"query":"query_result(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\"})","refresh":1,"regex":"/.*strimzi_io_pool_name=\"([^\"]*).*/","skipUrlSync":false,"sort":3,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":true,"label":"Broker","multi":false,"name":"kafka_broker","options":[],"query":"query_result(kafka_server_replicamanager_leadercount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","refresh":1,"regex":"/.*pod_name=\"$strimzi_cluster_name-([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".+","current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":true,"label":"Topic","multi":false,"name":"kafka_topic","options":[],"query":"query_result(kafka_cluster_partition_replicascount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\"})","refresh":1,"regex":"/.*topic=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":true,"label":"Partition","multi":true,"name":"kafka_partition","options":[],"query":"query_result(kafka_log_log_size{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kafka_broker\",topic=~\"$kafka_topic\"})","refresh":1,"regex":"/.*partition=\"([^\"]*).*/","skipUrlSync":false,"sort":3,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Strimzi Kafka","uid":"86cc98e66c294b299b37102f0cc74ead","version":2} + strimzi-zookeeper.json: | + {"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"7.3.7"},{"type":"panel","id":"graph","name":"Graph","version":"5.0.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"5.0.0"},{"type":"panel","id":"singlestat","name":"Singlestat","version":"5.0.0"}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","limit":100,"name":"Annotations & Alerts","showIn":0,"type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":null,"iteration":1687302048648,"links":[],"panels":[{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":26,"panels":[],"title":"ZooKeeper","type":"row"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#d44a3a","rgba(237, 129, 40, 0.89)","#299c46"],"datasource":"${DS_PROMETHEUS}","description":"Quorum size of ZooKeeper ensemble","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":4,"x":0,"y":1},"id":52,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"max(zookeeper_quorumsize{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",strimzi_io_kind=\"Kafka\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"2,3","title":"Quorum Size","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","description":"Number of active connections","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":4,"x":4,"y":1},"id":54,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(zookeeper_numaliveconnections{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",strimzi_io_kind=\"Kafka\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"60,120","title":"Active Connections","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Number of queued requests in the server. This goes up when the server receives more requests than it can process","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":8,"y":1},"hiddenSeries":false,"id":12,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(zookeeper_outstandingrequests{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",strimzi_io_kind=\"Kafka\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\"}) by (kubernetes_pod_name)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Outstanding Requests","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Amount of time (in ms) it takes for the server to respond to a client request","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":1},"hiddenSeries":false,"id":6,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(zookeeper_avgrequestlatency{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Request Latency - Average","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"ms","label":"Request Latency (ms)","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":4,"x":0,"y":5},"id":64,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"avg(zookeeper_inmemorydatatree_nodecount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",strimzi_io_kind=\"Kafka\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"500,800","title":"Number of ZNodes","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#299c46","rgba(237, 129, 40, 0.89)","#d44a3a"],"datasource":"${DS_PROMETHEUS}","description":"Number of watchers","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":4,"x":4,"y":5},"id":66,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(zookeeper_inmemorydatatree_watchcount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",strimzi_io_kind=\"Kafka\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\"})","format":"time_series","intervalFactor":1,"refId":"A"}],"thresholds":"100,200","title":"Number of watchers","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"ZooKeeper pods memory usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":9},"hiddenSeries":false,"id":87,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(container_memory_usage_bytes{namespace=\"$kubernetes_namespace\",container=\"zookeeper\",pod=~\"$strimzi_cluster_name-$zk_node\"}) by (pod)","format":"time_series","intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Aggregated ZooKeeper pods CPU usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":9},"hiddenSeries":false,"id":85,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(container_cpu_usage_seconds_total{namespace=\"$kubernetes_namespace\",container=\"zookeeper\",pod=~\"$strimzi_cluster_name-$zk_node\"}[5m])) by (pod)","format":"time_series","intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Kafka broker pods disk usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":9},"hiddenSeries":false,"id":89,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kubelet_volume_stats_available_bytes{namespace=\"$kubernetes_namespace\",persistentvolumeclaim=~\"data(-[0-9]+)?-$strimzi_cluster_name-zookeeper-[0-9]+\"}) by (persistentvolumeclaim)","format":"time_series","intervalFactor":1,"legendFormat":"{{persistentvolumeclaim}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Available Disk Space","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Open File Descriptors","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":9},"hiddenSeries":false,"id":96,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(process_open_fds{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-zookeeper-[0-9+]\",container=\"zookeeper\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Open File Descriptors","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":16},"hiddenSeries":false,"id":91,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_memory_bytes_used{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\",strimzi_io_name=\"$strimzi_cluster_name-zookeeper\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Memory Used","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"decbytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":16},"hiddenSeries":false,"id":93,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_sum{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\",strimzi_io_name=\"$strimzi_cluster_name-zookeeper\"}[5m])) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Time","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"ms","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":16},"hiddenSeries":false,"id":95,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_count{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$zk_node\",strimzi_io_name=\"$strimzi_cluster_name-zookeeper\"}[5m])) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"JVM thread count","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":16},"hiddenSeries":false,"id":97,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-zookeeper-[0-9+]\",strimzi_io_name=\"$strimzi_cluster_name-zookeeper\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM thread count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":26,"style":"dark","tags":["Strimzi","Kafka","Zookeeper"],"templating":{"list":[{"current":{},"error":null,"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Namespace","multi":false,"name":"kubernetes_namespace","options":[],"query":"query_result(zookeeper_inmemorydatatree_nodecount)","refresh":1,"regex":"/.*namespace=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Cluster Name","multi":false,"name":"strimzi_cluster_name","options":[],"query":"query_result(zookeeper_inmemorydatatree_nodecount{namespace=\"$kubernetes_namespace\"})","refresh":1,"regex":"/.*strimzi_io_cluster=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":true,"label":"Node","multi":false,"name":"zk_node","options":[],"query":"query_result(zookeeper_inmemorydatatree_nodecount{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","refresh":1,"regex":"/.*pod_name=\"$strimzi_cluster_name-([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Strimzi ZooKeeper","uid":"fc85de600d62d9841e9de00083b24b72","version":3} +# strimzi-kafka-connect.json: | +# {"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"7.3.7"},{"type":"panel","id":"graph","name":"Graph","version":"5.0.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"5.0.0"},{"type":"panel","id":"singlestat","name":"Singlestat","version":"5.0.0"},{"type":"panel","id":"table","name":"Table","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":null,"iteration":1699891569664,"links":[],"panels":[{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":0},"id":46,"panels":[],"title":"Overview","type":"row"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":7,"w":6,"x":0,"y":1},"height":250,"id":26,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"span":2,"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_connect_worker_connector_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","format":"time_series","interval":"","intervalFactor":2,"legendFormat":"","refId":"A","step":40}],"thresholds":"","title":"Number of Connectors","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":7,"w":6,"x":6,"y":1},"id":27,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"span":2,"sparkline":{"fillColor":"rgba(31, 118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(kafka_connect_worker_task_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","format":"time_series","intervalFactor":2,"refId":"A","step":40}],"thresholds":"","title":"Number of Tasks","type":"singlestat","valueFontSize":"200%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":1},"hiddenSeries":false,"id":36,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_consumer_connection_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","hide":false,"interval":"","legendFormat":"#consumer connections","refId":"A"},{"expr":"sum(kafka_producer_connection_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","interval":"","legendFormat":"#producer connections","refId":"B"},{"expr":"sum(kafka_admin_client_connection_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","interval":"","legendFormat":"#admin connections","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Connection Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Bytes per second outgoing to Kafka from Connect worker. Includes data to internal topics.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":10,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":8},"hiddenSeries":false,"id":29,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":false,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum(rate(kafka_producer_outgoing_byte_total{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}[1m])) by (kubernetes_pod_name)","interval":"","legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"(Source/Producers) Outgoing Bytes per Second","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"Bytes/sec","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Bytes per second incoming to Kafka Connect worker from Kafka. Includes data from internal topics.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":10,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":8},"hiddenSeries":false,"id":28,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":false,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum(rate(kafka_consumer_incoming_byte_total{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}[1m])) by (kubernetes_pod_name)","interval":"","legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"(Sink/Consumers) Incoming Bytes per Second","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"Bytes/sec","logBase":1,"max":null,"min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":15},"id":50,"panels":[],"title":"Workers","type":"row"},{"datasource":null,"fieldConfig":{"defaults":{"custom":{},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":4,"w":12,"x":0,"y":16},"id":52,"options":{"displayMode":"gradient","orientation":"horizontal","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showUnfilled":true},"pluginVersion":"7.3.7","targets":[{"expr":"sum(kafka_connect_coordinator_assigned_connectors{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (kubernetes_pod_name)","interval":"","legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"Assigned Connectors by Worker","type":"bargauge"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":null,"fieldConfig":{"defaults":{"custom":{},"mappings":[],"max":1,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":16},"hiddenSeries":false,"id":56,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":false,"total":false,"values":false},"lines":true,"linewidth":1,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_connect_worker_rebalance_rebalancing{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","interval":"","legendFormat":"","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Rebalancing","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"none","label":null,"logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"datasource":null,"fieldConfig":{"defaults":{"custom":{},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":4,"w":12,"x":0,"y":20},"id":54,"options":{"displayMode":"gradient","orientation":"horizontal","reduceOptions":{"calcs":["last"],"fields":"","values":false},"showUnfilled":true},"pluginVersion":"7.3.7","targets":[{"expr":"sum(kafka_connect_coordinator_assigned_tasks{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (kubernetes_pod_name)","interval":"","legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"Assigned Tasks per Worker","type":"bargauge"},{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":24},"id":48,"panels":[],"title":"Connectors and Tasks","type":"row"},{"cacheTimeout":null,"columns":[],"datasource":"${DS_PROMETHEUS}","description":"Connectors that have one or more tasks that are not in a running state, i.e. the state is one of paused, failed, unassigned or destroyed.","fieldConfig":{"defaults":{"custom":{"align":null,"filterable":false},"mappings":[],"noValue":"0","thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"fontSize":"100%","gridPos":{"h":9,"w":12,"x":0,"y":25},"id":34,"links":[],"options":{"frameIndex":1,"showHeader":true},"pageSize":null,"pluginVersion":"7.3.7","showHeader":true,"sort":{"col":0,"desc":true},"styles":[{"alias":"Time","align":"auto","dateFormat":"YYYY-MM-DD HH:mm:ss","pattern":"Time","type":"date"},{"alias":"Tasks","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value","thresholds":[],"type":"number","unit":"short"},{"alias":"Connector","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"decimals":0,"pattern":"Metric","thresholds":[],"type":"number","unit":"short"}],"targets":[{"expr":"sum(kafka_connect_worker_connector_paused_task_count{namespace=\"$kubernetes_namespace\",strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (connector) != 0","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum(kafka_connect_worker_connector_failed_task_count{namespace=\"$kubernetes_namespace\",strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (connector) != 0","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum(kafka_connect_worker_connector_unassigned_task_count{namespace=\"$kubernetes_namespace\",strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (connector) != 0","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"},{"expr":"sum(kafka_connect_worker_connector_destroyed_task_count{namespace=\"$kubernetes_namespace\",strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (connector) != 0","format":"table","instant":true,"interval":"","legendFormat":"","refId":"D"}],"title":"Connector Tasks with Issues","transform":"timeseries_to_rows","transformations":[{"id":"merge","options":{}},{"id":"organize","options":{"excludeByName":{},"indexByName":{"Time":5,"Value #A":1,"Value #B":2,"Value #C":3,"Value #D":4,"connector":0},"renameByName":{"Time":"Update Time","Value #A":"Paused Tasks","Value #B":"Failed Tasks","Value #C":"Unassigned Tasks","Value #D":"Destroyed Tasks","connector":"Connector"}}}],"type":"table"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":25},"hiddenSeries":false,"id":35,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"span":4,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_connect_worker_connector_running_task_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":"running","metric":"","refId":"A","step":4},{"expr":"sum(kafka_connect_worker_connector_paused_task_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","interval":"","legendFormat":"paused","refId":"B"},{"expr":"sum(kafka_connect_worker_connector_failed_task_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","interval":"","legendFormat":"failed","refId":"D"},{"expr":"sum(kafka_connect_worker_connector_unassigned_task_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","interval":"","legendFormat":"unassigned","refId":"C"},{"expr":"sum(kafka_connect_worker_connector_destroyed_task_count{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"})","instant":false,"interval":"","legendFormat":"destroyed","refId":"E"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Connector Task State","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Number of connector tasks","logBase":1,"max":null,"min":null,"show":true},{"decimals":null,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"left","displayMode":"auto","filterable":false},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[]},"gridPos":{"h":7,"w":24,"x":0,"y":34},"id":42,"options":{"showHeader":true,"sortBy":[{"desc":false,"displayName":"Connector"}]},"pluginVersion":"7.3.7","targets":[{"exemplar":true,"expr":"sum(kafka_connect_connector_status{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"} * on(connector) group_left(connector_class) kafka_connect_connector_connector_class{} * on (connector) group_left(connector_version) kafka_connect_connector_connector_version{} * on (connector) group_left(connector_type) kafka_connect_connector_connector_type{}) by (connector, status, connector_class, kubernetes_pod_name, connector_version, connector_type)","format":"table","instant":true,"interval":"","intervalFactor":1,"legendFormat":"","refId":"A"}],"title":"Connector Status","transformations":[{"id":"filterFieldsByName","options":{"include":{"names":["Time","connector","kubernetes_pod_name","status","connector_class","connector_type","connector_version"]}}},{"id":"organize","options":{"excludeByName":{},"indexByName":{"Time":6,"connector":0,"connector_class":2,"connector_type":3,"connector_version":4,"kubernetes_pod_name":1,"status":5},"renameByName":{"Time":"Update Time","connector":"Connector","connector_class":"Class","connector_type":"Type","connector_version":"Version","kubernetes_pod_name":"Worker Pod Name","status":"Status"}}}],"type":"table"},{"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"auto","displayMode":"auto","filterable":false},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"red","value":80}]}},"overrides":[{"matcher":{"id":"byName","options":"Task"},"properties":[{"id":"custom.align","value":"left"}]},{"matcher":{"id":"byName","options":"Total Record Failures"},"properties":[{"id":"custom.align","value":"left"}]}]},"gridPos":{"h":8,"w":24,"x":0,"y":41},"id":41,"options":{"showHeader":true,"sortBy":[{"desc":false,"displayName":"Connector"}]},"pluginVersion":"7.3.7","targets":[{"exemplar":true,"expr":"sum(kafka_connect_task_error_total_record_failures{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"} * on(connector, task) group_left(status) kafka_connect_connector_task_status{}) by (connector, status, kubernetes_pod_name, task)","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"}],"title":"Connector Task Status","transformations":[{"id":"filterFieldsByName","options":{"include":{"names":["Time","connector","kubernetes_pod_name","status","task","Value"]}}},{"id":"organize","options":{"excludeByName":{"connector":false},"indexByName":{"Time":5,"Value":3,"connector":0,"kubernetes_pod_name":2,"status":4,"task":1},"renameByName":{"Time":"Update Time","Value":"Total Record Failures","connector":"Connector","kubernetes_pod_name":"Worker Pod Name","status":"Status","task":"Task"}}}],"type":"table"},{"collapsed":false,"datasource":null,"gridPos":{"h":1,"w":24,"x":0,"y":49},"id":44,"panels":[],"title":"JVM","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":50},"hiddenSeries":false,"id":30,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"span":4,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(container_cpu_usage_seconds_total{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_connect_cluster_name-connect-.+\",container=\"$strimzi_connect_cluster_name-connect\"}[5m])) by (pod)","format":"time_series","hide":false,"intervalFactor":2,"legendFormat":"{{pod}}","metric":"","refId":"A","step":4}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":"Cores","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":50},"hiddenSeries":false,"id":31,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"span":4,"stack":false,"steppedLine":false,"targets":[{"expr":"sum (jvm_memory_bytes_used{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":2,"legendFormat":"{{kubernetes_pod_name}}","metric":"","refId":"A","step":4}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Memory","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":"Memory","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":5,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":50},"hiddenSeries":false,"id":32,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"span":4,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_sum{strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}[5m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":2,"legendFormat":"{{kubernetes_pod_name}}","metric":"","refId":"A","step":4}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Time Spent in GC","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"percent","label":"% time in GC","logBase":1,"max":"100","min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","decimals":0,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":50},"hiddenSeries":false,"id":37,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":false,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",strimzi_io_kind=~\"KafkaConnect.*\",strimzi_io_cluster=\"$strimzi_connect_cluster_name\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Thread Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":26,"style":"dark","tags":["Strimzi","Kafka","Kafka Connect"],"templating":{"list":[{"current":{},"error":null,"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Namespace","multi":false,"name":"kubernetes_namespace","options":[],"query":"query_result(kafka_connect_worker_connector_count{strimzi_io_kind=~\"KafkaConnect.*\"})","refresh":1,"regex":"/.*namespace=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Cluster Name","multi":false,"name":"strimzi_connect_cluster_name","options":[],"query":"query_result(kafka_connect_worker_connector_count{namespace=\"$kubernetes_namespace\", strimzi_io_kind=~\"KafkaConnect.*\"})","refresh":1,"regex":"/.*strimzi_io_cluster=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Strimzi Kafka Connect","uid":"39fb097dc2c5ebf8a7717cf78fc2f8f7","version":4} +# strimzi-kraft.json: | +# {"__requires":[{"type":"grafana","id":"grafana","name":"Grafana","version":"7.3.7"},{"type":"panel","id":"graph","name":"Graph","version":"5.0.0"},{"type":"datasource","id":"prometheus","name":"Prometheus","version":"5.0.0"}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"editable":true,"gnetId":null,"graphTooltip":0,"id":null,"iteration":1687301522242,"links":[],"panels":[{"collapsed":false,"datasource":"${DS_PROMETHEUS}","gridPos":{"h":1,"w":24,"x":0,"y":0},"id":28,"panels":[],"title":"KRaft","type":"row"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Kafka broker pods memory usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":1},"hiddenSeries":false,"id":82,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(container_memory_usage_bytes{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kraft_node\",container=\"kafka\"}) by (pod)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Aggregated Kafka broker pods CPU usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":1},"hiddenSeries":false,"id":81,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(container_cpu_usage_seconds_total{namespace=\"$kubernetes_namespace\",pod=~\"$strimzi_cluster_name-$kraft_node\",container=\"kafka\"}[5m])) by (pod)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{pod}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU Usage","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Kafka broker pods disk usage","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":1},"hiddenSeries":false,"id":83,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kubelet_volume_stats_available_bytes{namespace=\"$kubernetes_namespace\",persistentvolumeclaim=~\"data(-[0-9]+)?-$strimzi_cluster_name-kafka-[0-9]+\"}) by (persistentvolumeclaim)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{persistentvolumeclaim}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Available Disk Space","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"Open File Descriptors","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":1},"hiddenSeries":false,"id":107,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(process_open_fds{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",container=\"kafka\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Open File Descriptors","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":0,"y":8},"hiddenSeries":false,"id":93,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_memory_bytes_used{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Memory Used","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"decbytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":6,"y":8},"hiddenSeries":false,"id":95,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_sum{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Time","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2637","format":"ms","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2638","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":12,"y":8},"hiddenSeries":false,"id":97,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(rate(jvm_gc_collection_seconds_count{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}[5m])) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM GC Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"JVM thread count","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":6,"x":18,"y":8},"hiddenSeries":false,"id":108,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(jvm_threads_current{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"JVM Thread Count","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The average number of records appended per sec as the leader of the raft quorum.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":0,"y":15},"hiddenSeries":false,"id":44,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_append_records_rate{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":" {{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Append Metadata Records Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2421","decimals":null,"format":"short","label":"","logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2422","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The average number of records fetched from the leader of the raft quorum.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":8,"y":15},"hiddenSeries":false,"id":58,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_fetch_records_rate{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Fetch Metadata Records Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2476","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2477","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The average time in milliseconds to commit an entry in the raft log.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":15},"hiddenSeries":false,"id":112,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":false,"hideZero":false,"max":false,"min":false,"rightSide":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_commit_latency_avg{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"instant":false,"interval":"","intervalFactor":1,"legendFormat":" {{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Metadata Records Commit Latency","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2692","decimals":null,"format":"ms","label":"","logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2693","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The current quorum leader's id; -1 indicates unknown","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":0,"y":23},"hiddenSeries":false,"id":104,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_current_leader{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Current Quorum Leader","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2747","decimals":0,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2748","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The current voted leader's id; -1 indicates not voted for anyone","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":8,"y":23},"hiddenSeries":false,"id":105,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_current_vote{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Current Voted Leader","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2802","decimals":0,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2803","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The current quorum epoch","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":23},"hiddenSeries":false,"id":113,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_current_epoch{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Current Quorum Epoch","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2857","decimals":0,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2858","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The number of bytes read off all sockets per second","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":31},"id":114,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_raftchannelmetrics_incoming_byte_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}[1m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Metadata Topic Incoming Bytes Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2912","format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2913","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The number of outgoing bytes sent to all servers per second","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":31},"id":115,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_raftchannelmetrics_outgoing_byte_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}[1m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Metadata Topic Outgoing Bytes Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:2967","format":"bytes","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:2968","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The number of requests sent per second","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":39},"id":116,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_raftchannelmetrics_request_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}[1m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Metadata Topic Requests Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:3078","decimals":null,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:3079","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The number of responses received per second","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":39},"id":117,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(irate(kafka_server_raftchannelmetrics_response_total{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\"}[1m])) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Metadata Topic Responses Rate","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:3022","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:3023","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The high watermark maintained on this member; -1 if it is unknown.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":0,"y":47},"id":118,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_high_watermark{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"High Watermark","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:3022","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:3023","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_PROMETHEUS}","description":"The current raft log end offset.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"gridPos":{"h":8,"w":12,"x":12,"y":47},"id":119,"legend":{"avg":false,"current":false,"max":false,"min":false,"show":true,"total":false,"values":false},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"alertThreshold":true},"paceLength":10,"percentage":false,"pluginVersion":"7.3.7","pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum(kafka_server_raftmetrics_log_end_offset{namespace=\"$kubernetes_namespace\",kubernetes_pod_name=~\"$strimzi_cluster_name-$kraft_node\",strimzi_io_name=\"$strimzi_cluster_name-kafka\"}) by (kubernetes_pod_name)","format":"time_series","hide":false,"interval":"","intervalFactor":1,"legendFormat":"{{kubernetes_pod_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Log End Offset","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:3022","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:3023","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"5s","schemaVersion":26,"style":"dark","tags":["Strimzi","Kafka"],"templating":{"list":[{"current":{},"error":null,"hide":0,"includeAll":false,"label":"datasource","multi":false,"name":"DS_PROMETHEUS","options":[],"query":"prometheus","refresh":1,"regex":"","skipUrlSync":false,"type":"datasource"},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Namespace","multi":false,"name":"kubernetes_namespace","options":[],"query":"query_result(kafka_server_raftmetrics_current_leader)","refresh":1,"regex":"/.*namespace=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":false,"label":"Cluster Name","multi":false,"name":"strimzi_cluster_name","options":[],"query":"query_result(kafka_server_raftmetrics_current_leader{namespace=\"$kubernetes_namespace\"})","refresh":1,"regex":"/.*strimzi_io_cluster=\"([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"${DS_PROMETHEUS}","definition":"","error":null,"hide":0,"includeAll":true,"label":"Broker","multi":false,"name":"kraft_node","options":[],"query":"query_result(kafka_server_raftmetrics_current_leader{namespace=\"$kubernetes_namespace\",strimzi_io_cluster=\"$strimzi_cluster_name\"})","refresh":1,"regex":"/.*pod_name=\"$strimzi_cluster_name-([^\"]*).*/","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false}]},"time":{"from":"now-1h","to":"now"},"timepicker":{"refresh_intervals":["5s","10s","30s","1m","5m","15m","30m","1h","2h","1d"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"","title":"Strimzi KRaft","uid":"0nVoON14z","version":27} \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/kustomization.yaml b/kubernetes/manifests/strimzi/kustomization.yaml new file mode 100644 index 0000000..ced51b9 --- /dev/null +++ b/kubernetes/manifests/strimzi/kustomization.yaml @@ -0,0 +1,15 @@ +resources: + - namespace.yaml + - cluster.yaml + - db-events.public.users.topic.yaml + - db-events.public.posts.topic.yaml + - cluster-metrics.configmap.yaml + - grafana-dashboards.configmap.yaml + - pod-monitors.yaml + +helmCharts: + - repo: oci://quay.io/strimzi-helm + name: strimzi-kafka-operator + releaseName: strimzi-kafka-operator + namespace: strimzi + version: 0.39.0 diff --git a/kubernetes/workspaces/production/istio/namespace.yaml b/kubernetes/manifests/strimzi/namespace.yaml similarity index 67% rename from kubernetes/workspaces/production/istio/namespace.yaml rename to kubernetes/manifests/strimzi/namespace.yaml index d5eee5a..329e801 100644 --- a/kubernetes/workspaces/production/istio/namespace.yaml +++ b/kubernetes/manifests/strimzi/namespace.yaml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: istio-system \ No newline at end of file + name: strimzi \ No newline at end of file diff --git a/kubernetes/manifests/strimzi/pod-monitors.yaml b/kubernetes/manifests/strimzi/pod-monitors.yaml new file mode 100644 index 0000000..5317642 --- /dev/null +++ b/kubernetes/manifests/strimzi/pod-monitors.yaml @@ -0,0 +1,66 @@ +apiVersion: monitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: strimzi-cluster-operator-metrics + namespace: prometheus + +spec: + selector: + matchLabels: + strimzi.io/kind: cluster-operator + namespaceSelector: + matchNames: + - strimzi + podMetricsEndpoints: + - path: /metrics + port: http + +--- + +apiVersion: monitoring.coreos.com/v1 +kind: PodMonitor +metadata: + name: kafka-resources-metrics + namespace: prometheus + +spec: + selector: + matchExpressions: + - key: "strimzi.io/kind" + operator: In + values: ["Kafka", "KafkaConnect", "KafkaMirrorMaker", "KafkaMirrorMaker2"] + namespaceSelector: + matchNames: + - strimzi + podMetricsEndpoints: + - path: /metrics + port: tcp-prometheus + relabelings: + - separator: ; + regex: __meta_kubernetes_pod_label_(strimzi_io_.+) + replacement: $1 + action: labelmap + - sourceLabels: [__meta_kubernetes_namespace] + separator: ; + regex: (.*) + targetLabel: namespace + replacement: $1 + action: replace + - sourceLabels: [__meta_kubernetes_pod_name] + separator: ; + regex: (.*) + targetLabel: kubernetes_pod_name + replacement: $1 + action: replace + - sourceLabels: [__meta_kubernetes_pod_node_name] + separator: ; + regex: (.*) + targetLabel: node_name + replacement: $1 + action: replace + - sourceLabels: [__meta_kubernetes_pod_host_ip] + separator: ; + regex: (.*) + targetLabel: node_ip + replacement: $1 + action: replace \ No newline at end of file diff --git a/kubernetes/workspaces/dev/istio/kustomization.yaml b/kubernetes/workspaces/dev/istio/kustomization.yaml deleted file mode 100644 index a3ecfda..0000000 --- a/kubernetes/workspaces/dev/istio/kustomization.yaml +++ /dev/null @@ -1,87 +0,0 @@ -resources: - - namespace.yaml - -helmCharts: - - ## The Istio base helm chart installs all the CRDs. - - repo: https://istio-release.storage.googleapis.com/charts - name: base - releaseName: istio-base - version: 1.20.0-rc.0 - - ## An Istio service mesh is logically split into a data plane and a control plane. - ## The data plane is composed of a set of intelligent Envoy proxies deployed as sidecars. These - ## proxies mediate and control all network communication between microservices. They also collect - ## and report telemetry on all mesh traffic. - ## The control plane manages and configures the proxies to route traffic. - - ## Istiod provides service discovery, configuration and certificate management. - ## - ## Istiod converts high level routing rules that control traffic behavior into Envoy-specific - ## configurations, and propagates them to the sidecars at runtime. Pilot (a component inside - ## Istiod) abstracts platform-specific service discovery mechanisms and synthesizes them into a - ## standard format that any sidecar conforming with the Envoy API can consume. - ## - ## Istiod security enables strong service-to-service and end-user authentication with built-in - ## identity and credential management. You can use Istio to upgrade unencrypted traffic in the - ## service mesh. Using Istio, operators can enforce policies based on service identity rather than - ## on relatively unstable layer 3 or layer 4 network identifiers. Additionally, you can use - ## Istio’s authorization feature to control who can access your services. - ## - ## Istiod acts as a Certificate Authority (CA) and generates certificates to allow secure mTLS - ## communication in the data plane. - - repo: https://istio-release.storage.googleapis.com/charts - name: istiod - releaseName: istiod - version: 1.20.0-rc.0 - - ## In order to take advantage of all of Istio’s features, pods in the mesh must be running an - ## Istio sidecar proxy. We can enable automatic Istio sidecar injection in a namespace. Automatic - ## injection injects the proxy configuration at pod creation time using an admission controller. - ## When you set the 'istio-injection=enabled' label on a namespace and the injection webhook is - ## enabled, any new pods that are created in that namespace will automatically have a sidecar - ## added to them. - - ## In an Istio mesh, each component exposes an endpoint that emits metrics. Prometheus works by - ## scraping these endpoints and collecting the results. This is configured through the Prometheus - ## configuration file which controls settings for which endpoints to query, the port and path to - ## query, TLS settings, and more. - ## To simplify configuration, Istio has the ability to control scraping entirely by 'prometheus.io' - ## annotations. This allows Istio scraping to work out of the box with standard configurations ( - ## enabled by default). Appropriate prometheus.io annotations will be added to all data plane pods - ## to set up scraping. With this option, the Envoy sidecar will merge Istio’s metrics with the - ## application metrics. The merged metrics will be scraped from ':15020/stats/prometheus'. - ## The control plane, gateway, and Envoy sidecar metrics will all be scraped over cleartext. - ## However, the application metrics will follow whatever Istio configuration has been configured - ## for the workload. In particular, if Strict mTLS is enabled, then Prometheus will need to be - ## configured to scrape using Istio certificates. - - ## Istio offers a set of preconfigured Grafana dashboards for all of the most important metrics - ## for the mesh and for the control plane. - - ## Istio leverages Envoy’s distributed tracing feature to provide tracing integration out of the - ## box. Specifically, Istio provides options to install various tracing backends and configure - ## proxies to send trace spans to them automatically. Although Istio proxies can automatically - ## send spans, extra information is needed to join those spans into a single trace. Applications - ## must propagate this information in HTTP headers, so that when proxies send spans, the backend - ## can join them together into a single trace. - - ## Kiali is an observability console for Istio. It helps you understand the structure and health - ## of your service mesh by monitoring traffic flow to infer the topology and report errors. - - repo: https://kiali.org/helm-charts - name: kiali-operator - version: 1.76.0 - releaseName: kiali-operator - namespace: istio-system - valuesInline: - watchNamespace: istio-system - - ## A Kiali CR is used to tell the Kiali Operator how and where to install a Kiali Server in - ## your cluster. - cr: - create: true - namespace: istio-system - spec: - external_services: - prometheus: - url: http://kube-prometheus-stack-prometheus.prometheus:9090 \ No newline at end of file diff --git a/kubernetes/workspaces/dev/jaeger.yaml b/kubernetes/workspaces/dev/jaeger.yaml deleted file mode 100644 index 304f4c2..0000000 --- a/kubernetes/workspaces/dev/jaeger.yaml +++ /dev/null @@ -1,44 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application - -metadata: - name: jaeger - namespace: argocd - -spec: - project: default - - destination: - server: https://kubernetes.default.svc - namespace: jaeger - - source: - repoURL: https://jaegertracing.github.io/helm-charts - chart: jaeger - targetRevision: 0.72.0 - helm: - releaseName: jaeger - valuesObject: - cassandra: - persistence: - enabled: false - - agent: - enabled: false - - collector: - service: - otlp: - grpc: - name: otlp-grpc - port: 4317 - http: - name: otlp-http - port: 4318 - - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - CreateNamespace=true diff --git a/kubernetes/workspaces/dev/kubernetes-dashboard/README.md b/kubernetes/workspaces/dev/kubernetes-dashboard/README.md deleted file mode 100644 index f933c01..0000000 --- a/kubernetes/workspaces/dev/kubernetes-dashboard/README.md +++ /dev/null @@ -1,10 +0,0 @@ -## The Kubernetes Dashboard - -You can access the Kubernetes dashboard at *http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/*, after running these commands :- -```sh -# Generate a JWT for the ServiceAccount, using the Kubernetes TokenRequest API -kubectl -n kubernetes-dashboard create token cluster-admin - -# The proxy provides a secure connection between the cluster (API Server) and the client. -kubectl proxy -``` \ No newline at end of file diff --git a/kubernetes/workspaces/dev/kubernetes-dashboard/kustomization.yaml b/kubernetes/workspaces/dev/kubernetes-dashboard/kustomization.yaml deleted file mode 100644 index 25a01b4..0000000 --- a/kubernetes/workspaces/dev/kubernetes-dashboard/kustomization.yaml +++ /dev/null @@ -1,7 +0,0 @@ -resources: - - https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml - - ## Currently Kubernetes dashboard only supports Kubernetes ServiceAccounts(SA) as the - ## authentication mechanism. So, we will create a ServiceAccount named cluster-admin which - ## represents the cluster admin (a.k.a me 😎). - - ./serviceaccounts/cluster-admin \ No newline at end of file diff --git a/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/cluster-role-binding.yaml b/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/cluster-role-binding.yaml deleted file mode 100644 index 167b21d..0000000 --- a/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/cluster-role-binding.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding - -metadata: - name: cluster-admin - -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - - ## After provisioning the cluster, the cluster-admin ClusterRole already exists in the cluster. - name: cluster-admin - -subjects: - - kind: ServiceAccount - name: cluster-admin - namespace: kubernetes-dashboard diff --git a/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/kustomization.yaml b/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/kustomization.yaml deleted file mode 100644 index 125879c..0000000 --- a/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/kustomization.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resources: - - ./service-account.yaml - - ./cluster-role-binding.yaml \ No newline at end of file diff --git a/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/service-account.yaml b/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/service-account.yaml deleted file mode 100644 index 8c5b83b..0000000 --- a/kubernetes/workspaces/dev/kubernetes-dashboard/serviceaccounts/cluster-admin/service-account.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: v1 - -## A Kubernetes ServiceAccount(SA) represents a non-human user. Application Pods, system -## components, and entities inside and outside the cluster can use it, to authenticate to the -## Kubernetes API server. -kind: ServiceAccount - -metadata: - name: cluster-admin - - ## Each service account is bound to a Kubernetes namespace. - namespace: kubernetes-dashboard diff --git a/kubernetes/workspaces/dev/kustomization.yaml b/kubernetes/workspaces/dev/kustomization.yaml deleted file mode 100644 index 0921f47..0000000 --- a/kubernetes/workspaces/dev/kustomization.yaml +++ /dev/null @@ -1,6 +0,0 @@ -resources: - - ../../base - - kubernetes-dashboard - - istio.yaml - - jaeger.yaml - - kube-prometheus-stack.yaml diff --git a/kubernetes/workspaces/production/kube-prometheus-stack.yaml b/kubernetes/workspaces/production/kube-prometheus-stack.yaml deleted file mode 100644 index b695994..0000000 --- a/kubernetes/workspaces/production/kube-prometheus-stack.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application - -metadata: - name: kube-prometheus-stack - namespace: argocd - -spec: - project: default - - destination: - server: https://kubernetes.default.svc - namespace: prometheus - - source: - repoURL: https://github.com/Archisman-Mridha/instagram-clone - targetRevision: HEAD - path: kubernetes/workspaces/production/kube-prometheus-stack - plugin: - name: kustomize-enable-helm - - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - ServerSideApply=true \ No newline at end of file diff --git a/kubernetes/workspaces/production/kube-prometheus-stack/kustomization.yaml b/kubernetes/workspaces/production/kube-prometheus-stack/kustomization.yaml deleted file mode 100644 index 747330e..0000000 --- a/kubernetes/workspaces/production/kube-prometheus-stack/kustomization.yaml +++ /dev/null @@ -1,126 +0,0 @@ -resources: - - ./namespace.yaml - -helmCharts: - - - repo: https://prometheus-community.github.io/helm-charts - name: prometheus-operator-crds - releaseName: prometheus-operator-crds - namespace: prometheus - version: 6.0.0 - - - repo: https://prometheus-community.github.io/helm-charts - name: kube-prometheus-stack - version: 52.0.0 - releaseName: kube-prometheus-stack - namespace: prometheus - valuesInline: - - crds: - enabled: false - - prometheus: - prometheusSpec: - - ## If true, a nil or {} value for prometheus.prometheusSpec.podMonitorSelector will cause - ## the prometheus resource to be created with selectors based on values in the helm - ## deployment, which will also match the podmonitors created. - podMonitorSelectorNilUsesHelmValues: false - - ## If true, a nil or {} value for prometheus.prometheusSpec.serviceMonitorSelector will - ## cause the prometheus resource to be created with selectors based on values in the helm - ## deployment, which will also match the servicemonitors created. - serviceMonitorSelectorNilUsesHelmValues: false - - storageSpec: - volumeClaimTemplate: - spec: - resources: - requests: - storage: 1Gi - accessModes: [ ReadWriteOnce ] - - scrapeConfig: - matchLabels: - prometheus: scrape-configs - - ## AdditionalScrapeConfigs allows specifying additional Prometheus scrape configurations. - ## Scrape configurations are appended to the configurations generated by the Prometheus - ## Operator. Job configurations must have the form as specified in the official Prometheus - ## documentation: - ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config. - additionalScrapeConfigs: - ## Istiod. - - job_name: 'istiod' - scheme: https - tls_config: - ca_file: /etc/prom-certs/root-cert.pem - cert_file: /etc/prom-certs/cert-chain.pem - key_file: /etc/prom-certs/key.pem - insecure_skip_verify: true ## Prometheus does not support Istio security naming, thus skip verifying target pod certificate. - kubernetes_sd_configs: - - role: endpoints - namespaces: - names: - - istio-system - relabel_configs: - - source_labels: [__meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] - action: keep - regex: istiod;http-monitoring - ## Envoy stats, including sidecar proxies and gateway proxies. - - job_name: 'envoy-stats' - scheme: https - tls_config: - ca_file: /etc/prom-certs/root-cert.pem - cert_file: /etc/prom-certs/cert-chain.pem - key_file: /etc/prom-certs/key.pem - insecure_skip_verify: true - metrics_path: /stats/prometheus - kubernetes_sd_configs: - - role: pod - relabel_configs: - - source_labels: [__meta_kubernetes_pod_container_port_name] - action: keep - regex: '.*-envoy-prom' - - ## The control plane, gateway, and Envoy sidecar metrics will all be scraped over cleartext. - ## However, the application metrics will follow whatever Istio authentication policy has - ## been configured for the workload. If you use STRICT mode, then Prometheus will need to be - ## configured to scrape using Istio certificates. - ## - ## One way to provision Istio certificates for Prometheus is by injecting a sidecar which - ## will rotate SDS certificates and output them to a volume that can be shared with - ## Prometheus. However, the sidecar should not intercept requests for Prometheus because - ## Prometheus’s model of direct endpoint access is incompatible with Istio’s sidecar proxy - ## model. - volumes: - - emptyDir: - medium: Memory - name: istio-certs - volumeMounts: - - mountPath: /etc/prom-certs/ - name: istio-certs - annotations: - - ## Teling Istio not to intercept any inbound ports. - traffic.sidecar.istio.io/includeInboundPorts: "" - - ## Teling Istio not to intercept any outbound traffic. - traffic.sidecar.istio.io/includeOutboundIPRanges: "" - - ## Configure an env variable `OUTPUT_CERTS` to write certificates to the given folder. - proxy.istio.io/config: | - proxyMetadata: - OUTPUT_CERTS: /etc/istio-output-certs - - ## Mount the shared volume at sidecar proxy. - sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-output-certs"}]' - - grafana: - ## A sidecar container is deployed in the grafana pod. This container watches all configmaps - ## (or secrets) in the cluster and filters out the ones with a label 'grafana_dashboard='1''. - sidecar: - dashboards: - enabled: true - label: grafana_dashboard - searchNamespace: ALL \ No newline at end of file diff --git a/kubernetes/workspaces/production/kustomization.yaml b/kubernetes/workspaces/production/kustomization.yaml deleted file mode 100644 index 9a0569e..0000000 --- a/kubernetes/workspaces/production/kustomization.yaml +++ /dev/null @@ -1,10 +0,0 @@ -resources: - - ../../base - - metrics-server.yaml - - kube-prometheus-stack.yaml - - jaeger.yaml - - kubescape.yaml - - istio.yaml - - falco.yaml - - cert-manager.yaml - - external-dns.yaml \ No newline at end of file diff --git a/scripts/generate-sealed-secrets.sh b/scripts/generate-sealed-secrets.sh index 2f24736..5e1c827 100755 --- a/scripts/generate-sealed-secrets.sh +++ b/scripts/generate-sealed-secrets.sh @@ -2,17 +2,17 @@ find "./kubernetes/" -type f \( -name "*.secret.yaml" -o -name "secret.yaml" \) -print0 | while IFS= read -r -d '' filepath; do - secretFilename=$(basename "$filepath") + secretFilename=$(basename "$filepath") - if [ "$secretFilename" == "secret.yaml" ]; then - sealedSecretFilename="$(dirname $filepath)/sealed-secret.yaml" - else - sealedSecretFilename="${filepath%.secret.yaml}.sealed-secret.yaml" - fi + if [ "$secretFilename" == "secret.yaml" ]; then + sealedSecretFilename="$(dirname $filepath)/sealed-secret.yaml" + else + sealedSecretFilename="${filepath%.secret.yaml}.sealed-secret.yaml" + fi - kubeseal \ - --cert ./cloud/modules/prepare-cluster/sealed-secrets.crt \ - --scope cluster-wide -o yaml \ - <"$filepath" >"$sealedSecretFilename" + kubeseal \ + --cert ./terragrunt/modules/prepare-cluster/sealed-secrets.crt \ + --scope cluster-wide -o yaml \ + <"$filepath" >"$sealedSecretFilename" -done \ No newline at end of file +done diff --git a/terragrunt/modules/k3d/locals.tf b/terragrunt/modules/k3d/locals.tf deleted file mode 100644 index e97d92a..0000000 --- a/terragrunt/modules/k3d/locals.tf +++ /dev/null @@ -1,4 +0,0 @@ -locals { - kubeconfig_path = "~/.kube/config" - kubeconfig_context = "k3d-instagram-clone" -} diff --git a/terragrunt/modules/k3d/main.tf b/terragrunt/modules/k3d/main.tf deleted file mode 100644 index ad986d8..0000000 --- a/terragrunt/modules/k3d/main.tf +++ /dev/null @@ -1,38 +0,0 @@ -provider "kubernetes" { - config_path = local.kubeconfig_path - config_context = local.kubeconfig_context -} - -provider "helm" { - kubernetes { - config_path = local.kubeconfig_path - config_context = local.kubeconfig_context - } -} - -resource "null_resource" "create_k3d_cluster" { - provisioner "local-exec" { - when = create - command = "k3d cluster create instagram-clone" - } - - provisioner "local-exec" { - when = destroy - command = "k3d cluster delete instagram-clone" - } -} - -module "prepare_cluster" { - source = "../prepare-cluster" - - args = { - workspace = "dev" - - kubeconfig = { - path = local.kubeconfig_path - context = local.kubeconfig_context - } - } - - depends_on = [null_resource.create_k3d_cluster] -} diff --git a/terragrunt/modules/prepare-cluster/1.argocd.tf b/terragrunt/modules/prepare-cluster/1.argocd.tf index 1b16916..64cfb8d 100644 --- a/terragrunt/modules/prepare-cluster/1.argocd.tf +++ b/terragrunt/modules/prepare-cluster/1.argocd.tf @@ -27,11 +27,7 @@ resource "helm_release" "argocd" { // Creating the ArgoCD Application Manager resource "kubernetes_manifest" "argocd_application_manager" { - - manifest = yamldecode(templatefile("${path.module}/manifests/argocd-application-manager.yaml", { - WORKSPACE : var.args.workspace - BRANCH : var.args.workspace == "dev" ? "dev" : "main" - })) + manifest = yamldecode(templatefile("${path.module}/manifests/argocd-application-manager.yaml")) depends_on = [helm_release.argocd] } diff --git a/terragrunt/modules/prepare-cluster/manifests/argocd-application-manager.yaml b/terragrunt/modules/prepare-cluster/manifests/argocd-application-manager.yaml index 0e7f2e2..da5e0aa 100644 --- a/terragrunt/modules/prepare-cluster/manifests/argocd-application-manager.yaml +++ b/terragrunt/modules/prepare-cluster/manifests/argocd-application-manager.yaml @@ -10,8 +10,8 @@ spec: source: repoURL: https://github.com/Archisman-Mridha/instagram-clone - targetRevision: ${BRANCH} - path: kubernetes/workspaces/${WORKSPACE} + targetRevision: main + path: kubernetes/manifests destination: server: https://kubernetes.default.svc @@ -21,7 +21,6 @@ spec: ## between the desired manifests in Git, and the live state in the cluster. syncPolicy: automated: - ## By default (and as a safety mechanism), automated sync will not delete resources when Argo ## CD detects the resource is no longer defined in Git. ## Enable pruning. @@ -29,4 +28,4 @@ spec: ## By default, changes that are made to the live cluster will not trigger automated sync. ## Enable automated sync. - selfHeal: true \ No newline at end of file + selfHeal: true diff --git a/terragrunt/modules/prepare-cluster/variables.tf b/terragrunt/modules/prepare-cluster/variables.tf index 1e95277..e31b083 100644 --- a/terragrunt/modules/prepare-cluster/variables.tf +++ b/terragrunt/modules/prepare-cluster/variables.tf @@ -5,7 +5,5 @@ variable "args" { path = string context = string }) - - workspace = string }) } \ No newline at end of file diff --git a/terragrunt/modules/upcloud/1.vpc.tf b/terragrunt/modules/upcloud/1.vpc.tf new file mode 100644 index 0000000..d03644f --- /dev/null +++ b/terragrunt/modules/upcloud/1.vpc.tf @@ -0,0 +1,40 @@ +// Routers can be used to connect multiple Private Networks. +// UpCloud Servers on any attached network can communicate directly with each other. +resource "upcloud_router" "main" { + name = local.project +} + +// Network gateways connect SDN Private Networks to external IP networks. +resource "upcloud_gateway" "main" { + name = local.project + zone = local.zone + + features = [ "nat" ] + + router { + id = upcloud_router.main.id + } +} + +resource "upcloud_network" "main" { + name = local.project + zone = local.zone + + router = upcloud_router.main.id + + // A list of IP subnets within the network. + ip_network { + address = "10.0.0.0/16" + + // Dynamic Host Configuration Protocol (DHCP) is a network protocol used to dynamically assign IP + // addresses and other network configuration parameters to devices within a network. It operates + // on the client-server model, where DHCP servers centrally manage IP address allocation for + // devices, known as DHCP clients. + dhcp = true + + family = "IPv4" + + // The NAT gateway is the DHCP default route. + dhcp_default_route = true + } +} \ No newline at end of file diff --git a/terragrunt/modules/upcloud/2.kubernetes-cluster.tf b/terragrunt/modules/upcloud/2.kubernetes-cluster.tf new file mode 100644 index 0000000..30b0575 --- /dev/null +++ b/terragrunt/modules/upcloud/2.kubernetes-cluster.tf @@ -0,0 +1,22 @@ +resource "upcloud_kubernetes_cluster" "main" { + name = local.project + zone = local.zone + + plan = "development" + + version = "1.27" + + network = upcloud_network.main.id + private_node_groups = true + // IP addresses or IP ranges in CIDR format which are allowed to access the cluster control plane. + control_plane_ip_filter = [ "0.0.0.0/0" ] +} + +resource "upcloud_kubernetes_node_group" "default" { + name = "default" + cluster = upcloud_kubernetes_cluster.main.id + + // Billed at €104.00 monthly. + plan = "4xCPU-8GB" + node_count = 3 +} \ No newline at end of file diff --git a/terragrunt/modules/upcloud/3.kubeconfig.tf b/terragrunt/modules/upcloud/3.kubeconfig.tf new file mode 100644 index 0000000..73d55a9 --- /dev/null +++ b/terragrunt/modules/upcloud/3.kubeconfig.tf @@ -0,0 +1,8 @@ +data "upcloud_kubernetes_cluster" "main" { + id = upcloud_kubernetes_cluster.main.id +} + +resource "local_file" "kubeconfig" { + filename = "${path.module}/outputs/kubeconfig.yaml" + content = data.upcloud_kubernetes_cluster.main.kubeconfig +} \ No newline at end of file diff --git a/terragrunt/modules/upcloud/main.tf b/terragrunt/modules/upcloud/main.tf new file mode 100644 index 0000000..7df11fb --- /dev/null +++ b/terragrunt/modules/upcloud/main.tf @@ -0,0 +1,28 @@ +terraform { + required_version = ">= v1.5.7" + + backend "local" {} + + required_providers { + upcloud = { + source = "UpCloudLtd/upcloud" + version = "4.0.0" + } + } +} + +provider "upcloud" { + username = var.args.upcloud.username + password = var.args.upcloud.password +} + +module "prepare_cluster" { + source = "../prepare-cluster" + + args = { + kubeconfig = { + path = "${path.module}/outputs/kubeconfig.yaml" + context = "instagram-clone" + } + } +} diff --git a/terragrunt/modules/upcloud/others.tf b/terragrunt/modules/upcloud/others.tf new file mode 100644 index 0000000..1109c5e --- /dev/null +++ b/terragrunt/modules/upcloud/others.tf @@ -0,0 +1,14 @@ +variable "args" { + type = object({ + + upcloud = object({ + username = string + password = string + }) + }) +} + +locals { + project = "instagram-clone" + zone = "de-fra1" +} \ No newline at end of file diff --git a/terragrunt/workspaces/development/.terraform.lock.hcl b/terragrunt/workspaces/development/.terraform.lock.hcl deleted file mode 100644 index a0a9de1..0000000 --- a/terragrunt/workspaces/development/.terraform.lock.hcl +++ /dev/null @@ -1,59 +0,0 @@ -# This file is maintained automatically by "terraform init". -# Manual edits may be lost in future updates. - -provider "registry.terraform.io/hashicorp/helm" { - version = "2.12.1" - hashes = [ - "h1:aBfcqM4cbywa7TAxfT1YoFS+Cst9waerlm4XErFmJlk=", - "zh:1d623fb1662703f2feb7860e3c795d849c77640eecbc5a776784d08807b15004", - "zh:253a5bc62ba2c4314875139e3fbd2feaad5ef6b0fb420302a474ab49e8e51a38", - "zh:282358f4ad4f20d0ccaab670b8645228bfad1c03ac0d0df5889f0aea8aeac01a", - "zh:4fd06af3091a382b3f0d8f0a60880f59640d2b6d9d6a31f9a873c6f1bde1ec50", - "zh:6816976b1830f5629ae279569175e88b497abbbac30ee809948a1f923c67a80d", - "zh:7d82c4150cdbf48cfeec867be94c7b9bd7682474d4df0ebb7e24e148f964844f", - "zh:83f062049eea2513118a4c6054fb06c8600bac96196f25aed2cc21898ec86e93", - "zh:a79eec0cf4c08fca79e44033ec6e470f25ff23c3e2c7f9bc707ed7771c1072c0", - "zh:b2b2d904b2821a6e579910320605bc478bbef063579a23fbfdd6fcb5871b81f8", - "zh:e91177ca06a15487fc570cb81ecef6359aa399459ea2aa7c4f7367ba86f6fcad", - "zh:e976bcb82996fc4968f8382bbcb6673efb1f586bf92074058a232028d97825b1", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - ] -} - -provider "registry.terraform.io/hashicorp/kubernetes" { - version = "2.25.2" - hashes = [ - "h1:T1WAQt40cAk721H0AM/eZ5YuodJaIfS8r3Tu7rKCJJE=", - "zh:044788ac936e0e8ece8f78a2e4e366ecd435ea8235388eaf2cbc8e7975d9d970", - "zh:24f5ff01df91f51f00ee7ff39430adeb63bb2ca4ea0042e68f06d6b65808c02f", - "zh:49984aa0aa1faa8c4f01e8faa039322f1e6fdaeab0b7e32f5c6e96edfde36a38", - "zh:4eeceaff56bac9fc782e7e33f157fa2c7e9a47b2c3c3d12da2642c312ace73f6", - "zh:4f49b6419345960d5af475e0200c243af4c9c140b0ee64799fe1fc9b023c49ea", - "zh:7958414d516867a2263a978792a24843f80023fb233cf051ff4095adc9803d85", - "zh:c633a755fc95e9ff0cd73656f052947afd85883a0987dde5198113aa48474156", - "zh:cbfe958d119795004ce1e8001449d01c056fa2a062b51d07843d98be216337d7", - "zh:cfb85392e18768578d4c943438897083895719be678227fd90efbe3500702a56", - "zh:d705a661ed5da425dd236a48645bec39fe78a67d2e70e8460b720417cbf260ac", - "zh:ddd7a01263da3793df4f3b5af65f166307eed5acf525e51e058cda59009cc856", - "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - ] -} - -provider "registry.terraform.io/hashicorp/null" { - version = "3.2.2" - hashes = [ - "h1:IMVAUHKoydFrlPrl9OzasDnw/8ntZFerCC9iXw1rXQY=", - "zh:3248aae6a2198f3ec8394218d05bd5e42be59f43a3a7c0b71c66ec0df08b69e7", - "zh:32b1aaa1c3013d33c245493f4a65465eab9436b454d250102729321a44c8ab9a", - "zh:38eff7e470acb48f66380a73a5c7cdd76cc9b9c9ba9a7249c7991488abe22fe3", - "zh:4c2f1faee67af104f5f9e711c4574ff4d298afaa8a420680b0cb55d7bbc65606", - "zh:544b33b757c0b954dbb87db83a5ad921edd61f02f1dc86c6186a5ea86465b546", - "zh:696cf785090e1e8cf1587499516b0494f47413b43cb99877ad97f5d0de3dc539", - "zh:6e301f34757b5d265ae44467d95306d61bef5e41930be1365f5a8dcf80f59452", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:913a929070c819e59e94bb37a2a253c228f83921136ff4a7aa1a178c7cce5422", - "zh:aa9015926cd152425dbf86d1abdbc74bfe0e1ba3d26b3db35051d7b9ca9f72ae", - "zh:bb04798b016e1e1d49bcc76d62c53b56c88c63d6f2dfe38821afef17c416a0e1", - "zh:c23084e1b23577de22603cff752e59128d83cfecc2e6819edadd8cf7a10af11e", - ] -} diff --git a/terragrunt/workspaces/development/terragrunt.hcl b/terragrunt/workspaces/development/terragrunt.hcl deleted file mode 100644 index ae573b8..0000000 --- a/terragrunt/workspaces/development/terragrunt.hcl +++ /dev/null @@ -1,7 +0,0 @@ -include "root" { - path = find_in_parent_folders("root.terragrunt.hcl") -} - -terraform { - source = "${get_parent_terragrunt_dir( )}/modules//k3d" -} \ No newline at end of file diff --git a/terragrunt/workspaces/production/terragrunt.hcl b/terragrunt/workspaces/production/terragrunt.hcl index bc264bd..4abf6ab 100644 --- a/terragrunt/workspaces/production/terragrunt.hcl +++ b/terragrunt/workspaces/production/terragrunt.hcl @@ -1,3 +1,7 @@ include "root" { path = find_in_parent_folders("root.terragrunt.hcl") +} + +terraform { + source = "${get_parent_terragrunt_dir( )}/modules//upcloud" } \ No newline at end of file diff --git a/terragrunt/workspaces/staging/terragrunt.hcl b/terragrunt/workspaces/staging/terragrunt.hcl deleted file mode 100644 index bc264bd..0000000 --- a/terragrunt/workspaces/staging/terragrunt.hcl +++ /dev/null @@ -1,3 +0,0 @@ -include "root" { - path = find_in_parent_folders("root.terragrunt.hcl") -} \ No newline at end of file